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