Что я должен выбрать между vdsp_mmul или cblas_dgemm?

Я впервые использую инфраструктуру Accelerate для огромного умножения матриц, но я не понимаю разницы между vDSP и CBLAS в этом случае. Они отличаются по производительности?

1 ответ

Решение

vDSP и CBLAS имеют разную историю, но некоторые функциональные возможности частично совпадают, поскольку охватывают схожие пространства. В целом, рассматривая высокопроизводительные функции, вы должны искать самую простую, которая соответствует вашим требованиям. Например, CBLAS поддерживает переключение между порядком основной строки и основной колонки, а vDSP - нет. Каждая опция означает, что внутри функции есть некоторая условность, и каждая условная означает, что есть время, потраченное на проверку этой условности. Таким образом, можно ожидать, что при прочих равных условиях версия vDSP будет быстрее, поскольку она, вероятно, выполняет аналогичные функции внутри, обеспечивая при этом меньше возможностей. Более простые функции также проще вызывать.

Тем не менее, вы проверяете производительность с помощью тестов, а не путем предположения о том, как что-то может быть реализовано. В некоторых случаях почерк for Цикл намного быстрее, чем эквивалентные функции ускорения, потому что компилятор может оптимизировать ваш цикл лучше, чем функция. Опять же, только тестирование может сказать вам. Иногда ускорение может представлять значительные улучшения. (Для получения дополнительной информации см. http://robnapier.net/fast-bezier-intro).

Другие вопросы по тегам