Tôi đã viết một mẫu mã bên dưới:Xác định các biến toàn cục trong mpi
#include <stdio.h>
#include <mpi.h>
double x;
int main (int argc, char **argv) {
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (rank==0) x=10.1;
MPI_Barrier(MPI_COMM_WORLD);
printf("%f\n", x);
MPI_Finalize();
return 0;
}
Như người ta có thể nhận thấy, chương trình này thực sự xác định một biến toàn cầu gọi là x và các chủ đề 0 cố gắng gán một số giá trị cho nó. Khi tôi có chương trình này chạy trên một (Symmetric multiprocessing) Máy SMP với 4 lõi tôi nhận được kết quả như sau:
10.1
0
0
0
Nhiều thú vị, khi tôi thay đổi mã của tôi để mỗi chủ đề in địa chỉ của biến x, tức là & x, tất cả đều in cùng một thứ.
Câu hỏi của tôi là làm thế nào có thể một số chuỗi trên hệ thống SMP có cùng giá trị cho địa chỉ của biến trong khi chúng không chia sẻ cùng một giá trị?
và câu hỏi thứ hai của tôi là cách tôi nên thay đổi mã ở trên để tôi nhận được các kết quả sau đây?
10.1
10.1
10.1
10.1
Biến có thể có cùng địa chỉ và giá trị khác vì nó không thực sự là chủ đề mà là các quy trình? –
@Joachim: Làm thế nào tôi có thể tìm hiểu xem chúng là các quá trình hoặc chủ đề? – Mehrdad
Với việc triển khai MPI hiện tại, mỗi cấp bậc là một quá trình riêng biệt. –