Я натолкнулся на эту тему Отключение объединения в Nvidia Forum , где говорится, что "Пока установка указателя / массива памяти на" volatile ", кажется, помогает для очень случайногодоступ. (Дает на 50% больше производительности?!) ".
Я делаю вычисления с конечными разностями (3D Stencil Computation) на GPU (Fermi) с использованием CUDA и хочу улучшить производительность вычислений.Поскольку доступ к оси z трехмерного массива является случайным (трехмерный массив располагается в Z, Y, X от медленного к быстрому), я думаю, что использование volatile было бы лучшим выбором.В настоящее время я использую разделяемую память
__shared__ float 2dplane[32][32]
Когда я пытался использовать volatile как
volatile float **plane = 2dplane;
, я получаю эту ошибку
error: значение типа«float () [16]» нельзя использовать для инициализации сущности типа «volatile float *»
Может кто-нибудь сказать мне, как использовать volatile на 2d массиве [кодпример будет полезен.Более того, было бы здорово, если бы кто-нибудь сказал мне, какой прирост производительности я могу ожидать.