- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 nvprof 获取以下 CUDA 代码的全局内存访问次数。内核加载数为36(访问d_In数组),内核存储数为36+36(访问d_Out数组和d_rows数组)。因此,全局内存加载总数为 36,全局内存存储数为 72。但是,当我使用 nvprof CUDA 分析器分析代码时,它报告以下内容:(基本上我想计算计算到全局内存访问(CGMA) 比率)
1 gld_transactions Global Load Transactions 6 6 6
1 gst_transactions Global Store Transactions 11 11 11
1 l2_read_transactions L2 Read Transactions 133 133 133
1 l2_write_transactions L2 Write Transactions 24 24 24
#include <stdio.h>
#include "cuda_profiler_api.h"
__constant__ int crows;
__global__ void kernel(double *d_In, double *d_Out, int *d_rows){
int tx=threadIdx.x;
int bx=blockIdx.x;
int n=bx*blockDim.x+tx;
if(n < 36){
d_Out[n]=d_In[n]+1;
d_rows[n]=crows;
}
return;
}
int main(int argc,char **argv){
double 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};
double *d_In;
double *d_Out;
int *d_rows;
double Iout[36];
int rows=5;
int h_rows[36];
cudaMemcpyToSymbol(crows,&rows,sizeof(int));
cudaMalloc(&d_In,sizeof(double)*36);
cudaMalloc(&d_Out,sizeof(double)*36);
cudaMalloc(&d_rows,sizeof(int)*36);
cudaMemcpy(d_In,I,sizeof(double)*36,cudaMemcpyHostToDevice);
dim3 dimGrid(4,1,1);
dim3 dimBlock(10,1,1);
cudaProfilerStart();
kernel<<<dimGrid,dimBlock>>>(d_In,d_Out,d_rows);
cudaProfilerStop();
cudaMemcpy(Iout,d_Out,sizeof(double)*36,cudaMemcpyDeviceToHost);
cudaMemcpy(h_rows,d_rows,sizeof(int)*36,cudaMemcpyDeviceToHost);
int i;
for(i=0;i<36;i++)
printf("%f %d\n",Iout[i],h_rows[i]);
}
有人可以帮助我吗?谢谢
最佳答案
通常会问一个比“有人能帮我吗?”更具体的问题显示的代码没有浮点运算(+、* 等),因此没有要计算的 CGMA(它为零)。
关于内存事务,您的代码有 4 个线程 block :
dim3 dimGrid(4,1,1);
每个线程 block 都可以在单独的多处理器上运行。每个 block 中有 10 个线程。下面一行代码:
d_Out[n]=d_In[n]+1;
将生成至少一个全局加载事务 (d_In
) 和一个全局存储事务 (d_Out
) 来为线程提供服务。第四个 block 将具有事件线程的全局索引 (n
) 为 30-35 的线程。当此 block 执行上述代码行时,它将生成两个 全局加载事务和两个 全局存储事务,因为线程需要两个缓存行来为其请求提供服务。所以这一行代码可能会生成 5 个全局加载事务和 5 个全局存储事务。
类似的原因,下一行代码:
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 个。希望这足以让您了解这些数字的来源。
关于cuda - 使用 CUDA Profiler nvprof 进行内存访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25945426/
我试图弄清楚“nvprof”报告的每个指标到底是什么。更具体地说,我无法弄清楚哪些事务是系统内存和设备内存的读写。我编写了一个非常基本的代码只是为了帮助解决这个问题。 #define TYPE flo
考虑以下内核 __global__ void elementAccess( int *a, int N ) { int i = blockDim.x * blockIdx.x + threadId
从命令行使用 nvprof --metrics 测量带宽的正确选项是什么?我正在使用 flop_dp_efficiency 来获得峰值 FLOPS 的百分比,但是手册中似乎有很多带宽测量选项,我不太明
我正在尝试使用 Nvidia nvprof 来分析我的 CUDA 和 OpenCL 程序。然而,无论我选择什么基准,唯一的输出是 ======== Error: application not fin
我正在尝试使用 nvprof 分析基于 TensorFlow 的代码。我为此使用以下命令 nvprof python ass2.py 程序运行成功,但最后出现如下错误。 ==49791== Prof
如何计算给定的 gpu 显存带宽: 数据样本大小(以 Gb 为单位)。 内核执行时间(nvprof 输出)。 GPU:gtx 1050 ti 库达:8.0 操作系统:Windows 10 IDE:Vi
我只是在查看以下输出并试图将我的思想围绕在数字上: ==2906== Profiling result: Time(%) Time Calls Avg Min
我的程序由一个 Matlab 文件 (.m) 和一个 mex-cuda 文件 (.cu) 组成。它从Matlab开始,然后Matlab文件调用mex-cuda文件。 我想使用“nvprof”命令行在
我正在尝试使用 nvprof 在我的 CUDA 程序中获得一些基准计时,但不幸的是它似乎没有分析任何 API 调用或内核。我寻找了一个简单的初学者示例以确保我做对了,并在此处的 Nvidia 开发博客
当我尝试在命令提示符中运行 nvprof 命令时,弹出 System Erros 并说“代码执行无法继续,因为找不到 cupti64_102.dll。重新安装程序可能会解决此问题。” 我已经安装了 C
我正在使用 nvprof 运行我的程序以使用以下命令获取配置文件信息: nvprof -o profileOutput -s ./exe args 我想要关于经线发散、合并读/写、占用等的信息。但是当
我看到 nvprof 可以分析内核中的 flop 数量(使用如下参数)。另外,当我浏览文档时(此处http://docs.nvidia.com/cuda ...它说 flop_count_sp 是“非
我正在使用 nvprof 获取以下 CUDA 代码的全局内存访问次数。内核加载数为36(访问d_In数组),内核存储数为36+36(访问d_Out数组和d_rows数组)。因此,全局内存加载总数为 3
我在初始化数据的函数上运行nvprof.exe,调用三个内核并释放数据。所有的分析都应如此,我得到的结果是这样的: ==7956== Profiling application: .\a.exe ==
在 nvprof 中,我可以看到我正在使用的每个 cuda 执行流的流 ID(0、13、15 等) 给定一个流变量,我希望能够打印出流 ID。目前我找不到任何 API 来执行此操作并类型转换 cuda
我想从我的 GPU 应用程序中提取数据以检查其限制。我必须使用 nvprof 因为应用程序在远程服务器上运行,所以我应该在 中创建一个文件以本地导入可视化分析器 .我试图用 nvprof -o fil
我最近通过系统的包管理器在我的 arch-Linux 机器上安装了 Cuda,我一直试图通过运行一个简单的向量加法程序来测试它是否工作。 我只是复制粘贴 this tutorial 中的代码(使用一个
我正在尝试找出 Titan V/V100 上深度学习模型的 GPU 执行性能瓶颈。我了解,要在基于 https://devblogs.nvidia.com/parallelforall/program
我正在尝试了解 nvprof 指标。我是 CUDA 的新手,因此试图了解哪些指标对性能很重要。 我写了一个内核来计算矩阵之间的绝对差之和。 在 Tegra X1 上运行,它的平均时间约为 47 毫秒,
“nvprof”结果中的“GPU 事件”和“API 调用”有什么区别? 不知道为什么同一个函数会有时差。 例如,[CUDA memcpy DtoH] 和 cuMemcpyDtoH。 所以我不知道什么时
我是一名优秀的程序员,十分优秀!