c ++ 11 — обработка гетерогенных векторов в (C ++ — AMP)

Я написал код, который читает и анализирует переменное число файлов .dat и сохраняет их в двухмерных векторах, каждый файл в отдельном векторе. Теперь я пытаюсь воспользоваться преимуществами параллельной обработки (GPU) для выполнения некоторых вычислений по этим векторам. Тем не менее, многие запросы все еще неоднозначны для меня, и я был бы признателен, если бы вы могли прояснить их для меня.

  1. Должен ли я определить extentРазмеры, когда я заявляю? так как у меня есть переменная номер измерения на основе файла. или я могу объявить extent без объявления размеров как concurrency::extent<2> eA; если нет, то какой будет альтернативный вариант?
  2. Когда я заявляю array<T,N>; могу ли я использовать T как универсальный тип (например, используя boost::any) так как мои векторы неоднородны (некоторые цифры и некоторые тексты)?

2

Решение

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

Без дальнейшего описания вашей проблемы трудно предложить больше советов.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]