能否在ti.kernel中,调用python的代码?

例如,我目前已经有了一个计算:


  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修饰?

这里解释一下,为什么这里我不想Calti.func修饰,因为Cal内部调用了很多其他代码,不确定那些代码是否可以被ti.func修饰。

不可以的。你想象一下这个其它代码可能包含了很复杂的操作,比如引用了其它对象,指向某个线程,或者某个硬盘文件,这种 Taichi 的编译器如何识别和编译?这些也没法挪到 GPU 后端对吧?

针对题主的问题,这个issue似乎说kernel里面可以调用python函数?

借着这个问题再问一个问题, taichi之前版本有 ti.external_func_call 功能,即在kernel里面调用C/C++代码,现在这个功能没有了么? 参考下面issue

  1. 有一些 Python 函数是可以调的,但是那样 kernel 就不编译了,起不到加速效果。
  2. 现在应该没有 external_func_call 这个函数。