Почему CUDA не позволяет нам использовать всю память SM в качестве кэша L1? - PullRequest
4 голосов
/ 29 марта 2012

В устройстве CUDA каждый SM имеет 64 КБ встроенной памяти , которая расположена рядом с ним. По умолчанию он разделен на 48 КБ общей памяти и 16 КБ L1-кэш . Для ядер, для которых сложно определить схему доступа к памяти, это разделение можно изменить на 16 КБ общей памяти и 48 КБ L1-кэша.

Почему CUDA не позволяет всем встроенной памяти на кристалле 64 КБ для SM использоваться в качестве L1-кеша ?

Существует много видов ядер, которые не используют общую память, но могут использовать эти дополнительные 16 КБ кэша L1.

1 Ответ

4 голосов
/ 30 марта 2012

Я считаю, что причиной этого является компьютерная графика. При выполнении кода OpenGL или Direct3D SM использует память с прямым отображением (совместно используемую CUDA) для одной цели (например, атрибуты вершин) и ассоциативно-множественную память (кэш L1) для другой. Для графического конвейера архитекторы могут специально настроить, сколько памяти им нужно для таких вещей, как атрибуты вершин, на основе пределов пропускной способности вершин других единиц (например).

Размышляя об архитектурных решениях для графических процессоров (и, вообще говоря, о дизайне процессора), важно помнить, что многие решения в значительной степени экономичны. У GPU Computing есть дневная работа: игры и графика. Если бы не работа в этот день, вычисления на GPU не стали бы экономически жизнеспособными, а массовые параллельные вычисления вряд ли стали бы доступными для масс.

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

...