我开始使用Halide并从Python环境中使用它。在Python环境中,数据被传递为Numpy数组,实际上是别名到其他地方定义的C++数组。
然而,当我调用Halide函数时,出现错误:
约束违反:img.stride.0 (520) == 1 (1) 已中止(核心已转储)
可以通过将Numpy数组复制到Fortran布局数组来“解决”此问题:
img=np.copy(img,order="F")
res=np.copy(res,order="F")
使用img和res对我的输入和输出图像进行处理。但请注意,这涉及到额外的复制操作,这对于整体全局内存访问来说非常不好。
我该如何解决这个问题?我一直在考虑的一种方法是告诉Python我的数组具有Fortran布局,并正确地切换索引... 但是,我目前使用PyArray_SimpleNewFromData获取Python数组(而不实际复制数据),这会导致C样式数组。