[問題] Cholesky algo用平行程式來撰寫問題?

看板C_and_CPP (C/C++)作者 (嘟嘟)時間15年前 (2011/04/07 23:45), 編輯推噓3(306)
留言9則, 5人參與, 最新討論串1/1
我寫了一個平行程式是這樣 先讀入一個文件檔(內含2*2矩陣,此矩陣為正定且對稱) 今天要用四個processors來對這2*2矩陣以平行化的方式來做標題的演算法 我給定四個處理器ID名稱 分別為matrix[0][0] matrix[0][1] matrix[1][0] matrix[1][1] 用到兩個函式send( nProc_id , 目的地處理器ID ,要傳遞的參數 ) receive(nProc_id , 來源處理器ID) 以下是我以2*2的processors(有4個可用),以torus排成 完成2*2矩陣的Cholesky algo 裡面還有一些讀檔關檔跟設定矩陣大小的副程式我沒有打出 主程式是以下 float acc,temp1,temp2; int k; acc=matrix[y][x].element;//把矩陣讀進來 for(k=0;k<2;k++) { if(k-1==y&&k-1==x) { } if(k==y&&k==x) { acc = sqrt(acc); if(y+1<2) { send( nProc_id , node[y+1][x] , acc ); send( nProc_id , node[y][x+1] , acc ); } break; } else if(k==x) { temp1 = receive(nProc_id , node[(y-1)][x]); acc /= temp1; if( y+1 < 2 ) send( nProc_id , node[y+1][x] , temp1 ); if( x+1 < 2 ) send( nProc_id , node[y][x+1] , acc ); break; } else if(k==y) { temp2= receive( nProc_id , node[y][x-1] ); acc /= temp2; if( x+1 < 2 ) send( nProc_id , node[y][x+1] , temp2 ); if( y+1 < 2 ) send( nProc_id , node[y+1][x] , acc ); break; } else { temp1 = receive( nProc_id , node[y-1][x] ); temp2 = receive( nProc_id , node[y][x-1] ); acc = acc - (temp1*temp2); if( y+1 < 2 ) send( nProc_id , node[y+1][x] , temp1 ); if( x+1 < 2 ) send( nProc_id , node[y][x+1] , temp2 ); } } matrix[y][x].element=acc; 今天我有一個問題是 這個是2*2的方式來做2*2矩陣 今天我想要以2*2方式(只用4個處理器)來完成4*4矩陣的計算 亦即當K=1時,matrix[0][0]這個處理器會idle,以此類推 我希望讓其他正在idle的處理器可以繼續做其他運算 可是不知道該怎麼編排 有沒有人寫過類似的程式 可以給我一個大方向嗎? 像是for後面的判斷 我本來有考慮將for迴圈拉長到4 可是我處利器頂多到2因而作罷 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.120.14.236

04/07 23:48, , 1F
用 fork() ? 但要處理共用記憶體區域的問題
04/07 23:48, 1F

04/07 23:52, , 2F
我直接用send跟receive來做處理器之間的傳值運算
04/07 23:52, 2F

04/08 00:04, , 3F
基本上,你說的send()跟receieve()是原作者自己定義的
04/08 00:04, 3F

04/08 00:05, , 4F
另外,它的處理器看似是用thread來管理,send時會
04/08 00:05, 4F

04/08 00:06, , 5F
suspand。這個在send() function call裡面有寫...
04/08 00:06, 5F

04/08 00:06, , 6F
為什麼我會知道,是因為我也是跟你修同一門課的學生
04/08 00:06, 6F

04/08 00:10, , 7F
@_@
04/08 00:10, 7F

04/08 00:25, , 8F
~"~
04/08 00:25, 8F

04/08 07:57, , 9F
XDDD
04/08 07:57, 9F
文章代碼(AID): #1DdTmF0Q (C_and_CPP)
文章代碼(AID): #1DdTmF0Q (C_and_CPP)