現在MPIを勉強するプログラムを書いています。正方行列を乗算するプログラムを書きます。
long **multiplyMatrices(long **matrix1, long **matrix2, long capacity)
{
long **resultMatrix = new long*[capacity];
for (long i = 0; i < capacity; ++i) {
resultMatrix[i] = new long[capacity];
}
for (long i = 0, j, k; i < capacity; ++i) {
for (j = 0; j < capacity; ++j) {
resultMatrix[i][j] = 0;
for (k = 0; k < capacity; ++k) {
resultMatrix[i][j] = resultMatrix[i][j] + matrix1[i][k] * matrix2[k][j];
}
}
}
return resultMatrix;
}
どこでcapacity == 1000
。
ローカルホスト (Mac Mini 2012、Core i7、OS X 10.8.2) で、LLVM を使用して XCode でこのコードをコンパイルします。計算には 17 秒かかります。はい、1 つのスレッドで。
リモートホスト(Sun OS 5.11、デュアルコアCPU、8 vCPU)でコンパイルします
g++ -I/usr/openmpi/ompi-1.5/include -I/usr/openmpi/ompi-1.5/include/openmpi -O2 main.cpp -R/opt/mx/lib -R/usr/openmpi/ompi-1.5/lib -L/usr/openmpi/ompi-1.5/lib -lmpi -lopen-rte -lopen-pal -lnsl -lrt -lm -ldl -lsocket -o main
あるいは単に
g++ -O2 main.cpp -o main
しかし...mpirun main
これを計算するには152秒かかります...何が問題なのですか? 何か不足していますか?それはサーバーのCPUのアーキテクチャに関するものですか?