编译cpp文件时代码不并行,但是c是并行的

Posted

技术标签:

【中文标题】编译cpp文件时代码不并行,但是c是并行的【英文标题】:Code is not paralleled when compiling cpp file, but c is paralleled 【发布时间】:2015-07-15 09:51:51 【问题描述】:

我正在运行来自here 的示例,它允许 Matlab 运行 C 函数,其中发生一些并行处理(在 OpenMP 的支持下)。

编译:

mex mex_sum_openmp.c CFLAGS="\$CFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"

在 Matlab 中:

>> tic;mex_sum_openmp(x);toc 
Elapsed time is 0.186795 seconds.

示例运行正常,但如果我将文件扩展名重命名为 cpp,那么代码突然不并行了。

编译:

mex mex_sum_openmp.cpp CFLAGS="\$CFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"

在 Matlab 中:

>> tic;mex_sum_openmp(x);toc 
Elapsed time is 0.466988 seconds.

这种 CPP+OpenMP+MEX 的组合根本不起作用还是我遗漏了什么?

我使用 Matlab 2014a 和 GCC 4.8.4 运行 Ubuntu 14.04。 Mex 编译器抱怨不支持的 GCC 版本(它支持 GCC 4.7.x),但似乎无论如何都能编译。这会是个问题吗?

【问题讨论】:

为什么需要用.cpp 扩展名来命名c 文件? CFLAGS 用于 C,CXXFLAGS 用于 C++。请注意,CPPFLAGS 仍用于其他用途。为避免混淆,强烈建议在提及 C++ 语言时避免使用非单词“CPP”。 谢谢@n.m.!这确实是 CXXFLAGS 的问题。运行 mex mex_sum_openmp.cpp CXXFLAGS="\$CXXFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp" 确实与代码并行! 如果您自己解决了问题,请提供您的解决方法,以便其他面临相同问题的用户可以从中受益。自己做或等待n.m.将像他在评论中所做的那样回答它 不要在题名中写已解决:,如果已解决,请写出自己的答案并标记为正确。 【参考方案1】:

作为@n.m。指出为了编译一个 c++ 文件,我必须使用 CXXFLAGS 而不是 CFLAGS。

跑步

mex mex_sum_openmp.cpp CXXFLAGS="\$CXXFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"

解决了问题。

【讨论】:

以上是关于编译cpp文件时代码不并行,但是c是并行的的主要内容,如果未能解决你的问题,请参考以下文章

如何减少单个 .cpp 文件的大型 C++ 库的编译时间?

如何提高Qt工程的编译速度

尽管并行编译,Mex 文件仍串行执行

如何并行执行 cython 文件编译?

为什么Javac不在多核上运行?

并行程序不会使