以文档中的代码为例,我做了一些小的改动,让A在ti.func中赋值,然后就是报错
import taichi as ti
arch = ti.cuda
ti.init(arch=arch)
n = 300
K = ti.linalg.SparseMatrixBuilder(n, n, max_num_triplets=300)
b = ti.ndarray(ti.f32, shape=n)
@ti.kernel
def fill(A: ti.types.sparse_matrix_builder(), b: ti.types.ndarray(), interval: ti.i32):
for i in range(n):
fill_func(i,A)
#A[i, i] += 2.0
if i % interval == 0:
b[i] += 1.0
@ti.func
def fill_func(i,A):
A[i, i] += 2.0
fill(K, b, 3)
报错如下
[Taichi] version 1.6.0, llvm 15.0.1, commit f1c6fbbd, win, python 3.9.13
[Taichi] Starting on arch=cuda
Traceback (most recent call last):
File "c:\Users\liuyu\Desktop\gt\official_test.py", line 21, in <module>
fill(K, b, 3)
File "C:\Users\liuyu\anaconda3\lib\site-packages\taichi\lang\kernel_impl.py", line 976, in wrapped
raise type(e)("\n" + str(e)) from None
taichi.lang.exception.TaichiTypeError:
File "c:\Users\liuyu\Desktop\gt\official_test.py", line 13, in fill:
fill_func(i,A)
^^^^^^^^^^^^^^
File "c:\Users\liuyu\Desktop\gt\official_test.py", line 18, in fill_func:
def fill_func(i,A):
^^^^^^^^^^^^^^^^^^^
Invalid constant scalar data type: <class 'taichi.lang.kernel_arguments.SparseMatrixProxy'>
请问是ti.func就不能给稀疏矩阵赋值吗?还是我传入参数的方法有问题?