Недостатки использования кэша текстур / Image2D для 2D-массивов?

При доступе к 2D-массивам в глобальной памяти использование кэша текстур имеет много преимуществ, таких как фильтрация и отсутствие необходимости заботиться о шаблонах доступа к памяти. Руководство по программированию CUDA называет только один недостаток:

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

Если мне это не нужно, потому что я никогда не пишу в память, из которой читаю, есть ли недостатки/подводные камни/проблемы при использовании кэша текстур (или Image2D, поскольку я работаю в OpenCL) вместо обычного глобального объем памяти? Есть ли случаи, когда я могу потерять производительность при использовании кэша текстур?


person w-m    schedule 31.08.2011    source источник


Ответы (1)


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

В худшем случае, когда частота попаданий в кэш очень низкая, использование текстур происходит медленнее, чем обычный доступ к памяти. Каждый поток должен сначала иметь промах кеша, а затем запускать глобальную выборку памяти. Итоговая общая задержка будет выше, чем при прямом чтении из памяти. Я почти всегда пишу две версии любого серьезного кода, который я разрабатываю, где текстуры могут быть полезны (одну с и одну без), а затем тестирую их. Часто можно разработать эвристику для выбора используемой версии на основе входных данных. CUBLAS широко использует эту стратегию.

person talonmies    schedule 31.08.2011
comment
+1 за то, что промах кеша занимает больше времени, о чем я и просил. Часть профилирования меня немного беспокоит: вам придется переделывать ее для каждого устройства, которое вы хотите использовать. Или, по крайней мере, любое поколение HW, так как я думаю, что они сильно различаются кэшированием текстур. Или ваши тесты показывают обратное? - person w-m; 31.08.2011