Re: [討論] 如何更有效率?

看板MATLAB作者 (Achilles)時間11年前 (2013/09/08 07:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
※ 引述《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
文章代碼(AID): #1IAxkeeW (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1IAxkeeW (MATLAB)