В ARM ComputeLibrary мы можем иметь объект Tensor различных типов.При выборе типа Tensors мы передаем тип инициализатору распределителя Tensor, например, float32 здесь:
my_tensor.allocator()->init(armcl::TensorInfo(shape_my_tensor, 1, armcl::DataType::F32));
Лучшее введение в тему размещения тензорных элементов можно найти здесь .
Существует несколько типов ARMCL на выбор ( см. Здесь список ).Обратите внимание, что типы ComputeLibrary не являются примитивными, хотя можно легко скопировать в них примитивные типизированные данные.
Однако при написании шаблонного кода C ++, где можно иметь функции, определенные для произвольных типов, этот «выбор типа, которыйэто не тип "создает проблему проектирования.
Скажем, я хочу написать функцию, которая принимает данные примитивных типов, таких как int
, float
или double
.В шаблонной функции этот тип будет называться типом T
(или любым другим).
Теперь скажите, что я хочу скопировать эти данные в Tensor ARMCL в рамках шаблонной функции.Этот тензор должен быть инициализирован с правильным типом данных.Нам нужно, чтобы этот тип данных хорошо подходил для типа T
, поэтому, если T
- это float
, то наш ARMCL должен иметь тип F32
, если T
- это int
, тогда наш тензордолжно быть S8
и т. д.
Нам нужно какое-то отображение между примитивными типами и типами ARMCL.
Был бы "хороший" и разумный подход иметь функцию полезности, котораяпринимает тип T
и, возможно, использует оператор switch и что-то вроде std::is_same
.Затем оператор switch возвращает соответствующий объект DataType ARM Compute Library для T
?Или есть другой подход, который мог бы быть более элегантным?
Я искал документы , чтобы увидеть, обработано ли это уже, но пока безрезультатно.Если он не обрабатывается, то, возможно, это не относится к вопросу ARMCL и имеет более широкий охват.