CUDA兼容性如何

在官方网站看到很多种安装包,如win7、 win8台式机32位,64位,win7、win8笔记本32位,64位。假如在32位的台式机上编写代码通过,那么此代码不作修改,可以在笔记本环境上运行吗?32位和64位需要分别进行编译吗?对于各种不同类型的显卡,它们需要分别作修改吗?

楼主您好,

(1)如果不需要访问大内存,用32位可以直接运行在64位平台上的,同时32位下您的kernel会跑的更快(因为更低的寄存器占用)。

(2)一般来说,如果您编译时刻指定了compute_xx, 例如,您编译时刻指定了compute_20, 您可以在2.0, 2.1,3.0,3.5的卡上执行;再举个例子,如果您指定的是compute_10, 那么您将在所有的卡上都能执行。

(3)但这样做可能会无法全部发挥卡的能力,但却提高了兼容性。如果需要完全发挥,例如3.5的能力,您应当指定compute_35,sm_35, 但此时将无法在更低的卡上执行。

以上是告诉您,如果使用了较低的计算能力来编译,虽然不能使用一些高版本的特性,但基本可以在所有的卡上执行(请注意我假设您了在所有的机器上都安装了最新的显卡驱动了,如果没有安装显卡驱动,则无法保证任何)

以及,需要注意的是,某些笔记本需要进行optimus设置,以及,甚至有硬件开关来开启/关闭独立显卡,此时需要注意您是否能找到显卡。这个是另外一个话题了,您如果遇到后再跟帖吧。

太谢谢你了,你的回答使我明白了很多。

感谢您的来访,服务您是我的荣幸。

版主,太谢谢你了,你的回答使我明白了很多。
根据你所说的,在我机子上编译成功的执行文件,拿到其它机子上运行,只要保证那台机子上已经装了最新的NVIDIA显卡驱动就可以了吗?那台机子不用装CUDA Toolkit, SDK 等其它东西了吧?
还有一个就是,应用CUDA必须要是NVIDIA的显卡才可以吗?

建议您重新阅读我的前文。

以及,当您正确的配置了compute_*,sm_后,您的exe还需要:
(1)附带上cudart
.dll(默认就在您的exe文件夹里,别删除就行)。
(2)在目标机器安装VC 2005 Redistributable (如果您用VS2005编译的,且目标机器没有安装VS2005的话)
(3)在目标机器安装VC 2008 Redistributable (如果您用VS2008编译的,且目标机器没有安装VS2008的话)
(4)在目标机器安装VC 2010 Redistributable (如果您用VS2010编译的,且目标机器没有安装VS2010的话)

后三个其实不是CUDA的问题,而是VC的问题,任何VC编译出来的东西都这样。

CUDA目前暂时只能用在N卡上。

明白了,太谢谢你了!

在VNIDIA上有没有单独基于OpenCL的SDK什么的,我装上CUDA5.0后OpenCL也就装上了,是这样吗?CUDA和OpenCL是怎么样的关系呢?我可不可以光装OpenCL而不装CUDA呢?按目前来看,OpenCL和CUDA哪个应用更广泛些呢?我在网上看到,很多大公司如AMD、intel都有它们自己的OpenCL sdk,它们之间的差距大吗?谢谢!

楼主您好:

新问题请新开主题。
OpenCL如果要开发,请安装CUDA SDK。
OpenCL如果只需要运行,您安装显卡驱动就可以了。

您无法删除驱动的CUDA功能而只保留opencl的,以及这样做也无意义。
目前CUDA应用要广泛的多。

好的,谢谢你耐心答复!