CUDA: ошибка при использовании volatile на двумерном массиве - PullRequest
0 голосов
/ 14 июля 2011

Я натолкнулся на эту тему Отключение объединения в 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 массиве [кодпример будет полезен.Более того, было бы здорово, если бы кто-нибудь сказал мне, какой прирост производительности я могу ожидать.

1 Ответ

4 голосов
/ 15 июля 2011

Ваш массив совместно используемой памяти не является двумерным и не объявлен volatile, поэтому оператор присваивания недопустим.

Что касается нестабильного предложения от плат NVIDIA, все, что я могу сказать, эточто вы не должны верить всему, что читаете, потому что это чепуха (Google «летит на небесах», если вы решитесь).Ключевое слово volatile управляет тем, как и выполняет ли компилятор запись из регистра в память.Это не окажет положительного влияния на пропускную способность памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...