2015-01-03 32 views
6

Có ai vui lòng giải thích sự khác biệt giữa MPI_ScatterMPI_Bcast không? (Bên cạnh thực tế là bất kỳ quy trình nào cũng có thể phát sóng bằng cách sử dụng MPI_Scatter và chỉ root mới có thể sử dụng MPI_Bcast)Sự khác nhau giữa MPI_Scatter và MPI_Bcast

Trong trường hợp nào tôi nên sử dụng cái đầu tiên?

Trả lời

11

MPI_Bcast() gửi cùng một phần dữ liệu cho mọi người, trong khi MPI_Scatter() gửi mỗi quá trình một phần của mảng đầu vào. MPI_Bcast() nằm đối diện với MPI_Reduce()MPI_Scatter() là đối diện của MPI_Gather(). Một sơ đồ nhỏ như this one là tự giải thích.

Và cả hai MPI_Scatter()MPI_Bcast() có đối số có tên int root để chỉ định quy trình gốc.

+0

Cảm ơn, rất dễ hiểu. –

+6

Trong khi 'MPI_SCATTER' thực sự là đối diện của' MPI_GATHER', tôi sẽ không gọi 'MPI_BCAST' ngược lại với' MPI_REDUCE'. –

+2

Phải, 'MPI_Reduce()' có thể kết hợp các phần dữ liệu theo nhiều cách khác nhau (http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node78.html), chẳng hạn như 'MPI_SUM' hoặc' MPI_MAX' và 'MPI_Bcast()' cung cấp cùng một phần dữ liệu cho mọi quá trình, mà không có bất kỳ thao tác nào trên đường đi. – francis

1

MPI_Bcast lấy một phần tử dữ liệu duy nhất tại quy trình gốc (hộp màu đỏ) và sao chép nó vào tất cả các quy trình khác. MPI_Scatter lấy một mảng các phần tử và phân phối các phần tử theo thứ tự xếp hạng quá trình.

the illustration,

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