Re: [問題] 關於MATLAB 2008b 用四核心跑程式的問題已回收

看板MATLAB作者 (笑得很勉強)時間16年前 (2009/04/30 23:55), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串5/5 (看更多)
我也有在寫平行處理的程式 根據我的經驗以及一些書籍 其實要把task分割給不同的thread也是需要一點時間的 我目前手邊沒MATLAB可以測試 或許可以將迴圈的長度改大再試試看? ※ 引述《Gwaewluin (神無月 孝臣)》之銘言: : ※ 引述《joeytseng (:))》之銘言: : : 要有平行處理的部份 : : 隨便寫一個簡單的範例: : : matlabpool open local 4 % 取得資源 : : parfor (ii= 1:100000) % parallel-for-loop : : ii; : : end : : matlabpool close : 精華區裡面有講到多執行緒的效能變化 : 並不只是對parfor有作用 : 以前學第稍微測試過多直行緒對於的cpu使用率 : 發現並不是全部指令都會用到多直行緒去跑的 : 至於後來看到了parfor : 當年我也是感到挺有興趣 : 電腦換了E8400後 : help看一看,然後拿裡面的範例來跑跑 : 首先一開始就是在平行運算項目裡面getting started裡的內容 : 裡面舉了兩個例子 : 一個是一般迴圈的寫法 : clear A; : for i=1:1024 : A(i) = sin(i*2*pi/1024); : end : plot(A); : 一個是使用parfor的跑法 : matlabpool open; : clear A; : parfor i=1:1024 : A(i) = sin(i*2*pi/1024); : end : plot(A); : matlabpool close; : 看到這兩個,我就做點小修改,加上計時和拿掉plot : 來看看使用parfor到底可以讓效能提升多少,把程式碼改成這樣 : clear A; : tic : for i=1:1024 : A(i) = sin(i*2*pi/1024); : end : toc : matlabpool open; : clear A; : tic : parfor i=1:1024 : A(i) = sin(i*2*pi/1024); : end : toc : matlabpool close; : 而跑出來結果如下 : Elapsed time is 0.001109 seconds. : Starting matlabpool using the parallel configuration 'local'. : Waiting for parallel job to start... : Connected to a matlabpool session with 4 labs. : Elapsed time is 0.316509 seconds. : Sending a stop signal to all the labs... : Waiting for parallel job to finish... : Performing parallel job cleanup... : Done. : 而且是跑了好幾次的結果都0.001x秒和0.3x秒 : 才剛試用parfor就看到這樣的結果 : 之後我就再也沒有任何想要去碰平行運算相關內容的念頭了 : 不是說我不喜歡平行運算 : 只是一開始在起頭時就給我一個看起來好像沒有任何改善的結果(還變差了) : 這實在很難讓我再有動力去研究平行運算的其他內容......-___- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.129.171

05/01 02:04, , 1F
變慢是不是因為沒有先宣告變數..這樣跑起來記憶體會吃更多
05/01 02:04, 1F

05/01 08:11, , 2F
兩個都沒先宣告變數,應該是一樣慢而不是一快一慢吧
05/01 08:11, 2F

05/12 18:12, , 3F
我也覺得是分給thread的時間占掉了,我用Q6600跑一個迴圈
05/12 18:12, 3F

05/12 18:13, , 4F
原來是332.744123 seconds, 用parfor變成85.577412 second
05/12 18:13, 4F
文章代碼(AID): #19-SdyDB (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #19-SdyDB (MATLAB)