C++中ITK滤波比Python慢

2024-09-30 22:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python中使用SimuleTK制作了一个模块,我试图通过在C++中实现它来加快速度。结果是慢了很多。在

瓶颈是位移场雅可比行列式滤波器的使用。在

这两个片段给出了过滤器的用法示例。在

1000代:C++=55,Python=8S/P>

我应该期待c++更快吗?在

def test_DJD(label_path, ngen):

  im = sitk.ReadImage(label_path)

  for i in range(ngen):
    jacobian = sitk.DisplacementFieldJacobianDeterminant(im)


 if __name__ == '__main__':


    label = sys.argv[1]
    ngen = int(sys.argv[2])
    test_DJD(label, ngen)

以及c++代码

^{2}$

我使用的是c++itk4.8.2,在ubuntu15.4上以'release'模式编译。以及python SimpleITK v9.0


Tags: 模块pathtestsyslabelim瓶颈argv
1条回答
网友
1楼 · 发布于 2024-09-30 22:25:26

您似乎在使用循环进行基准测试。使用循环进行基准测试不是一个好的实践,因为编译器和解释器对它们做了很多优化。在

我相信在这里

for i in range(ngen):
    jacobian = sitk.DisplacementFieldJacobianDeterminant(im)

python解释器很可能意识到您只使用了分配给jacobian变量的最后一个值,因此只执行循环的一次迭代。这是一个非常常见的循环优化。在

另一方面,由于您调用C++版本中的两个动态方法(^ {< CD2>}),编译器可能无法推断其他调用没有被使用,C++的版本慢了,因为所有调用都是对DePrimeFieldJiBiangIn行列式:在

另一个可能的原因是,在Python中的Itk管道并没有强制更新,因为您在C++中明确调用了^ {CD3>},但在Python版本中这一点并不明确。在

相关问题 更多 >