Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
у разных процов разное кол-во кэша, у corei9 под 20мб (и 10/20 ядер), у i7 - 16mb, у i5 - 12mb
а как именно это в коде использовать, чтобы выжать максимум из этих нескольких дополнительных Mb ?
31 дек 19, 20:23    [22052434]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
White Owl
Member

Откуда:
Сообщений: 12428
У некоторых компиляторов есть специальные опции подсказывающие для какой платформы идет компиляция. Если твой конкретный процессор есть в списке ключей - хорошо, нет - пишешь сам расширение для компилятора.

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]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 3717
[quote полудух#22052434]
а код где? Или опять, теоретически использовать процессор, ядра и кэши.
1 янв 20, 15:51    [22052587]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
вопрос скорее общий, чем про какой-то случай...
и я так понимаю, что проц сам порешает, сколько кэша ему надо
т.е. он просто сможет реже сбрасывать старый кэш со структурами и векторами = меньше работы, только и всего
1 янв 20, 17:28    [22052619]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
1) Из рекомендаций... я помню самая ценная - использовать структуры данных в памяти выровнянные (padded)
на границу кратную 64 бит. Еще были какие-то инструкции компиллера наподобие __builtin_prefetch

2) Стараться делать доступ к памяти максимально локализованным. Вобщем .. читаете адресочек. Потом следующий
за ним рядом e.t.c. Тоесть ... не бомбить по рандомным адресам по всей доступной памяти. Думаю сюда-де до кучи
memory-mapped files. Фильтры Блума. Блочные кеши баз данных.

3) Далее.. просто мысли вслух. Я привел картинку (грубую) с топологией кешей разных уровне для процессора семейства Core i7.

+
Картинка с другого сайта.


Рискну предположить что если вы локализуете своё приложение на ядрах 0 и 1 и поотстреливаете все процессы-конкуренты
то кеши L2 - будут ваши. Что в общем случае - тоже оптимизация. Плохо или хорошо - обсудите.

Вообще я-бы все таки пошёл от алгоритма а не от абстрактных рекомендаций. Так... если-б они были
то любой программист выкручивал бы ручки кешей на максимум. Всё равно что nice для процесса понизить.
Закончится лагами других процессов. Сеть начнёт лагать там... или диск. Вобщем как от добра искать добро.
1 янв 20, 21:13    [22052661]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
mayton, это ты азы рассказываешь )
только далеко не все...
структуры надо на 64 байт (а не бит), чтобы в cache-line влезали, и чтобы занимали его целиком.
(это справедливо для 64-битных компов, у 32-битных cache-line на 32 байта)
"последовательное считывание массива - самое быстрое, что может быть, и ничего быстрее не предвидится"
это ещё Scott Meyers говорил тут:
1 янв 20, 21:24    [22052663]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
полудух, а ты каких советов ожидал?
1 янв 20, 21:49    [22052670]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
Да согласен насчет 64 байт.
1 янв 20, 21:57    [22052675]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
mayton
полудух, а ты каких советов ожидал?

да скорее просто уточнить - за что мы платим при апгрейде камня и как это по-максимуму заюзать...
ну понятно, когда новые ядра появляются (хотя ещё потестить надо - дадут ли они чё),
а вот, например, через +4мб кэша можно что-то ускорить?
1 янв 20, 23:38    [22052719]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49142

полудух
через +4мб кэша можно что-то ускорить?

Можно запустить на 4 мб больше кода. Не майся дурью, в любой современной операционке тебя
их этого кэша выщемят за мгновение ока.

Posted via ActualForum NNTP Server 1.5

2 янв 20, 01:10    [22052728]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
полудух
mayton
полудух, а ты каких советов ожидал?

да скорее просто уточнить - за что мы платим при апгрейде камня и как это по-максимуму заюзать...
ну понятно, когда новые ядра появляются (хотя ещё потестить надо - дадут ли они чё),
а вот, например, через +4мб кэша можно что-то ускорить?

