用NVIDIV Visual Profiler 进行分析执行效果
来源:互联网 发布:数据分析r语言实战pdf 编辑:程序博客网 时间:2024/05/11 16:36
先附上代码,这是上次进行多线程运算的程序。
不同的是最后多了行代码: cudaThreadExit(); //加上这个可以用 NVIDIA visual profiler进行分析
这行代码是保证分析时进行判断是否运行完的,不然分析软件一直会在分析GPU的运行状态,产生无用的垃圾信息。
下面是要分析的多线程程序
//GPGPU编程技术-从GLSL、CUDA到OpenCL 平方和算法第一版 增加计时函数 没有为主机变量分配内存 ////书中程序160页#include <stdio.h>#include <iostream>#include <cuda_runtime.h> // For the CUDA runtime routines (prefixed with "cuda_")#include <device_launch_parameters.h> //我在查询中找到的头文件 有可能有别的表达方式#include <time.h> //计时用的函数库#define DATA_SIZE 1048576 //4MB 的数据#define THREAD_NUM 256 //线程数using namespace std;int anData[DATA_SIZE];//生成随机数据量void GenerateNumber(int *pnNumber, int nSize){ for (int i = 0; i < nSize; i++) pnNumber[i] = rand() % 10;}//全局函数计算平方和内核:在主机上调用,在设备上执行__global__ static void sumofSquares(int *pnNum, int* pnResult,clock_t *pclock_ttime){ int tid = threadIdx.x; int nSum = 0; int i; int nSize = 0; if (DATA_SIZE % THREAD_NUM) nSize = DATA_SIZE / THREAD_NUM + 1; else nSize = DATA_SIZE / THREAD_NUM; //nSize 一个线程计算的数据量 //计时开始 clock_t clock_tstart; if ( tid == 0 ) clock_tstart = clock(); //用了一个线程计时,足以精确请放心 for ( i=nSize * tid ; i < (tid+1) *nSize ; i++) { nSum += (pnNum[i] * pnNum[i]); } pnResult[tid] = nSum; //计时结束 if ( tid == 0) *pclock_ttime = clock() - clock_tstart; //用了一个线程计时}void main(){ GenerateNumber(anData, DATA_SIZE); //生成随机数据量 int *pnGpuData, *pnResult; clock_t *pclock_ttime;//储存时间的 int *nSummat; cudaMallocHost((void**)&nSummat, sizeof(int) * THREAD_NUM); cudaMalloc ((void**)&pnGpuData, sizeof(int) * DATA_SIZE); cudaMalloc ((void**)&pnResult , sizeof(int) * THREAD_NUM); cudaMalloc((void**)&pclock_ttime, sizeof(clock_t)); cudaMemcpy(pnGpuData, anData, sizeof(int)*DATA_SIZE, cudaMemcpyHostToDevice); //本版本是基础版本 在此基础上学习逐渐内存与内核并行优化 //所以这里只用了一个内核 sumofSquares <<< 1, THREAD_NUM , 0 >>>(pnGpuData, pnResult,pclock_ttime); cudaMemcpy(nSummat, pnResult, sizeof(int) * THREAD_NUM, cudaMemcpyDeviceToHost); clock_t pclocksum; cudaMemcpy(&pclocksum,pclock_ttime, sizeof(clock_t), cudaMemcpyDeviceToHost); //在cpu上最后加和运算 int finishsum = 0; for (size_t i = 0; i < THREAD_NUM; i++) { finishsum = finishsum + nSummat[i]; } printf("SuM = %d Time = %d\n", finishsum, pclocksum); cudaFree(pnGpuData); cudaFree(pnResult); cudaFree(pclock_ttime); cudaThreadExit(); //加上这个可以用 NVIDIA visual profiler进行分析 system("pause"); //return 0;}
编译运行之后,得到执行文件:
找到执行文件的路径:
D:\CUDA\SampleCuda1\SampleCuda1\x64\Debug\SampleCuda1.exe
打开NVIDIV Visual Profiler 分析工具,这个工具就在安装CUDA时一块安装好了:
打开软件—file—NEW nesssion
输入分析执行文件的路径 和 工作目录
分析结果:
0 0
- 用NVIDIV Visual Profiler 进行分析执行效果
- visual profile 设置及用Visual Profiler进行CUFFT时间分析
- 用profiler工具对android ndk程序进行性能分析
- 使用Visual Studio Profiler分析程序性能
- 使用Visual Studio Profiler分析程序性能
- 使用Visual Studio Profiler分析程序性能
- Visual Studio--Profiler分析程序性能
- 使用yourkit java profiler进行性能分析
- 应用程序性能分析利器 —— Visual Studio Profiler
- 应用程序性能分析利器 —— Visual Studio Profiler
- 应用程序性能分析利器 —— Visual Studio Profiler
- NVIDIA Visual Profiler使用方法
- Visual Profiler介绍
- 用MongoDB profiler分析慢查询
- unity Profiler性能分析
- Unity Profiler 性能分析
- Unity Profiler性能分析
- Unity Profiler 性能分析
- 【C语言】得到浮点数的二进制
- minigui hdc 画图
- 二叉树的基本操作
- [paper note] Human Re-identification in Crowd Videos using Personal, Social and Environmental (PSE)
- BZOJ 2657 [Zjoi2012]旅游(journey)
- 用NVIDIV Visual Profiler 进行分析执行效果
- CGContextRef普通用法
- sqlserver dblink
- 关于php中静态方法,静态属性的一些浅见
- centos7配置smb(亲测可行)
- 【NOIP2016提高A组集训第1场10.29】小W学物理
- Map接口与Map.Entry
- JSP剪刀石头布的设计与实现
- Opencv学习笔记-----理解Mat