嗨,谢谢你的帮助。我一直在运行一个程序,它有许多for循环的函数,迭代次数超过10000次。我一直在使用" #pragma omp_set_num_threads();"使用我的CENT OS设备的所有CPU。这似乎适用于我的程序中的所有功能,除了一个。它不起作用的功能是这样的:
Tcllib
我可以使用pragma吗?如果不是我还有其他选择吗? 由于上述功能似乎消耗的时间最多,我想利用所有CPU来执行它。我该怎么做呢?
非常感谢。
答案 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
在循环期间擦除元素会导致迭代器无效,错误的行程计数等等。
我建议您只需将其标记为删除即可替换循环中条目的删除。你可以为每个分子添加一个特殊的标志。 然后在并行循环完成后,您可以在序列中查看一次列表并实际删除标记的条目。
另一个建议是:在一个分子和分子列表之间做出更明确的区分。它将提高代码的可理解性。