使用CUDA探查器nvprof进行内存访问

使用CUDA探查器nvprof进行内存访问,cuda,profiling,gpgpu,gpu,heterogeneous,Cuda,Profiling,Gpgpu,Gpu,Heterogeneous,我使用nvprof获取以下CUDA代码的全局内存访问数。内核中的加载数是36(访问数组中的d_),内核中的存储数是36+36(用于访问d_Out数组和d_行数组)。因此,全局内存加载的总数是36,全局内存存储的数量是72。但是,当我使用nvprof CUDA profiler评测代码时,它会报告以下内容:(基本上我想要计算计算到全局内存访问(CGMA)的比率) 1 gld_事务全局加载事务6 1 gst_交易全球门店交易11 11 1二级读取事务二级读取事务133 133 1二级写入事务二级写入

我使用nvprof获取以下CUDA代码的全局内存访问数。内核中的加载数是36(访问数组中的d_),内核中的存储数是36+36(用于访问d_Out数组和d_行数组)。因此,全局内存加载的总数是36,全局内存存储的数量是72。但是,当我使用nvprof CUDA profiler评测代码时,它会报告以下内容:(基本上我想要计算计算到全局内存访问(CGMA)的比率)

1 gld_事务全局加载事务6
1 gst_交易全球门店交易11 11
1二级读取事务二级读取事务133 133
1二级写入事务二级写入事务24
#包括
#包括“cuda_profiler_api.h”
__恒定的乌鸦;
__全局无效内核(双*d\u-In,双*d\u-Out,int*d\u行){
int tx=线程idx.x;
int bx=blockIdx.x;
int n=bx*blockDim.x+tx;
如果(n<36){
d_Out[n]=d_In[n]+1;
d_rows[n]=乌鸦;
}
返回;
}
int main(int argc,字符**argv){
双I[36]={1,5,9,2,6,10,3,7,11,4,8,12,13,17,21,14,18,22,15,19,23,16,20,24,25,29,33,26,30,34,27,31,35,28,32,36};
双*d_英寸;
双倍*d_输出;
int*d_行;
双输出[36];
int行=5;
int h_行[36];
cudaMemcpyToSymbol(crows和rows,sizeof(int));
cudaMalloc(&d_In,尺寸(双)*36);
cudaMalloc(&d_Out,sizeof(双倍)*36);
cudaMalloc(&d_行,尺寸(内部)*36);
cudaMemcpy(单位:英寸,I,尺寸(双)*36,cudaMemcpyHostToDevice);
dim3 dimGrid(4,1,1);
dim3 dimBlock(10,1,1);
cudaprofilerst();
内核(d_-In、d_-Out、d_行);
cudaProfilerStop();
cudaMemcpy(Iout、d_Out、sizeof(双)*36,cudaMemcpyDeviceToHost);
cudaMemcpy(h_行、d_行、sizeof(int)*36,cudaMemcpyDeviceToHost);
int i;

对于(i=0;i通常会问一个比“有人能帮我吗?”更具体的问题,如图所示,您的代码没有浮点运算(+,*,等等),因此没有要计算的CGMA(它是零)

关于内存事务,您的代码有4个线程块:

 dim3 dimGrid(4,1,1);
每个线程块可以在单独的多处理器上运行。每个块中有10个线程。以下代码行:

            d_Out[n]=d_In[n]+1;
            d_rows[n]=crows;
将生成至少一个全局加载事务(
d_-In
)和一个全局存储事务(
d_-Out
)来服务线程。第四个块将具有全局索引(
n
)的线程对于活动线程,将为30-35。当此块执行上述代码行时,它将生成两个全局加载和两个全局存储事务,因为线程需要两个缓存线来服务其请求。因此,这一行代码可能会生成5个全局加载事务和5个全局存储事务

出于类似原因,下一行代码:

            d_Out[n]=d_In[n]+1;
            d_rows[n]=crows;
可能会生成5个额外的全局存储事务。因此,您的探查器输出:

  1                gld_transactions        Global Load Transactions           6           6           6
  1                gst_transactions       Global Store Transactions          11 
我相信我已经解释了6个全局加载事务中的5个,以及11个全局存储事务中的10个。希望这足以让您了解这些数字的来源