Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / C++ |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 4 вперед Ctrl→ все |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
у разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ? |
31 дек 19, 20:23 [22052434] Ответить | Цитировать Сообщить модератору |
White Owl Member Откуда: Сообщений: 12638 |
У некоторых компиляторов есть специальные опции подсказывающие для какой платформы идет компиляция. Если твой конкретный процессор есть в списке ключей - хорошо, нет - пишешь сам расширение для компилятора. https://gcc.gnu.org/onlinedocs/gcc-9.2.0/gcc/Submodel-Options.html https://clang.llvm.org/docs/CrossCompilation.html#target-triple ...etc |
31 дек 19, 21:17 [22052446] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7659 |
[quote полудух#22052434] а код где? Или опять, теоретически использовать процессор, ядра и кэши. |
1 янв 20, 15:51 [22052587] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
вопрос скорее общий, чем про какой-то случай... и я так понимаю, что проц сам порешает, сколько кэша ему надо т.е. он просто сможет реже сбрасывать старый кэш со структурами и векторами = меньше работы, только и всего |
1 янв 20, 17:28 [22052619] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
1) Из рекомендаций... я помню самая ценная - использовать структуры данных в памяти выровнянные (padded) на границу кратную 64 бит. Еще были какие-то инструкции компиллера наподобие __builtin_prefetch 2) Стараться делать доступ к памяти максимально локализованным. Вобщем .. читаете адресочек. Потом следующий за ним рядом e.t.c. Тоесть ... не бомбить по рандомным адресам по всей доступной памяти. Думаю сюда-де до кучи memory-mapped files. Фильтры Блума. Блочные кеши баз данных. 3) Далее.. просто мысли вслух. Я привел картинку (грубую) с топологией кешей разных уровне для процессора семейства Core i7.
Рискну предположить что если вы локализуете своё приложение на ядрах 0 и 1 и поотстреливаете все процессы-конкуренты то кеши L2 - будут ваши. Что в общем случае - тоже оптимизация. Плохо или хорошо - обсудите. Вообще я-бы все таки пошёл от алгоритма а не от абстрактных рекомендаций. Так... если-б они были то любой программист выкручивал бы ручки кешей на максимум. Всё равно что nice для процесса понизить. Закончится лагами других процессов. Сеть начнёт лагать там... или диск. Вобщем как от добра искать добро. |
|
1 янв 20, 21:13 [22052661] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
mayton, это ты азы рассказываешь ) только далеко не все... структуры надо на 64 байт (а не бит), чтобы в cache-line влезали, и чтобы занимали его целиком. (это справедливо для 64-битных компов, у 32-битных cache-line на 32 байта) "последовательное считывание массива - самое быстрое, что может быть, и ничего быстрее не предвидится" это ещё Scott Meyers говорил тут: |
1 янв 20, 21:24 [22052663] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
полудух, а ты каких советов ожидал? |
1 янв 20, 21:49 [22052670] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
Да согласен насчет 64 байт. |
1 янв 20, 21:57 [22052675] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
да скорее просто уточнить - за что мы платим при апгрейде камня и как это по-максимуму заюзать... ну понятно, когда новые ядра появляются (хотя ещё потестить надо - дадут ли они чё), а вот, например, через +4мб кэша можно что-то ускорить? |
||||
1 янв 20, 23:38 [22052719] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52441 |
Можно запустить на 4 мб больше кода. Не майся дурью, в любой современной операционке тебя их этого кэша выщемят за мгновение ока. Posted via ActualForum NNTP Server 1.5 |
||
2 янв 20, 01:10 [22052728] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
Последний год ведутся жестокие баттлы Intel-Vs-AMD. Железки отличаются конфигурациями ядер и кешей размерами и различного рода компоновок. Но мне кажется там невозможно выбрать лучшую или удачную конфигурацию потому что на одних тестах AMD показывает лучше перформанс. На других Intel. Вот мне кажется твой вопрос - надо переформатировать. Ты говоришь об "максимально использовать". А это неверная постановка. Ты - хочешь утилизации ресурсов. Это как в лекции Шипилева. Утилизация леса - это устроить пожар в лесу. Максимальная утилизация. Понимаешь да? Давай может в топик свой алгоритм и мы на него посмотрим под углом кешей. Сообщение было отредактировано: 2 янв 20, 11:58 |
||||||||
2 янв 20, 11:58 [22052802] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
да я как раз и смотрю на эту гонку между AMD и Intel-ом вот у AMD щас Ryzen, а там новые кэши, новые ядра ну и возникают вопросы к цене... вот, например, конфигурация: Ryzen 7 3700X/3800X (стоит 25 тыр) Технология изготовления 0.007 микрон Количество ядер 8 Количество потоков 16 Кэш L1 (для каждого ядра) 32 КБ данные + 32 КБ инструкции Кэш L2 (для каждого ядра) 512 КБ Кэш L3 2 x 16 МБ а вот Intel Core i9-9900K стоит уже под 80к, но при этом имеет в тестах такие же результаты (кстати, сам Intel имеет "Рекомендуемую цену для клиента" = $488.00 - $499.00 (для партий от 1000 штук)) Технология изготовления 0.014 микрон Количество ядер 8 Количество потоков 8 Кэш L1 (для каждого ядра) 32 КБ данные + 32 КБ инструкции Кэш L2 (для каждого ядра) 256 КБ Кэш L3 16 МБ т.е. Intel, чтобы догнать новый Ryzen, нужен core i9 за много денег (а core i7 9700K вообще жёстко сливает на -25%) так за что платим? Там вся начинка хуже. Не пора ли уже на AMD полностью переходить? особенно нам, программистам C++, который могут этот процессор напрямую "пальчиками пощупать" и полностью заюзать этот кэш (можем ведь?)... Раньше то я не был "настолько приближённым", а теперь вот проникся и всерьёз начал задумываться... Я правда щас говорю не про десктоп, а про серверные конфигурации, а там и процы другие, но всё таки Intel есть Intel и они явно УХУ ели. зы: Intel, кстати, щас выкатил новый сокет, который вообще никак не совместим со старым и на старую мать новый проц никак не поставить сами себе могилу копают... |
2 янв 20, 16:45 [22052870] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
Да все в порядке. Идет нормальный процесс. Просто Intel слишком долго "починал на лаврах" победителя а за это время конкуренты подтянулись. Отладили процесс и стали клепать камни не хуже но за меньшие деньги. Я думаю Интел обязан либо выкатить нечто особо значимое в следующих релизах либо скинуть цены. P.S. У меня на борту рабочей машинки дома стоит Ryzen-5. 6 ядер по 2 потока. ОС видит 12 логических CPU. |
2 янв 20, 17:00 [22052878] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52441 |
Не можем. См. выше. Posted via ActualForum NNTP Server 1.5 |
||
2 янв 20, 18:02 [22052888] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
Скорее пользу сложно посчитать. Вот со ссылкой на https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
|
||
2 янв 20, 18:09 [22052892] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
о, тяжёлая артиллерия в ход пошла, стало интересно... а почему они написали так: for (i = 0; i < n; i++) { a[i] = a[i] + b[i]; __builtin_prefetch(&a[i + j], 1, 1); __builtin_prefetch(&b[i + j], 0, 1); /* … */ } а не так: for (i = 0; i != n; ++i) ? |
2 янв 20, 18:37 [22052896] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
Надо смотреть ассемблерный код. P.S. Я вообще всегда предпочитаю сравнение "меньше" в пользу "не равно". Есть у меня свои критерии надёжности. |
2 янв 20, 18:41 [22052900] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
Страус топит за то, что != это более generic |
2 янв 20, 19:34 [22052921] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
ну а ++ почему в цикле ставят то слева, то справа |
2 янв 20, 19:35 [22052922] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52441 |
Справа - традиционно. Слева - в темплейтах и макросах на случай если цикловая переменная окажется с перегруженным инкрементом. Posted via ActualForum NNTP Server 1.5 |
2 янв 20, 19:44 [22052924] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
т.е. в обычном for вообще пофигу? зы: не припомню темплейтов с ++ |
2 янв 20, 20:01 [22052932] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52441 |
Каждый первый итератор. Posted via ActualForum NNTP Server 1.5 |
||
2 янв 20, 20:08 [22052933] Ответить | Цитировать Сообщить модератору |
Изопропил Member Откуда: Сообщений: 31548 |
особенности архитектуры PDP-11 - постинкремент регистра |
||||
2 янв 20, 20:42 [22052940] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51128 |
Пускай топит. Он итераторами считает циклы. А у меня в циклах - координаты пикселей экрана. Или вещественный параметр цикла типа double. Нахера мне его "топка" ? |
||||
3 янв 20, 13:28 [22053075] Ответить | Цитировать Сообщить модератору |
полудух Member Откуда: планета орков, г.Зверополис Сообщений: 1350 |
мы уже как-то пытались... |
||||
3 янв 20, 20:46 [22053221] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 4 вперед Ctrl→ все |
Все форумы / C++ | ![]() |