我对介子和C很陌生,如果这个问题的答案是微不足道的,请原谅我。
我想在一个C项目中使用OpenMP,我正在使用meson作为构建工具。
我想从这个 parallel for 编译 教程 示例。我的 main.c 看起来非常相似:
parallel for
main.c
#include <omp.h> #define N 1000 #define CHUNKSIZE 100 int main(int argc, char *argv[]) { int i, chunk; float a[N], b[N], c[N]; /* Some initializations */ for (i=0; i < N; i++) a[i] = b[i] = i * 1.0; chunk = CHUNKSIZE; #pragma omp parallel for \ shared(a,b,c,chunk) private(i) \ schedule(static,chunk) for (i=0; i < N; i++) c[i] = a[i] + b[i]; return 0; }
我的短 meson.build 文件包含以下内容:
meson.build
project('openmp_with_meson', 'c') # add_project_arguments('-fopenmp', language: 'c') exe = executable('some_exe', 'src/main.c') #, c_args: '-fopenmp')
在这里,我在调用 c_args 时注释掉了 executable 关键字。
c_args
executable
现在,我将讨论以下场景:
'-fopenmp'
pragma
../src/main.c:15:0: warning: ignoring pragma omp parallel [-Wunknown-pragmas] #pragma omp parallel for
c_args: '-fopenmp'
GOMP_parallel
omp_get_num_threads
omp_get_thread_num
gcc -Wall -o manually_with_gcc ../src/main.c -fopenmp
有人能告诉我如何用介子编译可执行文件吗?
发布于 2017-08-03 06:29:35
介子0.46或更高版本的
介子0.46 (2018年4月23日 已发布 ) 添加OpenMP支持 。所以,如果你有介子0.46或更高,
project('openmp_with_meson', 'c') omp = dependency('openmp') exe = executable('some_exe', 'src/main.c', dependencies : omp)
应该和GCC和Clang一起工作。
介子0.45或更早的
如果您碰巧有较旧的版本,Debian拉伸版,Ubuntu Bionic版(18.04LTS)或Fedora 27版本,您可以执行以下操作:
您需要另一个关键字arg link_args : '-fopenmp' 用于 executable() 。
link_args : '-fopenmp'
executable()
exe = executable('some_exe', 'src/main.c', c_args: '-fopenmp',