在本机python中加速Hausdorff?

问题描述

我有两个用于描述3D模型的Numpy数组,每个数组的形状均为(471843,3),其中的“ 3”表示空间坐标值,x,y和z和“ 471843”是顶点。 我正在尝试使用https://github.com/mavillan/py-hausdorff中的Hausdorff函数来计算两者之间的Hausdorff距离。

函数正在执行,但似乎没有停止。它运行了将近40分钟,仍然没有任何停止的迹象。这是因为需要很长时间还是其他原因?另外,从我收集到的它的可并行化功能开始,那么如何将执行导出到CUDA GPU来加快处理速度?

解决方法

Q “这是因为需要很长时间还是其他原因?”

测试!
( 1E1,1E2,1E3,1E4 )数据点上运行相同的功能,您可以轻松得出4.7E5数据点的ETA。公平,不是吗?

   from zmq import Stopwatch; aClk = Stopwatch()

   SIZINGs = ( 1E1,2E1,5E1,2E2,5E2,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*"_" )
   #-------------------------------------------------------------------------

Q “ ...如何将执行导出到CUDA GPU以加快处理速度?”

首先解决,如果设计和执行CUDA内核有意义,以便在性能方面有意义就可以使用。如果显示,则没有比本地N x 3+ [GHz]- LARGE-Cache -设备更快的执行速度的机会,然后才开始努力移植算法,以有效利用受限精度的当代GPU SMX SIMD处理器。