一些与OpenMP相关的文档指出,为了让OpenMP处理循环,它必须是“可计数的”,并为循环的“可计数”提供不同的定义:这真的是OpenMP的要求吗?或者这是OpenMP的特定编译器实现的要求?另外,下面的循环-看起来不是可计数的-可以被OpenMP并行化(请注意,问题是代码是否可以并行化,而不是有没有办法创建一个与此代码并行的等价物)
for ( i = 0;
我正在将OpenMP添加到现有代码中,并试图并行化下面的for循环。块是在代码中实现的容器。操作符<和++是为块容器实现的。compiles without this line // LOOP BODY当OpenMP为什么OpenMP需要在这里实现“operator-”?
编译器: gcc 7.2.1 OpenMP 4.0
乍一看,一切看起来都很简单:在最耗时的循环前面写#pragma parallel for directive。但碰巧的是,这些循环中的函数对数组进行操作,或者,更准确地说,是对属于我的类的对象的数组进行操作,该对象包含有关粒子系统的所有信息和该系统上的函数,因此当我在最耗时的循环之前添加#杂注指令时,计算时间实际上增加了几倍这个测试程序执行两个相同的循环,一个是并行的,另一个是串行的。测量执行这两个循环所需的时间。结果令我惊讶:当第一个循环并行计算时,其计算时间与串行模式相比减少了(分别