2013-11-27 3 views
-4

Было задано несколько вопросов о SO, таких как this one, о деградации производительности, когда массивы или матрицы совпадают с размерами кеша. Идея, как solve it in hardware существует уже много десятилетий. Почему тогда современные компьютеры не чередуют кеши, чтобы уменьшить последствия супер-выравнивания?Почему современные процессоры не чередуют кеши?

+4

Этот вопрос выглядит не по теме, потому что речь идет о архитектуре и дизайне процессора и не связана с программированием в соответствии с рекомендациями [help]. –

ответ

1

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

Вопрос, который вы связываете, был решен как плохое кодирование (перемещение по строкам, а не по столбцу), но в целом - если вы хотите решить проблемы, возникающие из-за плохого выравнивания в кэшах - вы ищете кеш-перекосы, ассоциативность (example paper). Согласно этому методу, сопоставление множества не основано на простых битах набора, а вместо этого включает в себя некоторую перетасовку на основе битов тега - это позволяет лучше распространять данные в тех случаях, когда в противном случае это противоречило бы по тем же наборам. Обратите внимание, что это не помогло бы вам, если вы используете весь свой кеш, только для угловых случаев, когда у вас есть некоторые «горячие наборы», которые чрезмерно используются, а другие остаются в основном нетронутыми.

Однако, насколько я знаю, это не распространенная практика, потому что это очень специфическая проблема и ее можно легко решить в коде (или через компилятор) и, следовательно, вероятно, не стоит решения HW.


Edit:
сделал несколько запросов следующих вопросов Поля - кажется, что ближе кэша, которые латентность критически не использовать это (или, по крайней мере, это не публикуются, но я думаю, если бы это было сделано, оно появилось бы в руководствах по оптимизации, поскольку это важно для настройки производительности и легко обнаруживается). Это, вероятно, будет включать L1 и TLB, которые должны быть запрошены при любом доступе к памяти.

Однако, по этой ссылке, это делается по крайней мере, в кэш-памяти L3 некоторых чипов Intel: http://www.realworldtech.com/sandy-bridge/8/

Существует один кусочек кэша L3 для каждого ядра, и каждый срез может обеспечить половину строки кэша (32B) к кольцу данных за цикл. Все физические адреса распределены по срезам кеша с помощью одной хэш-функции . Разделение данных между срезами кеша упрощает когерентность, увеличивает доступную полосу пропускания и уменьшает «горячие точки» и «соперничество» за адреса кеша.

Таким образом, он используется, по крайней мере, для крупномасштабных и менее латентных критических кэшей.

+0

Да, переплетенная ассоциативность - это то, что я имел в виду. Так почему же это решение не используется? Поскольку проблема возникла для многих людей, и программное решение может потребовать некоторой осторожности со стороны программистов, IMO, было бы разумно реализовать его на уровне HW. – Michael

+0

Вы должны будете спросить у ЦП для этого, как я уже сказал, я могу только предположить, что потенциальная прибыль не стоила того. Разумеется, они будут использовать надежные тесты для оценки этих вещей, а не для кода. – Leeor

+1

Предложена также стандартная индексация по модулю. @Michael Для L1 доступ к перекодированной ассоциативности может добавить задержку (сворачивание таких в AGU или индексация массива кеша может уменьшить эту проблему) и вводит проблемы с псевдонимом. Почему это не используется для L2 или TLB, является вопросом в проекте [Computer Architecture] (http://area51.stackexchange.com/proposals/50430/computer-architecture/) Area51. Вы можете найти [эту страницу] (https://semipublic.comp-arch.net/wiki/Skewed_associativity) (и другие части этой вики). –

0

Перемещение решает другую проблему (задержки доступа к памяти). Поскольку кеши бывают быстрыми, чередование на самом деле не помогает. Для проблем с выравниванием кеша традиционное решение - increase the associativity.

Смежные вопросы