例如,我目前已经有了一个计算:
for i in range(256):
for j in range(256):
Cal(i, j)
这里的 Cal
是一些比较复杂,而且费时间的计算。如果我想用taichi
,代码如下:
@ti.kernel
def CalImage():
for i in range(256):
for j in range(256):
Cal(i, j)
但是, 这里的Cal
是一段python代码,并不是 ti.kernel
或者 ti.func
。能否做到这样一件事?还是说Cal
也一定要被ti.func
修饰?
这里解释一下,为什么这里我不想Cal
被ti.func
修饰,因为Cal
内部调用了很多其他代码,不确定那些代码是否可以被ti.func
修饰。
zemora
#2
不可以的。你想象一下这个其它代码可能包含了很复杂的操作,比如引用了其它对象,指向某个线程,或者某个硬盘文件,这种 Taichi 的编译器如何识别和编译?这些也没法挪到 GPU 后端对吧?
zane
#3
针对题主的问题,这个issue似乎说kernel里面可以调用python函数?
借着这个问题再问一个问题, taichi之前版本有 ti.external_func_call 功能,即在kernel里面调用C/C++代码,现在这个功能没有了么? 参考下面issue