-1

2.718 を取得する行の合計としてeを計算することにしました。OpenMP を使用しないコードは完全に機能し、計算にかかる時間を測定しました。しかし、OpenMP を使用して計算を並列化すると、エラーが発生しました。プログラムをコア i7 (8 コア、4 ロジック、4 物理) で実行しています。人々が言うように、openMP を使用せずに時間を 2 倍にする必要があります。以下は私のコードです:

  #include <iostream>
  #include <time.h>
  #include <math.h>
  #include "fact.h" 
  #include <cstdlib>;
  #include <conio.h>;
  using namespace std;
   int main()
  {
clock_t t1,t2;
int n;
long double exp=0;
long double y;
int p;
cout<<"Enter n:";
cin>>n;
t1=clock();
    #pragma omp parallel for num_threads(2);
for(int i=1; i<n; i++)
{
p=i+1;
    exp=exp+(1/((fact(p))));
}
t2=clock();
double total_clock;
total_clock=t2-t1;
long double total_exp;
total_exp=exp+2;
cout<<total_clock<<"\n the time is used for parralel calculations"<<endl;
cout<<total_exp<<endl;

cin.get();
getch();
    return 0;
     }

関数を使用して数値の階乗を計算する Fact()

    long double fact(int N)

     {
    if(N < 0) 
      return 0; 
  if (N == 0) 
    return 1; 
   else 
    return N * fact(N - 1); 
    }

エラー 3 エラー C3005: ;: ディレクティブ OpenMP "parallel for" の予期しないトークン c:\users\александр\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\openmp.cpp 18

4

1 に答える 1

1

openmp プラグマを使用する場合、セミコロンは必要ないため、次のようになります。

「#pragma omp parallel for num_threads(2);」

「#pragma omp parallel for num_threads(2)」にする必要があります

なし;

于 2013-05-13T17:26:19.757 に答える