Нет, к сожалению, теги не могут быть long int
s. Привязки C определяют тег как int
, но набор фактически разрешенных значений еще меньше и также зависит от реализации. Во-первых, теги должны быть положительными. Затем существует верхняя граница (UB), налагаемая реализацией MPI, которая доступна путем запроса MPI_COMM_WORLD
для атрибута MPI_TAG_UB
:
int flag;
int *tag_ub;
MPI_Comm_get_attr(MPI_COMM_WORLD, MPI_TAG_UB, &tag_ub, &flag);
if (flag)
cout << "Max allowed tag value is " << *tag_ub << endl;
else
cout << "No idea what the max allowed tag value is" << endl;
Не только значение может различаться между различными реализациями MPI, но он также может отличаться, учитывая ту же реализацию, в зависимости от транспорта (ов) связи, выбранного заданием (я видел, как это происходило с некоторыми реализациями MPI). Стандарт гарантирует только то, что значение тега UB не будет меньше 32767.
Ваш лучший и наиболее переносимый вариант - сделать идентификатор элемента частью фактических данных сообщения.