每次结果不一样?

为啥下面的代码给出的结果不一样呢?

import taichi as ti
# ti.init(arch=ti.cpu, cpu_max_num_threads=1, default_fp=ti.f64)  # Try to run on GPU
ti.init(arch=ti.cuda, default_fp=ti.f64)  # Try to run on GPU

# summ = ti.field(dtype=float, shape=())  # grid forces
# summ[None] = 1000000000

summ1 = ti.field(dtype=float, shape=())  # grid forces
summ1[None] = 1000000000


# @ti.kernel
# def func():
#     for indx in range(1000000):
#         summ[None] += 0.000001
#     summ[None] -= 1000000000

@ti.kernel
def func1():
    c = 0.0 
    for indx in range(1000000):
        y = 0.000001 - c
        t = summ1[None] + y
        c = (t - summ1[None]) - y
        summ1[None] = t
    summ1[None] -= 1000000000



# func()
func1()
# print('非精确解(双精度):', summ[None])
print('精确解GPU:', summ1[None])

b1d8388eb84d468c3f7676791c99211
ead477afe4738f4390e1e1ecb2b0fa3

Hi @aspenxue12 , 在func1 中的 for 循环是并行执行的。你可以在 在 for 循环之前设置成单线程执行,结果应该就是确定的了。

@ti.kernel
def func1():
    c = 0.0
    ti.loop_config(serialize=True) # 设置成单线程执行
    for indx in range(1000000):
        y = 0.000001 - c
        t = summ1[None] + y
        c = (t - summ1[None]) - y
        summ1[None] = t
    summ1[None] -= 1000000000