2011-01-26 5 views
5

Tôi đang viết chương trình để kiểm tra đường đi ngắn nhất bằng cách sử dụng thư viện MPI. Có hai trường hợp:
Hoặc tôi đã tìm thấy đường dẫn tốt hơn, trong trường hợp khe đầu tiên của bộ đệm sẽ nêu rõ resultBuff[0] = 1 và tôi sẽ cần phải đi qua phần còn lại của bộ đệm để có đường dẫn tốt hơn.
Trường hợp còn lại là resultBuff[0] = 0 và tôi sẽ không xem xét bất kỳ giá trị nào trong các ô khác của bộ đệm.MPI_Recv: Nhận kích thước khác với kích thước được gửi

Có thể cho tôi để sử dụng riêng biệt MPI_Isend cuộc gọi:

Trong trường hợp tôi tìm thấy một con đường tốt hơn và lưu trữ nó trong resultBuff[1]-resultBuff[10]:

MPI_Isend((void*)sendBuff, 11, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

Trong trường hợp không tìm thấy một con đường tốt hơn :

MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

Và trong cả hai trường hợp tôi sẽ sử dụng

MPI_Recv((void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status); 

để nhận kết quả.

Tính năng này có hoạt động không?
Nếu có, tôi có thể tiết kiệm chi phí liên lạc nếu không gửi đường dẫn tốt hơn không?

Lưu ý: resultBuff có kích thước 11.

Trả lời

1

Có, bạn có thể thực hiện việc này. Từ tiêu chuẩn MPI và man pages cho MPI_Recv, "đối số đếm cho biết độ dài tối đa của một tin nhắn; số thực tế có thể được xác định bằng MPI_Get_count" mà bạn gọi bằng cách sử dụng đối tượng status bạn nhận được từ MPI_Recv().

Để tiết kiệm chi phí liên lạc, có thể sẽ không - các tin nhắn ngắn như vậy bị chi phối bởi thời gian chờ gửi tin nhắn thay vì băng thông.

0

Bạn không cần phải gửi một thông điệp tới nói: "Tôi tìm thấy điều gì": các thiếu của một thông điệp có thể truyền đạt thông tin mà chỉ là tốt. Người nhận có thể chỉ định kỳ gọi MPI_Test và kiểm tra đối tượng trạng thái để xem liệu một tin nhắn mới có được nhận hay không.

+1

Điều đó không trả lời câu hỏi, nó chỉ đi xung quanh nó. – Nayish

+1

Tôi vẫn cần biết khi tính toán đường dẫn kết thúc. Tôi cần phải gửi một thông báo nói rằng "Tôi đã hoàn thành", chỉ sau đó tôi sẽ biết liệu nó có tìm thấy một con đường tốt hơn hay không. – hizki