0

我在笔记本电脑上编译带有复数的 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'
....

那么,我到底做错了什么?我将不胜感激。这只是伯克利 UPC 或 GNU UPC 的问题吗?我的项目需要共享复杂数组。我认为一定有一种方法,因为在线讲座中多次提到 FFT。谢谢你的帮助 !!

4

1 回答 1

0

可移植的 UPC 程序不依赖于 C99 的 complex.h 头文件,因为并非所有编译器/系统都普遍支持它。相反,他们经常将自己的复杂类型定义为二元素结构。

例如看这个简单的 FT 实现

另一种常见的方法是根据应用程序的需要和任何客户端数学库所期望的数据布局,分别保留实部和虚部的独立数组。

但是,如果您需要复杂的三角函数或使用专门依赖于 C99 复合体的库,这些都可能没有帮助。假设您有一个支持复杂的 C 编译器,您可以使用它来编译链接到您的 UPC 程序的串行模块。或者,您可以尝试 clang UPC 前端,我相信它在某些平台上支持 C99 复合体。

于 2017-05-02T16:12:24.360 回答