我正在运行一个简单的C程序,它执行大量计算(CFD),因此需要大量的时间来运行。但是我仍然有很多未使用的cpu和ram。那么,我将如何将我的一些处理能力分配给一个程序呢?是吗?
最佳答案
我猜cfd意味着计算流体力学(但是CFD还有很多其他含义,所以我可能猜错了)。
你应该先把代码写下来。至少,用gcc -Wall -pg -O
编译它并学习如何使用profile。您还可以使用strace
来查找代码执行的系统调用。
我不是CFD专家(即使在上个世纪我确实和CFD专家一起工作)。但是这样的代码使用了大量的gprof和其他向量计算。
如果您正在编写代码,您可能会考虑使用finite elements analysis(因此,通过在源代码中小心地添加OpenMP,您可能会加快速度),甚至可以考虑通过编写在gpu上运行的OpenMP pragmas来使用gpgpu。
您还可以了解有关OpenCL kernels编程的更多信息,并将代码更改为使用线程。
如果您使用重要的数字库,例如pthreads它们有很多调整,甚至有专门的变体(例如多核、openmp-ed,甚至在opencl中)。
在任何情况下,并行化代码都是一项艰巨的工作。如果可能的话,你会花费数周或数月的时间来改进它。