所以我試圖找出發送和接收C代碼使用MPI處理器之間的信息的通信開銷。MPI_SEND和MPI_RECV開銷
我需要在發送和接收中都傳遞一個緩衝區,但是我想要做的只是在兩個處理器之間進行通信需要多長時間。
這裏是我的全部代碼:
main(int argc, char** argv){
int n;
int rank;
int time;
int i;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == 0){
n = atoi(argv[1]);
printf("Size of data set = %d\n", n);
}
MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
for(i = 0; i < n; i++){
if(rank == 0){
MPI_Send(&n, 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
else{
MPI_Recv(&n, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);
}
}
MPI_Barrier(MPI_COMM_WORLD);
time = clock();
printf("Time: %d\n", time);
MPI_Finalize();
}
我做了一些測試,我發現,它的作品時,我拿出了我循環想要的方式。那麼導致無限循環或seg故障的for循環有什麼問題?
我很驚訝,即使沒有循環的作品。你的發送和接收電話使用不同的標籤,所以接收不應該返回。你有多少個進程在運行?另外,如果你打算使用MPI,你也應該使用它的定時器調用:MPI_Wtime() – Novelocrat 2010-03-07 00:07:15
我所要做的就是從節點0發送到節點1,並在節點1接收。它是一個簡單的聚會處理器之間的通信開銷。 – user287979 2010-03-07 00:22:44
下面有幾個正確的答案;我只想補充一點,如果你正在尋找這些時機,一套非常方便的工具是英特爾MPI基準,http://software.intel.com/zh-cn/articles/intel- mpi-benchmarks /其中包括MPI「乒乓球」計時。 – 2012-02-14 21:30:58