OpenAcc + Cython无法正常工作

时间:2018-02-11 12:07:27

标签: python c cython openacc

我有一些C ++代码,我想使用OpenACC加速。我使用cython从python调用C ++,但是当我添加OpenACC编译指示时,它似乎不起作用。我尝试了一个简单的程序:

#include <stdio.h>

#define N 2000000000

#define vl 1024

int main(void) {

  double pi = 0.0f;
  long long i;

  #pragma acc parallel vector_length(vl) 
  #pragma acc loop reduction(+:pi)
  for (i=0; i<N; i++) {
    double t= (double)((i+0.5)/N);
    pi +=4.0/(1.0+t*t);
  }

  printf("pi=%11.10f\n",pi/N);

  return 0;

}

使用gcc pi.c -fopenacc -foffload=nvptx-none -foffload="-O3" -O3 -o gpu.x进行编译时,效果非常好。

然后我尝试使用非常简单的.pyx文件将其包装在cython中:

cdef extern from "pi.c":
    int main()


def func():
    return main()

我的setup.py文件如下所示:

from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize

extensions = [Extension(name="cpi",
                        sources=["cpi.pyx"],
                        extra_compile_args=["-O3", "-fopenacc", "-foffload=nvptx-none"],
                        extra_link_args=["-lgomp", "-fno-lto"],
                        language="c")]

setup(ext_modules = cythonize(extensions))

使用python setup.py build_ext --inplace构建但是当我尝试从python调用该函数时,我收到一个错误:“libgomp:target function not mapped”

当我尝试在没有-fno-lto标志的情况下构建时,我在python中调用它后得到错误“ImportError:.... so:undefined symbol:__ offload_func_table”。

我在互联网上找不到类似的东西......

0 个答案:

没有答案