Почему параметр "Tag" не используется в коллективной коммуникации MPI?
В отличие от MPI_Send/ MPI_Recv, отсутствует параметр "Tag" для других функций, связанных с коллективной связью (например, MPI_Bcast/MPI_Gather). Какова причина?
1 ответ
Документация говорит, что:
В отличие от двухточечных операций, неблокирующие коллективные операции не совпадают с блокирующими коллективными операциями, а коллективные операции не имеют аргумента тега. Все процессы должны вызывать коллективные операции (блокирующие и неблокирующие) в одном и том же порядке для каждого коммуникатора. В частности, когда процесс вызывает коллективную операцию, все другие процессы в коммуникаторе должны в конечном итоге вызывать одну и ту же коллективную операцию, и между ними не должно быть никаких других коллективных операций с тем же коммуникатором.
Теги полезны, когда речь идет о неблокирующей связи. Вы можете задаться вопросом, почему у нас есть аргумент тега для операций блокировки. В случае p2p-связи это происходит потому, что блокирующие операции могут соответствовать неблокирующим. В то время как в случае коллективного общения, как указано, операции блокировки и неблокирования не совпадают, поэтому нет необходимости в тегах.
Правка после комментария Христо Илиева: я неверно истолковал утверждение, сделав ложные предположения. Я скопировал комментарий к ответу:
Теги не имеют ничего общего с блокировкой соответствия с неблокируемой связью. Коллективы не имеют тегов, так как стандарт налагает ограничение на то, что все ранги в данном коммуникаторе вызывают одну и ту же последовательность коллективных операций и в том же порядке, что делает теги бесполезными. Кроме того, неблокирующие коллективы были введены еще в MPI-3.0.