从PGCC编译的OpenACC加速共享库调用例程时,MEX中的未定义符号错误

时间:2014-07-12 16:30:36

标签: c makefile mex openacc pgi

我有一个使用libraberto.so编译的共享库PGCC。它包含OpenACC pragma伪指令,并使用-acc标志进行编译,以确保启用这些伪指令。相应的makefile规则是:

libraberto.so: file1.o file2.o ...
pgcc -shared -o./libraberto.so file1.o file2.o ...

%.o: %.c
pgcc -acc -Minfo=accel -c -fpic -I./inc/ -o./$@ $<

file1.cfile2.c等是构成图书馆的源文件。

然后我有一个mex_gateway.c文件,它只是从MATLAB中调用共享库中的例程,传递变量(数组和标量),然后接收输出数组。编译如下:

mex -lraberto mex_gateway.c

编译工作正常,但是当我尝试在MATLAB中运行网关时,我收到以下错误:

Invalid MEX-file '[...]/mex_gateway.mexa64':
[...]/libraberto.so: undefined symbol: __pgi_uacc_dataenterstart

我无法在Google上找到有关此特定错误(符号)的任何信息,也不确定在我的代码中查找的位置。在没有OpenACC指令(即没有-acc)的情况下编译共享库时,该程序工作正常。我认为错误可能是由于MEX使用的数组的特殊性质(mxArray),在将数据传输到加速器时可能不会很好地与OpenACC一起使用,但是memcpy输入到在将它们传递给共享库例程之前,真正的malloc'C数组没有任何区别。

0 个答案:

没有答案