彼ら。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 で正しく動作させるにはどうすればよいですか? また、並列実行することでプログラムを高速化できますか?