Сочетание массива с бустом :: odeint - PullRequest
1 голос
/ 09 марта 2020

Я написал функцию, включающую несколько вызовов 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 поддерживает тягу. Будет ли это другой вариант (что означает, что я должен переписать функции), или есть лучшие решения?

...