A AMD lançou o AOMP 17.0-1 como a versão mais recente deste compilador de código aberto focado em fornecer o mais recente suporte de descarregamento OpenMP para produtos aceleradores Radeon e Instinct.

AOMP é um conjunto de patches carregados sobre o último estado upstream LLVM/Clang. Os engenheiros da AMD continuam trabalhando no upstreaming de suas várias melhorias para LLVM, enquanto para aqueles que desejam o melhor suporte de ponta têm AOMP para aproveitar os melhores recursos de dispositivo OpenMP no momento.

O AOMP 17.0-1 é baseado no estado upstream LLVM/Clang do início deste mês e é construído com as fontes ROCm 5.4.4 da AMD. Notável com esta atualização é a mudança para seu plug-in de última geração por padrão que, por sua vez, deve gerar melhorias significativas no desempenho do OpenMP.


O anúncio de lançamento menciona o seguinte mudanças para o AOMP 17.0-1:

-Alternar para o plug-in da próxima geração como padrão. Isso mostrou melhorias significativas de desempenho. Para reverter para o plug-in antigo, defina LIBOMPTARGET_NEXTGEN_PLUGINS=OFF.

-Mude de hostrpc para hostexec. hostexec é uma reescrita significativa de hostrpc. O dispositivo hostexec_invoke agora é escrito em OpenMP para portabilidade para outras plataformas. Os nomes do wrapper (stub) para executar uma função de host foram alterados para hostexec() e hostexec_(). hostexec também usa uma variável global para localizar o buffer de carga útil de transferência em vez dos argumentos implícitos do kernel AMD. Isso suportará a portabilidade de hostexec, printf e fprintf para outras plataformas. A atualização para este dispositivo global é feita com serviços de variáveis ​​globais no plug-in nextgen.

-Um exemplo sobre o uso de hostexec para executar MPI_Send e MPI_Recv em uma região de destino é dado. Este exemplo demonstra como os proprietários de bibliotecas podem criar um arquivo de cabeçalho suplementar para permitir a execução de host transparente de funções de biblioteca selecionadas em regiões de destino OpenMP com a mesma interface de host. Isso elimina a necessidade de quaisquer alterações de origem no código do usuário quando a execução do host de uma região de destino é desejada. Antes do hostexec, os usuários geralmente precisavam encerrar sua região de destino, executar uma função somente de host e iniciar outra região de destino. Este recurso aumenta significativamente as capacidades de computação de propósito geral do OpenMP em plataformas GPGPU.

-O suporte ao alvo OMPT está incompleto com o plug-in de última geração. Para usar OMPT, defina a variável de ambiente LIBOMPTARGET_NEXTGEN_PLUGINS=OFF.

-Defina GPU_MAX_HW_QUEUES em gpurun

-As regiões críticas criadas por meio da diretiva crítica agora são mais eficientes: relaxando a semântica dos bloqueios e combinando isso com o uso de cercas de aquisição e liberação, podemos limitar a liberação dos caches da GPU a cada vez que o bloqueio é adquirido, em vez de a cada verificação de bloqueio.

-Ao inlining de funções chamadas do kernel, mova alocações para seus argumentos no bloco de entrada do kernel em vez de deixá-los no ponto de inicialização.

-Respeite a variável de ambiente para forçar execuções síncronas da região de destino. Disponível via OMPX_FORCE_SYNC_REGIONS=1.

Downloads AOMP 17.0-1 e mais detalhes em GitHub incluindo binários RHEL/Debian para complementar as fontes.

Categories: IT Info