Numba SVML включен, но «не может векторизовать из-за конфликтов памяти» при умножении матрицы на векторPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Numba SVML включен, но «не может векторизовать из-за конфликтов памяти» при умножении матрицы на вектор

Сообщение Anonymous »

Я пытаюсь оптимизировать простую функцию умножения матрицы на вектор с помощью Numba, используя SVML. Однако при проверке векторизации SVML с помощью python test.py | grep svml, LLVM сообщает: «Невозможно векторизовать из-за конфликтов памяти». Я проверил, что SVML работает, и код из этой проблемы GitHub может успешно обнаруживать инструкции SVML.
Вот минимальный пример, воспроизводящий проблему:

Код: Выделить всё

import numpy as np
import numba
import llvmlite.binding as llvm

llvm.set_option("", "--debug-only=loop-vectorize")

@numba.njit(parallel=True, fastmath=True)
def njit_generate_data(y, S, x, noise, n_observation, support, noise_level=0.1):
x[support] = np.random.randn(len(support))
for i in numba.prange(n_observation):
y[i] = S[i] @ x + noise[i] * noise_level
return S, x, y

i8 = numba.types.int8
f32 = numba.types.float32
b = numba.types.bool_
njit_generate_data.compile((f32[:], f32[:, :], f32[:], f32[:], i8, b[:], f32))

print(njit_generate_data.inspect_asm(njit_generate_data.signatures[0]))
Ошибка LLVM:

Код: Выделить всё

LV: Can't vectorize due to memory conflicts
Информация о системе:
  • Python 3.10
  • Нумба 0.60.0
  • Код: Выделить всё

    numba -s | grep SVML
    вывод:

    Код: Выделить всё

    __SVML Information__
    SVML state, config.USING_SVML                 : True
    SVML library found and loaded                 : True
    llvmlite using SVML patched LLVM              : True
    SVML operational                              : True
    
Что я пробовал:

[*]Удален диапазон распараллеливания
[*]Расширенное умножение матриц вручную (я думал, это сработает, но не сработало)
[*]Переключение параллельного = True /False и fastmath=True/False
[*]Добавление непрерывного массива для x, y и S в соответствии с этим вопросом

Может ли я упустить что-нибудь из логики векторизации в Numba или LLVM, что могло бы вызвать этот конфликт?

Подробнее здесь: https://stackoverflow.com/questions/790 ... trix-vecto
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Есть ли разница между SVML и нормальными внутренними квадратными корневыми функциями?
    Anonymous » » в форуме C++
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между @ и * при умножении матрицы Python?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • SSE4.1 медленнее, чем SSE3 при умножении матрицы 4x4?
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Как векторизовать scipy.integrate.quad для вычисления поэлементного интеграла матрицы
    Anonymous » » в форуме Python
    0 Ответы
    70 Просмотры
    Последнее сообщение Anonymous
  • SSE4.1 медленнее, чем SSE3 на умножении матрицы 4x4?
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

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