1

我测量了执行内核在两个向量之间进行加法时的带宽:

__global__ void add(float *a, float *b, float *c, int n)
{
    int tid = blockIdx.x*blockDim.x + threadIdx.x;

    while (tid < n)
    {
        c[tid] = a[tid] + b [tid];
        tid += blockDim.x * gridDim.x;
    }
}

我首先启动内核一次,以便将其加载到设备上,然后,我测量内核执行的 10 次迭代。

当我的向量长度为​​ 1000000 比 1000 时,带宽要好得多。

为什么 ?

谢谢。

4

1 回答 1

5

GPU 具有非常高的内存带宽(好)非常高的内存延迟(坏)。一个内存请求需要几百个周期才能得到满足,但可能有许多正在进行的请求是流水线的。

如果您只添加 1000 个元素,那么您真正测量的是内存延迟。

有了更大的向量,就会有足够多的线程块,当一个线程块停在内存上时,GPU 可以切换到另一个线程块,其内存请求已完成。有了它们,您就可以测量带宽。

于 2013-03-17T00:46:26.473 回答