Последний год ведутся жестокие баттлы Intel-Vs-AMD. Железки отличаются конфигурациями ядер и кешей размерами
и различного рода компоновок.

Но мне кажется там невозможно выбрать лучшую или удачную конфигурацию потому что на одних тестах
AMD показывает лучше перформанс. На других Intel.

Вот мне кажется твой вопрос - надо переформатировать. Ты говоришь об "максимально использовать".
А это неверная постановка. Ты - хочешь утилизации ресурсов. Это как в лекции Шипилева. Утилизация
леса - это устроить пожар в лесу. Максимальная утилизация. Понимаешь да?

Давай может в топик свой алгоритм и мы на него посмотрим под углом кешей.

Сообщение было отредактировано: 2 янв 20, 11:58
2 янв 20, 11:58    [22052802]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
да я как раз и смотрю на эту гонку между 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]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
Да все в порядке. Идет нормальный процесс. Просто Intel слишком долго "починал на лаврах" победителя
а за это время конкуренты подтянулись. Отладили процесс и стали клепать камни не хуже но за меньшие деньги.

Я думаю Интел обязан либо выкатить нечто особо значимое в следующих релизах либо скинуть цены.

P.S. У меня на борту рабочей машинки дома стоит Ryzen-5.
6 ядер по 2 потока. ОС видит 12 логических CPU.
2 янв 20, 17:00    [22052878]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49142

полудух
можем ведь?

Не можем. См. выше.

Posted via ActualForum NNTP Server 1.5

2 янв 20, 18:02    [22052888]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
Скорее пользу сложно посчитать.

Вот со ссылкой на https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
This function is used to minimize cache-miss latency by moving data into a cache before it is accessed. You can insert calls to __builtin_prefetch into code for which you know addresses of data in memory that is likely to be accessed soon. If the target supports them, data prefetch instructions are generated. If the prefetch is done early enough before the access then the data will be in the cache by the time it is accessed.
2 янв 20, 18:09    [22052892]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
о, тяжёлая артиллерия в ход пошла, стало интересно...

а почему они написали так:
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]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
Надо смотреть ассемблерный код.

P.S. Я вообще всегда предпочитаю сравнение "меньше" в пользу "не равно". Есть у меня свои критерии надёжности.
2 янв 20, 18:41    [22052900]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
Страус топит за то, что != это более generic
2 янв 20, 19:34    [22052921]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
ну а ++ почему в цикле ставят то слева, то справа
2 янв 20, 19:35    [22052922]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49142

Справа - традиционно. Слева - в темплейтах и макросах на случай если цикловая переменная
окажется с перегруженным инкрементом.

Posted via ActualForum NNTP Server 1.5

2 янв 20, 19:44    [22052924]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
т.е. в обычном for вообще пофигу?

зы: не припомню темплейтов с ++
2 янв 20, 20:01    [22052932]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49142

полудух
е припомню темплейтов с ++

Каждый первый итератор.

Posted via ActualForum NNTP Server 1.5

2 янв 20, 20:08    [22052933]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
Изопропил
Member

Откуда:
Сообщений: 31319
Dimitry Sibiryakov
Справа - традиционно

особенности архитектуры PDP-11 - постинкремент регистра
2 янв 20, 20:42    [22052940]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
mayton
Member

Откуда: loopback
Сообщений: 44240
полудух
Страус топит за то, что != это более generic

Пускай топит. Он итераторами считает циклы. А у меня в циклах - координаты пикселей экрана.
Или вещественный параметр цикла типа double. Нахера мне его "топка" ?
3 янв 20, 13:28    [22053075]     Ответить | Цитировать Сообщить модератору
 Re: размер кэша - КАК его максимально использовать?  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 1218
mayton
Надо смотреть ассемблерный код.

мы уже как-то пытались...
3 янв 20, 20:46    [22053221]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / C++ Ответить