При вычислении эффективной пропускной способности в Cuda я считаю количество операций чтения / записи в общей памяти. Пример кода приведен ниже.
__global__ void kernel(float *a, float * b, float * c, int num){
int i = threadIdx.x + blockIdx.x*blockDim.x;
__shared__ a_shared[NUM];
__shared__ b_shared[NUM];
if (i < NUM){
a_shared[i] = a[i];
b_shared[i] = b[i]
c[i] = a_shared[i] + b_shared[i];
}
}
Что касается секция из руководства по передовому опыту, которое вы указали в комментариях выше, я бы сказал, что ответ «нет», общий трафик не должен быть включен.
Откуда нам это знать?
Для точного измерения производительности полезно рассчитать теоретическую и эффективную пропускную способность. Когда последняя намного ниже первой, детали проектирования или реализации, вероятно, уменьшат пропускную способность, и это должно быть основной целью последующих усилий по оптимизации для ее увеличения.
Однако теоретический расчет пропускной способности включает в себя только трафик глобальной памяти к DRAM:
Используя эти элементы данных, максимальная теоретическая пропускная способность памяти NVIDIA Tesla M2090 составляет 177,6 ГБ / с:
Это число является пропускной способностью DRAM. Он не включает пропускную способность разделяемой памяти.
Запрошенная глобальная пропускная способность
Запрошенная глобальная пропускная способность магазина
Глобальная пропускная способность
Глобальная пропускная способность магазина
DRAM Read Throughput
Скорость записи DRAM
Других решений пока нет …