Size: a a a

Programming Offtop

2020 March 25

AN

Alexander Nozik in Programming Offtop
Кирилл Романенко
Я бы назвал это harmonizer оптимизацией
Ну можете почитать код ojalgo
источник

Д

Декар in Programming Offtop
Konstantin dmz9
помоему это уже enigmatic оптимизация
Нет, это обычная тема. Когда порция данных растёт, и переваливает сначала за кеш1, потом за кеш2.
источник

AN

Alexander Nozik in Programming Offtop
Вообще картинка очень хорошая
источник

AN

Alexander Nozik in Programming Offtop
Декар
Нет, это обычная тема. Когда порция данных растёт, и переваливает сначала за кеш1, потом за кеш2.
Обычно либы автоматом это внутри оптимизируют
источник

Kd

Konstantin dmz9 in Programming Offtop
Alexander Nozik
Вообще картинка очень хорошая
гуглится по "кривая шипилева" )))
источник

Д

Декар in Programming Offtop
Alexander Nozik
Вообще картинка очень хорошая
Вот только в моей области графа производительности на этом графике логарифмическая
источник

Д

Декар in Programming Offtop
Да и в твоей, думаю, тоже
источник

АХ

Алексей Худяков in Programming Offtop
Alexander Nozik
Чистофункциональные структуры данных тормозные по определению. Мне интересно, как конкретно хаскаль от этого спасается
От константных факторов и не более чем O(log n) замедления — никак.

Конкретно по спискам. Бегать по уже материализованному в памяти списку занятие, действительно так себе. Но! Список это часто не data structure, а control structure. Т.е. программа сожрала голову списка, а следующий элемент списка — это задумка которую ещё надо вычислить. GHC вполне способен скомпилировать создание/деконструкцию списка в цикл. Когда я разбил рекурсивную функцию на поток итераций в виде списка и потребитель спика я поличл ~10% просадки производительности

А для того чтобы не строить промежуточные структуры - build/foldr fusion
источник

AN

Alexander Nozik in Programming Offtop
Алексей Худяков
От константных факторов и не более чем O(log n) замедления — никак.

Конкретно по спискам. Бегать по уже материализованному в памяти списку занятие, действительно так себе. Но! Список это часто не data structure, а control structure. Т.е. программа сожрала голову списка, а следующий элемент списка — это задумка которую ещё надо вычислить. GHC вполне способен скомпилировать создание/деконструкцию списка в цикл. Когда я разбил рекурсивную функцию на поток итераций в виде списка и потребитель спика я поличл ~10% просадки производительности

А для того чтобы не строить промежуточные структуры - build/foldr fusion
Пошли семинар делать лучше
источник

КР

Кирилл Романенко in Programming Offtop
А вообще зачем юзать линкед лист? Эррейлист топ. Он внутри использует массив, по которому ходить оч быстро. Наверное именно поэтому и List и MutableList в котлине это на самом деле ArrayList. Сейчас даже проверил

val list = List(10) { 0 }
println(list::class.java)

>> class java.util.ArrayList
источник

D

Dmitry in Programming Offtop
Что значит ходить быстро? Это массив ссылок, перейти к обьекту = разименовать ссылку. Итерироваться ли линкед листу можно примерно так же, кроме случая, если вы по индексу прыгаете в середину.
источник

I

Ildarov in Programming Offtop
Кирилл Романенко
А вообще зачем юзать линкед лист? Эррейлист топ. Он внутри использует массив, по которому ходить оч быстро. Наверное именно поэтому и List и MutableList в котлине это на самом деле ArrayList. Сейчас даже проверил

val list = List(10) { 0 }
println(list::class.java)

>> class java.util.ArrayList
Чтоб вопросы были на собесах
источник

D

Dmitry in Programming Offtop
Линкед лист нужен в некоторых алгоритмах. Он при добавлении элемента в конец никогда не копирует весь массив, например. в 99% случаев он не нужен.
источник

КР

Кирилл Романенко in Programming Offtop
Dmitry
Что значит ходить быстро? Это массив ссылок, перейти к обьекту = разименовать ссылку. Итерироваться ли линкед листу можно примерно так же, кроме случая, если вы по индексу прыгаете в середину.
Попробуй побенчмаркать проходы по линкедлисту и эррейлисту, причём внутри должны быть не примитивы. Последний справится быстрее, причём значительно.
источник

КР

Кирилл Романенко in Programming Offtop
На очень больших коллекциях разница будет, по моим тестам, почти в два раза
источник

КР

Кирилл Романенко in Programming Offtop
Я как-то давно игрался с этим, юзал jmh
источник

D

Dmitry in Programming Offtop
Смотрел почему?
Типа дополнительный проход по ссылке - сначала на ноду, а потом на некст, вместо ссылки на некст сразу из массива?
источник

КР

Кирилл Романенко in Programming Offtop
Dmitry
Смотрел почему?
Типа дополнительный проход по ссылке - сначала на ноду, а потом на некст, вместо ссылки на некст сразу из массива?
Я тогда ток въезжал в джаву и котлин, смотрел курс по java core, чувак сказал что linked list в 99% случаев сливает эррейлисту по перфомансу, и объяснил это как-то, я потыкал эту тему в jmh и пошёл дальше. С тех пор я не возвращался к этой теме, поэтому точную причину не скажу. Но по логике - да, по идее ты прав.
источник

Д

Декар in Programming Offtop
Dmitry
Смотрел почему?
Типа дополнительный проход по ссылке - сначала на ноду, а потом на некст, вместо ссылки на некст сразу из массива?
Думаю, опять 2 обращения за кеш. Если массив указателей из кеша уже вытеснели то тебе надо сначала подгрузить в кеш массив указателей, а потом ещё и ноду.
источник

VP

Vladimir Petrakovich in Programming Offtop
Кирилл Романенко
А вообще зачем юзать линкед лист? Эррейлист топ. Он внутри использует массив, по которому ходить оч быстро. Наверное именно поэтому и List и MutableList в котлине это на самом деле ArrayList. Сейчас даже проверил

val list = List(10) { 0 }
println(list::class.java)

>> class java.util.ArrayList
Там выше был разговор про persistent коллекции, и массив тут не подходит. А если нужен просто список, то конечно arraylist
источник