Fetch the repository succeeded.
import taichi as ti
import numpy as np
n2=8
n=2**n2
print('n=',n)
ti.init(ti.opengl)
num=ti.field(ti.i32,n)
value=ti.field(ti.f32,n)
result=ti.field(ti.f32,n)
step=ti.field(ti.i32,2)#包含内步长与外步长
step[0]=2#外步长
step[1]=2#内步长
@ti.kernel
def init():
for i in ti.static(range(n)):
num[i]=i
@ti.func
def xor(a,b):
return (a+b)&1
@ti.kernel
def getResult():
for i in ti.static(range(n)):
result[i]=value[num[i]]
@ti.kernel
def step1():
for i in ti.static(range(n//2)):
halfstep=step[1]//2
i1=i+(i//(halfstep))*halfstep
i2=i1+halfstep
num1,num2=num[i1],num[i2]
a,b=value[num1],value[num2]
updown=(i*2//step[0])&1#up,down方向
if xor(a>b,updown):
num[i1],num[i2]=num2,num1
def printresult():
getResult()
print(num)
print(value)
print(result)
init()
value.from_numpy(np.random.rand(n))
print('initial finish')
for i in range(1,n2+1):
step[0]=2**i
for j in range(i):
step[1]=2**(i-j)
step1()
print(step[0],step[1])
for i in range(n):
print(value[num[i]])
printresult()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。