使用CENT OS上的所有CPU来运行c ++程序

时间:2016-03-28 15:20:12

标签: centos openmp

嗨,谢谢你的帮助。我一直在运行一个程序,它有许多for循环的函数,迭代次数超过10000次。我一直在使用" #pragma omp_set_num_threads();"使用我的CENT OS设备的所有CPU。这似乎适用于我的程序中的所有功能,除了一个。它不起作用的功能是这样的:

Tcllib

我可以使用pragma吗?如果不是我还有其他选择吗? 由于上述功能似乎消耗的时间最多,我想利用所有CPU来执行它。我该怎么做呢?

非常感谢。

1 个答案:

答案 0 :(得分:0)

是的,原则上您可以使用OpenMP pragma,只需添加

#pragma omp parallel for
在for循环之前

您必须确保将其保存为并行使用molecule_obj的方法。我不知道他们是不是,但我假设如下: molecule_obj.at(i).check(dom_x,dom_y,dom_z);真正适用于一种特定分子,并且确实依赖于任何其他分子。那很好。

erase函数很可能不是,取决于您存储条目的方式。如果使用std::list之类的东西,std::vector在循环期间擦除元素会导致迭代器无效,错误的行程计数等等。

我建议您只需将其标记为删除即可替换循环中条目的删除。你可以为每个分子添加一个特殊的标志。 然后在并行循环完成后,您可以在序列中查看一次列表并实际删除标记的条目。

另一个建议是:在一个分子和分子列表之间做出更明确的区分。它将提高代码的可理解性。