Я действительно не понимаю, почему существует это ограничение. Разве BLAS не может просто поверить мне, что я действительно хочу нулевой или отрицательный шаг? Насколько я понимаю, целые числа Fortran подписываются по умолчанию, поэтому типы параметров не являются причиной (отказ от ответственности: я не очень хорошо знаю Fortan).
Действительно, существуют вполне разумные варианты использования неположительных шагов массива:
[*]нулевой шаг: в классе многомерного массива, нулевой шаг включает трансляцию в стиле numpy.
[*]отрицательный шаг: отрицание шага позволяет просматривать массив в обратном порядке вдоль любой оси без копирования. Это может быть полезно, например. при переворачивании ядер свертки, а свертки можно эффективно реализовать с помощью gemm. Альтернативно, вертикальную ось изображения можно перевернуть, что удобно, поскольку существуют разные соглашения: ось направлена вверх в формате postscript/pdf и вниз в формате png (и многих других).
< /ul>
Меня интересуют два аспекта:
- Хотелось бы понять, почему ограничение существует. Неужели только потому, что проектировщики BLAS не подумали о таких вариантах использования? Я стал жертвой того, что кто-то пытался обнаружить ошибку, которая действительно является особенностью? Или ограничение приводит к повышению производительности? Последнее мне сложно представить.
- Есть ли способ обойти это ограничение, не жертвуя (слишком сильно) производительностью? На данный момент мне нужно что-то, что работает на Mac на C++, но в долгосрочной перспективе оно все равно должно быть основано на BLAS, чтобы оно работало на всех платформах.
Подробнее здесь: https://stackoverflow.com/questions/448 ... -functions