我正在使用最新的CUDA 8.0与GTX 1080,并运行示例以测试速度。 (我知道他们不反映最佳的速度,但我只想水平进行比较。)CUDA 8.0,GTX 1080,为什么矢量加法比矩阵乘法慢5倍?
在0_Simple/matrixMul
,速度由代码,这给衡量:
Performance= 1029.91 GFlop/s, Time= 0.127 msec, Size= 131072000 Ops, WorkgroupSize= 1024 threads/block
然后我跑0_Simple/vectorAdd
,并从上面的示例复制速度测试代码。即:
// Measure speed
cudaEvent_t start;
cudaEventCreate(&start);
cudaEvent_t stop;
cudaEventCreate(&stop);
cudaEventRecord(start, NULL);
int nIter = 300;
for (int i = 0; i < nIter; i++) {
vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);
}
cudaEventRecord(stop, NULL);
cudaEventSynchronize(stop);
float msecTotal = 0.0f;
cudaEventElapsedTime(&msecTotal, start, stop);
float msecPerAdd = msecTotal/nIter;
double flopsPerAdd = numElements;
double gigaFlops = (flopsPerAdd * 1.0e-9f)/(msecPerAdd/1000.0f);
printf("Performance= %.2f GFLOPS, Time= %.3f ms, Size= %.0f Ops\n", gigaFlops, msecPerAdd, flopsPerAdd);
我也放大从50000
的numElements
到67108864
。速度结果是:
Performance= 19.85 GFLOPS, Time= 3.380 ms, Size= 67108864 Ops
这几乎慢了5倍。
我知道示例代码可能不是最优的,所以任何人都可以告诉我为什么vectorAdd代码太慢,以及如何优化它?
我使用CUDA 8.0,GTX 1080
'numElements'是什么数字? – kangshiyin
@ kangshiyin,我在帖子中说是67108864,这是64M。 – HanXu
你可以显示你的vectorAdd内核的代码吗?你是否编译过启用优化? – X3liF