Я пытаюсь понять преимущества создания ядра, такого как:
from numba import guvectorize
@guvectorize(['void(float64[:,:], float64[:,:],'(m,n),(n,p)->(m,p)', target='cuda')
def matmul(A, B, C):
m, n = A.shape
n, p = B.shape
for i in range(m):
for j in range(p):
C[i, j] = 0
for k in range(n):
C[i, j] += A[i, k] * B[k, j]
, которое просто возвращает умножение матриц двух матриц.Чем это лучше, чем выполнять этот же процесс последовательным образом, поскольку все матрицы загружаются в ядро, которое, похоже, просто выполняет последовательную операцию.
Все, что я сделал, это перенес последовательную операцию на одно ядро CUDA на моем графическом процессоре?
По-разному ли обрабатываются циклы и операции с массивами внутри функций ядра