Как вручную вызвать mkl-fftw3 в сравнении с IVF? - PullRequest
0 голосов
/ 06 ноября 2019

Я искал много документов, https://software.intel.com/en-us/mkl-developer-reference-fortran-appendix-d-fftw-interface-to-intel-math-kernel-library говорят, что

Для простоты использования интерфейс FFTW3 также интегрирован в Intel MKL.

Itдействительно хорошо работает в vs2017 с ivf2019, где я просто использую выбор, чтобы изменить «Использовать библиотеку ядра Intel Math» как «/ Qmkl ...», тогда все конфигурации среды автоматически удовлетворены。

Но когда я следую инструкциям в https://software.intel.com/en-us/articles/how-to-build-mkl-application-in-intel-visual-fortran-msvs - , вручную устанавливаю каталоги include и lib, тот же код также может быть скомпилирован и хорошо связан (как я вижу). Но, результаты - все нули .

В руководстве также упоминается

Некоторые библиотеки интерфейсов (например, mkl_lapack95.lib mkl_blas95.lib fftw3xc_ms) могут не соответствовать Intel®Стандартные библиотеки MKL как таковые «Шаг 2 - быстрый вариант» не поддерживают их. Вы можете добавить эти библиотеки вручную, если вам нужно их использовать.

  program main
  implicit none  
  double complex t_in(5,5), t_out(5,5)
  integer*8 plan
  integer i 

  t_in = dcmplx(reshape([1:25],[5,5]))

  call dfftw_plan_dft_2d(plan,5,5,t_in,t_out,FFTW_FORWARD,FFTW_E
 1  STIMATE)
  call dfftw_execute_dft(plan, t_in, t_out)
  call dfftw_destroy_plan(plan)
  PRINT*,t_in
  PRINT*,t_out
  END

Я также пытаюсь явно включить файлы lib, это не показывает никакой разницы

  !dec$objcomment lib:'mkl_intel_ilp64.lib'
  !dec$objcomment lib:'mkl_sequential.lib'
  !dec$objcomment lib:'mkl_core.lib'
  !dec$objcomment lib:'mkl_core_dll.lib'
  !dec$objcomment lib:'mkl_intel_ilp64_dll.lib'
  !dec$objcomment lib:'mkl_intel_lp64_dll.lib'
  !dec$objcomment lib:'mkl_rt.lib'
  !dec$objcomment lib:'mkl_cdft_core_dll.lib'
  !dec$objcomment lib:'mkl_cdft_core.lib'

Результатыкак показано ниже, для простоты я опускаю несколько строк.

...t_in
(1.00000000000000,0.000000000000000E+000)
(2.00000000000000,0.000000000000000E+000)
(3.00000000000000,0.000000000000000E+000)
(4.00000000000000,0.000000000000000E+000)
(5.00000000000000,0.000000000000000E+000)
(6.00000000000000,0.000000000000000E+000)
(7.00000000000000,0.000000000000000E+000)
(8.00000000000000,0.000000000000000E+000)
...t_out
(0.000000000000000E+000,0.000000000000000E+000)
(0.000000000000000E+000,0.000000000000000E+000)
(0.000000000000000E+000,0.000000000000000E+000)
(0.000000000000000E+000,0.000000000000000E+000)
(0.000000000000000E+000,0.000000000000000E+000)
(0.000000000000000E+000,0.000000000000000E+000)
(0.000000000000000E+000,0.000000000000000E+000)
(0.000000000000000E+000,0.000000000000000E+000)
...

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

...