mkl_dfti_omp_offload.f90 58 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132
  1. !===============================================================================
  2. ! Copyright 2020-2022 Intel Corporation.
  3. !
  4. ! This software and the related documents are Intel copyrighted materials, and
  5. ! your use of them is governed by the express license under which they were
  6. ! provided to you (License). Unless the License provides otherwise, you may not
  7. ! use, modify, copy, publish, distribute, disclose or transmit this software or
  8. ! the related documents without Intel's prior written permission.
  9. !
  10. ! This software and the related documents are provided as is, with no express
  11. ! or implied warranties, other than those that are expressly stated in the
  12. ! License.
  13. !===============================================================================
  14. ! Content:
  15. ! Intel(R) oneAPI Math Kernel Library (oneMKL)
  16. ! Discrete Fourier Transform Interface (DFTI)
  17. !*****************************************************************************
  18. MODULE MKL_DFT_TYPE
  19. TYPE, PUBLIC :: DFTI_DESCRIPTOR
  20. PRIVATE
  21. INTEGER :: dontuse
  22. ! Structure of this type is not used in Fortran code
  23. ! the pointer to this type is used only
  24. END TYPE DFTI_DESCRIPTOR
  25. !======================================================================
  26. ! These real type kind parameters are not for direct use
  27. !======================================================================
  28. INTEGER, PARAMETER :: DFTI_SPKP = SELECTED_REAL_KIND(6,37)
  29. INTEGER, PARAMETER :: DFTI_DPKP = SELECTED_REAL_KIND(15,307)
  30. !======================================================================
  31. ! Descriptor configuration parameters [default values in brackets]
  32. !======================================================================
  33. ! Domain for forward transform. No default value
  34. INTEGER, PARAMETER :: DFTI_FORWARD_DOMAIN = 0
  35. ! Dimensionality, or rank. No default value
  36. INTEGER, PARAMETER :: DFTI_DIMENSION = 1
  37. ! Length(s) of transform. No default value
  38. INTEGER, PARAMETER :: DFTI_LENGTHS = 2
  39. ! Floating point precision. No default value
  40. INTEGER, PARAMETER :: DFTI_PRECISION = 3
  41. ! Scale factor for forward transform [1.0]
  42. INTEGER, PARAMETER :: DFTI_FORWARD_SCALE = 4
  43. ! Scale factor for backward transform [1.0]
  44. INTEGER, PARAMETER :: DFTI_BACKWARD_SCALE = 5
  45. ! Exponent sign for forward transform [DFTI_NEGATIVE]
  46. ! INTEGER, PARAMETER :: DFTI_FORWARD_SIGN = 6 ! NOT IMPLEMENTED
  47. ! Number of data sets to be transformed [1]
  48. INTEGER, PARAMETER :: DFTI_NUMBER_OF_TRANSFORMS = 7
  49. ! Storage of finite complex-valued sequences in complex domain
  50. ! [DFTI_COMPLEX_COMPLEX]
  51. INTEGER, PARAMETER :: DFTI_COMPLEX_STORAGE = 8
  52. ! Storage of finite real-valued sequences in real domain
  53. ! [DFTI_REAL_REAL]
  54. INTEGER, PARAMETER :: DFTI_REAL_STORAGE = 9
  55. ! Storage of finite complex-valued sequences in conjugate-even
  56. ! domain [DFTI_COMPLEX_REAL]
  57. INTEGER, PARAMETER :: DFTI_CONJUGATE_EVEN_STORAGE = 10
  58. ! Placement of result [DFTI_INPLACE]
  59. INTEGER, PARAMETER :: DFTI_PLACEMENT = 11
  60. ! Generalized strides for input data layout
  61. ! [tight, col-major for Fortran]
  62. INTEGER, PARAMETER :: DFTI_INPUT_STRIDES = 12
  63. ! Generalized strides for output data layout
  64. ! [tight, col-major for Fortran]
  65. INTEGER, PARAMETER :: DFTI_OUTPUT_STRIDES = 13
  66. ! Distance between first input elements for multiple transforms [0]
  67. INTEGER, PARAMETER :: DFTI_INPUT_DISTANCE = 14
  68. ! Distance between first output elements for multiple transforms [0]
  69. INTEGER, PARAMETER :: DFTI_OUTPUT_DISTANCE = 15
  70. ! Effort spent in initialization [DFTI_MEDIUM]
  71. ! INTEGER, PARAMETER :: DFTI_INITIALIZATION_EFFORT = 16 ! NOT IMPLEMENTED
  72. ! Use of workspace during computation [DFTI_ALLOW]
  73. INTEGER, PARAMETER :: DFTI_WORKSPACE = 17
  74. ! Ordering of the result [DFTI_ORDERED]
  75. INTEGER, PARAMETER :: DFTI_ORDERING = 18
  76. ! Possible transposition of result [DFTI_NONE]
  77. INTEGER, PARAMETER :: DFTI_TRANSPOSE = 19
  78. ! User-settable descriptor name [""]
  79. INTEGER, PARAMETER :: DFTI_DESCRIPTOR_NAME = 20
  80. ! Packing format for DFTI_COMPLEX_REAL storage of finite
  81. ! conjugate-even sequences [DFTI_CCS_FORMAT]
  82. INTEGER, PARAMETER :: DFTI_PACKED_FORMAT = 21
  83. ! Commit status of the descriptor. Read-only parameter
  84. INTEGER, PARAMETER :: DFTI_COMMIT_STATUS = 22
  85. ! Version string for this DFTI implementation. Read-only parameter
  86. INTEGER, PARAMETER :: DFTI_VERSION = 23
  87. ! Ordering of the forward transform. Read-only parameter
  88. ! INTEGER, PARAMETER :: DFTI_FORWARD_ORDERING = 24 ! NOT IMPLEMENTED
  89. ! Ordering of the backward transform. Read-only parameter
  90. ! INTEGER, PARAMETER :: DFTI_BACKWARD_ORDERING = 25 ! NOT IMPLEMENTED
  91. ! Number of user threads that share the descriptor [1]
  92. INTEGER, PARAMETER :: DFTI_NUMBER_OF_USER_THREADS = 26
  93. ! Limit the number of threads used by this descriptor [0 = don't care]
  94. INTEGER, PARAMETER :: DFTI_THREAD_LIMIT = 27
  95. !======================================================================
  96. ! Values of the descriptor configuration parameters
  97. !======================================================================
  98. ! DFTI_COMMIT_STATUS
  99. INTEGER, PARAMETER :: DFTI_COMMITTED = 30
  100. INTEGER, PARAMETER :: DFTI_UNCOMMITTED = 31
  101. ! DFTI_FORWARD_DOMAIN
  102. INTEGER, PARAMETER :: DFTI_COMPLEX = 32
  103. INTEGER, PARAMETER :: DFTI_REAL = 33
  104. ! INTEGER, PARAMETER :: DFTI_CONJUGATE_EVEN = 34 ! NOT IMPLEMENTED
  105. ! DFTI_PRECISION
  106. INTEGER, PARAMETER :: DFTI_SINGLE = 35
  107. INTEGER, PARAMETER :: DFTI_DOUBLE = 36
  108. ! DFTI_PRECISION for reduced size of statically linked application.
  109. ! Recommended use: modify statement 'USE MKL_DFTI' in your program,
  110. ! so that it reads as either of:
  111. ! USE MKL_DFTI, FORGET=>DFTI_SINGLE, DFTI_SINGLE=>DFTI_SINGLE_R
  112. ! USE MKL_DFTI, FORGET=>DFTI_DOUBLE, DFTI_DOUBLE=>DFTI_DOUBLE_R
  113. ! where word 'FORGET' can be any name not used in the program.
  114. REAL(DFTI_SPKP), PARAMETER :: DFTI_SINGLE_R = REAL(35)
  115. REAL(DFTI_DPKP), PARAMETER :: DFTI_DOUBLE_R = REAL(36)
  116. ! DFTI_FORWARD_SIGN
  117. ! INTEGER, PARAMETER :: DFTI_NEGATIVE = 37 ! NOT IMPLEMENTED
  118. ! INTEGER, PARAMETER :: DFTI_POSITIVE = 38 ! NOT IMPLEMENTED
  119. ! DFTI_COMPLEX_STORAGE and DFTI_CONJUGATE_EVEN_STORAGE
  120. INTEGER, PARAMETER :: DFTI_COMPLEX_COMPLEX = 39
  121. INTEGER, PARAMETER :: DFTI_COMPLEX_REAL = 40
  122. ! DFTI_REAL_STORAGE
  123. INTEGER, PARAMETER :: DFTI_REAL_COMPLEX = 41
  124. INTEGER, PARAMETER :: DFTI_REAL_REAL = 42
  125. ! DFTI_PLACEMENT
  126. INTEGER, PARAMETER :: DFTI_INPLACE = 43 ! Result overwrites input
  127. INTEGER, PARAMETER :: DFTI_NOT_INPLACE = 44 ! Have another place for result
  128. ! DFTI_INITIALIZATION_EFFORT
  129. ! INTEGER, PARAMETER :: DFTI_LOW = 45 ! NOT IMPLEMENTED
  130. ! INTEGER, PARAMETER :: DFTI_MEDIUM = 46 ! NOT IMPLEMENTED
  131. ! INTEGER, PARAMETER :: DFTI_HIGH = 47 ! NOT IMPLEMENTED
  132. ! DFTI_ORDERING
  133. INTEGER, PARAMETER :: DFTI_ORDERED = 48
  134. INTEGER, PARAMETER :: DFTI_BACKWARD_SCRAMBLED = 49
  135. ! INTEGER, PARAMETER :: DFTI_FORWARD_SCRAMBLED = 50 ! NOT IMPLEMENTED
  136. ! Allow/avoid certain usages
  137. INTEGER, PARAMETER :: DFTI_ALLOW = 51 ! Allow transposition or workspace
  138. INTEGER, PARAMETER :: DFTI_AVOID = 52 ! Avoid auxiliary storage
  139. INTEGER, PARAMETER :: DFTI_NONE = 53
  140. ! DFTI_PACKED_FORMAT
  141. ! (for storing congugate-even finite sequence in real array)
  142. INTEGER, PARAMETER :: DFTI_CCS_FORMAT = 54 ! Complex conjugate-symmetric
  143. INTEGER, PARAMETER :: DFTI_PACK_FORMAT = 55 ! Pack format for real DFT
  144. INTEGER, PARAMETER :: DFTI_PERM_FORMAT = 56 ! Perm format for real DFT
  145. INTEGER, PARAMETER :: DFTI_CCE_FORMAT = 57 ! Complex conjugate-even
  146. !======================================================================
  147. ! Error classes
  148. !======================================================================
  149. INTEGER, PARAMETER :: DFTI_NO_ERROR = 0
  150. INTEGER, PARAMETER :: DFTI_MEMORY_ERROR = 1
  151. INTEGER, PARAMETER :: DFTI_INVALID_CONFIGURATION = 2
  152. INTEGER, PARAMETER :: DFTI_INCONSISTENT_CONFIGURATION = 3
  153. INTEGER, PARAMETER :: DFTI_MULTITHREADED_ERROR = 4
  154. INTEGER, PARAMETER :: DFTI_BAD_DESCRIPTOR = 5
  155. INTEGER, PARAMETER :: DFTI_UNIMPLEMENTED = 6
  156. INTEGER, PARAMETER :: DFTI_MKL_INTERNAL_ERROR = 7
  157. INTEGER, PARAMETER :: DFTI_NUMBER_OF_THREADS_ERROR = 8
  158. INTEGER, PARAMETER :: DFTI_1D_LENGTH_EXCEEDS_INT32 = 9
  159. INTEGER, PARAMETER :: DFTI_1D_MEMORY_EXCEEDS_INT32 = 9
  160. ! Maximum length of error string
  161. INTEGER, PARAMETER :: DFTI_MAX_MESSAGE_LENGTH = 80
  162. ! Maximum length of user-settable descriptor name
  163. INTEGER, PARAMETER :: DFTI_MAX_NAME_LENGTH = 10
  164. ! Maximum length of oneMKL version string
  165. INTEGER, PARAMETER :: DFTI_VERSION_LENGTH = 198
  166. END MODULE MKL_DFT_TYPE
  167. MODULE MKL_DFTI_OMP_OFFLOAD
  168. USE MKL_DFT_TYPE
  169. INTERFACE DftiCreateDescriptor
  170. ! overloading of DftiCreateDescriptor for 1D DFT
  171. FUNCTION dfti_create_descriptor_1d(desc, precision, domain, dim, length)
  172. USE MKL_DFT_TYPE
  173. !DEC$ ATTRIBUTES C :: dfti_create_descriptor_1d
  174. !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_1d
  175. INTEGER dfti_create_descriptor_1d
  176. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  177. INTEGER, INTENT(IN) :: precision
  178. INTEGER, INTENT(IN) :: domain
  179. INTEGER, INTENT(IN) :: dim, length
  180. END FUNCTION dfti_create_descriptor_1d
  181. ! overloading of DftiCreateDescriptor for nD DFT
  182. FUNCTION dfti_create_descriptor_highd(desc, precision, domain, dim,length)
  183. USE MKL_DFT_TYPE
  184. !DEC$ ATTRIBUTES C :: dfti_create_descriptor_highd
  185. !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_highd
  186. INTEGER dfti_create_descriptor_highd
  187. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  188. INTEGER, INTENT(IN) :: precision
  189. INTEGER, INTENT(IN) :: domain
  190. INTEGER, INTENT(IN) :: dim
  191. INTEGER, INTENT(IN), DIMENSION(*) :: length
  192. END FUNCTION dfti_create_descriptor_highd
  193. ! overloading of DftiCreateDescriptor for SP 1D DFT
  194. ! second parameter (precision) should be any REAL*4 value
  195. ! for dispatching during compile time
  196. FUNCTION dfti_create_descriptor_s_1d(desc, s, dom, one, dim)
  197. USE MKL_DFT_TYPE
  198. !DEC$ ATTRIBUTES C :: dfti_create_descriptor_s_1d
  199. !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_s_1d
  200. INTEGER dfti_create_descriptor_s_1d
  201. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  202. REAL(DFTI_SPKP), INTENT(IN) :: s
  203. INTEGER, INTENT(IN) :: dom
  204. INTEGER, INTENT(IN) :: one
  205. INTEGER, INTENT(IN) :: dim
  206. END FUNCTION dfti_create_descriptor_s_1d
  207. ! overloading of DftiCreateDescriptor for SP nD DFT
  208. ! second parameter (precision) should be any REAL*4 value
  209. ! for dispatching during compile time
  210. FUNCTION dfti_create_descriptor_s_md(desc, s, dom, many, dims)
  211. USE MKL_DFT_TYPE
  212. !DEC$ ATTRIBUTES C :: dfti_create_descriptor_s_md
  213. !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_s_md
  214. INTEGER dfti_create_descriptor_s_md
  215. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  216. REAL(DFTI_SPKP), INTENT(IN) :: s
  217. INTEGER, INTENT(IN) :: dom
  218. INTEGER, INTENT(IN) :: many
  219. INTEGER, INTENT(IN), DIMENSION(*) :: dims
  220. END FUNCTION dfti_create_descriptor_s_md
  221. ! overloading of DftiCreateDescriptor for DP 1D DFT
  222. ! second parameter (precision) should be any REAL*8 value
  223. ! for dispatching during compile time
  224. FUNCTION dfti_create_descriptor_d_1d(desc, d, dom, one, dim)
  225. USE MKL_DFT_TYPE
  226. !DEC$ ATTRIBUTES C :: dfti_create_descriptor_d_1d
  227. !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_d_1d
  228. INTEGER dfti_create_descriptor_d_1d
  229. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  230. REAL(DFTI_DPKP), INTENT(IN) :: d
  231. INTEGER, INTENT(IN) :: dom
  232. INTEGER, INTENT(IN) :: one
  233. INTEGER, INTENT(IN) :: dim
  234. END FUNCTION dfti_create_descriptor_d_1d
  235. ! overloading of DftiCreateDescriptor for DP nD DFT
  236. ! second parameter (precision) should be any REAL*8 value
  237. ! for dispatching during compile time
  238. FUNCTION dfti_create_descriptor_d_md(desc, d, dom, many, dims)
  239. USE MKL_DFT_TYPE
  240. !DEC$ ATTRIBUTES C :: dfti_create_descriptor_d_md
  241. !DEC$ ATTRIBUTES REFERENCE :: dfti_create_descriptor_d_md
  242. INTEGER dfti_create_descriptor_d_md
  243. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  244. REAL(DFTI_DPKP), INTENT(IN) :: d
  245. INTEGER, INTENT(IN) :: dom
  246. INTEGER, INTENT(IN) :: many
  247. INTEGER, INTENT(IN), DIMENSION(*) :: dims
  248. END FUNCTION dfti_create_descriptor_d_md
  249. END INTERFACE
  250. INTERFACE DftiCopyDescriptor
  251. FUNCTION dfti_copy_descriptor_external(desc, new_desc)
  252. USE MKL_DFT_TYPE
  253. !DEC$ ATTRIBUTES C :: dfti_copy_descriptor_external
  254. !DEC$ ATTRIBUTES REFERENCE :: dfti_copy_descriptor_external
  255. INTEGER dfti_copy_descriptor_external
  256. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  257. TYPE(DFTI_DESCRIPTOR), POINTER :: new_desc
  258. END FUNCTION dfti_copy_descriptor_external
  259. END INTERFACE
  260. INTERFACE DftiSetValue
  261. ! overloading of DftiSetValue for integer value
  262. FUNCTION dfti_set_value_intval(desc, OptName, IntVal)
  263. USE MKL_DFT_TYPE
  264. !DEC$ ATTRIBUTES C :: dfti_set_value_intval
  265. !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_intval
  266. INTEGER dfti_set_value_intval
  267. INTEGER, INTENT(IN) :: OptName
  268. INTEGER, INTENT(IN) :: IntVal
  269. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  270. END FUNCTION dfti_set_value_intval
  271. ! overloading of DftiSetValue for SP value
  272. FUNCTION dfti_set_value_sglval(desc, OptName, sglval)
  273. USE MKL_DFT_TYPE
  274. !DEC$ ATTRIBUTES C :: dfti_set_value_sglval
  275. !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_sglval
  276. INTEGER dfti_set_value_sglval
  277. INTEGER, INTENT(IN) :: OptName
  278. REAL(DFTI_SPKP), INTENT(IN) :: sglval
  279. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  280. END FUNCTION dfti_set_value_sglval
  281. ! overloading of DftiSetValue for DP value
  282. FUNCTION dfti_set_value_dblval(desc, OptName, DblVal)
  283. USE MKL_DFT_TYPE
  284. !DEC$ ATTRIBUTES C :: dfti_set_value_dblval
  285. !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_dblval
  286. INTEGER dfti_set_value_dblval
  287. INTEGER, INTENT(IN) :: OptName
  288. REAL(DFTI_DPKP), INTENT(IN) :: DblVal
  289. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  290. END FUNCTION dfti_set_value_dblval
  291. ! overloading of DftiSetValue for integer vector
  292. FUNCTION dfti_set_value_intvec(desc, OptName, IntVec)
  293. USE MKL_DFT_TYPE
  294. !DEC$ ATTRIBUTES C :: dfti_set_value_intvec
  295. !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_intvec
  296. INTEGER dfti_set_value_intvec
  297. INTEGER, INTENT(IN) :: OptName
  298. INTEGER, INTENT(IN), DIMENSION(*) :: IntVec
  299. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  300. END FUNCTION dfti_set_value_intvec
  301. ! overloading of DftiSetValue for char vector
  302. FUNCTION dfti_set_value_chars(desc, OptName, Chars)
  303. USE MKL_DFT_TYPE
  304. !DEC$ ATTRIBUTES C :: dfti_set_value_chars
  305. !DEC$ ATTRIBUTES REFERENCE :: dfti_set_value_chars
  306. INTEGER dfti_set_value_chars
  307. INTEGER, INTENT(IN) :: OptName
  308. CHARACTER(*), INTENT(IN) :: Chars
  309. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  310. END FUNCTION dfti_set_value_chars
  311. END INTERFACE
  312. INTERFACE DftiGetValue
  313. ! overloading of DftiGetValue for integer value
  314. FUNCTION dfti_get_value_intval(desc, OptName, IntVal)
  315. USE MKL_DFT_TYPE
  316. !DEC$ ATTRIBUTES C :: dfti_get_value_intval
  317. !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_intval
  318. INTEGER dfti_get_value_intval
  319. INTEGER, INTENT(IN) :: OptName
  320. INTEGER, INTENT(OUT) :: IntVal
  321. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  322. END FUNCTION dfti_get_value_intval
  323. ! overloading of DftiGetValue for SP value
  324. FUNCTION dfti_get_value_sglval(desc, OptName, sglval)
  325. USE MKL_DFT_TYPE
  326. !DEC$ ATTRIBUTES C :: dfti_get_value_sglval
  327. !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_sglval
  328. INTEGER dfti_get_value_sglval
  329. INTEGER, INTENT(IN) :: OptName
  330. REAL(DFTI_SPKP), INTENT(OUT) :: sglval
  331. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  332. END FUNCTION dfti_get_value_sglval
  333. ! overloading of DftiGetValue for DP value
  334. FUNCTION dfti_get_value_dblval(desc, OptName, DblVal)
  335. USE MKL_DFT_TYPE
  336. !DEC$ ATTRIBUTES C :: dfti_get_value_dblval
  337. !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_dblval
  338. INTEGER dfti_get_value_dblval
  339. INTEGER, INTENT(IN) :: OptName
  340. REAL(DFTI_DPKP), INTENT(OUT) :: DblVal
  341. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  342. END FUNCTION dfti_get_value_dblval
  343. ! overloading of DftiGetValue for integer vector
  344. FUNCTION dfti_get_value_intvec(desc, OptName, IntVec)
  345. USE MKL_DFT_TYPE
  346. !DEC$ ATTRIBUTES C :: dfti_get_value_intvec
  347. !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_intvec
  348. INTEGER dfti_get_value_intvec
  349. INTEGER, INTENT(IN) :: OptName
  350. INTEGER, INTENT(OUT), DIMENSION(*) :: IntVec
  351. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  352. END FUNCTION dfti_get_value_intvec
  353. ! overloading of DftiGetValue for char vector
  354. FUNCTION dfti_get_value_chars(desc, OptName, Chars)
  355. USE MKL_DFT_TYPE
  356. !DEC$ ATTRIBUTES C :: dfti_get_value_chars
  357. !DEC$ ATTRIBUTES REFERENCE :: dfti_get_value_chars
  358. INTEGER dfti_get_value_chars
  359. INTEGER, INTENT(IN) :: OptName
  360. CHARACTER(*), INTENT(OUT) :: Chars
  361. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  362. END FUNCTION dfti_get_value_chars
  363. END INTERFACE
  364. INTERFACE
  365. FUNCTION mkl_dfti_commit_descriptor_external_omp_offload(desc,interop)
  366. USE MKL_DFT_TYPE
  367. !DEC$ ATTRIBUTES C :: mkl_dfti_commit_descriptor_external_omp_offload
  368. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_commit_descriptor_external_omp_offload
  369. INTEGER mkl_dfti_commit_descriptor_external_omp_offload
  370. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  371. TYPE(*), INTENT(IN) :: interop
  372. END FUNCTION mkl_dfti_commit_descriptor_external_omp_offload
  373. END INTERFACE
  374. INTERFACE DftiCommitDescriptor
  375. FUNCTION dfti_commit_descriptor_external(desc)
  376. USE MKL_DFT_TYPE
  377. !DEC$ ATTRIBUTES C :: dfti_commit_descriptor_external
  378. !DEC$ ATTRIBUTES REFERENCE :: dfti_commit_descriptor_external
  379. INTEGER dfti_commit_descriptor_external
  380. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  381. !$omp declare variant( dfti_commit_descriptor_external:mkl_dfti_commit_descriptor_external_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  382. !$omp declare variant( dfti_commit_descriptor_external:mkl_dfti_commit_descriptor_external_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args(interop(prefer_type("sycl","level_zero"),targetsync))
  383. END FUNCTION dfti_commit_descriptor_external
  384. END INTERFACE DftiCommitDescriptor
  385. INTERFACE
  386. ! overloading of DftiComputeForward for SP R2C DFT (inplace)
  387. FUNCTION mkl_dfti_compute_forward_s_omp_offload(desc,sSrcDst,interop)
  388. USE MKL_DFT_TYPE
  389. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_s_omp_offload
  390. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_s_omp_offload
  391. INTEGER mkl_dfti_compute_forward_s_omp_offload
  392. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  393. REAL(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: sSrcDst
  394. TYPE(*), INTENT(IN) :: interop
  395. END FUNCTION mkl_dfti_compute_forward_s_omp_offload
  396. ! overloading of DftiComputeForward for SP C2C DFT (inplace)
  397. FUNCTION mkl_dfti_compute_forward_c_omp_offload(desc,cSrcDst,interop)
  398. USE MKL_DFT_TYPE
  399. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_c_omp_offload
  400. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_c_omp_offload
  401. INTEGER mkl_dfti_compute_forward_c_omp_offload
  402. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  403. COMPLEX(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: cSrcDst
  404. TYPE(*), INTENT(IN) :: interop
  405. END FUNCTION mkl_dfti_compute_forward_c_omp_offload
  406. ! overloading of DftiComputeForward for SP C2C DFT (inplace, split complex)
  407. FUNCTION mkl_dfti_compute_forward_ss_omp_offload(desc,sSrcDstRe,sSrcDstIm,interop)
  408. USE MKL_DFT_TYPE
  409. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_ss_omp_offload
  410. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_ss_omp_offload
  411. INTEGER mkl_dfti_compute_forward_ss_omp_offload
  412. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  413. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstRe
  414. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstIm
  415. TYPE(*), INTENT(IN) :: interop
  416. END FUNCTION mkl_dfti_compute_forward_ss_omp_offload
  417. ! overloading of DftiComputeForward for SP R2C DFT (out-of-place)
  418. FUNCTION mkl_dfti_compute_forward_sc_omp_offload(desc,sSrc,cDst,interop)
  419. USE MKL_DFT_TYPE
  420. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_sc_omp_offload
  421. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_sc_omp_offload
  422. INTEGER mkl_dfti_compute_forward_sc_omp_offload
  423. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  424. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrc
  425. COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: cDst
  426. TYPE(*), INTENT(IN) :: interop
  427. END FUNCTION mkl_dfti_compute_forward_sc_omp_offload
  428. ! overloading of DftiComputeForward for SP C2C DFT (out-of-place)
  429. FUNCTION mkl_dfti_compute_forward_cc_omp_offload(desc,cSrc,cDst,interop)
  430. USE MKL_DFT_TYPE
  431. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_cc_omp_offload
  432. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_cc_omp_offload
  433. INTEGER mkl_dfti_compute_forward_cc_omp_offload
  434. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  435. COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: cSrc
  436. COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: cDst
  437. TYPE(*), INTENT(IN) :: interop
  438. END FUNCTION mkl_dfti_compute_forward_cc_omp_offload
  439. ! overloading of DftiComputeForward for SP C2C DFT (out-of-place, split
  440. ! complex)
  441. FUNCTION mkl_dfti_compute_forward_ssss_omp_offload(desc,sSrcRe,sSrcIm,sDstRe,sDstIm,interop)
  442. USE MKL_DFT_TYPE
  443. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_ssss_omp_offload
  444. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_ssss_omp_offload
  445. INTEGER mkl_dfti_compute_forward_ssss_omp_offload
  446. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  447. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcRe
  448. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcIm
  449. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstRe
  450. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstIm
  451. TYPE(*), INTENT(IN) :: interop
  452. END FUNCTION mkl_dfti_compute_forward_ssss_omp_offload
  453. ! overloading of DftiComputeForward for DP R2C DFT (inplace)
  454. FUNCTION mkl_dfti_compute_forward_d_omp_offload(desc,dSrcDst,interop)
  455. USE MKL_DFT_TYPE
  456. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_d_omp_offload
  457. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_d_omp_offload
  458. INTEGER mkl_dfti_compute_forward_d_omp_offload
  459. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  460. REAL(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: dSrcDst
  461. TYPE(*), INTENT(IN) :: interop
  462. END FUNCTION mkl_dfti_compute_forward_d_omp_offload
  463. ! overloading of DftiComputeForward for DP C2C DFT (inplace)
  464. FUNCTION mkl_dfti_compute_forward_z_omp_offload(desc,zSrcDst,interop)
  465. USE MKL_DFT_TYPE
  466. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_z_omp_offload
  467. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_z_omp_offload
  468. INTEGER mkl_dfti_compute_forward_z_omp_offload
  469. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  470. COMPLEX(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: zSrcDst
  471. TYPE(*), INTENT(IN) :: interop
  472. END FUNCTION mkl_dfti_compute_forward_z_omp_offload
  473. ! overloading of DftiComputeForward for DP C2C DFT (inplace, split complex)
  474. FUNCTION mkl_dfti_compute_forward_dd_omp_offload(desc,dSrcDstRe,dSrcDstIm,interop)
  475. USE MKL_DFT_TYPE
  476. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_dd_omp_offload
  477. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_dd_omp_offload
  478. INTEGER mkl_dfti_compute_forward_dd_omp_offload
  479. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  480. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstRe
  481. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstIm
  482. TYPE(*), INTENT(IN) :: interop
  483. END FUNCTION mkl_dfti_compute_forward_dd_omp_offload
  484. ! overloading of DftiComputeForward for DP R2C DFT (out-of-place)
  485. FUNCTION mkl_dfti_compute_forward_dz_omp_offload(desc,dSrc,zDst,interop)
  486. USE MKL_DFT_TYPE
  487. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_dz_omp_offload
  488. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_dz_omp_offload
  489. INTEGER mkl_dfti_compute_forward_dz_omp_offload
  490. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  491. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrc
  492. COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: zDst
  493. TYPE(*), INTENT(IN) :: interop
  494. END FUNCTION mkl_dfti_compute_forward_dz_omp_offload
  495. ! overloading of DftiComputeForward for DP C2C DFT (out-of-place)
  496. FUNCTION mkl_dfti_compute_forward_zz_omp_offload(desc,zSrc,zDst,interop)
  497. USE MKL_DFT_TYPE
  498. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_zz_omp_offload
  499. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_zz_omp_offload
  500. INTEGER mkl_dfti_compute_forward_zz_omp_offload
  501. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  502. COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: zSrc
  503. COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: zDst
  504. TYPE(*), INTENT(IN) :: interop
  505. END FUNCTION mkl_dfti_compute_forward_zz_omp_offload
  506. ! overloading of DftiComputeForward for DP C2C DFT (out-of-place, split
  507. ! complex)
  508. FUNCTION mkl_dfti_compute_forward_dddd_omp_offload(desc,dSrcRe,dSrcIm,dDstRe,dDstIm,interop)
  509. USE MKL_DFT_TYPE
  510. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_forward_dddd_omp_offload
  511. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_forward_dddd_omp_offload
  512. INTEGER mkl_dfti_compute_forward_dddd_omp_offload
  513. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  514. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcRe
  515. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcIm
  516. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstRe
  517. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstIm
  518. TYPE(*), INTENT(IN) :: interop
  519. END FUNCTION mkl_dfti_compute_forward_dddd_omp_offload
  520. END INTERFACE
  521. INTERFACE DftiComputeForward
  522. ! overloading of DftiComputeForward for SP R2C DFT (inplace)
  523. FUNCTION dfti_compute_forward_s_cpu(desc,sSrcDst)
  524. USE MKL_DFT_TYPE
  525. !DEC$ ATTRIBUTES C :: dfti_compute_forward_s_cpu
  526. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_s_cpu
  527. INTEGER dfti_compute_forward_s_cpu
  528. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  529. REAL(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: sSrcDst
  530. !$omp declare variant( dfti_compute_forward_s_cpu:mkl_dfti_compute_forward_s_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  531. !$omp declare variant( dfti_compute_forward_s_cpu:mkl_dfti_compute_forward_s_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:sSrcDst )
  532. END FUNCTION dfti_compute_forward_s_cpu
  533. ! overloading of DftiComputeForward for SP C2C DFT (inplace)
  534. FUNCTION dfti_compute_forward_c_cpu(desc,cSrcDst)
  535. USE MKL_DFT_TYPE
  536. !DEC$ ATTRIBUTES C :: dfti_compute_forward_c_cpu
  537. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_c_cpu
  538. INTEGER dfti_compute_forward_c_cpu
  539. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  540. COMPLEX(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: cSrcDst
  541. !$omp declare variant( dfti_compute_forward_c_cpu:mkl_dfti_compute_forward_c_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  542. !$omp declare variant( dfti_compute_forward_c_cpu:mkl_dfti_compute_forward_c_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:cSrcDst )
  543. END FUNCTION dfti_compute_forward_c_cpu
  544. ! overloading of DftiComputeForward for SP C2C DFT (inplace, split complex)
  545. FUNCTION dfti_compute_forward_ss_cpu(desc,sSrcDstRe,sSrcDstIm)
  546. USE MKL_DFT_TYPE
  547. !DEC$ ATTRIBUTES C :: dfti_compute_forward_ss_cpu
  548. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_ss_cpu
  549. INTEGER dfti_compute_forward_ss_cpu
  550. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  551. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstRe
  552. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstIm
  553. !$omp declare variant( dfti_compute_forward_ss_cpu:mkl_dfti_compute_forward_ss_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  554. !$omp declare variant(dfti_compute_forward_ss_cpu:mkl_dfti_compute_forward_ss_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:sSrcDstRe,sSrcDstIm )
  555. END FUNCTION dfti_compute_forward_ss_cpu
  556. ! overloading of DftiComputeForward for SP R2C DFT (out-of-place)
  557. FUNCTION dfti_compute_forward_sc_cpu(desc,sSrc,cDst)
  558. USE MKL_DFT_TYPE
  559. !DEC$ ATTRIBUTES C :: dfti_compute_forward_sc_cpu
  560. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_sc_cpu
  561. INTEGER dfti_compute_forward_sc_cpu
  562. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  563. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrc
  564. COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: cDst
  565. !$omp declare variant( dfti_compute_forward_sc_cpu:mkl_dfti_compute_forward_sc_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  566. !$omp declare variant( dfti_compute_forward_sc_cpu:mkl_dfti_compute_forward_sc_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:sSrc,cDst )
  567. END FUNCTION dfti_compute_forward_sc_cpu
  568. ! overloading of DftiComputeForward for SP C2C DFT (out-of-place)
  569. FUNCTION dfti_compute_forward_cc_cpu(desc,cSrc,cDst)
  570. USE MKL_DFT_TYPE
  571. !DEC$ ATTRIBUTES C :: dfti_compute_forward_cc_cpu
  572. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_cc_cpu
  573. INTEGER dfti_compute_forward_cc_cpu
  574. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  575. COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: cSrc
  576. COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: cDst
  577. !$omp declare variant( dfti_compute_forward_cc_cpu:mkl_dfti_compute_forward_cc_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  578. !$omp declare variant( dfti_compute_forward_cc_cpu:mkl_dfti_compute_forward_cc_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:cSrc,cDst )
  579. END FUNCTION dfti_compute_forward_cc_cpu
  580. ! overloading of DftiComputeForward for SP C2C DFT (out-of-place, split
  581. ! complex)
  582. FUNCTION dfti_compute_forward_ssss_cpu(desc,sSrcRe,sSrcIm,sDstRe,sDstIm)
  583. USE MKL_DFT_TYPE
  584. !DEC$ ATTRIBUTES C :: dfti_compute_forward_ssss_cpu
  585. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_ssss_cpu
  586. INTEGER dfti_compute_forward_ssss_cpu
  587. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  588. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcRe
  589. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcIm
  590. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstRe
  591. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstIm
  592. !$omp declare variant( dfti_compute_forward_ssss_cpu:mkl_dfti_compute_forward_ssss_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  593. !$omp declare variant( dfti_compute_forward_ssss_cpu:mkl_dfti_compute_forward_ssss_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:sSrcRe,sSrcIm,sDstRe,sDstIm )
  594. END FUNCTION dfti_compute_forward_ssss_cpu
  595. ! overloading of DftiComputeForward for DP R2C DFT (inplace)
  596. FUNCTION dfti_compute_forward_d_cpu(desc,dSrcDst)
  597. USE MKL_DFT_TYPE
  598. !DEC$ ATTRIBUTES C :: dfti_compute_forward_d_cpu
  599. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_d_cpu
  600. INTEGER dfti_compute_forward_d_cpu
  601. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  602. REAL(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: dSrcDst
  603. !$omp declare variant( dfti_compute_forward_d_cpu:mkl_dfti_compute_forward_d_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  604. !$omp declare variant( dfti_compute_forward_d_cpu:mkl_dfti_compute_forward_d_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:dSrcDst )
  605. END FUNCTION dfti_compute_forward_d_cpu
  606. ! overloading of DftiComputeForward for DP C2C DFT (inplace)
  607. FUNCTION dfti_compute_forward_z_cpu(desc,zSrcDst)
  608. USE MKL_DFT_TYPE
  609. !DEC$ ATTRIBUTES C :: dfti_compute_forward_z_cpu
  610. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_z_cpu
  611. INTEGER dfti_compute_forward_z_cpu
  612. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  613. COMPLEX(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: zSrcDst
  614. !$omp declare variant( dfti_compute_forward_z_cpu:mkl_dfti_compute_forward_z_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  615. !$omp declare variant( dfti_compute_forward_z_cpu:mkl_dfti_compute_forward_z_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:zSrcDst )
  616. END FUNCTION dfti_compute_forward_z_cpu
  617. ! overloading of DftiComputeForward for DP C2C DFT (inplace, split complex)
  618. FUNCTION dfti_compute_forward_dd_cpu(desc,dSrcDstRe,dSrcDstIm)
  619. USE MKL_DFT_TYPE
  620. !DEC$ ATTRIBUTES C :: dfti_compute_forward_dd_cpu
  621. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_dd_cpu
  622. INTEGER dfti_compute_forward_dd_cpu
  623. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  624. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstRe
  625. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstIm
  626. !$omp declare variant( dfti_compute_forward_dd_cpu:mkl_dfti_compute_forward_dd_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  627. !$omp declare variant( dfti_compute_forward_dd_cpu:mkl_dfti_compute_forward_dd_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:dSrcDstRe,dSrcDstIm )
  628. END FUNCTION dfti_compute_forward_dd_cpu
  629. ! overloading of DftiComputeForward for DP R2C DFT (out-of-place)
  630. FUNCTION dfti_compute_forward_dz_cpu(desc,dSrc,zDst)
  631. USE MKL_DFT_TYPE
  632. !DEC$ ATTRIBUTES C :: dfti_compute_forward_dz_cpu
  633. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_dz_cpu
  634. INTEGER dfti_compute_forward_dz_cpu
  635. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  636. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrc
  637. COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: zDst
  638. !$omp declare variant( dfti_compute_forward_dz_cpu:mkl_dfti_compute_forward_dz_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  639. !$omp declare variant( dfti_compute_forward_dz_cpu:mkl_dfti_compute_forward_dz_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:dSrc,zDst )
  640. END FUNCTION dfti_compute_forward_dz_cpu
  641. ! overloading of DftiComputeForward for DP C2C DFT (out-of-place)
  642. FUNCTION dfti_compute_forward_zz_cpu(desc,zSrc,zDst)
  643. USE MKL_DFT_TYPE
  644. !DEC$ ATTRIBUTES C :: dfti_compute_forward_zz_cpu
  645. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_zz_cpu
  646. INTEGER dfti_compute_forward_zz_cpu
  647. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  648. COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: zSrc
  649. COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: zDst
  650. !$omp declare variant( dfti_compute_forward_zz_cpu:mkl_dfti_compute_forward_zz_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  651. !$omp declare variant( dfti_compute_forward_zz_cpu:mkl_dfti_compute_forward_zz_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:zSrc,zDst )
  652. END FUNCTION dfti_compute_forward_zz_cpu
  653. ! overloading of DftiComputeForward for DP C2C DFT (out-of-place, split
  654. ! complex)
  655. FUNCTION dfti_compute_forward_dddd_cpu(desc,dSrcRe,dSrcIm,dDstRe,dDstIm)
  656. USE MKL_DFT_TYPE
  657. !DEC$ ATTRIBUTES C :: dfti_compute_forward_dddd_cpu
  658. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_forward_dddd_cpu
  659. INTEGER dfti_compute_forward_dddd_cpu
  660. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  661. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcRe
  662. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcIm
  663. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstRe
  664. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstIm
  665. !$omp declare variant( dfti_compute_forward_dddd_cpu:mkl_dfti_compute_forward_dddd_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  666. !$omp declare variant( dfti_compute_forward_dddd_cpu:mkl_dfti_compute_forward_dddd_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:dSrcRe,dSrcIm,dDstRe,dDstIm )
  667. END FUNCTION dfti_compute_forward_dddd_cpu
  668. END INTERFACE DftiComputeForward
  669. INTERFACE
  670. ! overloading of DftiComputeBackward for SP C2R DFT (inplace)
  671. FUNCTION mkl_dfti_compute_backward_s_omp_offload(desc,sSrcDst,interop)
  672. USE MKL_DFT_TYPE
  673. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_s_omp_offload
  674. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_s_omp_offload
  675. INTEGER mkl_dfti_compute_backward_s_omp_offload
  676. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  677. REAL(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: sSrcDst
  678. TYPE(*), INTENT(IN) :: interop
  679. END FUNCTION mkl_dfti_compute_backward_s_omp_offload
  680. ! overloading of DftiComputeBackward for SP C2C DFT (inplace)
  681. FUNCTION mkl_dfti_compute_backward_c_omp_offload(desc,cSrcDst,interop)
  682. USE MKL_DFT_TYPE
  683. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_c_omp_offload
  684. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_c_omp_offload
  685. INTEGER mkl_dfti_compute_backward_c_omp_offload
  686. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  687. COMPLEX(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: cSrcDst
  688. TYPE(*), INTENT(IN) :: interop
  689. END FUNCTION mkl_dfti_compute_backward_c_omp_offload
  690. ! overloading of DftiComputeBackward for SP C2C DFT (inplace, split complex)
  691. FUNCTION mkl_dfti_compute_backward_ss_omp_offload(desc,sSrcDstRe,sSrcDstIm,interop)
  692. USE MKL_DFT_TYPE
  693. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_ss_omp_offload
  694. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_ss_omp_offload
  695. INTEGER mkl_dfti_compute_backward_ss_omp_offload
  696. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  697. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstRe
  698. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstIm
  699. TYPE(*), INTENT(IN) :: interop
  700. END FUNCTION mkl_dfti_compute_backward_ss_omp_offload
  701. ! overloading of DftiComputeBackward for SP C2R DFT (out-of-place)
  702. FUNCTION mkl_dfti_compute_backward_cs_omp_offload(desc,cSrc,sDst,interop)
  703. USE MKL_DFT_TYPE
  704. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_cs_omp_offload
  705. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_cs_omp_offload
  706. INTEGER mkl_dfti_compute_backward_cs_omp_offload
  707. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  708. COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: cSrc
  709. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDst
  710. TYPE(*), INTENT(IN) :: interop
  711. END FUNCTION mkl_dfti_compute_backward_cs_omp_offload
  712. ! overloading of DftiComputeBackward for SP C2C DFT (out-of-place)
  713. FUNCTION mkl_dfti_compute_backward_cc_omp_offload(desc,cSrc,cDst,interop)
  714. USE MKL_DFT_TYPE
  715. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_cc_omp_offload
  716. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_cc_omp_offload
  717. INTEGER mkl_dfti_compute_backward_cc_omp_offload
  718. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  719. COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: cSrc
  720. COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: cDst
  721. TYPE(*), INTENT(IN) :: interop
  722. END FUNCTION mkl_dfti_compute_backward_cc_omp_offload
  723. ! overloading of DftiComputeBackward for SP C2C DFT (out-of-place, split
  724. ! complex)
  725. FUNCTION mkl_dfti_compute_backward_ssss_omp_offload(desc,sSrcRe,sSrcIm,sDstRe,sDstIm,interop)
  726. USE MKL_DFT_TYPE
  727. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_ssss_omp_offload
  728. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_ssss_omp_offload
  729. INTEGER mkl_dfti_compute_backward_ssss_omp_offload
  730. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  731. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcRe
  732. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcIm
  733. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstRe
  734. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstIm
  735. TYPE(*), INTENT(IN) :: interop
  736. END FUNCTION mkl_dfti_compute_backward_ssss_omp_offload
  737. ! overloading of DftiComputeBackward for DP C2R DFT (inplace)
  738. FUNCTION mkl_dfti_compute_backward_d_omp_offload(desc,dSrcDst,interop)
  739. USE MKL_DFT_TYPE
  740. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_d_omp_offload
  741. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_d_omp_offload
  742. INTEGER mkl_dfti_compute_backward_d_omp_offload
  743. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  744. REAL(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: dSrcDst
  745. TYPE(*), INTENT(IN) :: interop
  746. END FUNCTION mkl_dfti_compute_backward_d_omp_offload
  747. ! overloading of DftiComputeBackward for DP C2C DFT (inplace)
  748. FUNCTION mkl_dfti_compute_backward_z_omp_offload(desc,zSrcDst,interop)
  749. USE MKL_DFT_TYPE
  750. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_z_omp_offload
  751. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_z_omp_offload
  752. INTEGER mkl_dfti_compute_backward_z_omp_offload
  753. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  754. COMPLEX(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: zSrcDst
  755. TYPE(*), INTENT(IN) :: interop
  756. END FUNCTION mkl_dfti_compute_backward_z_omp_offload
  757. ! overloading of DftiComputeBackward for DP C2C DFT (inplace, split complex)
  758. FUNCTION mkl_dfti_compute_backward_dd_omp_offload(desc,dSrcDstRe,dSrcDstIm,interop)
  759. USE MKL_DFT_TYPE
  760. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_dd_omp_offload
  761. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_dd_omp_offload
  762. INTEGER mkl_dfti_compute_backward_dd_omp_offload
  763. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  764. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstRe
  765. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstIm
  766. TYPE(*), INTENT(IN) :: interop
  767. END FUNCTION mkl_dfti_compute_backward_dd_omp_offload
  768. ! overloading of DftiComputeBackward for DP C2R DFT (out-of-place)
  769. FUNCTION mkl_dfti_compute_backward_zd_omp_offload(desc,zSrc,dDst,interop)
  770. USE MKL_DFT_TYPE
  771. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_zd_omp_offload
  772. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_zd_omp_offload
  773. INTEGER mkl_dfti_compute_backward_zd_omp_offload
  774. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  775. COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: zSrc
  776. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDst
  777. TYPE(*), INTENT(IN) :: interop
  778. END FUNCTION mkl_dfti_compute_backward_zd_omp_offload
  779. ! overloading of DftiComputeBackward for DP C2C DFT (out-of-place)
  780. FUNCTION mkl_dfti_compute_backward_zz_omp_offload(desc,zSrc,zDst,interop)
  781. USE MKL_DFT_TYPE
  782. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_zz_omp_offload
  783. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_zz_omp_offload
  784. INTEGER mkl_dfti_compute_backward_zz_omp_offload
  785. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  786. COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: zSrc
  787. COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: zDst
  788. TYPE(*), INTENT(IN) :: interop
  789. END FUNCTION mkl_dfti_compute_backward_zz_omp_offload
  790. ! overloading of DftiComputeBackward for DP C2C DFT (out-of-place, split
  791. ! complex)
  792. FUNCTION mkl_dfti_compute_backward_dddd_omp_offload(desc,dSrcRe,dSrcIm,dDstRe,dDstIm,interop)
  793. USE MKL_DFT_TYPE
  794. !DEC$ ATTRIBUTES C :: mkl_dfti_compute_backward_dddd_omp_offload
  795. !DEC$ ATTRIBUTES REFERENCE :: mkl_dfti_compute_backward_dddd_omp_offload
  796. INTEGER mkl_dfti_compute_backward_dddd_omp_offload
  797. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  798. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcRe
  799. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcIm
  800. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstRe
  801. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstIm
  802. TYPE(*), INTENT(IN) :: interop
  803. END FUNCTION mkl_dfti_compute_backward_dddd_omp_offload
  804. END INTERFACE
  805. INTERFACE DftiComputeBackward
  806. ! overloading of DftiComputeBackward for SP C2R DFT (inplace)
  807. FUNCTION dfti_compute_backward_s_cpu(desc,sSrcDst)
  808. USE MKL_DFT_TYPE
  809. !DEC$ ATTRIBUTES C :: dfti_compute_backward_s_cpu
  810. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_s_cpu
  811. INTEGER dfti_compute_backward_s_cpu
  812. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  813. REAL(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: sSrcDst
  814. !$omp declare variant( dfti_compute_backward_s_cpu:mkl_dfti_compute_backward_s_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  815. !$omp declare variant( dfti_compute_backward_s_cpu:mkl_dfti_compute_backward_s_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:sSrcDst )
  816. END FUNCTION dfti_compute_backward_s_cpu
  817. ! overloading of DftiComputeBackward for SP C2C DFT (inplace)
  818. FUNCTION dfti_compute_backward_c_cpu(desc,cSrcDst)
  819. USE MKL_DFT_TYPE
  820. !DEC$ ATTRIBUTES C :: dfti_compute_backward_c_cpu
  821. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_c_cpu
  822. INTEGER dfti_compute_backward_c_cpu
  823. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  824. COMPLEX(DFTI_SPKP), INTENT(INOUT), DIMENSION(..) :: cSrcDst
  825. !$omp declare variant( dfti_compute_backward_c_cpu:mkl_dfti_compute_backward_c_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  826. !$omp declare variant( dfti_compute_backward_c_cpu:mkl_dfti_compute_backward_c_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:cSrcDst )
  827. END FUNCTION dfti_compute_backward_c_cpu
  828. ! overloading of DftiComputeBackward for SP C2C DFT (inplace, split complex)
  829. FUNCTION dfti_compute_backward_ss_cpu(desc,sSrcDstRe,sSrcDstIm)
  830. USE MKL_DFT_TYPE
  831. !DEC$ ATTRIBUTES C :: dfti_compute_backward_ss_cpu
  832. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_ss_cpu
  833. INTEGER dfti_compute_backward_ss_cpu
  834. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  835. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstRe
  836. REAL(DFTI_SPKP), DIMENSION(..) :: sSrcDstIm
  837. !$omp declare variant( dfti_compute_backward_ss_cpu:mkl_dfti_compute_backward_ss_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  838. !$omp declare variant( dfti_compute_backward_ss_cpu:mkl_dfti_compute_backward_ss_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:sSrcDstRe,sSrcDstIm )
  839. END FUNCTION dfti_compute_backward_ss_cpu
  840. ! overloading of DftiComputeBackward for SP C2R DFT (out-of-place)
  841. FUNCTION dfti_compute_backward_cs_cpu(desc,cSrc,sDst)
  842. USE MKL_DFT_TYPE
  843. !DEC$ ATTRIBUTES C :: dfti_compute_backward_cs_cpu
  844. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_cs_cpu
  845. INTEGER dfti_compute_backward_cs_cpu
  846. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  847. COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: cSrc
  848. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDst
  849. !$omp declare variant( dfti_compute_backward_cs_cpu:mkl_dfti_compute_backward_cs_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  850. !$omp declare variant( dfti_compute_backward_cs_cpu:mkl_dfti_compute_backward_cs_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:cSrc,sDst )
  851. END FUNCTION dfti_compute_backward_cs_cpu
  852. ! overloading of DftiComputeBackward for SP C2C DFT (out-of-place)
  853. FUNCTION dfti_compute_backward_cc_cpu(desc,cSrc,cDst)
  854. USE MKL_DFT_TYPE
  855. !DEC$ ATTRIBUTES C :: dfti_compute_backward_cc_cpu
  856. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_cc_cpu
  857. INTEGER dfti_compute_backward_cc_cpu
  858. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  859. COMPLEX(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: cSrc
  860. COMPLEX(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: cDst
  861. !$omp declare variant( dfti_compute_backward_cc_cpu:mkl_dfti_compute_backward_cc_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  862. !$omp declare variant( dfti_compute_backward_cc_cpu:mkl_dfti_compute_backward_cc_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:cSrc,cDst )
  863. END FUNCTION dfti_compute_backward_cc_cpu
  864. ! overloading of DftiComputeBackward for SP C2C DFT (out-of-place, split
  865. ! complex)
  866. FUNCTION dfti_compute_backward_ssss_cpu(desc,sSrcRe,sSrcIm,sDstRe,sDstIm)
  867. USE MKL_DFT_TYPE
  868. !DEC$ ATTRIBUTES C :: dfti_compute_backward_ssss_cpu
  869. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_ssss_cpu
  870. INTEGER dfti_compute_backward_ssss_cpu
  871. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  872. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcRe
  873. REAL(DFTI_SPKP), INTENT(IN), DIMENSION(..) :: sSrcIm
  874. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstRe
  875. REAL(DFTI_SPKP), INTENT(OUT), DIMENSION(..) :: sDstIm
  876. !$omp declare variant( dfti_compute_backward_ssss_cpu:mkl_dfti_compute_backward_ssss_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  877. !$omp declare variant( dfti_compute_backward_ssss_cpu:mkl_dfti_compute_backward_ssss_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:sSrcRe,sSrcIm,sDstRe,sDstIm )
  878. END FUNCTION dfti_compute_backward_ssss_cpu
  879. ! overloading of DftiComputeBackward for DP C2R DFT (inplace)
  880. FUNCTION dfti_compute_backward_d_cpu(desc,dSrcDst)
  881. USE MKL_DFT_TYPE
  882. !DEC$ ATTRIBUTES C :: dfti_compute_backward_d_cpu
  883. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_d_cpu
  884. INTEGER dfti_compute_backward_d_cpu
  885. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  886. REAL(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: dSrcDst
  887. !$omp declare variant( dfti_compute_backward_d_cpu:mkl_dfti_compute_backward_d_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  888. !$omp declare variant( dfti_compute_backward_d_cpu:mkl_dfti_compute_backward_d_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:dSrcDst )
  889. END FUNCTION dfti_compute_backward_d_cpu
  890. ! overloading of DftiComputeBackward for DP C2C DFT (inplace)
  891. FUNCTION dfti_compute_backward_z_cpu(desc,zSrcDst)
  892. USE MKL_DFT_TYPE
  893. !DEC$ ATTRIBUTES C :: dfti_compute_backward_z_cpu
  894. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_z_cpu
  895. INTEGER dfti_compute_backward_z_cpu
  896. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  897. COMPLEX(DFTI_DPKP), INTENT(INOUT), DIMENSION(..) :: zSrcDst
  898. !$omp declare variant( dfti_compute_backward_z_cpu:mkl_dfti_compute_backward_z_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  899. !$omp declare variant( dfti_compute_backward_z_cpu:mkl_dfti_compute_backward_z_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:zSrcDst )
  900. END FUNCTION dfti_compute_backward_z_cpu
  901. ! overloading of DftiComputeBackward for DP C2C DFT (inplace, split complex)
  902. FUNCTION dfti_compute_backward_dd_cpu(desc,dSrcDstRe,dSrcDstIm)
  903. USE MKL_DFT_TYPE
  904. !DEC$ ATTRIBUTES C :: dfti_compute_backward_dd_cpu
  905. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_dd_cpu
  906. INTEGER dfti_compute_backward_dd_cpu
  907. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  908. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstRe
  909. REAL(DFTI_DPKP), DIMENSION(..) :: dSrcDstIm
  910. !$omp declare variant( dfti_compute_backward_dd_cpu:mkl_dfti_compute_backward_dd_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  911. !$omp declare variant( dfti_compute_backward_dd_cpu:mkl_dfti_compute_backward_dd_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:dSrcDstRe,dSrcDstIm )
  912. END FUNCTION dfti_compute_backward_dd_cpu
  913. ! overloading of DftiComputeBackward for DP C2R DFT (out-of-place)
  914. FUNCTION dfti_compute_backward_zd_cpu(desc,zSrc,dDst)
  915. USE MKL_DFT_TYPE
  916. !DEC$ ATTRIBUTES C :: dfti_compute_backward_zd_cpu
  917. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_zd_cpu
  918. INTEGER dfti_compute_backward_zd_cpu
  919. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  920. COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: zSrc
  921. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDst
  922. !$omp declare variant( dfti_compute_backward_zd_cpu:mkl_dfti_compute_backward_zd_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  923. !$omp declare variant( dfti_compute_backward_zd_cpu:mkl_dfti_compute_backward_zd_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:zSrc,dDst )
  924. END FUNCTION dfti_compute_backward_zd_cpu
  925. ! overloading of DftiComputeBackward for DP C2C DFT (out-of-place)
  926. FUNCTION dfti_compute_backward_zz_cpu(desc,zSrc,zDst)
  927. USE MKL_DFT_TYPE
  928. !DEC$ ATTRIBUTES C :: dfti_compute_backward_zz_cpu
  929. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_zz_cpu
  930. INTEGER dfti_compute_backward_zz_cpu
  931. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  932. COMPLEX(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: zSrc
  933. COMPLEX(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: zDst
  934. !$omp declare variant( dfti_compute_backward_zz_cpu:mkl_dfti_compute_backward_zz_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  935. !$omp declare variant( dfti_compute_backward_zz_cpu:mkl_dfti_compute_backward_zz_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:zSrc,zDst )
  936. END FUNCTION dfti_compute_backward_zz_cpu
  937. ! overloading of DftiComputeBackward for DP C2C DFT (out-of-place, split
  938. ! complex)
  939. FUNCTION dfti_compute_backward_dddd_cpu(desc,dSrcRe,dSrcIm,dDstRe,dDstIm)
  940. USE MKL_DFT_TYPE
  941. !DEC$ ATTRIBUTES C :: dfti_compute_backward_dddd_cpu
  942. !DEC$ ATTRIBUTES REFERENCE :: dfti_compute_backward_dddd_cpu
  943. INTEGER dfti_compute_backward_dddd_cpu
  944. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  945. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcRe
  946. REAL(DFTI_DPKP), INTENT(IN), DIMENSION(..) :: dSrcIm
  947. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstRe
  948. REAL(DFTI_DPKP), INTENT(OUT), DIMENSION(..) :: dDstIm
  949. !$omp declare variant( dfti_compute_backward_dddd_cpu:mkl_dfti_compute_backward_dddd_omp_offload ) match( construct={target variant dispatch}, device={arch(gen)} )
  950. !$omp declare variant( dfti_compute_backward_dddd_cpu:mkl_dfti_compute_backward_dddd_omp_offload ) match( construct={dispatch}, device={arch(gen)} ) append_args( interop(prefer_type("sycl","level_zero"),targetsync) ) adjust_args( need_device_ptr:dSrcRe,dSrcIm,dDstRe,dDstIm )
  951. END FUNCTION dfti_compute_backward_dddd_cpu
  952. END INTERFACE DftiComputeBackward
  953. INTERFACE DftiFreeDescriptor
  954. FUNCTION dfti_free_descriptor_external(desc)
  955. USE MKL_DFT_TYPE
  956. !DEC$ ATTRIBUTES C :: dfti_free_descriptor_external
  957. !DEC$ ATTRIBUTES REFERENCE :: dfti_free_descriptor_external
  958. INTEGER dfti_free_descriptor_external
  959. TYPE(DFTI_DESCRIPTOR), POINTER :: desc
  960. END FUNCTION dfti_free_descriptor_external
  961. END INTERFACE
  962. INTERFACE DftiErrorClass
  963. FUNCTION dfti_error_class_external(Status, ErrorClass)
  964. USE MKL_DFT_TYPE
  965. !DEC$ ATTRIBUTES C :: dfti_error_class_external
  966. !DEC$ ATTRIBUTES REFERENCE :: dfti_error_class_external
  967. LOGICAL dfti_error_class_external
  968. INTEGER, INTENT(IN) :: Status
  969. INTEGER, INTENT(IN) :: ErrorClass
  970. END FUNCTION dfti_error_class_external
  971. END INTERFACE
  972. INTERFACE DftiErrorMessage
  973. FUNCTION dfti_error_message_external(Status)
  974. USE MKL_DFT_TYPE
  975. !DEC$ ATTRIBUTES C :: dfti_error_message_external
  976. !DEC$ ATTRIBUTES REFERENCE :: dfti_error_message_external
  977. CHARACTER(LEN=DFTI_MAX_MESSAGE_LENGTH) :: dfti_error_message_external
  978. INTEGER, INTENT(IN) :: Status
  979. END FUNCTION dfti_error_message_external
  980. END INTERFACE
  981. END MODULE MKL_DFTI_OMP_OFFLOAD