CUDA:为什么比连续的内存访问更快?

时间:2017-10-26 23:06:15

标签: cuda

我正在关注Even Easier Introduction to CUDA。使用GPU的add内核的第一个示例如下:

__global__
void add(int n, float *x, float *y)
{
  int index = threadIdx.x;
  int stride = blockDim.x;
  for (int i = index; i < n; i+=stride)
      y[i] = x[i] + y[i];
}

使用256个线程启动内核:

add<<<1,256>>>(N, x, y);

它在我的GPU上运行大约1.5毫秒。

作为一个实验,我尝试将数组元素组合成n / 256个块,每个线程处理一个块中的所有连续元素,而不是跨越内存。

__global__
void add(int n, float *x, float *y)
{
  int size = n / blockDim.x;
  int start = size * threadIdx.x;
  int end = start + size;
  for (int i = start; i < end; i++)
      y[i] = x[i] + y[i];
}

但是大约需要3.7毫秒。

为什么访问连续的全局内存比跨步慢?

0 个答案:

没有答案