[問題] Cholesky algo用平行程式來撰寫問題?
我寫了一個平行程式是這樣
先讀入一個文件檔(內含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
04/07 23:48, 1F
→
04/07 23:52, , 2F
04/07 23:52, 2F
推
04/08 00:04, , 3F
04/08 00:04, 3F
→
04/08 00:05, , 4F
04/08 00:05, 4F
→
04/08 00:06, , 5F
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
04/08 07:57, 9F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章