Я написал код, который читает и анализирует переменное число файлов .dat и сохраняет их в двухмерных векторах, каждый файл в отдельном векторе. Теперь я пытаюсь воспользоваться преимуществами параллельной обработки (GPU) для выполнения некоторых вычислений по этим векторам. Тем не менее, многие запросы все еще неоднозначны для меня, и я был бы признателен, если бы вы могли прояснить их для меня.
extent
Размеры, когда я заявляю? так как у меня есть переменная номер измерения на основе файла. или я могу объявить extent
без объявления размеров как concurrency::extent<2> eA;
если нет, то какой будет альтернативный вариант? array<T,N>
; могу ли я использовать T
как универсальный тип (например, используя boost::any
) так как мои векторы неоднородны (некоторые цифры и некоторые тексты)?1) Нет, невозможно установить размеры экстента во время выполнения. Это параметр шаблона и должен быть установлен во время компиляции. Вы можете установить размер каждого измерения только во время выполнения.
В качестве альтернативы можно было бы объявить одномерный массив, а затем вручную распаковать различные измерения с помощью математического смещения индекса в своей лямбда-выражении C ++ AMP.
2) Нет. C ++ AMP ограничен подмножеством типов, которые может обрабатывать графический процессор. Вы не можете использовать boost :: any.
C ++ AMP-совместимая функция или лямбда может использовать только C ++
AMP-совместимые типы, которые включают следующее:
- int
- unsigned int
- float
- double
- C-style arrays of int, unsigned int, float, or double
- concurrency::array_view or references to concurrency::array
Без дальнейшего описания вашей проблемы трудно предложить больше советов.
Других решений пока нет …