В моем коде cuda, если я увеличиваю blockizeizeX, blocksizeY это на самом деле занимает больше времени. [Поэтому я запускаю его с 1x1] Также часть моего времени выполнения (например, 7 из 9 с) берется только вызовом Ядро. Фактически я очень удивлен тем, что даже если я закомментирую все ядро, время почти одинаковое. Есть предложения, где и как оптимизировать?
P.S. Я отредактировал этот пост с моим реальным кодом. Я уменьшаю выборку изображения, чтобы каждые 4 соседних пикселя (например, для 1,2 из строки 1 и 1,2 из строки 2) давали выходной пиксель. Я получаю эффективное значение bw of. 5 ГБ / с по сравнению с теоретическим максимумом 86,4 ГБ / с. Время, которое я использую, заключается в разнице в вызове ядра с инструкциями и вызове пустого ядра.
Сейчас это выглядит довольно плохо, но я не могу понять, что я делаю не так.
__global__ void streamkernel(int *r_d,int *g_d,int *b_d,int height ,int width,int *f_r,int *f_g,int *f_b){
int id=blockIdx.x * blockDim.x*blockDim.y+ threadIdx.y*blockDim.x+threadIdx.x+blockIdx.y*gridDim.x*blockDim.x*blockDim.y;
int number=2*(id%(width/2))+(id/(width/2))*width*2;
if (id<height*width/4)
{
f_r[id]=(r_d[number]+r_d[number+1];+r_d[number+width];+r_d[number+width+1];)/4;
f_g[id]=(g_d[number]+g_d[number+1]+g_d[number+width]+g_d[number+width+1])/4;
f_b[id]=(g_d[number]+g_d[number+1]+g_d[number+width]+g_d[number+width+1];)/4;
}
}