Na era digital altamente interconectada de hoje, a portabilidade de desempenho tornou-se uma questão importante no desenvolvimento de software. Portabilidade de desempenho refere-se à capacidade de um aplicativo ser executado de maneira eficaz em diferentes plataformas de hardware. Quando os desenvolvedores projetam aplicativos portáteis e habilitados para desempenho, eles precisam oferecer suporte a diversas plataformas sem comprometer o desempenho, de preferência ao mesmo tempo em que minimizam o código específico da plataforma.
A portabilidade de desempenho é considerada um recurso muito procurado na comunidade de computação de alto desempenho (HPC), mas atualmente não existe um padrão de medição universal ou consistente.
O desempenho é medido de duas maneiras: uma é comparando o desempenho de uma versão otimizada do aplicativo com sua versão portátil e a outra é baseada no número de operações de ponto flutuante (FLOPs) realizadas e movimentadas da memória principal durante a execução; . Dados de frequência do processador para comparar o desempenho máximo teórico do aplicativo. À medida que a diversidade de hardware aumenta, torna-se cada vez mais crítico desenvolver software que possa ser executado numa vasta gama de máquinas, o que afecta a utilização a longo prazo da aplicação e a possibilidade de actualização da mesma.
A portabilidade de desempenho é amplamente mencionada na indústria e geralmente se refere: primeiro, à capacidade de executar o mesmo aplicativo em diversas plataformas de hardware, segundo, atingir determinadas metas de desempenho nessas plataformas; Na Conferência de Portabilidade de Desempenho realizada pelo Departamento de Energia dos EUA (DOE) em 2016, um especialista afirmou que “uma aplicação pode ser considerada uma aplicação se conseguir atingir um nível consistente de desempenho em cada plataforma em relação à implementação mais conhecida”. Para eficiência e portabilidade.
Jeff Larkin (NVIDIA) apontou diretamente que a portabilidade de desempenho significa que "o mesmo código-fonte pode ser executado de forma produtiva em diversas arquiteturas diferentes".
Portanto, a portabilidade de desempenho tornou-se um importante tópico de discussão na comunidade de computação de alto desempenho. Parceiros da indústria, da academia e dos Laboratórios Nacionais do DOE realizam regularmente o "Fórum de Produtividade de Computação de Desempenho, Portabilidade e Alta Eficiência" desde 2016 para promover a pesquisa e o desenvolvimento da portabilidade de desempenho.
À medida que a arquitetura computacional continua a evoluir, a portabilidade do desempenho continua importante. Os desenvolvedores assumem que sua base de código única alcançará um desempenho aceitável em arquiteturas mais recentes, bem como em uma variedade de arquiteturas atuais que ainda não foram testadas. À medida que a diversidade de hardware aumenta, será necessário desenvolver software que possa ser executado em múltiplas plataformas. Isto está relacionado com a vitalidade e a relevância contínua das aplicações.
O Exascale Computing Project (ECP) do Departamento de Energia dos EUA enfatiza que a portabilidade de desempenho é uma preocupação constante, especialmente em um ambiente multiplataforma.
Desde 2016, o DOE realizou vários workshops para discutir a crescente importância da portabilidade de desempenho. A conferência de 2017 convidou a participação de muitas instituições conhecidas, incluindo o Centro Nacional de Computação Científica de Pesquisa Energética (NERSC) e o Laboratório Nacional de Los Alamos (LANL).
Para quantificar quando um programa alcançou a portabilidade de desempenho, dois fatores precisam ser considerados. Primeiro, a portabilidade de desempenho pode ser medida comparando o número de linhas de código usadas entre arquiteturas versus o número de linhas de código usadas apenas para uma única arquitetura. Em segundo lugar, o desempenho pode ser medido de diversas maneiras. Por exemplo, para comparar o desempenho de uma versão otimizada para plataforma de um aplicativo com uma versão portátil, um método de medição eficaz é usar um modelo de desempenho de telhado, que pode obter o desempenho máximo teórico do aplicativo.
Na conferência de 2016, um participante mencionou: "Quando a equipe do aplicativo afirma que é portátil para desempenho, esse código é considerado portátil para desempenho".
Nos últimos anos, pesquisas apontaram que o código portátil escrito para diversas arquiteturas de computação paralela precisa estar em conformidade com modelos de programação de padrão aberto, e o código deve ser desenvolvido e melhorado em múltiplas plataformas simultaneamente. Essas estratégias podem ajudar os desenvolvedores a encontrar parâmetros adequados para diferentes plataformas.
Há uma variedade de aplicativos e sistemas de programação no mercado projetados para ajudar os desenvolvedores a obter portabilidade de desempenho. Algumas estruturas comuns incluem OpenCL, SYCL, Kokkos, RAJA, etc. Essas interfaces de programação suportam programação multiplataforma e multiprocessos. Algumas soluções não estruturais incluem linguagens de autoajuste e específicas de domínio.
À medida que a tecnologia avança, estamos prontos para uma nova era de programação que leva as possibilidades de portabilidade de desempenho a novos patamares?