图片缩略图

CUDA墨西哥人

version 1.0.0.0 (2.64 KB) by 哈伊姆Avron
在MATLAB中编译CUDA !只要写cuda_mex filename。Cu,它已经准备好了。
5.0
6评级

11下载

更新2009年9月15日

查看许可协议

这个小脚本修改MATLAB中使用的文件,以在MATLAB中编译mex-函数,从而支持CUDA。金宝app

一旦脚本setup_cuda_mex。你可以用函数cuda_mex.m来编译CUDA mex文件。

当前版本只支持带有Visual Studio的Win32。金宝app
需要CUDA工具包和SDK。

引用作为

哈伊姆Avron(2021)。CUDA墨西哥人(//www.tatmou.com/matlabcentral/fileexchange/25314-cuda-mex), MATLAB中央文件交换。检索

评论和评级(27

Lahdan alfahian

我在哪里可以找到这个领域,它不在我的电脑cuda_mex。p ? ?

我在哪里也能找到这个
我有“C: Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\VCExpress.exe”
所以它不在垃圾箱里,我在哪里可以找到它?

Lahdan alfahian

你好,所有人

我做不到。
我修复了我发现的,但一些文件不在我的Malab文件夹不知道我应该做什么

这就是误差

===================================
EDU > > setup_cuda_mex
???未定义函数或变量'setup_cuda_mex'。

注意,只支持Visual Studio编译器。金宝app
创建cudamexopts.bat基于mexopts.bat…
创建cuda_mex。M基于mexm…
创建cuda_mex_helper。M基于mex_helper.m…
添加当前目录到路径…
警告:无法保存路径到文件'C:\Program Files (x86)\MATLAB\R2011a
当地学生\工具箱\ \ pathdef.m”。您可以保存您的路径到不同的
通过使用输入参数调用SAVEPATH来指定
完整路径。为了让MATLAB在以后的会话中使用该路径,请保存路径
“pathdef。m'在MATLAB启动文件夹中。
>在savepath的162
在setup_cuda_mex 118
测试:
编译example.cu……
不能打开perl脚本“C:\程序文件(x86)\MATLAB\R2011a学生\bin\cuda_mex.pl”:没有这样的文件或目录
???错误使用==> cuda_mex在208
无法成功完成。

错误在==> setup_cuda_mex在123
cuda_mex example.cu

不能打开perl脚本“C:\程序文件(x86)\MATLAB\R2011a学生\bin\cuda_mex.pl”:没有这样的文件或目录
???错误使用==> cuda_mex在208
无法成功完成。

不能打开perl脚本“C:\程序文件(x86)\MATLAB\R2011a学生\bin\cuda_mex.pl”:没有这样的文件或目录
???错误使用==> cuda_mex在208
无法成功完成。

EDU > > cuda_mex simple.cu
不能打开perl脚本“C:\程序文件(x86)\MATLAB\R2011a学生\bin\cuda_mex.pl”:没有这样的文件或目录
???错误使用==> cuda_mex在208
无法成功完成。

EDU > >
===============
是因为我用的是学生版吗?为什么他们不直接做大草原呢!!
========
这就是我的理由

MATLAB版本(R2011a)
MATLAB许可证号码:学生

操作系统名称Microsoft Windows 7 Home Premium
版本6.1.7601 Service Pack 1 Build 7601
系统类型基于x64的PC

谢谢

你好,
我有一些问题,当我使用windows7(x64), Matlab R2011a(x64)和Visual c++ 2010 express与WinSDK7.1,但我可以克服它。我不得不对埃迪的建议稍加修改。谢谢海姆和艾迪!!

按照上面所写的修改cuda_mex.pl。
添加
$拱=“win64”;
在命令之前(第184行)
$ENV{'ARCH'}=$ARCH;

另外,您需要注释掉setup_cuda_mex中的整个块。m名为
% %过程mex.pl
为了防止进一步更新mex_cuda.pl

应该像上面所写的那样创建Vcvarsamd64.bat。为了在VS2010Ex和SDK7.1中使用,您必须稍微更改它。

最后,你必须移动cudamexopts.bat到C:\Users\(USER\AppData\Roaming\MathWorks\MATLAB。
有趣的是,Matlab R2011a在上面的文件夹中创建了一个名为R2011a的额外文件夹,并将cudamexopts.bat放到cuda_mex不认识的目录中。因此,这导致错误消息说'选项文件未找到'。你只要把它移到上面的目录,一切都会很顺利。

凯文·布朗

San,当你没有安装Visual Studio的64位部分时,可能会发生这种情况-检查你的Visual Studio安装(控制面板->修改程序),看看是否安装了x64部分(我的默认没有安装,所以我必须更新它)。

圣巴兹

VISUAL STUDIO 2010有人知道吗?
感谢Hakim提供了一个近乎自动的解决方案。我还有些麻烦。我正在运行win64, Cuda 4.0和Visual Studio 2010。
我尝试了最初的解决方案,并执行了埃迪·科托夫斯基的黑客操作,但没有效果。
我得到错误:

在“C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64/../..”中无法找到Visual Studio配置文件“(null)”。

谢谢!
某人

Stanimir Mollov

非常感谢,从第一次使用32位windows7, MATLAB 2008a, VS 2005和CUDA 4.0,在戴尔XPS M1730和GeForce 8800GXT上编译成功:)

罗兰

脚本读取{predir}/ mexops .bat,我在这台计算机上没有这样的文件。

r2010b, x64, Windows 7

顺便说一句,我有许可。

哈伊姆Avron

@bochra

看起来它创建文件失败了。
检查您是否对该目录有写权限。

bochra

你好,

我已经下载了这些文件。我使用Matlab 2010b, Windows 7 64位,VS 2008。

在尝试通过setup_cuda_mex.m编译示例时,我遇到了以下问题:
注意,只支持Visual Studio编译器。金宝app
创建cudamexopts.bat基于mexopts.bat…
基于mex.pl创建cuda_mex.pl…
???使用==> fprintf时出错
无效的文件标识符。使用fopen生成有效的文件标识符。

错误在==> setup_cuda_mex在73
流(fid_cuda_mex、“% s”线);

有人遇到过类似的问题吗?
感谢您提供的任何帮助。

杰森。莱利

你好,
好了,我成功了,太棒了!
一个问题,我有2个CUDA兼容卡,我如何知道它使用哪一个,我如何选择它使用哪一个?
:)
我知道其他cuda接口给你选择,虽然我发现他们不太“有用”的其他原因。

谢谢,
杰森

培特

通过上述cuda_mex.pl中的hack,我让它在64位的Windows上工作。作者应该更新脚本来自动完成这一操作。

画了

埃迪,

我把它修好了!我还编译并运行了Matlab/CUDA教程中的其他一些示例。

非常感谢你!

画了

埃迪的原因

@Drew,
要获得64位的工作,您需要打开cuda_mex.pl文件,在第203行左右,将$ARCH硬编码为“win64”,使其看起来像这样。

$拱=“win64”;

同时确保你有vcvarsamd64.bat,并确保这个信息在它和这个位置(C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\)

@SET VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 9.0
@SET VCINSTALLDIR=C:\程序文件(x86)\Microsoft Visual Studio 9.0\VC
@SET WIN64SDKDIR=C: Program Files\Microsoft SDKs\Windows\v6.1

@SET FrameworkDir = C: \ WINDOWS \微软。净\ Framework64
@SET FrameworkVersion = v3.5
@if "%VSINSTALLDIR%"=="" goto error_no_VSINSTALLDIR .
@if "%VCINSTALLDIR%"=="" goto error_no_VCINSTALLDIR .

@echo设置使用Microsoft Visual Studio 2008 x64工具的环境。

@set路径= % VCINSTALLDIR % \ BIN \ amd64; % FrameworkDir % \ % FrameworkVersion %, % VCINSTALLDIR % \ VCPackages; % VSINSTALLDIR % \ Common7 \ IDE; % VSINSTALLDIR % \ Common7 \工具;% WIN64SDKDIR % \ BIN \ x64; % WIN64SDKDIR % \ BIN \ x64 \ vsstools; c: \ CUDA \ BIN, % %
@set包括= % VCINSTALLDIR % \包括;% WIN64SDKDIR % \包括:% %
@set自由= % VCINSTALLDIR % \ LIB \ amd64; % WIN64SDKDIR % \ LIB \ x64; %自由%

@set LIBPATH = % FrameworkDir % \ % Framework35Version %; % VCINSTALLDIR % \ ATLMFC \ LIB \ amd64; % VCINSTALLDIR % \ LIB \ amd64; % LIBPATH %

画了

你好,

我已经下载了这些文件。我是用Matlab 2009b, Windows 7 64位,和vs2008 Express加法的。

在尝试通过setup_cuda_mex.m编译示例时,我遇到了以下问题

WARNING: $ARCH (UNKNOWN)未正确设置[win64]

C: \ PROGRA ~ 1 \ MATLAB \ R2009B \ BIN \ CUDA_MEX.PL:
错误:使用选项文件:
C:\Users\dcreal\AppData\Roaming\MathWorks\MATLAB\R2009b\cudamexopts.bat
您不能将此文件与UNKNOWN体系结构一起使用,因为它启用了
不同架构的编译器。
运行mex -setup可以解决这个问题。

有人遇到过类似的问题吗?感谢您提供的任何帮助。

舒恒

r·斯科特

哈伊姆,

不错的文件,但我有个问题。目前我使用xpx64位,我无法让它运行。我知道x32只支持从你的笔记。金宝app但是我怎样才能让它在x64中运行呢?任何的想法。

哦,顺便说一下,你可能已经知道这一点,但如果你有一个CUDA启用的Vid卡(非特斯拉),你也使用它作为你的显示器。对于任何代码,GPU的最大允许使用时间为2秒。如果你想要更多(非特斯拉),它不能用作显示器支持的显卡。金宝app只是供你参考而已

莎拉

好吧,希望我不会在这个论坛逗留过久,但我已经找到了更多关于我的cutCreateTimer问题的答案,我想把它们放在那里,以防有人陷入这个问题。
似乎cuda_mex编译无法找到我的cutil库。这并不一定是它的错,我不知道如何创建文件,链接等,所以很有可能我搞砸了什么地方。可能有一种简短、简单、正确的方法来解决这个问题,但由于我不知道它,以下是我的工作。如果你找到你的方式进入CUDA SDK文件夹,你会发现一个Visual Studio解决方案编译所有cutil。如果你改变这些库的输出到cuda标准库(可能是沿着cuda /bin线),然后重建解决方案,cutil32库将会被编译器/连接器找到。如果我找到更好的解决方案,我会继续发帖。

安东尼

要将这段代码移植到64位平台需要做什么?

莎拉

cutCreateTimer仍然有问题。下面是一个例子。我已经修改了示例。Cu,用于创建这个计时器。此外,cutil32。自由和cutil32D。Lib在setup_cuda_mex中链接。m文件。如果有人有解决方案,我会非常高兴地听到。

# include < stdio . h >
# include < cuda.h >
# include < cutil.h >

# include“mex.h”

__global__ void square_array(float *a, int N)

int idx = blockIdx。x * blockDim。x + threadIdx.x;
if (idx

void mexFunction(int nargout, mxArray *argout[], int nargin, const mxArray *argout[])

浮*输入,* cuda_mem;
int N;
size_t大小;
unsigned int hTimer;

cutCreateTimer (&hTimer);

argout [0] = mxDuplicateArray (argin [0]);
input = (float *)mxGetPr(argout[0]);
N = mxGetN(argout[0]) * mxGetM(argout[0]);
size = N * sizeof(float);
cudaMalloc((void **) &cuda_mem, size);
cudaMemcpy(cuda_mem, input, size, cudaMemcpyHostToDevice);
Int block_size = 4;
int N/block_size + (N%block_size == 0 ?0:1);
square_array << n_blocks, block_size >>> (cuda_mem, N);
cudaMemcpy(input, cuda_mem, size, cudaMemcpyDeviceToHost);
cudaFree (cuda_mem);

莎拉

我在用Windows XP…有没有人有问题与cutCreateTimer不工作?当它被CUT_SAFE_CALL调用或直接调用时,程序就会崩溃。

莎拉

如果将cutil32.lib添加到

如果(strcmp(名称、LINKFLAGS))
Value = [Value ' cudart.]自由cutil32.lib ');
结束

在setup_cuda_mex。M时,连接器将正确地访问基于cutil的函数。我花了很多时间试图弄清楚为什么我会得到错误的链接涉及各种cuda基于函数,即使编译器知道头文件的地址…

哈伊姆Avron

嗨Mklcst,

你有写MATLAB目录的权限吗?

mklcst mklcst

嗨,Haim Avron,当我运行我得到这个错误:

>注意,只支持Visual Studio编译器。金宝app
>基于mexopts.bat创建cudamexopts.bat…
>基于mex.pl创建cuda_mex.pl…
> ? ?使用==> fprintf时出错
>无效文件标识符。使用fopen生成有效的文件标识符。
>
>错误在==> setup_cuda_mex在73
> fprintf(fid_cuda_mex, '%s', line);

奥利弗·伍德福德

谢谢你,哈伊姆。我已经找到解决办法了。我使用nvcc转换。Cu文件转换为.cpp文件,然后像往常一样调用mex。这避免了复制/更改任何MATLAB脚本。

哈伊姆Avron

要在Linux上执行同样的操作,运行脚本的人应该具有根特权。我目前没有MATLAB在Linux上,我有根特权…

奥利弗·伍德福德

听起来不错,但目前对我没有用处——我迫切需要一个linux系统的等效函数。

莎拉

工作! !非常感谢!上周我用Matlab 2008a, Visual Studio 2008和CUDA进行了讨论,试图让它们互相交流。

MATLAB版本兼容性
创建R2007a
与任何版本兼容
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

cuda_mex /