关于.cubin文件的问题

qijun83 2009-08-06 02:32:24
runtime API实现的程序,cubin文件直接嵌入在.exe文件了
而driver API实现的程序,先要生成一个.cubin文件,程序中然后用module去load,并取得cubin的句柄,
程序在运行时候,.cubin文件也是必需的(没有嵌入到exe中)。

我看到nvcc.pdf中,说可以把.cubin文件嵌入exe文件中,用-int -ext -dir等选项
但是具体参数应该怎么设置呢
还有程序中应该怎么做呢
有没有参考程序呢(sample中有几个driver实现的程序都是没有嵌入的,如matrixMulDrv, SimpleTextureDrv)
请高手指教
...全文
544 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qijun83 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 l7331014 的回复:]
下面这篇文章不错.呵呵.
http://cuda.csdn.net/news.aspx?id=cb5d3d46-2737-4c2e-808e-6abd40894dd7

[/Quote]

这篇文章对于理解nvcc是挺不错的
实际上还一个pdf文档,同一篇文章,里面有图(实际上也是nvcc.pdf里的图)
名字叫NVCC_chinese.pdf
大家可以搜索一下
qijun83 2009-08-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 openhero 的回复:]
-cubin 已经生成了这个cubin文件,cubin是一个二进制文件,是可以直接在GPU上执行的,
可以用driver api的方式直接加载
[/Quote]

谢谢各位的回复
通过加载cubin是可以运行driver kernel
其实这种方法的加载, 在SDK sample中就有实例
CUDA 2.2中还出现了通过加载ptx文件来运行的
CUDA 2.3中出现了JIT(just in time),实际上就是把ptx文件中的数据作为一个image写在了.c文件中
然后通过加载这个image来获得kernel的句柄
但是这些方法还是没有嵌入到exe中
  • 打赏
  • 举报
回复
下面这篇文章不错.呵呵.
http://cuda.csdn.net/news.aspx?id=cb5d3d46-2737-4c2e-808e-6abd40894dd7
OpenHero 2009-08-20
  • 打赏
  • 举报
回复
-cubin 已经生成了这个cubin文件,cubin是一个二进制文件,是可以直接在GPU上执行的,
可以用driver api的方式直接加载
  • 打赏
  • 举报
回复
看到xxx.fatbin.c了吧?估计这个array就是fatbin.呵呵.
qijun83 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 l7331014 的回复:]
引用 3 楼 qijun83 的回复:
对了,现在编译器的参数如下,主要是生成cubin用的

"C:\NVIDIA\CUDA\bin\nvcc.exe"  -arch sm_10 -ccbin "C:\Program Files\Microsoft Visual Studio 8\VC\bin"    -Xcompiler "/EHsc /W3 /nologo /Od /Zi  /MT  " -IC:\NVIDIA\CUDA\include -I../../common/inc -maxrregcount=32 --ptxas-options=-v -m32 -cubin -o data\matrixMul_kernel.cubin matrixMul_kernel.cu


搞个简单的sample,加-keep指令,看cpp文件.
里面该有fatcubin的定义和赋值方法.
记得好像参考手册中有个调用module的函数是直接使用fatcubin的.但没给出仔细的说明.

[/Quote]

这些文件我都生成了,就是看不懂才发得帖子
资料手册里面也讲的太笼统了
我主要想知道程序中应该怎么改
参数怎么设置
qijun83 2009-08-07
  • 打赏
  • 举报
回复
对了,现在编译器的参数如下,主要是生成cubin用的

"C:\NVIDIA\CUDA\bin\nvcc.exe" -arch sm_10 -ccbin "C:\Program Files\Microsoft Visual Studio 8\VC\bin" -Xcompiler "/EHsc /W3 /nologo /Od /Zi /MT " -IC:\NVIDIA\CUDA\include -I../../common/inc -maxrregcount=32 --ptxas-options=-v -m32 -cubin -o data\matrixMul_kernel.cubin matrixMul_kernel.cu
qijun83 2009-08-07
  • 打赏
  • 举报
回复
你是说*.fatbin.c文件吗,还是*.cu.cpp文件?
感觉说得有点笼统,可以更详细点吗
比如现在代码中load了.cubin文件,下面代码的红色字体部分
如果想把cubin文件嵌入到exe中,代码中应该怎么变
还有编译器参数应该怎么设

static CUresult
initCUDA(int argc, char **argv, CUfunction *pMatrixMul )
{
CUfunction cuFunction = 0;
char* module_path;

cutilDeviceInitDrv(cuDevice, argc, argv);

CUresult status = cuCtxCreate( &cuContext, 0, cuDevice );
if ( CUDA_SUCCESS != status )
goto Error;

module_path = cutFindFilePath("matrixMul_kernel.cubin", argv[0]);
if (module_path == 0) {
status = CUDA_ERROR_NOT_FOUND;
goto Error;
}

status = cuModuleLoad(&cuModule, module_path);
cutFree(module_path);
if ( CUDA_SUCCESS != status ) {
goto Error;
}

status = cuModuleGetFunction( &cuFunction, cuModule, "matrixMul" );
if ( CUDA_SUCCESS != status )
goto Error;
*pMatrixMul = cuFunction;
return CUDA_SUCCESS;
Error:
cuCtxDetach(cuContext);
return status;
}
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qijun83 的回复:]
对了,现在编译器的参数如下,主要是生成cubin用的

"C:\NVIDIA\CUDA\bin\nvcc.exe"  -arch sm_10 -ccbin "C:\Program Files\Microsoft Visual Studio 8\VC\bin"    -Xcompiler "/EHsc /W3 /nologo /Od /Zi  /MT  " -IC:\NVIDIA\CUDA\include -I../../common/inc -maxrregcount=32 --ptxas-options=-v -m32 -cubin -o data\matrixMul_kernel.cubin matrixMul_kernel.cu
[/Quote]

搞个简单的sample,加-keep指令,看cpp文件.
里面该有fatcubin的定义和赋值方法.
记得好像参考手册中有个调用module的函数是直接使用fatcubin的.但没给出仔细的说明.
  • 打赏
  • 举报
回复
程序中该可以作为一个静态数组保存在exe中吧.实际使用时,使用胖cubin结构.胖cubin结构的定义和使用可以参考nvcc编译出来的cpp程序.LZ不妨试试.

589

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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