我开始使用 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 风格的数组。