Почему неположительные шаги запрещены в семействе функций blas gemm?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему неположительные шаги запрещены в семействе функций blas gemm?

Сообщение Anonymous »

В документации sgemm по netlib указано, что шаги массива LDA и LDB должны быть >= 1 и достаточно большими, чтобы столбцы не перекрывались. Действительно, реализация в платформе Apple Accelerate/veclib проверяет эти условия и существует, если они нарушены.

Я действительно не понимаю, почему существует это ограничение. Разве BLAS не может просто поверить мне, что я действительно хочу нулевой или отрицательный шаг? Насколько я понимаю, целые числа Fortran подписываются по умолчанию, поэтому типы параметров не являются причиной (отказ от ответственности: я не очень хорошо знаю Fortan).

Действительно, существуют вполне разумные варианты использования неположительных шагов массива:


[*]нулевой шаг: в классе многомерного массива, нулевой шаг включает трансляцию в стиле numpy.
[*]отрицательный шаг: отрицание шага позволяет просматривать массив в обратном порядке вдоль любой оси без копирования. Это может быть полезно, например. при переворачивании ядер свертки, а свертки можно эффективно реализовать с помощью gemm. Альтернативно, вертикальную ось изображения можно перевернуть, что удобно, поскольку существуют разные соглашения: ось направлена ​​вверх в формате postscript/pdf и вниз в формате png (и многих других).
< /ul>

Меня интересуют два аспекта:
  • Хотелось бы понять, почему ограничение существует. Неужели только потому, что проектировщики BLAS не подумали о таких вариантах использования? Я стал жертвой того, что кто-то пытался обнаружить ошибку, которая действительно является особенностью? Или ограничение приводит к повышению производительности? Последнее мне сложно представить.
  • Есть ли способ обойти это ограничение, не жертвуя (слишком сильно) производительностью? На данный момент мне нужно что-то, что работает на Mac на C++, но в долгосрочной перспективе оно все равно должно быть основано на BLAS, чтобы оно работало на всех платформах.


Подробнее здесь: https://stackoverflow.com/questions/448 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»