Используйте графический процессор для динамического искажения времениPython

Программы на Python
Anonymous
Используйте графический процессор для динамического искажения времени

Сообщение Anonymous »

Я работаю над проектом по созданию алгоритма DTW на графическом процессоре
Я написал этот код. Но он работает только на коротких последовательностях.
Пока я хочу использовать его для Огромного количества последовательностей длиной около 1000.
Я был бы рад, если бы вы помогли мне внести необходимые изменения
спасибо.
https://github.com/amirbroker/cudaDTW/tree/main
from numba import cuda

@cuda.jit
def dtwClc(seq, trg,dtw_matrix,lenEachSeq,lenEachTrg,lenDTW, INDList, dtw):
tx = cuda.threadIdx.x
ty = cuda.blockIdx.x

if ty > lenDTW:
return

id1, id2 = INDList[ty]

for eachELeachTaq in range(1, lenEachTrg + 1):
# if lenEachSeq == tx:
for eachELeachSeq in range(1, lenEachSeq + 1):
if lenEachSeq == tx:
cost = (seq[id1][0:lenEachSeq][eachELeachSeq - 1] - trg[id2][0:lenEachTrg][eachELeachTaq - 1])**2
# cost = (seq[id1][0:lenEachSeq][eachELeachSeq - 1] - trg[id2][0:lenEachTrg][eachELeachTaq - 1])**2
dtw_matrix[eachELeachSeq, eachELeachTaq] = cost + min(dtw_matrix[eachELeachSeq - 1, eachELeachTaq], # Insertion
dtw_matrix[eachELeachSeq, eachELeachTaq - 1], # Deletion
dtw_matrix[eachELeachSeq - 1, eachELeachTaq - 1] # Match
)

cuda.syncthreads()
dtw[ty] = dtw_matrix[-1, -1] ** 0.5
############################
from DTW import dtwClc
import numpy as np
from numba import cuda
from datetime import datetime

seq = cuda.to_device(np.random.rand(50,80))
trg = cuda.to_device(np.random.rand(100,100))

startTime = datetime.now()
lenSeq = seq.shape[0]
lenTrg = trg.shape[0]

lenEachSeq = seq.shape[1]
lenEachTrg = trg.shape[1]

INDList = cuda.to_device(np.array([(i,j) for i in range(lenSeq) for j in range(lenTrg)]))

dtw_matrix = np.zeros((lenEachSeq+1, lenEachTrg+1))
dtw_matrix[0, :] = np.inf
dtw_matrix[:, 0] = np.inf
dtw_matrix[0, 0] = 0

dtw = cuda.to_device(np.zeros([lenSeq * lenTrg]))

lenDTW = dtw.shape[0]

dtwClc[lenDTW, 1024](seq, trg,dtw_matrix,lenEachSeq,lenEachTrg,lenDTW, INDList, dtw)
dtw = dtw.copy_to_host()

print(dtw)


Подробнее здесь: https://stackoverflow.com/questions/790 ... me-warping

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