图像缩略图

CUDA和MATLAB示例(适用于Windows)

版本1.0.0.0(1.01KB)由 保罗
创建一个MEX文件的简单示例,该文件调用CUDA来添加两个长度为5的向量
5
1级

5下载

更新2008年12月13日

无执照

这是一个“Hello World”风格的示例,展示了从MATLAB直接使用CUDA(Nvidia在gpu工具包上的超级计算)的简单方法。网上很少有关于如何做这类事情的信息(除了专有的和/或复杂的例子),所以这个例子是以简单为目标编写的。

要运行:首先使用“my_compile test.cpp”编译它,然后在您选择的两个长度为5的向量上运行新的MEX文件,如“test([1 2 3 4 5],[10 20 30 40 50])”

要求:
1)这个例子是为英伟达GTX 260或280编写的,它们是唯一支持双精度算术的GPU。这反映如下:在my_compile.m中,nvcc使用“-arch compute_1金宝app3”开关运行,该开关为GTX 260及以上版本生成代码。如果要在旧硬件上运行此示例,请删除此开关,将test.cu中的所有double替换为single,然后重写test.cpp以将single数组传递给gpuAdd,而不是double。

2) 此示例是为VisualStudio2008(9.0)编写的。如果您有Visual Studio 2005(8.0),您应该能够通过将my_compile正文中的第6个字符从“9”更改为“8”来运行该示例。

3) 这个例子是用WindowsXP64编写的。它可能适用于其他版本的Windows,但可能需要更改my_compile.m以从环境变量获取正确的路径。

4) 这个例子是在CUDA 2.1(测试版)上编写的

文件夹:
1) test.cpp是一个非常标准的MEX文件,它希望与函数gpuAdd链接,该函数将三个指针指向长度为5的双数组,并将前两个数组的总和存储在第三个数组中。(这由“extern”C“gpuAdd…”表示)。

2) test.cu是一个非常简单的CUDA文件。gpuADD在gpu内存中创建三个长度为5的数组,用cpu内存中的双倍数填充前两个数组,生成5个线程来计算5个和,将结果复制回cpu内存,并进行清理。

3) my_compile.m有一些愚蠢之处,主要是因为nvcc有一些粗枝大叶。第一行是运行VisualStudio批处理文件的操作系统命令,该批处理文件设置临时环境变量,指定包含和库目录;“&”字符将此命令与nvcc COMPLE命令分开(必须在与批处理文件相同的命令中运行,否则临时变量将消失)。“-c”开关表示编译,但不是link test.cu。下一行尝试获取CUDA库的路径。如果有引号,它会去掉引号(旁注:在XP64上,CUDA在定义环境变量时忽略了加引号,但除非添加引号,否则不会编译;我们再次为MATLAB去掉引号。)最后一行使用mex编译mex文件,并将其与test.obj链接,正如nvcc在第一行中生成的那样。

怪癖:是的,当在正确配置的64位系统上运行时,这将生成有效的64位代码。我们运行的32位批处理文件只是nvcc出于自身原因坚持使用的文件。

警告:在gpu上运行的代码没有40多年的CPU编码经验为我们提供的任何保护。如果您的系统在使用gpu代码时崩溃,请不要感到惊讶。

引用为

保罗(2021年)。CUDA和MATLAB示例(适用于Windows)(//www.tatmou.com/matlabcentral/fileexchange/22436-example-of-cuda-and-matlab-and-nothing-else-for-windows),MATLAB中央文件交换。恢复.

评论和评级(3.)

莱拉

我在命令窗口中键入:

my_compile test.cpp
测试([1 2 3 4 5],[10 20 30 40 50])

结果是:
设置使用Microsoft Visual Studio 2008 x86工具的环境。
test.cu
tmpxft_00001f5c_00000000-3_test.cudafe1.gpu
tmpxft_00001f5c_00000000-8_test.cudafe2.gpu
test.cu
tmpxft_00001f5c_00000000-3_test.cudafe1.cpp
tmpxft_00001f5c_00000000-13_测试ii

ans=
0 0 0 0 0

为什么答案是零?

谢谢你的例子。
但有一个问题,我尝试在test.cu中使用printf,可以编译和运行,但没有显示输出。如果printf在testc中,则一切正常。有什么提示吗?

MATLAB版本兼容性
使用R2008b创建
与任何版本兼容
平台兼容性
窗户 马科斯 Linux
标签添加标签

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始打猎吧!