2013-04-09 26 views
5

Tôi quan tâm đến việc có lệnh hay kỹ thuật trong OpenMPI để có cuộc gọi nguyên tử để ghi vào stdout (hoặc, cho bất kỳ luồng nào).Cuộc gọi "nguyên tử" để kêu gọi trong MPI

Điều tôi nhận thấy là trong khi thực hiện các chương trình MPI, các cuộc gọi để ghi vào cout (hoặc các luồng khác) có thể trở nên khó hiểu, vì mỗi proc có thể viết bất cứ khi nào nó đến một đoạn mã nhất định. Khi báo cáo kết quả, một số dòng có thể được viết bởi một số procs, gây nhầm lẫn vấn đề. Vì vậy, 2 procs khác nhau có thể làm điều gì đó như thế này:

//Proc 10 - results calculated somewhere above 
// result1 = 10 
// result2 = 11 
cout << "My results are: " << result1 << " " << resul2 << endl; 

và:

//Proc 20 - results calculated somewhere above 
// result1 = 20 
// result2 = 21 
cout << "My results are: " << result1 << " " << resul2 << endl; 

Nhưng kết quả có thể là:

My results are: 20 My results are: 10 11 21 

Những gì tôi đang tìm kiếm một cái gì đó giống như một là " chặn "hoặc cout nguyên tử (cũng như có thể ghi vào các luồng khác, chẳng hạn như luồng tệp). Vì vậy, một khi tôi bắt đầu viết một cout, nó khối cho đến khi kết thúc tuyên bố, hoặc cho đến khi endl hoặc một tuôn ra dòng được phát hành. Nếu trường hợp này xảy ra, tôi chắc chắn rằng 2 dòng sẽ tách biệt (nhưng, tất nhiên, tôi vẫn không biết dòng nào sẽ đến trước):

My results are: 20 21 
My results are: 10 11 
+0

Hai quy trình hoặc HAI chủ đề khác nhau? –

+0

Tôi đã hỏi về 2 quy trình khác nhau. –

+0

Chạy trên cùng một máy hoặc các máy khác nhau? –

Trả lời

3

Làm việc với tiêu chuẩn i/o các luồng (stdout và stdin về ngôn ngữ C hoặc cout và cin trong C++) không phải là phần tốt nhất của MPI (OpenMPI triển khai MPI). Có một số trang trình bày về điều này: http://www.csee.wvu.edu/~donm/classes/cs591x/notes/io1.ppt và Trang trình bày 10 có giải pháp. (hoặc chapter 8.1 của cuốn sách "Lập trình song song với Mpi theo PS Pacheco")

Làm tất cả I/O của bạn với cout trong quá trình có thứ hạng 0. Nếu bạn muốn xuất dữ liệu từ các quá trình khác, chỉ cần gửi MPI tin nhắn có dữ liệu này để xếp hạng 0.

Các vấn đề liên quan