Estou analisando o desempenho dos solucionadores lineares do PETSc. Como eu entendo,
Eu sei que a execução do código paralelo em um processador pode ser usada como proxy para o desempenho seqüencial. No entanto, não acho que seja uma boa medida de um código seqüencial equivalente devido à sobrecarga paralela incorrida. Freqüentemente, o desempenho de um código seqüencial é mais rápido que o desempenho paralelo em um único processador. Suponho que eu poderia procurar bibliotecas numéricas que implementam o mesmo solucionador, mas não há garantia de que o algoritmo seja realmente equivalente.
Como eu entendo,
Assim, se houver uma maneira de quantificar a sobrecarga paralela, poderíamos subtraí-la do tempo paralelo em um processador para obter uma melhor medida do tempo seqüencial.
Então, minhas perguntas seriam:
- Existe uma maneira de calcular a sobrecarga paralela de um código paralelo executado em um único processador quando nenhum código seqüencial está disponível?
- Isso é realmente necessário? O desempenho paralelo em um processador é bom o suficiente para aproximar o desempenho seqüencial, em geral?
Respostas:
Acho que, desde que você diga com o que mede a aceleração, ninguém o culpará por usar o tempo que a versão paralela do código leva para ser executada em um processador. Se você também der o tempo total de um dos seus casos (digamos o tempo do processador único), as pessoas poderão comparar sua implementação com outras da literatura ou com as próprias.
Para alguns problemas, nenhum resultado de uni-processador será possível computar, considerando as restrições de memória ou tempo. Dado que, a maioria das pessoas entende ao olhar para os resultados de aceleração, que as coisas são calculadas em relação ao menor número de processadores disponíveis e que o dado de um único processador é o código paralelo executado em um processador.
Não existem regras rígidas, mas você deve ser explícito sobre o que está fazendo e fornecer ao leitor informações suficientes para calcular outras quantidades que possam interessá-los.
fonte
Eu não estou familiarizado com os internos do PETSc (ao contrário de outros especialistas do PETSc aqui), mas acho que não deve haver sobrecarga paralela com o PETSc desde que você execute seu trabalho como um único processo (ou seja, sem particionamento, etc.).
Lembre-se de que o PETSc também pode ser instalado sem MPI, o que significa que qualquer pequena sobrecarga de MPI que possa estar lá (supondo que todas as chamadas MPI reais sejam feitas durante a execução em um núcleo que duvido muito) também pode ser descontado.
Obviamente, isso é verdade quando a sobrecarga paralela é principalmente de comunicação e não algorítmica.
fonte