Это type map
важная, но сбивающая с толку концепция в MPI. Я хотел бы, чтобы программа отображала или распечатывала для меня карту типов.
Например (взято из стандарта MPI-3),
MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1)
приводит к типовой карте
{(lb_marker, -3), (int, 0), (ub_marker, 6)}.
Используйте этот тип снова:
MPI_TYPE_CONTIGUOUS(2, type1, type2)
и карта типов
{(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)}
Мне нужен способ автоматического отображения этой типовой карты.
Конечно, можно было бы использовать MPI_Type_get_contents
и MPI_Type_get_envelope
и рекурсивно спускаться до тех пор, пока не встретите встроенные типы. Это довольно большая боль, и я мог подумать, что 20 лет на какой-то инструмент будет существовать, чтобы сделать это за меня.
Некоторые инструменты многообещающие, но не совсем работающие:
Я нашел MPImap от ~ 2001 здесь . Во-первых, его необходимо обновить для современных Tcl / TK, пропатчить, чтобы исправить некоторые ошибки памяти, и после этого; вы получаете неотвечающий графический интерфейс. Вместо этого я ищу библиотеку / процедуру, которую я могу вызвать во время выполнения.
MPIDU_Datatype_deubg
- это специальная для MPICH внутренняя процедура сброса типа. Он не отображает карту типов (он отображает представление цикла данных, снова закрывается)Когда-то существовал отладчик под названием XMPI, который среди своих функций перечислял возможность отображать карту типов MPI. Этот отладчик, похоже, специфичен для LAM-MPI и не использует get_contents / get_envelope.
MPI_Datatype
вы ищете функцию, которая возвращает строку в форме{(type, displacement), (type, displacement), ..}
, описывающей структуру указанного типа данных?Ответы:
Как сказал Роб Лэтэм , хороших уже существующих решений не существует. С помощью ссылок, предоставленных Тимом, я создал эту функцию, доступную на Github . Я взял ваш пример для теста непрерывного + изменения размера ( здесь ), и результат
С этой функцией вам просто нужно справиться
printMapDatatype(mydatatype)
. Надеюсь, это было то, что вы искали.Вот функция, на всякий случай:
источник