Re: [討論] 如何更有效率?
※ 引述《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
討論串 (同標題文章)