《cuda c编程权威指南》03 - cuda小功能汇总

1. 计时

1.1 linux

#include <sys/time.h>

double cpuSecond() {
	struct timeval tp;
	gettimeofday(&tp, NULL);
	return ((double)tp.tv_sec + (double)tp.tv_usec*1e-6);
}

// 调用
double start = cpuSecond();
kernel_name << <grid, block >> > (argument list);
cudaDeviceSynchronize();  // 显示的使其同步。
double cost = cpuSecond() - start;

1.2 window下

#include <time.h>

// 调用
time_t begin, end;
time(&begin);
kernel_name << <grid, block >> > (argument list);
time(&end);
time_t elapsed = end - begin;
printf("Time measured: %ld seconds.\n", elapsed);

2. nvprof实用工具

nvprof是命令行分析工具,功能很多,可以帮助从应用程序的CPU和GPU活动情况中获取时间线信息,其包括内核执行、内存传输以及CUDA API的调用。具体可通过以下命令查看。

nvprof --help

 (1)上面命令如果报错:由于找不到cupti64_2022.2.1.dll,无法继续执行代码。。。

原因:nvprof工具属于插件,其dll在目录: 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\extras\CUPTI\lib64

 系统环境没有该目录,所以索引不到dll库。

解决办法:由于C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin在系统环境中,可以将cupti64_2022.2.1.dll拷贝到bin目录中.

(2)问题二,如果运行编译文件报错:Cannot find compiler ‘cl.exe‘ in PATH

nvcc kernel.cu -o kernel  // 编译

 则将C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 加到系统路径中。

使用办法示例:

nvprof ./kernel

(1)可以看到哪些操作,被操作了多少次,平均、最大、最小用时是多少,用时占比是多少;

(2)cudaMalloc用时最多,被运行了3次,最小用时2us,最大用时259ms,平均用时86ms;

待续。。。

猜你喜欢

转载自blog.csdn.net/jizhidexiaoming/article/details/132027586