gpt4 book ai didi

c++ - 用于嵌套 for 循环的 OpenMP?

转载 作者:行者123 更新时间:2023-11-28 03:56:06 25 4
gpt4 key购买 nike

我正尝试在我的项目中使用 OpenMP,该项目在模拟中包含 N 个代理。每个代理都有一个位置 vector 。在我的程序中,我执行以下操作:

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 的内部工作原理,并且对它有点怀疑。感谢您对此的任何帮助!

最佳答案

是的,添加 pragma 是正确的。内存被认为由所有线程隐式共享。但这并不意味着它会工作得更快。有多个问题需要考虑:

  • 您的系统有多少个处理器?
  • 你使用整数还是 float ?对于整数,顺序无关紧要,但对于 float 则不然
  • 哪些变量只能被最内层的循环访问?您可以将它们声明为私有(private)以获得更好的性能。

关于c++ - 用于嵌套 for 循环的 OpenMP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3543837/

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