Boost
いくつかの初期速度と位置を ( を使用して) 生成し、特定の距離を伝播するのにかかる時間を計算する単純なプログラムがあります。横距離 に基づいて(x, y)
、最終的な軸方向 ( z
) 速度がベクトルに追加されます。簡単なプログラムは次のとおりです。
#include <iostream>
#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>
using namespace std;
int main()
{
boost::mt19937 engine(static_cast<unsigned int>(time(0)));
boost::normal_distribution<double> nd(0.0, 1.0);
boost::variate_generator< boost::mt19937, boost::normal_distribution<double> > normal_std_one(engine, nd);
double coordX, coordY, coordZ, time;
double velX, velY, velZ;
const double factor = 0.01;
const double distance = 15.0;
vector<double> cont;
int i;
for(i=0; i<1000000000; i++)
{
coordX = factor*normal_std_one();
coordY = factor*normal_std_one();
coordZ = 0.0;
velX = normal_std_one();
velY = normal_std_one();
velZ = 20.0*normal_std_one()+300;
time = distance/velZ;
coordX += velX*time;
coordY += velY*time;
if(sqrt(coordX*coordX + coordY*coordY) < 0.02)
{
cont.push_back(velZ);
}
}
cout << cont.size() << endl;
return 0;
}
for
を使用して -loop を並列化するのが良い追加だと思いましたOpenMP
。これを行うには、ループが開始される直前に次の行を追加します。
#pragma omp parallel for
さらに-fopenmp
、コンパイラ オプションに追加し、リンカー設定に「-fopenmp*」を追加しました。私のプログラムはエラーなしでコンパイルおよびリンクされますが、ファイルを実行すると次のメッセージが表示されます。
Process terminated with status -1073741819 (0 minutes, 2 seconds)
ここで何が間違っていたのか、私にははっきりしません。Windows と g++ を使用しています (Code::Blocks IDE を使用)。