【发布时间】:2014-03-09 18:24:02
【问题描述】:
我想使用#pragma omp parallel 在我的for loop 之一中进行多线程处理。所以,我正在编写以下代码:
#pragma omp parallel for
for(int i=0; i<square->total; i++)
{
......
}
我的项目有一个 CMakeList.txt 和 Makefile。 我不明白,如何告诉编译器和链接器使用 openMP?
更新:
我用以下代码编辑了我的CMakeList.txt
find_package(OpenMP)
if (OPENMP_FOUND)
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
然后我做了cmake .. 并在终端得到以下结果:
-- C 编译器标识为 GNU
-- CXX 编译器标识为 GNU
-- 检查工作的 C 编译器:/usr/bin/gcc
-- 检查工作的 C 编译器:/usr/bin/gcc -- 工作
-- 检测 C 编译器 ABI 信息
-- 检测 C 编译器 ABI 信息 - 完成
-- 检查工作的 CXX 编译器:/usr/bin/c++
-- 检查工作的 CXX 编译器:/usr/bin/c++ -- 工作
-- 检测 CXX 编译器 ABI 信息
-- 检测 CXX 编译器 ABI 信息 - 完成
-- 尝试 OpenMP C 标志 = [-fopenmp]
-- 执行测试 OpenMP_FLAG_DETECTED
-- 执行测试 OpenMP_FLAG_DETECTED - 成功
-- 尝试 OpenMP CXX 标志 = [-fopenmp]
-- 执行测试 OpenMP_FLAG_DETECTED
-- 执行测试 OpenMP_FLAG_DETECTED - 成功
-- 找到 OpenMP:-fopenmp
-- 配置完成
-- 生成完成
【问题讨论】:
-
你少了一个
for。 -
哪个“为”,在哪里?
-
#pragma omp parallel for for(int i=0; i<square->total; i++) -
是的,我试过了……但同样的错误是“我没有在这个范围内声明”……但是如果我删除这个“pragma”的东西,那么程序就会运行
-
OP,如果我在下面的答案尝试没有帮助,请给我们一个完整但简单的示例(带有 main() 和 #includes 以及(简单)循环体),包括您如何正在尝试编译。
标签: c++ multithreading ubuntu gcc