Eu já desenvolvi uma solução funcional do Método dos Elementos Finitos para resolver problemas de transferência de calor usando GPU e OpenCL usando o método Gradiente Conjugado. A principal desvantagem desse método é a alta demanda por memória. Além disso, no caso de placas gráficas, a memória geralmente é muito limitada. Eu vejo duas opções:
- Crie subdomínios e troque partes da malha com memória do host
- Use métodos multifrontais
Eu tenho que levar em conta a arquitetura específica. Trocar pode ser muito caro. O método CG é popular no contexto da computação GPGPU, mas não consigo encontrar nenhuma comparação entre os métodos CG e multifrontal (no caso de GPGPU). O método multifrontal pode ser mais rápido que o CG? Esta é uma questão geral, de fato, ainda depende da implementação.