при попытке создать объектно-ориентированную реализацию OpenACC Я наткнулся на this question.Функция OpenACCArray swap
Оттуда я взял код, предоставленный @ mat-colgrove на GTC15 (код доступен по адресу http://www.pgroup.com/lit/samples/gtc15_S5233.tar).
Поскольку мне интересно, как использовать объекты для управления данными с помощью OpenACC, я опубликовал another question. Я был очень впечатлен легкостью функции OpenACCArray::swap
, поэтому я создал небольшой пример для ее проверки (см. gist).
- Сначала я попытался просто поменяться местами и надеюсь, что достаточно заменить указатели на хосте, но это закончится ошибкой фатальной памяти. (предположительно из-за того, что элементы размера и емкости не обновляются на устройстве)
- Более безопасный подход, который, как я предполагал, заключается в обновлении хоста, массивов подкачки и устройства обновления. Это работает, но создает неправильные результаты.
Я собираю для ускорителей nvidia.