と:: runge_kutta-X 'の互換性は、私が使用していたクラスステッパーの型シグネチャはここに要約される:それはすることができテンプレートパラメータ:: odeint CUDA/OpenMPの
boost::numeric::odeint::runge_kutta_dopri5<state_type_> stepper;
これまでのところとても良いです。できます。
プログラムをcuda(推力を使用)に移植し、後でopenmpに移植する予定です。私は、次のように宣言を変更:
boost::numeric::odeint::runge_kutta_dopri5< state_type_
, double
, state_type_
, double
, boost::numeric::odeint::vector_space_algebra
> stepper;
私はthis problemにソリューションを追ったが、これはコンパイルされません。
In file included from /usr/include/boost/numeric/odeint/stepper/euler.hpp:26:
/usr/include/boost/numeric/odeint/algebra/default_operations.hpp:87:27: error: invalid operands to binary expression ('double' and 'const std::vector<double, std::allocator<double> >')
t1 = m_alpha1 * t2 + m_alpha2 * t3;
~~~~~~~~^~~
私はCUDAに移植する際に最小限の変更が後で必要とされるように、ステッパを宣言するための最もポータブルな方法は何か疑問に思って。
です。これはいいね。また、私はclang ++で得たコンパイルエラーメッセージを追加しました。私はこの警告については無知です。私はテンプレートの型名をサンプルコードのように使用しています。私が1つのテンプレートtypenameを渡す最初の宣言で、それはうまく動作します(実際には既存のGSLインテグレータよりもわずかに優れています)。 – Dilawar
あなたのstate_typeは 'ベクトル< double >'です。ベクトル空間代数は、 'a * x + b * y'のような式を書くことができ、'ベクトル< double >'では不可能であることを意味します。 Eigen!のような線形代数ライブラリを使用してください。 – headmyshoulder