-1
我已經在CUBLAS中編寫了與CUDA函數cublasSdgmm
相同的CUDA函數,並且我發現當我增加塊號時,函數性能可能會變差甚至失敗。當塊號小於最大值時,cuda內核失敗
下面是代碼,M = 9.6e6,S = 3,最佳性能塊數爲320,我的GPU爲GTX960,並且X維中的最大塊大小爲2147483647。
__global__ void DgmmKernel(float *d_y, float *d_r, int M, int S){
int row = blockIdx.x*blockDim.x + threadIdx.x;
int col = blockIdx.y*blockDim.y + threadIdx.y;
while(row < M){
d_y[row + col * M] *= d_r[row];
row += blockDim.x * gridDim.x;
}
}
void Dgmm(float *d_y, float *d_r, int M, int S){
int xthreads_per_block = 1024;
dim3 dimBlock(xthreads_per_block, 1);
dim3 dimGrid(320, S);
DgmmKernel<<<dimBlock, dimGrid>>>(d_y, d_r, M, S);
}
我想原因是可能是GPU的資源限制,是不是?
如果是正確的,特定的資源會限制性能,那麼內核函數只會讀取兩個向量並執行乘法操作。有沒有什麼方法來提高我的GPU的性能。