Thrusts'ın GPU hesaplama yeteneği ve odeint'in ODE çözme yeteneğini öğrenmek için basit bir program oluşturmaya çalışıyorum. Daha sonra daha karmaşık problemlere geçme umuduyla GPU üzerindeki Runge-Kutta yöntemini kullanarak basit ODE'leri (yani dy/dx = 3x^2y) çözebiliyorum. Sadece odeint kullanılarak göreli kolaylıkla bunu yapabilmek duyuyorum:Basit ODE'lerin Nasıl Çözümü C++ 'da Thrust ve odeint Kullanılıyor
#include <boost/lambda/lambda.hpp>
#include <boost/numeric/odeint.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace boost::numeric::odeint;
using namespace std;
typedef std::vector<double> state_type;
void sys(state_type &y, state_type &dydx, double x){
dydx[0] = 3*x*x*y[0]; // dydx = 3*x^2*y
}
int main(){
state_type y(3);
runge_kutta4<state_type> rk4;
y[0] = 2; // y0 = 2
double x = 1; // x0 = 1
double h = 0.1; // h = 0.1
for (int i = 0; i < 100; i++,x+=h){
rk4.do_step(sys,y,x,h);
cout << "(";
cout << x+h;
cout << ",";
cout << y[0];
cout << ")";
cout << endl;
}
}
Ben, ancak bu belayı itme devreye girer nasıl anlayış değilim. Karşılaştığım çevrimiçi kaynakların çoğu örnek olarak Lorenz parametre çalışmasını içeriyor, ancak bunun mevcut seviyem için çok gelişmiş olduğunu hissediyorum.
Cihaz ve ana makine vektörleri kavramını anlıyorum, ancak sorunumun GPU kullanılarak nasıl çözüleceğini anlayamıyorum. Kendi araştırmalarımdan CUDA (değil itme) kullanarak basit cebirsel (diferansiyel olmayan) denklemleri çözebildim. Ancak, odeint ve itki bilgimi birleştirmek, tahmin ettiğimden daha zor olduğunu kanıtlıyor.
1) Runge Kutta
2) sistem işlevlerinin uyarlanması step uyarlanması bu (dydx = 3 * x * x * y [0]: Özellikle
, karıştı üzereyken örnek). odeint ve
Bu soru çok basit ya da çok fazla soran ise özür dileriz programa İtme/boost dizinleri hem dahil
3); StackOverflow'ta yeniyim ve henüz tüm "soru sorma" protokolünü ve sorunu kendi başıma çözmem için ne kadar çaba göstermem gerektiğini öğrendim.