这是我的第一篇帖子。耶!回到问题:
我正在学习如何使用OpenMP。我的IDE是Code::Blocks。我想改进一些旧程序。我需要确保结果完全相同。似乎在主线程中,“for”循环的优化与其他线程不同。
例如:
生产
我该如何确保所有线程都能够获得与我的单线程程序(未使用OpenMP)相同的优化呢?
编辑:
编译器是“TDM-GCC编译器和GDB调试器(版本4.9.2,32位,SJLJ)”,不知道这是什么意思。这是IDE的“默认设置”。我对编译器的区别不熟悉。
所提供的输出来自“Release”构建,其中添加了“-O2”参数。
“-O”、“-O1”和“-O3”参数中没有一个能够产生“101”。
您可以尝试从Dropbox(zip文件,也包含可能需要的dll文件)下载我的.exe文件。
我正在学习如何使用OpenMP。我的IDE是Code::Blocks。我想改进一些旧程序。我需要确保结果完全相同。似乎在主线程中,“for”循环的优化与其他线程不同。
例如:
#include <iostream>
#include <omp.h>
int main()
{
std::cout.precision(17);
#pragma omp parallel for schedule(static, 1) ordered
for(int i=0; i<4; i++)
{
double sum = 0.;
for(int j=0; j<10; j++)
{
sum += 10.1;
}
#pragma omp ordered
std::cout << "thread " << omp_get_thread_num() << " says " << sum << "\n";
}
return 0;
}
生产
thread 0 says 101
thread 1 says 100.99999999999998579
thread 2 says 100.99999999999998579
thread 3 says 100.99999999999998579
我该如何确保所有线程都能够获得与我的单线程程序(未使用OpenMP)相同的优化呢?
编辑:
编译器是“TDM-GCC编译器和GDB调试器(版本4.9.2,32位,SJLJ)”,不知道这是什么意思。这是IDE的“默认设置”。我对编译器的区别不熟悉。
所提供的输出来自“Release”构建,其中添加了“-O2”参数。
“-O”、“-O1”和“-O3”参数中没有一个能够产生“101”。
您可以尝试从Dropbox(zip文件,也包含可能需要的dll文件)下载我的.exe文件。