No campo da computação de alto desempenho (HPC), os desenvolvedores são quase fanáticos pela "portabilidade de desempenho". Esse fenômeno decorre da necessidade de programas e aplicativos de computador serem executados com eficiência em diferentes plataformas. À medida que a tecnologia continua a evoluir e as arquiteturas de hardware mudam, a durabilidade e a relevância dos aplicativos de computação de alto desempenho são ameaçadas, forçando os desenvolvedores a se concentrarem em melhorar a portabilidade do desempenho.
Portabilidade de desempenho refere-se à capacidade de programas e aplicativos de computador serem executados efetivamente em diferentes plataformas. Quando os desenvolvedores criam aplicativos para portabilidade de desempenho, eles esperam oferecer suporte a múltiplas plataformas sem afetar o desempenho e minimizar o código específico da plataforma.
À medida que a diversidade de hardware aumenta, desenvolver software que possa ser executado em uma ampla variedade de máquinas se tornou uma necessidade para manter os aplicativos viáveis. De acordo com a Conferência de Portabilidade de Desempenho do Departamento de Energia dos EUA (DOE) de 2016, a indústria geralmente concorda que a portabilidade de desempenho pode ser interpretada como "a capacidade de executar o mesmo aplicativo em várias plataformas de hardware e obter o mesmo desempenho nessas plataformas". de desempenho."
Por exemplo, John Penicuik, da Intel, disse na mesma conferência que "um aplicativo é considerado portátil em termos de desempenho se puder atingir níveis de desempenho consistentes em todas as plataformas". Isso significa que a chamada portabilidade não diz respeito apenas ao aplicativo em si, mas também sobre a portabilidade do código-fonte.
Atualmente, não há uma maneira universalmente aceita de medir a portabilidade de desempenho, e equipes individuais podem definir o conceito com base em seus próprios critérios.
Como quantificar com precisão a portabilidade de desempenho é um problema desafiador que depende principalmente de dois fatores. A primeira é a portabilidade, que pode ser medida comparando o número total de linhas de código usadas em diversas arquiteturas com o número total de linhas de código escritas especificamente para uma única arquitetura. O segundo é o desempenho, geralmente comparando o desempenho entre versões otimizadas para uma plataforma específica e versões portáteis.
Atualmente, não há um padrão universal para o que é considerado código ou aplicativo portátil. Essa ambiguidade na definição leva a diferentes critérios de avaliação para diferentes equipes. De acordo com um palestrante na conferência de 2016, se um projeto é considerado portátil ou não, depende inteiramente da equipe de desenvolvimento.
Para ajudar os programadores a atingir a portabilidade de desempenho, atualmente há uma variedade de aplicativos e sistemas de programação que podem atingir esse objetivo. Estruturas de programação como OpenCL, SYCL e Kokkos alegam oferecer suporte à portabilidade funcional e facilitar a programação paralela em múltiplas plataformas. Além disso, existem algumas soluções não estruturadas, como tecnologia de autoajuste e linguagens dedicadas, que também podem melhorar a portabilidade do desempenho.
Os desenvolvedores devem explorar maneiras de alcançar a portabilidade de desempenho em uma arquitetura de computação em constante mudança, que não está relacionada apenas às necessidades atuais, mas também à sobrevivência futura.
Com o rápido desenvolvimento da tecnologia de computação, a portabilidade de desempenho futura pode enfrentar novos desafios. Especialistas do setor acreditam que a evolução dos modelos de programação paralela se tornará um fator-chave que afetará a portabilidade do desempenho. Pesquisas sugerem que futuros modelos de programação paralela serão capazes de fornecer maior portabilidade de desempenho do que os próprios aplicativos em muitas situações.
Essa mudança significa que as responsabilidades que os programadores precisam assumir ao desenvolver aplicativos mudarão gradualmente para a implementação do modelo de programação e seu compilador subjacente, o que mudará significativamente o estilo técnico de desenvolvimento de programas. Essas explorações e discussões continuarão a promover o progresso e o desenvolvimento da computação de alto desempenho.
Então, neste contexto tecnológico em constante mudança, como os desenvolvedores devem equilibrar efetivamente a contradição entre as características da plataforma e a portabilidade do desempenho?