O type map
é um conceito importante, mas confuso no MPI. Eu gostaria de uma rotina para exibir ou imprimir um mapa de tipos para mim.
Por exemplo (tirado do padrão MPI-3),
MPI_TYPE_CREATE_RESIZED(MPI_INT, -3, 9, type1)
resulta no mapa de tipos
{(lb_marker, -3), (int, 0), (ub_marker, 6)}.
Use esse tipo novamente:
MPI_TYPE_CONTIGUOUS(2, type1, type2)
e o mapa de tipo é
{(lb_marker, -3), (int, 0), (int,9), (ub_marker, 15)}
Eu gostaria de uma maneira de exibir esse mapa de tipos automaticamente.
Certamente pode-se usar MPI_Type_get_contents
e MPI_Type_get_envelope
e recursivamente descer até bater o built-in tipos. Isso é uma dor gigantesca e eu teria pensado que 20 anos em alguma ferramenta existiria para fazer isso por mim.
Algumas ferramentas que são promissoras, mas não funcionam exatamente:
Eu tinha encontrado o MPImap de ~ 2001 aqui . Primeiro, ele precisa ser atualizado para o Tcl / TK moderno, corrigido para resolver alguns erros de memória e depois de fazer isso; você obtém uma GUI que não responde. Em vez disso, estou procurando uma biblioteca / rotina que possa chamar em tempo de execução.
MPIDU_Datatype_deubg
é uma rotina de despejo de tipo interno específico do MPICH. Ele não exibe o mapa de tipo (ele exibe a representação do dataloop, novamente fechar)Era uma vez um depurador chamado XMPI que lista entre seus recursos a capacidade de exibir um mapa do tipo MPI. Este depurador parece ser específico para LAM-MPI e não usa get_contents / get_envelope.
MPI_Datatype
, você busca uma função que retorna uma string da forma{(type, displacement), (type, displacement), ..}
que descreve a estrutura do referido tipo de dados?Respostas:
Como disse Rob Latham , não existem boas soluções pré-existentes. Com a ajuda dos links fornecidos por tim criei esta função disponível no Github . Eu peguei seu exemplo para o teste contíguo + redimensionar ( aqui ) e a saída é
Com esta função você só precisa fazer
printMapDatatype(mydatatype)
. Espero que seja isso que você está procurando.Aqui está a função, apenas no caso de:
fonte