В программе, которую я пишу прямо сейчас, я хочу использовать либо GPU, либо CPU для вычисления (для сравнения одного с другим). Для того, чтобы сделать это, я хотел бы иметь какой-то универсальный указатель, который я мог бы инициализировать с экземпляром device_vector или host_vector, как это:C++ CUDA Полиморфизм вектора тяги
ptr = new host_vector<float>();
или
ptr = new device_vector<float>();
Оба host_vector и device_vector наследоваться от деталей :: vector_base но я не могу использовать указатель detail :: vector_base, потому что vector_base (что означает device_vector и host_vector тоже) является классом шаблона, где шаблон имеет два аргумента - тип, который он содержит, и используемый им распределитель. Оба типа векторов используют разные распределители, что, в свою очередь, означает два разных указателя.
Есть ли способ определить ptr, чтобы я мог использовать его, как в моих примерах?
Не можете ли вы создать шаблонный код и просто создать отдельные экземпляры для host_vector и device_vector? Почему нужны указатели? – talonmies
Ответ здесь, скорее всего, будет делать то же самое, что и Thrust, т. Е. Использовать полиморфизм времени компиляции. – IdeaHat
@talonmies Две причины: 1) Я хочу вернуться к коду CPU, если у GPU нет требуемой функциональности 2) Я хотел бы дать пользователю выбор вычислительного устройства из GUI – user2521472