问题一:
import taichi as ti
ti.init(arch=ti.cpu)
@ti.data_oriented
class Particle:
def __init__(self, N):
self.N = N
@ti.kernel
def get_vec(self):
vec = ti.types.vector(int(self.N/2), dtype=ti.f64)
pair = vec([0.]*int(self.N/2))
print(pair)
A = Particle(12)
A.get_vec()
上述代码在去掉@ti.kernel可以正常运行得到结果,加上以后报错如下:
TaichiTypeError: On line 12 of file "C:\Users\Administrator\AppData\Local\Temp\ipykernel_7448\407466583.py", in get_vec:
vec = ti.types.vector(int(self.N/2), dtype=ti.f64)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Invalid constant scalar data type: <class 'taichi.lang.matrix.MatrixType'>
这个问题是为了获得可以指定类型的vecter, 请问应该如何处理?
问题二:
b = ti.field(dtype=ti.f64, shape=())
b[None] = 1.
@ti.kernel
def sumtest():
a = 0.
for i in range(10):
a += b[None]
print(a)
sumtest()
这段代码运行没有问题,也可以获得正确结果,但是会提示
Atomic add may lose precision: f32 <- f64
请问如何指定这个a这个临时变量类型为ti.f64? 感谢大家。