- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 nvprof 中,我可以看到我正在使用的每个 cuda 执行流的流 ID(0、13、15 等)
给定一个流变量,我希望能够打印出流 ID。目前我找不到任何 API 来执行此操作并类型转换 cudaStream_t
到 int 或 uint 不会产生合理的 ID。 sizeof()
说 cudaStream_t
是 8 个字节。
最佳答案
简而言之:我不知道有什么方法可以直接访问这些 ID,但是您可以为流提供显式名称以进行分析。cudaStream_t
是不透明的“资源句柄”类型。资源句柄类似于指针;所以按理说流 ID 不包含在指针(句柄)本身中,而是以某种方式包含在它所指的内容中。
由于它是不透明的(没有定义它指向的内容,由 CUDA 提供)并且正如您指出的那样没有直接的 API,我认为您不会找到从 cudaStream_t
中提取流 ID 的方法运行。
对于这些断言 cudaStream_t
是资源句柄并且它是不透明的,请参阅 CUDA 头文件 driver_types.h
但是,the NV Tools Extension API 使您能够“命名”特定流(或其他资源)。这将允许您将源代码中的特定流与分析器中的特定名称相关联。
这是一个简单的工作示例:
$ cat t138.cu
#include <stdio.h>
#include <nvToolsExtCudaRt.h>
const long tdel = 1000000000ULL;
__global__ void tkernel(){
long st = clock64();
while (clock64() < st+tdel);
}
int main(){
cudaStream_t s1, s2, s3, s4;
cudaStreamCreate(&s1);
cudaStreamCreate(&s2);
cudaStreamCreate(&s3);
cudaStreamCreate(&s4);
#ifdef USE_S_NAMES
nvtxNameCudaStreamA(s1, "stream 1");
nvtxNameCudaStreamA(s2, "stream 2");
nvtxNameCudaStreamA(s3, "stream 3");
nvtxNameCudaStreamA(s4, "stream 4");
#endif
tkernel<<<1,1,0,s1>>>();
tkernel<<<1,1,0,s2>>>();
tkernel<<<1,1,0,s3>>>();
tkernel<<<1,1,0,s4>>>();
cudaDeviceSynchronize();
}
$ nvcc -arch=sm_61 -o t138 t138.cu -lnvToolsExt
$ nvprof --print-gpu-trace ./t138
==28720== NVPROF is profiling process 28720, command: ./t138
==28720== Profiling application: ./t138
==28720== Profiling result:
Start Duration Grid Size Block Size Regs* SSMem* DSMem* Size Throughput Device Context Stream Name
464.80ms 622.06ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 13 tkernel(void) [393]
464.81ms 621.69ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 14 tkernel(void) [395]
464.82ms 623.30ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 15 tkernel(void) [397]
464.82ms 622.69ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 16 tkernel(void) [399]
Regs: Number of registers used per CUDA thread. This number includes registers used internally by the CUDA driver and/or tools and can be more than what the compiler shows.
SSMem: Static shared memory allocated per CUDA block.
DSMem: Dynamic shared memory allocated per CUDA block.
$ nvcc -arch=sm_61 -o t138 t138.cu -lnvToolsExt -DUSE_S_NAMES
$ nvprof --print-gpu-trace ./t138
==28799== NVPROF is profiling process 28799, command: ./t138
==28799== Profiling application: ./t138
==28799== Profiling result:
Start Duration Grid Size Block Size Regs* SSMem* DSMem* Size Throughput Device Context Stream Name
457.98ms 544.07ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 stream 1 tkernel(void) [393]
457.99ms 544.31ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 stream 2 tkernel(void) [395]
458.00ms 544.07ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 stream 3 tkernel(void) [397]
458.00ms 544.07ms (1 1 1) (1 1 1) 8 0B 0B - - TITAN X (Pascal 1 stream 4 tkernel(void) [399]
Regs: Number of registers used per CUDA thread. This number includes registers used internally by the CUDA driver and/or tools and can be more than what the compiler shows.
SSMem: Static shared memory allocated per CUDA block.
DSMem: Dynamic shared memory allocated per CUDA block.
$
关于cuda - 如何使用 cudaStream_t 访问在 nvprof 中看到的数字流 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44266820/
我试图弄清楚“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。 所以我不知道什么时
我是一名优秀的程序员,十分优秀!