我想取得一个field最小元素的下标然后进行一些计算和判断,在一定条件下再取次小元素下标进行一些计算和判断,以此类推直到满足另外一些条件,请问只能手写排序吗?还是太极中有一些内置的方法可以完成这一工作?
你好~太极现在支持 odd–even mergesort 。
一个使用示例:
2 Likes
好的,谢谢
我在使用ti._kernels.parallel_sort时,发现如果后端为opengl,运行就很快,如果为cuda就非常慢,是我使用方式有问题吗?测试代码如下
import taichi as ti
import time
ti.init(ti.opengl)
N=2**25
dtype=ti.f32
keys = ti.field(int, N)
ttt= ti.field(int,N)
values = ti.field(int, N)
@ti.kernel
def fill():
for i in keys:
keys[i] = ti.random() * N
ttt[i]=keys[i]
values[i] = i
fill()
t1=time.time()
ti._kernels.parallel_sort(keys,values)
t2=time.time()
print(f"{t2-t1}s")
Hi, 这里有两个问题。首先测性能的时候我们建议先跑一次dry run. 因为第一次跑的时候会trigger编译,所以第一次的时间实际上是编译+执行的时间。建议log之后的执行时间,也可以跑多次取平均值。还有一个问题是gpu上测时间建议在kernel执行之后加一个ti.sync()。这样可以确保kernel完成。
1 Like
我们现在opengl这边的device sync好像有点问题,在修了。cuda这边的behavior应该正常。