GcC
#1
由于找不到taichi内置的排序函数,自己实现了以下的ti.func,但并不能运行 
我阅读了 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
YuPeng
#2
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)
打开。
3 Likes
GcC
#4
很感谢回答!我正在尝试移植一个CUDA写多视图稠密重建算法到Taichi上,未来大概会有很多实现上的问题需要你们帮助。
2 Likes
GcC
#6
有没有可用于Vector的内置排序函数 ? parallel_sort
只能用于 field