OpenAcc+Cython不工作

2024-09-29 21:54:13 发布

您现在位置:Python中文网/ 问答频道 /正文

<>我有一些C++代码,我想用OpenACC加速。我使用Cython调用Python中的C++,但是当我添加OpenACC PRAPMAS时,它似乎不起作用。我试过一个简单的程序:

#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中:

^{pr2}$

我的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 was not mapped”

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

我在网上没有发现类似的东西。。。在


Tags: fromimportsetuppicythonlongaccdouble

热门问题