我時間需要多長時間我的CUDA程序來計算具有一定規模的矩陣。例如,10x10,100x100,500x500,100x1000。CUDA時間事件
然而,結果完全不是我所期待的。圖表的數字不符合預期。隨着矩陣大小的增加,計算時間減少。
例如,這裏是平均時間(從1000次運行):10×10 :0.032768s 100x100的:0.068960s 500×500:0.006336s 1000×1000:0.018400s
的時間下降,然後再升在1000.發生了什麼事?這些數字不應該在某個時候達到頂峯嗎?爲什麼會像這樣過山車?
下面是如何實際定時代碼正在運行:
int blocksNeeded=0;
cudaError_t cudaStatus;
blocksNeeded=(size/MAXTHREADS)+1;
int threadsPerBlock = MAXTHREADS/blocksNeeded+1;
cudaEvent_t start, stop;
float elapsedtime;
.
.
.
.
.
cudaEventCreate(&start);
cudaEventCreate(&stop);
cudaEventRecord(start, 0);
addKernel<<<blocksNeeded, size>>>(dev_c, dev_a, dev_b,size);
cudaStatus = cudaDeviceSynchronize();
cudaEventRecord(stop, 0);
cudaEventSynchronize(stop);
cudaEventElapsedTime(&elapsedtime, start, stop);
cudaEventDestroy(start);
cudaEventDestroy(stop);
其中MAXTHREADS是1024,並且尺寸是我在矩陣中的元素的量。 I.E. 10x10矩陣將有100個元素,這是大小。
更新內核:
__global__ void addKernel(float *c, float *a, float *b,int size)
{
int idx = blockDim.x * blockIdx.x + threadIdx.x;
if(idx < size)
c[idx] = a[idx] + b[idx];
}
你檢查從內核執行的返回碼?也許在500,內核未能啓動 – flipchart
你如何計算blocksNews和size? –
你嘗試過沒有cudaDeviceSynchronize嗎?這不是必需的時間,它可能會影響結果(即使不是你描述的方式)。和其他評論+1。 – jmsu