gpt4 book ai didi

c - 有没有一种无需重新编码即可并行运行 C/C++ 程序的简单方法?

转载 作者:太空狗 更新时间:2023-10-29 15:52:46 25 4
gpt4 key购买 nike

我有一台多核机器,但当我尝试运行这个旧的 C 程序 (http://www.statmt.org/moses/giza/mkcls.html) 时,它只使用一个内核。有没有办法运行 C 代码并将周期/线程发送到其他内核?

将代码重新编码到 CUDA 中是唯一的方法吗?

最佳答案

I have a multi-cores machine but when i tried to run this old C program (http://www.statmt.org/moses/giza/mkcls.html) it only utilizes one core. Is there a way to run the C code and send the cycles/threads to the other cores?

不重新编译,肯定不行。

您可以做一些小的调整并使用一个工具来获取您的源代码并自动并行化它,但是由于每个内核都是完全独立的——它们“相距很远”——你不能只是将指令分散在两个内核之间两个核心。代码必须以有两个“指令流”的方式编译——如果你只是将所有其他指令发送到双核系统中的每个其他内核,它的运行速度可能比如果您在一个内核上运行所有代码,因为内核之间的通信需要额外的开销[每个内核已经能够并行运行多条指令,这首先是多核处理器的主要原因是这种并行运行事物的能力只能让事情变得更快——在你需要前一条指令的结果之前,只有这么多指令可以运行,等等]。

Is recoding the code into CUDA the only way?

不,还有许多其他选择。 OpenMP,使用多线程手工编码。或者,最简单的方法是,使用不同的输入数据将程序启动两到四次,然后让它们完全分开运行。这显然只有在您可以同时运行多个变体的情况下才有效...

关于“使事物平行”的一句话。让所有代码更快的并不是什么神奇的事情。在需要先前计算结果的地方计算某些东西是非常无望的 - 例如,假设你想计算斐波那契数列 - f(n) = f(n-1) + f(n-2) - 你不能用并行计算来做到这一点,因为你需要其他计算的结果来进行这个。另一方面,如果您有十几个非常大的数字要检查它们是否是素数,那么使用 4 核处理器和四个线程,您可以将速度提高四倍左右。

如果您有一个大矩阵需要与另一个大矩阵或 vector 相乘,最好将其拆分,这样您就可以在每个核心上进行部分计算。

我没有查看您的特定项目的代码,但仅查看描述,我认为它可以很好地并行化。

关于c - 有没有一种无需重新编码即可并行运行 C/C++ 程序的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15039909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com