不可在ti.func中遍历Matrix !?

由于找不到taichi内置的排序函数,自己实现了以下的ti.func,但并不能运行 :smiling_face_with_tear:

我阅读了 When to use ti.static with for loops ,有些难以理解,这样的限制虽然提高了性能,但是极大降低了灵活性,连数组排序都不能够完成。

请问有没有可替代的方案 ?

NUM_IMAGES = 3
@ti.func
def sort_small(vector):
    j = 0
    for i in ti.static(range(1, NUM_IMAGES)):
        tmp = vector[i]
        j = i
        while j >= 1 and tmp<vector[j-1]:
            vector[j] = vector[j-1]
            j -= 1
        vector[j] = tmp
    return vector

Hi @GcC , Taichi 有内置的排序函数 odd-even sorting。 请看: here/

1 Like

Hi,

ti.Matrix 中的每个元素默认只能被静态访问,也就是说它的下标需要时编译时常量。在楼主的代码例子里,ti.static的循环展开使得i是编译时常量,但因为while loop的存在, j 是会在运行时改变的,所以用 j 访问 ti.Matrix 会报错。Taichi 在新版本中加入了实验性的动态数组下标功能,可以用 ti.init(dynamic_index=True) 打开。

2 Likes

很感谢回答!我正在尝试移植一个CUDA写多视图稠密重建算法到Taichi上,未来大概会有很多实现上的问题需要你们帮助。

2 Likes

很感谢回答!以后还需要你们多多指教。

有没有可用于Vector的内置排序函数 ? parallel_sort 只能用于 field

Vector内置的排序暂时没有

1 Like