I recently learnedオブジェクトのメソッドを評価関数に渡し、このメソッドを呼び出すときにループでOpenMP
を使用したいと思います。実際のコードは次のとおりです。メソッドへのポインタを使用してOpenMPを使用して、
wfn
は、分子の「波動関数」を表し、物理学を表現するために保存され、多くの、多くのプライベート変数を持っている
std::vector< std::vector<double> > grid2D(wfn& W, double (wfn::*p)(double, double, double), std::vector<double> xs, std::vector<double> ys, double z) {
std::vector< std::vector<double> > fs;
int nx = (int)xs.size();
int ny = (int)ys.size();
fs.resize(nx);
for(int ix = 0; ix < nx; ix++) {
fs[ix].resize(ny);
for(int iy = 0; iy < ny; iy++) {
fs[ix][iy] = (W.*p)(xs[ix], ys[iy], z);
}
}
return fs;
}
。
iy
のループの上に#pragma omp parallel for
を挿入すると、グリッドの生成がになります。この#pragma
にプライベートとしてW.*p
を渡す方法がありますので、p
の評価はスレッドセーフですか?
pは 'const'メソッドですか? 'const'として' W'を渡すことができますか?もしそうでなければ、 'p'の' W'の状態はどうなりますか? – Zulan