4

シナリオ

OpenMPGMPを使用する C99 ANSI C でアプリケーションを開発しています。当然のように多くのコアを搭載した Linux マシンになるので、基本的に大きな問題はありませんが、ここで議論したくない理由から、64 ビット Windows マシンで Cygwin で開発する必要があります。

32 ビット バージョンの gcc を使用すると、どこかでひどく問題が発生し、実際には CPU の数に等しい係数で高速になるはずの非常に粗雑なシングル スレッド バージョンよりもアプリケーションが約 60 倍遅くなります。 . それは一緒に働くことを不可能にします。何が原因なのか本当にわかりません。とにかく、代わりに MinGW の 64 ビット バージョンを使用することにしx86_64-w64-mingw32-gcc-4.5.3ました。

補足: スローダウンは私のマルチスレッドの欠陥ではないと確信しています。マルチスレッド アプリケーションは、Linux マシン上で正しく、より高速に動作します。

実際の問題

GMP の設定は簡単で、問題なくソースからコンパイルでき、魅力的に機能します。次の簡単な例をコンパイル-fopenmpすることも魅力のように機能します。

#include <gmp.h>
#include <omp.h>

int main() {
    #pragma omp parallel
    {
        mpz_t t;
        mpz_init(t);
        mpz_set_si(t,omp_get_thread_num());
        # pragma omp critical
        { 
            gmp_printf("Hello From GMP'd Thread %Zd!\n",t); 
            fflush(stdout);
        }
        mpz_clear(t);
    }
    return 0;
}

しかし、それを実行すると私に

$ ./test
test.exe: error while loading shared libraries: ?:
cannot open shared object file: No such file or directory

この質問は承知しておりますが、公式の Cygwin リポジトリ以外のバイナリをダウンロードせずに動作させたいと考えています。私の例はスイッチでコンパイルされたので、-fopenmpこれも非常に可能であると確信しています。

誰かがそれを手伝ってくれますか?事前にたくさんありがとう。

4

1 に答える 1