作者Leon (Achilles)
站内MATLAB
标题Re: [讨论] 如何更有效率?
时间Sun Sep 8 07:49:57 2013
※ 引述《celestialgod (攸蓝)》之铭言:
这讨论串很有意思, 值得回一下.
: : 法二:用mex来改写
: : 难度高,debug麻烦,不太建议
: 我尝试去写了mex跟cuda (最近刚学matlab 拿来当练习)
: *******mat_exd.cpp*******
: #include "mex.h"
: void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
: {
: int colNum = (int) mxGetN(prhs[0]);
: double *X, *Y;
: X=mxGetPr(prhs[0]);
: plhs[0] = mxCreateDoubleMatrix(colNum, colNum, mxREAL);
: Y = mxGetPr(plhs[0]);
: for (int i=0; i<colNum; i++)
: {
: for (int j=0; j<colNum; j++)
: {
: if(i>=j)
: Y[j*colNum+i]=X[i-j];
: }
: }
: }
嗯.. 你会用 memcopy 吗?
其实里面那个回圈可以改成 memcpy(), 只是 size 要注意一下.
: **********Result**********
: original part: 0.216 secs
: mex part: 0.610 secs
: CUDA part: 0.284 secs
: 我没有看到m大说的mex比较快QQ....
: 请问我是哪里写得不好吗....
Matlab 是架构在 C/C++ 上面的, 你 mex 比 matlab 慢的话
铁定是哪里写得不够好....
另外, 你用甚麽机器? N size 多少?
我很讶异这题目 Cuda 竟然跑得和 Matlab 差不多快,
因为 Cuda 在 memory move 上面是很慢的..
你机器 memory 够的话, 要不要试试看 N = 20,000 或是 40,000 的 case ?
我很想知道这个结果.
--
一箫一剑平生意
负尽狂名十五年
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 206.117.88.18