各位大神好,本人taichi新手上路摸索中。
在尝试用taichi编写一个随机模拟数值计算的算法中 遇到了一些问题。
算法结构大致如下:
def pythonscopeFun(params):
datafield1 = ti.field(float,(N,))
datafield2 = ti.field(float,(N,))
np.random.seed(random_seed_number)
random_number = np.random.uniform(0,1,(N,m))
@ti.kernel
def kernel_fun(params):
total_value = .0
for i in range(N):
datafield1[i] = params[0]
datafield2[i] = params[1]
for j in range(m):
datafield1[i] =some_func(datafield1[i] ,random_number[i,j])
datafield2[i] =some_other_func(datafield1[i] ,datafield2[i] )
total_value+= datafield2[i]
return total_value/N
rslt = kernel_fun(params)
params2 = func(params)
rslt2 = kernel_fun(params2)
目前如果函数中直接调用多次kernel_fun的话 会出现计算结果每次不完全相同,但是奇怪的是计算结果又是在一个有限集合中产生。。。我猜是否是因为两次调用kernel_fun 共用了相同的field 而第一次调用kernel fun时计算并未完成便开始了第二次调用kernel fun 导致两个函数之间发生了串内存之类的事。
第二个我不太确定的问题是,即使我comment掉rslt2 这次调用kernel_fun, 结果仍然会出现不稳定的特点,但是绝大部分情况下 计算结果是在小数点后第8位数以后开始不一致,是否是因为单精度计算本来就是有这种问题呢?
实在是懵逼呀 求教求指导。感谢