MATLAB 板


LINE

※ 引述《mp19990920 (郝渴連)》之銘言: : 法一:去除你原本code中多餘的運算 : (1)numel多餘 : (2)i=i+1多餘(但影響極小) : (3)沒必要重設整個column : X = [1:n]'; : Y = eye(n); : for i = 2:n : Y(i:n, i) = i:n; : end : p.s. 在我的電腦中n=1000跑1000次平均時間 : 原本: 0.06610 sec : 加速: 0.02339 sec : 你的電腦可真快呢!!! : 法二:用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]; } } } *******mat_exd.cu******** __global__ void kernel ( const double *vec, const int *N, double *mat ) { int tid = threadIdx.x + blockIdx.x * blockDim.x; while (tid % *N < *N & tid / *N < *N){ if (tid % *N - tid / *N>=0) mat[tid]=vec[tid % *N - tid / *N]; tid += blockDim.x * gridDim.x; } } ******main.m************ %% original N = 10000; X = 1:N; Y = eye(N); for i = 1:N Y(i:N, i) = X(1:(N-i+1)); end %% mex part % compile mat_exd.cpp by mex mat_exd.cpp Y2=mat_exd(X); %% CUDA part reset(gpuDevice()); N = 10000; X = 1:N; kern = parallel.gpu.CUDAKernel('mat_exd_2.ptx', 'mat_exd_2.cu'); tic kern.ThreadBlockSize = 1024; kern.GridSize = ceil(N/1024); o = feval(kern, X, N, zeros(N)); Y3 = gather(o); toc **********Result********** original part: 0.216 secs mex part: 0.610 secs CUDA part: 0.284 secs 我沒有看到m大說的mex比較快QQ.... 請問我是哪裏寫得不好嗎.... PS 1: 後來測試一下不同的N下,mex的速度有差,N<1500時,mex的速度都快很多 N超過1500以後,就越來越慢了...我覺得應該是兩層迴圈的關係,可是那裏我不會改... PS 2: CUDA有記憶體限制。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.164.166.108
1F:推 sunev:i 迴圈擺內側可能會好一點。 09/08 07:04
2F:推 sunev:而且 j<colNum可以改成 j<=i ,這樣連if也可以省掉 09/08 07:07
改完之後快0.03秒... ※ 編輯: celestialgod 來自: 218.164.166.108 (09/08 07:31)
3F:→ mp19990920:我說的是純mex非加上cuda(我的筆電不能玩cuda) 09/10 21:47







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP