Показатели производительности для Julia I, которые я видел до сих пор, например, http://julialang.org/, сравнивают Julia с чистым Python или Python + NumPy, В отличие от NumPy, SciPy использует библиотеки BLAS и LAPACK, где мы получаем оптимальную многопоточную реализацию SIMD. Если предположить, что производительность Julia и Python одинакова при вызове функций BLAS и LAPACK (под капотом), как производительность Julia сравнивается с CPython при использовании Numba или NumbaPro для кода, который не вызывает функции BLAS или LAPACK?
Одна вещь, которую я замечаю, это то, что Julia использует LLVM v3.3, а Numba использует llvmlite, который построен на LLVM v3.5. Неужели Julia LLVM предотвращает оптимальную реализацию SIMD на новых архитектурах, таких как Intel Haswell (инструкции AVX2)?
Меня интересуют сравнения производительности как для кода спагетти, так и для небольших циклы DSP для обработки очень больших векторов. Последнее более эффективно обрабатывается процессором, чем GPU для меня из-за накладных расходов на перемещение данных в и из памяти устройства графического процессора. Меня интересует только производительность на одном процессоре Intel Core i7, поэтому производительность кластера для меня не важна. Особый интерес для меня представляет легкость и успех при создании параллельных реализаций функций DSP.
Вторая часть этого вопроса - сравнение Numba с NumbaPro (игнорирование MKL BLAS). Нужна ли NumbaPro target="parallel"
, учитывая новый аргумент nogil
для декоратора @jit
в Numba?