2017-04-17 10 views
0

これは、tm配列の単一列のデータ全体をFortranで1つずつ渡す方法です。2次元配列の単一の列の要素全体をC++の関数に渡す方法は?

MPI_ALLREDUCE(tm(:,1),ptm(:,1),nbins,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr) 
MPI_ALLREDUCE(tm(:,0),ptm(:,0),nbins,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr) 
MPI_ALLREDUCE(tm(:,-1),ptm(:,-1),nbins,MPI_DOUBLE_PRECISION,MPI_SUM,MPI_COMM_WORLD,ierr) 

これは、私が2次元配列の1列の要素全体をC++で渡そうとしているところです。私は特定の列の要素全体を渡すことができません。 C++ 2Dアレイで

MPI_Allreduce(&MVCLUST->TM->tpm, &MVCLUST->TM->pml, MPI_DOUBLE,MPI::SUM,MPI_COMM_WORLD) 
+0

この質問もタグ付けされるべきですFortranと関連するMPIタグを使用します。 –

答えて

0

行が賢明保存されているので、あなたが列の行ではなく、へのポインタを得ることができるので、連続したメモリ位置が行ではなく列が含まれていることを意味しているもののうちの列を取得する直接的な方法はありません。

あなたが続くことができるアプローチは、最初の簡単な1次元アレイ状に2次元配列の列を取得し、説明のためthat.Sampleコードは以下のとおりである渡すことである。

void printcolumn(int* arr,int len) 
{ 
    for(int i=0;i<len;i++) 
    { 
     std::cout<<arr[i]<<std::endl; 
    } 
} 
int main() 
{ 
    int arr[2][2] = {{2,1},{2,2}}; 
    //2 1 
    //2 2 
    int col1array[2]; 
    int cnt =0; 
    for(int i=0;i<2;i++) 
    { 
     col1array[cnt]=arr[i][0]; 
     cnt++; 
    } 
    printcolumn(col1array,2); 
    return 0; 
} 
関連する問題