您如果使用命令行,可以直接在nvcc后面加上-O2参数。
如果您使用的是Microsoft Visual Studio(R),您需要改成Release Build, 即可启用优化。
感谢来访。
您如果使用命令行,可以直接在nvcc后面加上-O2参数。
如果您使用的是Microsoft Visual Studio(R),您需要改成Release Build, 即可启用优化。
感谢来访。
谢谢版主,用了Release版本性能提高非常的大。
CUDA5.5里cudasdk 中的driver API 写的矩阵乘法,我用release编译运行时,会出现“无法找到matrixMulDriv.exe,或者调试信息不匹配,未使用调试信息使用二进制文件”,请问版主这个应该怎么解决?
我查看了这个pdf,英文介绍: local_load_transactions :Number of local memory load transactions
我自己翻译:局部存储器参加负载事物的数量。
1.这里的数量指的是什么?是不是类似于寄存器文件(每个大小32bit)数量?如果是,那么一个局部存储器文件多大?
2.如果不是,请版主能给我介绍介绍
关于您的最近2个问题,
(1)如果我没记错的话,一次local memory transaction是连续的128B字节。如果您的local memory访问无法合并,将会导致多次传输。
(2)为何调试启动release版本的exe的时候,调试器会抱怨无调试信息。这个正常的。因为它们本来就没有。(如果需要调试,请切换成debug配置)。
感谢来访。
1.横扫千军版主说release能进行优化,我按照横扫千军版主的做法做了,对我用runtime API写的程序性能提升很大,所以我就想用release build 来测SDK中driver api 写的矩阵乘法,这是我的初衷。
2.我自己的runtime API改为Rlease Build 时,只要把项目属性添加一些必要的路径和.lib文件,就能build了,而driver API 却不行,这是为什么,是不是driver api 的工作机制导致(加载ptx和cubin)。如果我想用release build,应该怎么做?
如果是build, 而不是调试,提示找不到exe,
则是您构建exe失败。
例如您缺乏必要库,如果您使用Drvier api, 您需要连接到Cuda.lib, 而非Cudart.lib
请修改您的项目配置。
ICE版主您好:
我今天突然想到个问题,内核函数的形参(这里的形参指向一个数组)所占用的存储应该是局部存储器吧(是吗?)如果按照这样的逻辑,在调用内核函数时,全局存储器数组的地址写入形参(局部存储器),那么即使内核函数中声明的所有变量都利用了寄存器,但是local memory相关项(local memory store throughput)也不会为0,但是我测得的一些程序确实存在local memory store/load throughput为0的情况,我很不解,请您为我解惑。
新问题建议您新开主题。
这个不是的。
(1)1.x上将使用shared memory进行参数传递。
(2)2.0+上将使用constant memory进行参数传递。
(3)任何时候,当您的一个线程修改了某个参数的值,则一个本地副本被创建(寄存器或者local memory中)。
感谢来访。
链接器 输入 的附加依赖项本来就是cuda.lib还是不能运行,而且我查看了一下debug里也没有.exe,但是能运行。
您到底是build失败或者无法调试?
如果是前者,我指出release configuration下无调试信息正常,结果您指出您无法build
如果是后者,我指出你应当使用cuda.lib来build, 结果您说无法调试。
您在耍我玩么?
能运行就是构建成功,
不能调试,前文以及说了,无调试信息,正常。
请您清理下思路。各个方面都跟您说了,不要说了后面您忘记前面,又重复问。
(这样会死循环的,说后面您忘记了前面重复问,再次回答前面您又忘记了后面。。。)
以及在玫瑰斑竹纠正了LZ关于kernel参数存放位置的问题之后,我稍微补充一下:
如果把global memory的数组地址作为参数传递给kernel,那么kernel中以此访问的依然是global memory中的数组,传递进来的仅仅是一个指针而已。
global memory中的数组依然是只有一份的,各个线程并没有私有的副本。
以及这样访问global memory和local memory基本上无关系。
大致补充如上,供LZ参考。
:)
谢谢玫瑰版主,好的,下次我开新的主题,不好意思:D。
非常感谢。
不客气的,欢迎您常来论坛~
我现在思路也比较凌乱,求版主息怒。。。
我整理了一下思路如下:
1.编译是成功的。
2.调试时,跳出一个名为”无调试信息“的窗口显示”无法找到“matrixMulDriv.exe"的调试信息,或者调试信息不匹配,未使用调试信息生成的二进制文件”。
我整理一下我黑色的头发,
楼主已经告诉您release配置下无调试信息,无法调试了。这是第三次告诉您。
(如果您看不懂中文,您可以要求我使用猫语回复)
我明白了,release配置无调试信息:3_45:(喵~)。我再问一个可能很2的问题,那我怎么查看我的结果呢?因为driver api写的程序没有生成.exe文件,我想查看release配置下的运行时间(代码里面有记录运行时间的功能)。(ps:我对基于cuda的driver api 写的程序很少了解,有什么书专门介绍如何编写driver api的cuda程序)
。。。。。。。
您刚才明明说成功编译出exe了,只是无法调试。
您又循环了。此贴我将不再回复。