задание "Эффективно использовать векторные расширение (SIMD) микропроцессоров на примере алгоритма метода сопряженных градиентов"
Для решение задачи я поступил таким образом№
Нашел готовый код алгоритма метода сопряженных градиентов написанный на numpy (я уточнил что numpy по умолчанию использует векторные расширение SEE). То есть у меня есть уже векторизованный код, теперь осталось переписать данный код на чистом питоне, чтобы получить разницу в производительности.
Я думаю сделать так: Переписать только те участки кода , где используется функция numpy.dot на чистом питоне , чтобы замедлить выполнения кода.
Как думаете я правильно делаю? МОжете пожалуйста дать советы или сделать замечания по моим ошибкам (Код не я написал, скопипастил с гит)
import numpy as np
import time
def conjGrad(A,x,b,tol,N):
r = b - A.dot(x)
p = r.copy()
for i in range(N):
Ap = A.dot(p)
alpha = np.dot(p,r)/np.dot(p,Ap)
x = x + alpha*p
r = b - A.dot(x)
if np.sqrt(np.sum((r**2))) <tol:
print('Itr:', i)
break
else:
beta = -np.dot(r,Ap)/np.dot(p,Ap)
p = r + beta*p
return x
n = 1000
P = np.random.normal(size=[n, n])
A = np.dot(P.T, P)
b = np.ones(n)
tol=1e-5
N=1000
x =np.ones(n)
print('start')
t1=time.time()
x=conjGrad(A,x,b,tol,N)
t2=time.time()
print('время выполнения',t2-t1,'секунд')
print(' конечное значение х равно',x)
print(' количество элементов в х равно',len(x))
print('размерность массива',np.shape(x))
Вижу слово simd и спрашиваю: а при чем тут питон?
numpy использует вроде SIMD
Она вроде процессорная
Обсуждают сегодня