Cuda中的有效带宽

时间:2018-11-23 04:43:30

标签: c++ cuda gpu gpu-shared-memory

在计算Cuda中的有效带宽时,我是否计算共享内存中的读取/写入次数。下面是一个示例代码。

__global__ void kernel(float *a, float * b, float * c, int num){
    int i = threadIdx.x + blockIdx.x*blockDim.x;
    __shared__ a_shared[NUM];
    __shared__ b_shared[NUM];
    if (i < NUM){
       a_shared[i] = a[i];
       b_shared[i] = b[i]   
       c[i] = a_shared[i] + b_shared[i];
    }
}

1 个答案:

答案 0 :(得分:0)

关于您在上述评论中指出的最佳做法指南中的the section,我想答案是“否”,不应包含共享流量。

我们怎么知道这个?

  1. 计算有效带宽的主要目的是将其与理论带宽进行比较:
  

要准确地测量性能,计算理论和有效带宽非常有用。当后者远低于前者时,设计或实现细节可能会减少带宽,这应该是随后进行优化以增加带宽的主要目标。

但是,理论带宽计算仅包括到DRAM的全局内存流量:

  

使用这些数据项,NVIDIA Tesla M2090的峰值理论内存带宽为177.6 GB / s:

该数字是DRAM带宽。它不包括共享内存带宽。

  1. 探查器测量的参考均与全局内存流量有关,而不与共享内存有关:
  

请求的全局负载吞吐量

     

请求的全球商店吞吐量

     

全局负载吞吐量

     

全球商店吞吐量

     

DRAM读取吞吐量

     

DRAM写吞吐量

  1. CUDA正式文档中没有提到任何用于计算理论共享内存带宽的方法,因此它不能包含在理论带宽计算中。因此,出于比较目的,包括共享内存带宽的测量是没有意义的。