Я тут до этого ещё одно сообщение оставлял, но его удалили. Там была интересная ссылка https://habr.com/en/post/423575/.
Вот такой он
маркетинг прогресс.
Современные микроэлектронные технологии — как «Десять негритят». Стоимость разработки и оборудования так велика, что с каждым новым шагом вперёд кто-то отваливается. После новости об отказе GlobalFoundries от разработки 7 нм их осталось трое: TSMC, Intel и Samsung. А что такое, собственно “проектные нормы” и где там тот самый заветный размер 7...
Если вы не можете грамотно организовать хранения данных, то может кодить это не ваше? Разбейте большой массив на массивы с одинаковыми
требованиями по выравниванию. Придумываете проблему на ровном месте.
Я то умею грамотно организовывать хранение данных, ибо не использую выравнивание. А свои костыли сами используйте.
Проблему как-раз придумали вы в этой ветке, и перекидываете с больной головы на здоровую. У всех всё прекрасно работает.
Речь
то о другом - используют любителей прогресса в хвост и гриву.
Ну-ну... Пока мы видим, что в хвост и гриву имеют только вас, с вашим архаичным процом )
Можно заметить, что не просматривается особой связи между приростом производительности и выравниванием. У меня же всё иначе (неверное выравнивание даёт замедление в 1.5-2 раза)
Автор топика (цитата из первого сообщения) удален, к сожалению. Реанимирую тему из-за такой зависимости производительности.
Воспроизводимое замедление в 2-3 раза для массивов с sizeof = 293.
Однозначно, что для скорости имеет смысл добавлять структуры до оптимальных по производительности размеров. Потому что можно запросто просесть в производительности, если нарваться на неудачный размер, как в примере выше.
Компилятор может доказать, что никогда нет передачи ссылки на массив в функцию, он у тебя всегда создается как xvalue и создается с default конструктором.
На основании этого, при инстанцировании шаблона, он имеет право вообще функцию не создавать, а все заинлайнить, а далее, учитывая UB, все свести к аналогу return sizeof(T)
#define BENCH2(A) \
{ \
struct STRUCT##A \
{ \
int i; \
uchar Tmp[SIZE + A]; \
} Array##A[AMOUNT]; \
\
for (int i = 0; i < AMOUNT; i++) \
Array##A[i].i = 1; \
\
BENCH(Func(Array##A)); \
}
Компилятор может доказать, что никогда нет передачи ссылки на массив в функцию, он у тебя всегда создается как xvalue и создается с default конструктором.
На основании этого, при инстанцировании шаблона, он имеет право вообще функцию не создавать, а все заинлайнить, а далее, учитывая UB, все свести к аналогу return sizeof(T)
На скорость выполнения эти оба добавления не влияют. Сумму возвращают одну и ту же. Только для AMOUNT=50 выполнение идет в 500 раз быстрее, чем для AMOUNT = 100.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Я тут до этого ещё одно сообщение оставлял, но его удалили. Там была интересная ссылка https://habr.com/en/post/423575/. Вот такой он маркетинг прогресс.
Если вы не можете грамотно организовать хранения данных, то может кодить это не ваше? Разбейте большой массив на массивы с одинаковыми требованиями по выравниванию. Придумываете проблему на ровном месте.
Я то умею грамотно организовывать хранение данных, ибо не использую выравнивание. А свои костыли сами используйте. Проблему как-раз придумали вы в этой ветке, и перекидываете с больной головы на здоровую. У всех всё прекрасно работает.
Речь то о другом - используют любителей прогресса в хвост и гриву.
Ну-ну... Пока мы видим, что в хвост и гриву имеют только вас, с вашим архаичным процом )
Злой какой-то, наверное велосипеда нет.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Virtual
fxsaber, 2024.11.13 16:57
Заметил зависимость производительности библиотеки от длины статического массива.
Объяснить такую разницу (> 10%) не получается, кроме как странностями связки компилятора и конфигурации машины.
Кратко, увеличили массив и получили бесплатное ускорение.
Набросал исследовательский код.
В общем, беру статические массивы с разным sizeof его элементов. И замеряю время работы с ними.
Ниже промежуточные результаты.
Длина статического массива.
AMOUNT = 70.
AMOUNT = 80.
Почему длина массива 70 дает мгновенное выполнение - загадка. Выглядит, как баг.
sizeof-элемента массива.
AMOUNT = 200.
AMOUNT = 300.
Воспроизводимое замедление в 2-3 раза для массивов с sizeof = 293.
Однозначно, что для скорости имеет смысл добавлять структуры до оптимальных по производительности размеров. Потому что можно запросто просесть в производительности, если нарваться на неудачный размер, как в примере выше.
AVX2 работает медленнее, чем AVX. При этом у первого слабее просидание производительности для sizeof=293, чем у второго.
Длина статического массива.
Увеличили статический массив в два раза, и он стал копироваться почти в два раза быстрее!
У тебя UB. Ты никак не инициализируешь поле i.
Компилятор может доказать, что никогда нет передачи ссылки на массив в функцию, он у тебя всегда создается как xvalue и создается с default конструктором.
На основании этого, при инстанцировании шаблона, он имеет право вообще функцию не создавать, а все заинлайнить, а далее, учитывая UB, все свести к аналогу return sizeof(T)
У тебя UB. Ты никак не инициализируешь поле i.
Проверял с инициализацией - аналогично.
Компилятор может доказать, что никогда нет передачи ссылки на массив в функцию, он у тебя всегда создается как xvalue и создается с default конструктором.
На основании этого, при инстанцировании шаблона, он имеет право вообще функцию не создавать, а все заинлайнить, а далее, учитывая UB, все свести к аналогу return sizeof(T)
Распечатывал сумму - все правильно.
На скорость выполнения эти оба добавления не влияют. Сумму возвращают одну и ту же. Только для AMOUNT=50 выполнение идет в 500 раз быстрее, чем для AMOUNT = 100.