了解基于不同硬件可用性的CFD代码最佳开发策略

问题描述 投票:0回答:0

我正在尝试对结合多个 CPU 和 GPU 以提高 CFD 速度所采用的不同代码开发策略有一些总体了解。以及如何在每种情况下利用 MPI/OpenMP 等和 CUDA/OpenCL 等。

我知道采取什么策略取决于问题,但我希望对于不同的硬件可用性有一些典型或共同的东西。

我的理解是有以下几种场景,有以下通用的非常高级的代码开发策略:

  1. 仅多 CPU

网格被分区,初始数据分布在多个 CPU/线程(MPI 用于设置幽灵单元)——每个 CPU/线程计算分配的网格部分的离散方程。在每次计算迭代后,使用 MPI 收集数据,以便可以为下一次迭代更新幽灵单元。

  1. 单 CPU 和单 GPU

Mesh 未分区,所有初始数据都简单地发送到 GPU。每个 CUDA 核心处理特定网格点的计算。所有迭代都在 GPU 上进行,并在最后一次迭代后发送回 CPU。

  1. 单 CPU 和多 GPU

我不确定。 CPU 根据可用的 GPU 数量划分网格/初始数据? GPU 之间的通信如何工作?需要一些设置幽灵细胞的方法吗?

  1. 多个 CPU 和多个 GPU

不知道。

  1. 多个 CPU 和单个 GPU。

不知道。

我主要对场景 5 感兴趣。这主要是因为我可以利用我个人机器上可用的硬件(10 个物理 CPU 内核/20 个 CPU 线程和一个 NVIDIA GeForce RTX 3060 GPU)。但是,我对所有其他场景也非常感兴趣,如果有人能让我知道我的理解(如描述)是否正确,我将不胜感激。

此外,对于我的特定硬件可用性,我的 CFD 代码通常可以使用场景 5 制作得最快吗?或者更有可能是场景 1 或 2?

cuda gpu mpi cpu physics
© www.soinside.com 2019 - 2024. All rights reserved.