2015-03-06 6 views
4

NVIDIA запустила графические процессоры Maxwell на некоторое время, но, читая «Руководство по настройке Maxwell», я был смущен функциональностью кеша L1. В эпоху Кеплера доступ к глобальной памяти был кэширован только в L2, а L1 используется для кэширования доступа к локальной памяти, что вызвано разливом реестров. Из чтения документа NVIDIA это кэширование локальной памяти - единственное, что я знаю, что выиграет от кеша L1. Тем не менее, в разделе 1.4.2.1 из «Максвелл Руководство по настройке», NVIDIA говорит:Что такое кеш L1, используемый для графических процессоров NVIDIA maxwell?

Как Kepler, глобальные нагрузки в первом поколении Максвелла кэшируются в L2 только ... Местные нагрузки также кэшируются в L2 только

CUDA 6.0 добавлено два новых атрибутов устройства globalL1CacheSupported и localL1CacheSupported, чтобы проверить, если устройство поддерживает глобальной памяти L1 кэш и локальной памяти L1 кэш, так что я сделал тест на этих двух атрибутов как GTX 780 и GTX 980, и результат меня еще больше смущает:

 globalL1CacheSupported localL1CacheSupported 

GTX780   1       1 

GTX980   0       0 

Результат от GTX 980 подтверждает утверждение в «Руководстве по настройке Maxwell», которое меня озадачивает, потому что, если это так, то для чего используется кеш L1? Еще одна вещь, которую я не могу понять, это GTK 780 - это карта GK110, из белой бумаги GK110, Keper также кэширует доступ к глобальной памяти только в L2, поэтому мне не имеет смысла, что globalL1CacheSupported возвращает 1 для карты GTX 780. Надеюсь, кто-то может прояснить мою загадку.

ответ

6

On Maxwell, функциональность L1 была объединена с кешем текстуры. Это упоминается также в tuning guide.

Устройства Fermi представили L1, который использовался для глобального и локального кэширования нагрузки. L1 был кэшем для записи, поэтому он имел относительно меньшее влияние на глобальные и локальные магазины.

С помощью Kepler L1 отключен для глобальных нагрузок, но по-прежнему действует для локальных нагрузок.

то, что используется для кеша L1?

С Максвелл, поведение по умолчанию в L1 относительно глобальных нагрузок одно и то же - они не кэшируются. Однако, вы можете «неавтоматического», чтобы иметь глобальные нагрузки кэшированные в L1, как это указано в Maxwell tuning guide вы упоминали:

«Способом, аналогичным Kepler GK110B, GM204 сохраняет это поведение по умолчанию, но также позволяет приложениям входить в кеширование глобальных нагрузок в своем унифицированном кеше L1/Texture. Механизм выбора такой же, как и с GK110B: передать флаг -Xptxas -dlcm=ca во время компиляции nvcc. "

GK110B был вариантом GK110, который появился на устройствах K40. На K20/K20x поведение L1 не изменялось (отключено для глобальных нагрузок). На K40 поведение L1 по умолчанию было таким же, как K20/K20x. Но поведение по умолчанию можно переопределить, чтобы включить L1 для глобальных нагрузок.

+0

Я не уверен, что я должен принять ваш ответ. Как вы сказали, L1 абсолютно бесполезен, кроме того, что я «отказываюсь» использовать его. Это действительно странно для меня. Во всяком случае, я подожду еще два дня и приму свой ответ, если не появится лучшее решение.Но я очень благодарен за ваш ответ, спасибо Роберту. –

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