我在笔记本电脑上编译复杂数字的UPC代码时遇到了一些问题 (Mac OS-X;代码最终将在Linux CentOS机器上运行)。我试图在代码中使用FFTW,但这会返回很多错误。
#include </Users/avinash/Programs/fftwinstall/include/fftw3.h>
Error during remote HTTP translation:
upcc: error during UPC-to-C translation (sgiupc stage):
In file included from code1xc.upc:9:
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: syntax error before `fftwq_complex'
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: warning: type defaults to `int' in declaration of `fftwq_complex'
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: warning: data definition has no type or storage class
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: syntax error before `fftwq_complex'
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: syntax error before `fftwq_complex'
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: syntax error before `fftwq_complex'
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: syntax error before `fftwq_complex'
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: syntax error before `fftwq_complex'
/Users/avinash/Programs/fftwinstall/include/fftw3.h:373: syntax error before `fftwq_complex'
......
然后我做了一些谷歌搜索,我发现了这个链接 - https://hpcrdm.lbl.gov/pipermail/upc-users/2013-December/001758.html
显然,BUPC在某些平台上不能处理复杂的数字 - http://upc.lbl.gov/docs/user/index.shtml
Programs which #include complex.h, and/or tgmath.h do not work on
certain platforms.
因此尝试使用在线查询中提到的complex.h编译这个简单的代码,甚至返回错误。
#include <upc.h>
#include <complex.h>
int main()
{
return 0;
}
Error during remote HTTP translation:
upcc: error during UPC-to-C translation (sgiupc stage):
In file included from code1xc.upc:7:
/usr/include/complex.h:45: syntax error before `cacosf'
/usr/include/complex.h:46: syntax error before `cacos'
/usr/include/complex.h:47: syntax error before `cacosl'
/usr/include/complex.h:49: syntax error before `casinf'
/usr/include/complex.h:50: syntax error before `casin'
....
那么,我究竟做错了什么?我将不胜感激任何帮助。这只是Berkeley UPC或GNU UPC的问题吗?我的项目需要共享的复杂数组。我认为必须有一种方法,因为在线讲座中已经多次提到过FFT。 谢谢你的帮助!!
答案 0 :(得分:0)
便携式UPC程序不依赖于C99的complex.h头文件,因为并非所有编译器/系统都普遍支持它。相反,他们经常将自己的复杂类型定义为两元素结构。
例如,请参阅此simple FT implementation
另一种常见方法是根据应用程序的需要和任何客户端数学库所期望的数据布局,保留实部和虚部的单独数组。
但是,如果您需要复杂的三角函数或使用特别依赖于C99复合体的库,这些都不会有用。假设您有一个支持复杂的C编译器,您可以使用它编译链接到您的UPC程序的串行模块。或者你可以试试clang UPC前端,我相信在某些平台上支持C99复合体。