#python #multidimensional-array #parallel-processing #gpu #spatial
#python #многомерный массив #параллельная обработка #графический процессор #пространственный
Вопрос:
У меня есть два массива Numpy, которые описывают 3D-модель, каждый из которых имеет форму (471843, 3)
, где ‘3’ обозначает значения пространственных координат, x, y и z, а ‘471843’ являются вершинами. Я пытаюсь вычислить расстояние Хаусдорфа между ними, используя функцию Хаусдорфа из https://github.com/mavillan/py-hausdorff.
Функция выполняется, но, похоже, не останавливается. Он работал почти 40 минут и все еще не показывал никаких признаков остановки. Это потому, что это займет много времени или по какой-то другой причине? Кроме того, насколько я понимаю, это распараллеливаемая функция, так как я могу экспортировать выполнение на графические процессоры CUDA, чтобы ускорить процесс?
Ответ №1:
Вопрос: «Это потому, что это займет много времени или по какой-то другой причине?»
Протестируйте это!
Запустите ту же самую функцию для ( 1E1, 1E2, 1E3, 1E4 )
точек данных, и вы сможете легко получить ETA для 4.7E5
точек данных. Это справедливо, не так ли?
from zmq import Stopwatch; aClk = Stopwatch()
SIZINGs = ( 1E1, 2E1, 5E1,
1E2, 2E2, 5E2,
1E3, 2E3, 5E3,
1E4, 2E4, 5E4
)
MASK = "INF: a problem-size {0:>5d} took {1:>12d} [us] to process"
TIMINGs = {}
#-------------------------------------------------------------------------
print( 80*"_" )
for aSize in SIZINGs:
aClk.start()
_ = 3D_wrapper_for_HausdorfDistance( data = DATA[:int(aSize),:],
distance = aCustomHausdorfDistance_in3D
)
TIMINGs[aSize] = aClk.stop()
print( MASK.format( aSize, TIMINGs[aSize] )
print( 80*"_" )
#-------------------------------------------------------------------------
Вопрос: «… как я могу экспортировать выполнение на графические процессоры CUDA, чтобы ускорить процесс?»
Сначала решите, имеет ли смысл проектировать и выполнять CUDA-ядро, чтобы оно имело смысл для использования с точки зрения производительности. Если это обнаружится, не будет никакого шанса работать быстрее, чем на нативном N x 3 [GHz]
—устройствеБОЛЬШИМ кешем, тогда и только тогда начинайте попытки портировать алгоритм, чтобы эффективно использовать современные GPU SMX SIMD-процессоры ограниченной точности.