Я написал функцию, включающую несколько вызовов 2d-ffts и умножения матрицы на вектор в C ++, используя arrayfire
, так что я могу запускать и компилировать программу как на CPU, так и на GPU. Причина в том, что мой разработчик. P C не имеет графического процессора, но у моего производства P C есть один.
Теперь эта функция служит правой стороной для ODE, которую я хотел бы решить. Один из подходов заключается в использовании odeint
, но odeint
(изначально) не поддерживает массивы массива. Таким образом, перед каждым шагом с использованием odeint
мне нужно скопировать 2d-массивы из arrayfire в std::vector<>
, поместить их в odeint
-функцию и вызвать мою функцию, где я должен перенести данные обратно в af::arrays
в этой функции. После обработки данных мне нужно перенести данные обратно в векторы, прежде чем вернуться к ode-solver. Этот подход кажется излишне сложным и медленным.
Следовательно, есть ли другие варианты, которые я мог бы использовать для решения этого ODE? Исходя из своего опыта, я хотел бы запустить его на графическом процессоре, чтобы получить доступ к преимуществам производительности для zgemv и 2d-FFT, но я (в настоящее время) не могу разработать его из-за отсутствия графического процессора.
Я видел, что boost.odeint поддерживает тягу. Будет ли это другой вариант (что означает, что я должен переписать функции), или есть лучшие решения?