Почему неположительные шаги запрещены в семействе функций 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Python: совместное использование общего кода в семействе скриптов
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Matplotlib сообщает о семействе шрифтов «Serif» не найдено
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Шаги теста огурца не отображаются в J-Unit, хотя шаги в консоли выполнены успешно
    Anonymous » » в форуме JAVA
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Почему порядок цикла влияет на эффективность кода в GEMM?
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Eigen + MKL на кластере не вызывает GEMM для умножения больших матриц
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

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