2017-08-02 9 views
0

中間子で構築されたCプロジェクトでのOpenMPを使用する方法、私はCプロジェクトでのOpenMPを使用したい...私はCを中間子とするのは非常に新しいです

をご容赦ください私はメソーンをビルドツールとして使用しています。
の例をtutorialからコンパイルしたいとします。 私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ファイルがこれを含んでいます

project('openmp_with_meson', 'c') 

# add_project_arguments('-fopenmp', language: 'c') 

exe = executable('some_exe', 'src/main.c') #, c_args: '-fopenmp') 

私はここexecutableへの呼び出しでc_argsキーワードをコメントアウト。
は今、私は次のシナリオで終わる:オプションで../src/main.c:15:0: warning: ignoring pragma omp parallel [-Wunknown-pragmas] #pragma omp parallel for

  • c_args: '-fopenmp''-fopenmp'オプションなしで

    • 、私はpragmaが不明であり、(私が期待したように)無視されるという警告を取得します挿入された、私の代わりに私がGOMP_parallelomp_get_num_threadsomp_get_thread_numに未定義の参照のエラーを取得し、私はプログラムのコンパイルgcc -Wall -o manually_with_gcc ../src/main.c -fopenmpとexecuを使って手動でのgccを使用する場合は何も
    • を内蔵していない取得し、もはや上記の警告を得ることはありません何のエラーもありません。

    実行可能ファイルをメソーンでコンパイルする方法を教えてもらえますか?

  • 答えて

    1

    executable()の別のキーワードをlink_args : '-fopenmp'にする必要があります。

    exe = executable('some_exe', 'src/main.c', c_args: '-fopenmp', link_args : '-fopenmp') 
    

    メゾンは、コンパイルとリンクの2つの段階でCプログラムをビルドします。コンパイルにはc_args、リンクにはlink_argsという余分な引数を渡すことができます。

    オプション-fopenmpは、コンパイル中のOpenMPディレクティブを可能にし、

    the flag also arranges for automatic linking of the OpenMP runtime library

    つまり、-fopenmpはデュアルユースオプションです。

    ここで、上記は単純で良好です。しかし、理解した上で、-fopenmpでプログラムをコンパイルしてOpenMP指令を有効にし、OpenMPライブラリを-fopenmplink_argsなしでリンクすることもできます。ここで

    は完了meson.buildです:

    project('openmp_with_meson', 'c') 
    
    cc = meson.get_compiler('c') 
    libgomp = cc.find_library('gomp') 
    
    exe = executable('some_exe', 'src/main.c', 
         c_args: '-fopenmp', 
         dependencies : libgomp) 
    
    関連する問題