请问field有无内置的排序功能?

我想取得一个field最小元素的下标然后进行一些计算和判断,在一定条件下再取次小元素下标进行一些计算和判断,以此类推直到满足另外一些条件,请问只能手写排序吗?还是太极中有一些内置的方法可以完成这一工作?

你好~太极现在支持 odd–even mergesort 。

一个使用示例:

2 个赞

好的,谢谢

我在使用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 个赞

我们现在opengl这边的device sync好像有点问题,在修了。cuda这边的behavior应该正常。