【发布时间】:2010-08-22 23:06:14
【问题描述】:
我试图在我的项目中使用 OpenMP,该项目在模拟中包含 N 个代理。每个代理都有一个位置向量。在我的程序中,我执行以下操作:
for(int i=0;i<agents.size();i++){
for(int j=0;j<agents.size();j++){
if(i==j) continue;
if(distance_between(i,j)<10){
//do a lot of calculations for interaction between i and j,
//and a bunch of changes to variables of the Agents stored in the list
}
}
}
我可以简单地在第一个循环前面添加“#pragma omp parallel for”来分配工作吗?如果我这样做,我的程序会运行得更快,但我担心它所做的计算可能不准确。
这些计算的顺序无关紧要,只要处理每个 i,j 对,并且在最内层循环内定义的变量之外没有任何变量,并且我的 Agents 类中的变量曾经更改过(只读) .
我不是系统专家,我很难理解 OpenMP 的内部工作原理,并且对此有点怀疑。感谢您对此的任何帮助!
【问题讨论】:
-
你必须确保你的 for 循环不会阻碍并行化(例如,数据依赖)
标签: c++ simulation openmp parallel-processing