0

彼ら。OpenMP を使用してループを高速化しようとしています。

整数変数を使用するループを高速化すると、すべてが正しく機能します。

  void main()
{
    //mpz_class i("0");
    //mpz_class k("1");
    //mpz_class l("1211728594799");
    int k = 9;
    int i = 0;
    int l = 1998899087;

#pragma omp parallel for
    for (i=k; i <= l; i++) {
        if (i == 1998899085)
            printf("kkk");
    }


    system("pause");


}

ループで MPIR 変数の使用を開始すると、Visual Studio 2015 でプログラムをビルドするときにエラーが発生します。これらのエラーの数は次のとおりです: C3015、C3017、C3019。これらのエラーの原因となるコードは次のとおりです。

    void main()
{
    mpz_class i("0");
    mpz_class k("1");
    mpz_class l("1211728594799");
    //int k = 9;
    //int i = 0;
    //int l = 1998899087;

#pragma omp parallel for
    for (i=k; i <= l; i++) {
        if (i == 1998899085)
            printf("kkk");
    }


    system("pause");


}

pragma omp parallel for を無効にすると、MPIR 自体は正しく動作しますが、コードは問題なく動作しますが、同じ範囲の数値の int 変数を使用するよりもはるかに遅く動作します。

Open MP を MPIR で正しく動作させるにはどうすればよいですか? また、並列実行することでプログラムを高速化できますか?

4

0 に答える 0