2011-01-26 16 views
5

MPI kitaplığını kullanarak en kısa yolu denetlemek için bir program yazıyorum. İki senaryo vardır:
Ya da daha iyi bir yol buldum, durumda tamponun ilk yuvası resultBuff[0] = 1 belirtecektir ve daha iyi bir yol almak için arabellek içeriğini geri kalanı üzerinde gitmem gerekecek.
Diğer durumda resultBuff[0] = 0 ve arabellek diğer hücrelerinde herhangi bir değer göz ardı edemeyiz. durumdaMPI_Recv: Gönderilmiş olandan farklı bir boyut almak

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

daha iyi bir yolu bulundu vermedi:

Ben daha iyi bir yol buldum durumda

ve bunu saklanan resultBuff[1]resultBuff[10] için: me ayrı MPI_Isend aramaları kullanmak için

mümkün mü :
MPI_Isend((void*)sendBuff, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &request); 

Ve her iki durumda da

Ben kullanacağız

Sonucu almak için 10
MPI_Recv((void*)resultBuff, 11, MPI_INT, MPI_ANY_SOURCE, 1, MPI_COMM_WORLD, &status); 

.

Bu işe yarar mı?
Eğer daha iyi bir yol göndermezseniz iletişim maliyetlerini kaydeder miydim?

Not: resultBuff "Hiçbir şey bulamadım" boyutuna 11. Söyleyecek bir mesaj göndermek gerekmez

cevap

1

Evet, bunu yapabilirsiniz. MPI standardından ve MPI_Recv için man pages'dan, "sayım argümanı, bir mesajın maksimum uzunluğunu gösterir; asıl sayı, MPI_Get_count ile belirlenebilir", yani MPI_Recv() 'den geri aldığınız status nesnesini kullanarak arayın.

İletişim maliyetlerinden tasarruf etmek için büyük olasılıkla olmaz - böyle kısa mesajlar bant genişliğinden ziyade mesajın gönderilme gecikmesiyle belirlenir.

0

taşımaktadır: sadece de bu bilgileri iletmek bir mesajın yoksundur. Alıcı (lar) periyodik olarak MPI_Test'u arayabilir ve yeni bir mesaj alıp almadığını görmek için durum nesnesini inceleyebilir.

+1

Bu soruya cevap vermiyor, sadece etrafta dolaşıyor. – Nayish

+1

Yol hesaplaması bittiğinde hala bilmem gerek. "İşim bittiğini" belirten bir mesaj göndermem gerekiyor, sadece daha iyi bir yol bulup bulmadığını bileceğim. – hizki

İlgili konular