Cuda Общая память отображается как регистр в Nsight
Я объявил общую память и попытался отследить ее с помощью Nsight 2.2 для Visual Studio 2010. Я использую CUDA 4.2 с Quadro 5000.
в моем kernel.cu:
extern __shared__ ushort2 sampleGatheringSM[];
в моей функции вызова ядра:
sampleGathering_SM_size =dimBlock.x*dimBlock.y*4*sizeof(ushort2)*2; // = 10240
sampleGatheringKernel<<<dimGrid, dimBlock, sampleGathering_SM_size >>>(dev_image, dev_gradient, width, height);
Когда я смотрю аналитическую активность на Nsight, а затем "CUDA Launches", она говорит мне, что:
- Выделенных регистров на блок: 10240
- Выделенная общая память на блок: 0
- Причина ограничения блока: регистры
Правильно ли я выделил общую память? Я не понимаю, как я мог бы выделить регистр.
РЕДАКТИРОВАТЬ:
это говорит мне также:
- Регистрация на темы: 32
- Динамическая общая память на блок: 0
- Статическая общая память на блок: 0
1 ответ
Объявление динамической разделяемой памяти является правильным. В отчете трассировки анализа Nsight 2.2 есть ошибка, которая возникает только для операций трассировки CUDA. Действия трассировки анализа выполняются с параметром Nsight | Варианты| Анализ | Режим трассировки ядра CUDA = Serialized и Analysis Profiler. Действия CUDA показывают правильное значение. Эта ошибка будет исправлена в следующей версии Nsight.