VS查看PTX代码

_梦魇花葬 2014-06-13 09:45:15
加精
首先,声明本人用的是Windows 7操作系统,使用Windows 8操作系统的小伙伴们会启动不了Nsight monitor,原因在于Windows 8操作系统的Framework版本过新,解决办法可以是:安装一个版本旧一点的Matlab,安装起初会提示下载安装旧版本的Framework,安装完成Framework就可以停止安装Matlab了,Nsight monitor也可以启动了。
下面回到正题,如何在VS中查看PTX代码呢?在此举个例子,按照这个步骤便可以查看到了。

本人使用的代码是CUDA自带的一个Sample:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>

cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size);

__global__ void addKernel(int *c, const int *a, const int *b)
{
int i = threadIdx.x;
c[i] = a[i] + b[i];
}

int main()
{
const int arraySize = 5;
const int a[arraySize] = { 1, 2, 3, 4, 5 };
const int b[arraySize] = { 10, 20, 30, 40, 50 };
int c[arraySize] = { 0 };

// Add vectors in parallel.
cudaError_t cudaStatus = addWithCuda(c, a, b, arraySize);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "addWithCuda failed!");
return 1;
}

printf("{1,2,3,4,5} + {10,20,30,40,50} = {%d,%d,%d,%d,%d}\n",
c[0], c[1], c[2], c[3], c[4]);

// cudaDeviceReset must be called before exiting in order for profiling and
// tracing tools such as Nsight and Visual Profiler to show complete traces.
cudaStatus = cudaDeviceReset();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaDeviceReset failed!");
return 1;
}

return 0;
}

// Helper function for using CUDA to add vectors in parallel.
cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size)
{
int *dev_a = 0;
int *dev_b = 0;
int *dev_c = 0;
cudaError_t cudaStatus;

// Choose which GPU to run on, change this on a multi-GPU system.
cudaStatus = cudaSetDevice(0);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaSetDevice failed! Do you have a CUDA-capable GPU installed?");
goto Error;
}

// Allocate GPU buffers for three vectors (two input, one output) .
cudaStatus = cudaMalloc((void**)&dev_c, size * sizeof(int));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
goto Error;
}

cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
goto Error;
}

cudaStatus = cudaMalloc((void**)&dev_b, size * sizeof(int));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
goto Error;
}

// Copy input vectors from host memory to GPU buffers.
cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
goto Error;
}

cudaStatus = cudaMemcpy(dev_b, b, size * sizeof(int), cudaMemcpyHostToDevice);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
goto Error;
}

// Launch a kernel on the GPU with one thread for each element.
addKernel<<<1, size>>>(dev_c, dev_a, dev_b);

// Check for any errors launching the kernel
cudaStatus = cudaGetLastError();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus));
goto Error;
}

// cudaDeviceSynchronize waits for the kernel to finish, and returns
// any errors encountered during the launch.
cudaStatus = cudaDeviceSynchronize();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", cudaStatus);
goto Error;
}

// Copy output vector from GPU buffer to host memory.
cudaStatus = cudaMemcpy(c, dev_c, size * sizeof(int), cudaMemcpyDeviceToHost);
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMemcpy failed!");
goto Error;
}

Error:
cudaFree(dev_c);
cudaFree(dev_a);
cudaFree(dev_b);

return cudaStatus;
}

1. 确定不适用Nsight安全连接,即下图最后一项为False。


2. 启动Nsight monitor,选择“开始性能分析”


3. 选择Profile CUDA Application,并且将Collect information for CUDA Source View勾选上。


4. Launch!

5. 切换界面后,左上角选择Source and PTX。


6. 在视图中看到左边是源代码,右边绿色区域是对应某一行源代码的PTX代码。



其实,Nsight Monitor还是有很强大的功能的,感兴趣的小伙伴们可以自己翻翻手册和资料~
(本人使用的是Linux系统,到处找才找到Windows 7的操作系统,并安装了CUDA和Nsight,实在是不易。。请看过的小伙伴帮顶个吧~~
...全文
2732 216 打赏 收藏 转发到动态 举报
写回复
用AI写文章
216 条回复
切换为时间正序
请发表友善的回复…
发表回复
fantasy1991 2014-08-19
  • 打赏
  • 举报
回复
遇到个错误ptxas : fatal error : Ptx assembly aborted due to errors始终解决不了,来学习下PTX...
baidu_16785869 2014-06-23
  • 打赏
  • 举报
回复
csdnalbany 2014-06-23
  • 打赏
  • 举报
回复
sinat_16754493 2014-06-22
  • 打赏
  • 举报
回复
楼主好强大,佩服
qq_16760087 2014-06-22
  • 打赏
  • 举报
回复
qq_16759431 2014-06-22
  • 打赏
  • 举报
回复
mmsx 2014-06-22
  • 打赏
  • 举报
回复
有必要都学习学习,顶
qq_16728873 2014-06-21
  • 打赏
  • 举报
回复
谢谢楼主分享。。。。。受益匪浅啊
  • 打赏
  • 举报
回复
qq_16710983 2014-06-21
  • 打赏
  • 举报
回复
太好了,好想学习啊!
qq_16751751 2014-06-21
  • 打赏
  • 举报
回复
ganxielouzhule
天天吃饭团 2014-06-21
  • 打赏
  • 举报
回复
不是很明白~~~~~~
qq_16747937 2014-06-21
  • 打赏
  • 举报
回复
Angl_落淚 2014-06-21
  • 打赏
  • 举报
回复
qq_16710453 2014-06-20
  • 打赏
  • 举报
回复
学习了,涨姿势了~
qq_16709957 2014-06-20
  • 打赏
  • 举报
回复
wupengyu1139174519 2014-06-20
  • 打赏
  • 举报
回复
学习了。。。收获不小
qq_16707617 2014-06-20
  • 打赏
  • 举报
回复
很好,不错的地方!!
阳光忧郁 2014-06-20
  • 打赏
  • 举报
回复
pp03301 2014-06-20
  • 打赏
  • 举报
回复
加载更多回复(142)

231

社区成员

发帖
与我相关
我的任务
社区描述
CUDA on Windows XP
社区管理员
  • CUDA on Windows XP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