CPU 和 GPU 对任务并行执行性能的影响

计算科学 优化 算法 表现 库达 开放式
2021-12-18 16:32:51

这个问题主要是关于硬件的,也有关于软件的。

在我目前的工作中,我有大约 6800 万个并行迭代的组合。对于这些组合中的每一个 - 都涉及对同一数据集的处理。我猜这个想法与神经网络的训练方式非常相似。

我目前的问题是,处理所有组合需要 10 个小时。我正在使用C#,代码可以简化为:

long combinationCount = 68,211,200; // (68m)
List<Data> data = new List<Data>();
long dataCount = data.Count(); // 65,800 (65k)
// itterate every combination
Parallel.For(0, combinationCount, new ParallelOptions { MaxDegreeOfParallelism = 4}, (index, loopState) => {
    for(int i = 0; i < dataCount; i++) {
        // proccess each data record
    }
});

我当前的硬件是带有处理器i7-6500U(2 核,4 线程)的 HP 笔记本电脑。相当旧的也许不是这类任务的最佳选择。

所以我的问题是——如何优化和提高我的应用程序的性能?更准确地说 - 我想听听关于以下主题的想法:

  1. CPU. 由于我打算购买固定式 PC - 最好选择以下口味:
    • AMD Ryzen 1700/1700x/1800x- 8 核,16 线程
    • Intel's i7 8700/8700k- 6核,12线程,每核频率更高

请注意!问题不在于AMDor Intel,而更多地在于以较低的时钟速度拥有 8 个物理内核是否比具有 6 个内核但时钟速度更高的 CPU 更好。专门用于编程

  1. GPU. 我注意到了,您可以利用计算GPU核心而不是CPU. 这在理论上将提高性能 X 倍。问题是您需要使用较低级别的编程语言C++来利用它。因为C#这是我拥有的唯一工具集 - 我想知道是否值得投资于更好的Video card而不是CPU?

我用谷歌搜索了一下,发现了一个项目,该项目altimesh Hybridizer似乎允许对它进行编码C#和编译,以使 aGPU可以运行它。这个想法很整洁。如果上述情况属实 - 那么购买更高端的 GPU 是否更有意义?总体而言,与 6/8 核 CPU 相比,在 GPU(CUDA 内核?)上执行的计算可以提高多少性能?如果重要的话-我正在寻找GTX 1060 3GB/6GB价格范围的视频卡。

然后再次。如果这不是提出此类问题的最佳场所,我很抱歉。我主要关心的是构建一个能够满足当今计算需求的系统,无论是人工智能/神经网络/还是海量数据处理,就像我的情况一样

1个回答

您列出的两个 CPU 都比您现有的笔记本电脑强大得多,假设您在循环之外获得了合理的并行性,应该会显着提高速度。

在不了解您的特定应用程序的情况下,我 [个人意见] 可能会选择具有更少更快内核的处理器,因为在各种任务中,单核性能仍然很重要(您所做的一切都是并行化的吗?),并且更容易有效地扩展并行应用程序使用较少数量的内核。

在 68,000,000 个元素中,您可以很好地了解可能适合 GPU 编程的项目大小。也就是说,在不知道确切问题域的情况下存在许多警告,并且许多问题不适合 GPU 架构。GPU 更难有效编程——内存访问模式非常重要,条件/分支语句可能对性能造成灾难性影响。如果问题是 32 位浮点数上的 68e6 个独立数学公式,那么CPU 的性能可能会提高很多倍。请注意,游戏 GPU在整数和双精度方面都很糟糕

编辑:删除关于整数性能的评论 - 请参阅下面的评论 njuffa