Как заставить Berkeley UPC работать с комплексными числами?

У меня возникли некоторые проблемы при компиляции кода 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'
......

Затем я провел поиск в Google и наткнулся на эту ссылку - 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? Мой проект требует общих сложных массивов. Я думаю, что должен быть способ, поскольку БПФ много раз упоминались в онлайн-лекциях. Спасибо за вашу помощь!!

1 ответ

Решение

Переносимые программы UPC не полагаются на заголовок complex.h C99, поскольку он не всегда поддерживается всеми компиляторами / системами. Вместо этого они часто определяют свой собственный сложный тип как двухэлементную структуру.

Например, посмотрите эту простую реализацию FT

Другим распространенным подходом является сохранение отдельных массивов реальных и мнимых компонентов в зависимости от потребностей приложения и макета данных, ожидаемого любыми клиентскими математическими библиотеками.

Однако ни один из них, вероятно, не будет полезен, если вам нужна сложная тригонометрия или использовать библиотеку, которая опирается конкретно на комплекс C99. Предполагая, что у вас есть компилятор C, который поддерживает сложный, вы можете использовать его для компиляции последовательного модуля, связанного с вашей программой UPC. В качестве альтернативы вы можете попробовать интерфейс clang UPC, который, я считаю, поддерживает C99 complex на некоторых платформах.

Другие вопросы по тегам