mkl_service.f90 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. !===============================================================================
  2. ! Copyright 2010-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) FORTRAN 95 interface for service routines
  16. !*******************************************************************************
  17. MODULE MKL_SERVICE
  18. IMPLICIT NONE
  19. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_DOMAIN_ALL = 0
  20. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_DOMAIN_BLAS = 1
  21. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_DOMAIN_FFT = 2
  22. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_DOMAIN_VML = 3
  23. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_DOMAIN_PARDISO = 4
  24. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_DYNAMIC_TRUE = 1
  25. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_DYNAMIC_FALSE = 0
  26. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_SSE4_2 = 0
  27. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX = 1
  28. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX2 = 2
  29. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX512_MIC = 3
  30. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX512 = 4
  31. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX512_MIC_E1 = 5
  32. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX512_E1 = 6
  33. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX512_E2 = 7
  34. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX512_E3 = 8
  35. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_ENABLE_AVX512_E4 = 9
  36. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_INTERFACE_LP64 = INT(Z"00000000")
  37. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_INTERFACE_ILP64 = INT(Z"00000001")
  38. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_INTERFACE_GNU = INT(Z"00000002")
  39. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_THREADING_INTEL = 0
  40. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_THREADING_SEQUENTIAL = 1
  41. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_THREADING_PGI = 2
  42. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_THREADING_GNU = 3
  43. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_THREADING_TBB = 4
  44. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_BRANCH = 1
  45. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_ALL = -1
  46. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_OFF = 0
  47. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_UNSET_ALL = 0
  48. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_BRANCH_OFF = 1
  49. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_AUTO = 2
  50. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_COMPATIBLE = 3
  51. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_SSE2 = 4
  52. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_SSSE3 = 6
  53. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_SSE4_1 = 7
  54. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_SSE4_2 = 8
  55. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_AVX = 9
  56. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_AVX2 = 10
  57. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_AVX512_MIC = 11
  58. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_AVX512 = 12
  59. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_AVX512_MIC_E1 = 13
  60. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_AVX512_E1 = 14
  61. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_STRICT = 65536
  62. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_SUCCESS = 0
  63. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_ERR_INVALID_SETTINGS = -1
  64. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_ERR_INVALID_INPUT = -2
  65. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_ERR_UNSUPPORTED_BRANCH = -3
  66. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_ERR_UNKNOWN_BRANCH = -4
  67. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_ERR_MODE_CHANGE_FAILURE = -8
  68. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_PEAK_MEM_DISABLE = 0
  69. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_PEAK_MEM_ENABLE = 1
  70. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_PEAK_MEM_RESET = -1
  71. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_PEAK_MEM = 2
  72. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_MEM_MCDRAM = 1
  73. INTERFACE
  74. SUBROUTINE MKL_GET_VERSION_STRING(BUF)
  75. CHARACTER*(*), INTENT(OUT) :: BUF
  76. END
  77. END INTERFACE
  78. INTERFACE
  79. DOUBLE PRECISION FUNCTION MKL_GET_CPU_FREQUENCY()
  80. END
  81. END INTERFACE
  82. INTERFACE
  83. DOUBLE PRECISION FUNCTION MKL_GET_MAX_CPU_FREQUENCY()
  84. END
  85. END INTERFACE
  86. INTERFACE
  87. DOUBLE PRECISION FUNCTION MKL_GET_CLOCKS_FREQUENCY()
  88. END
  89. END INTERFACE
  90. INTERFACE
  91. SUBROUTINE MKL_GET_CPU_CLOCKS(CPU_CLOCKS)
  92. INTEGER(8), INTENT(OUT) :: CPU_CLOCKS
  93. END
  94. END INTERFACE
  95. ! Threading control functions
  96. INTERFACE
  97. INTEGER(4) FUNCTION MKL_GET_MAX_THREADS()
  98. END
  99. END INTERFACE
  100. INTERFACE
  101. INTEGER(4) FUNCTION MKL_GET_NUM_STRIPES()
  102. END
  103. END INTERFACE
  104. INTERFACE
  105. INTEGER(4) FUNCTION MKL_DOMAIN_GET_MAX_THREADS(DOMAIN)
  106. INTEGER(4), INTENT(IN) :: DOMAIN
  107. END
  108. END INTERFACE
  109. INTERFACE
  110. INTEGER(4) FUNCTION MKL_SET_NUM_THREADS_LOCAL(NTHRS)
  111. INTEGER(4), INTENT(IN) :: NTHRS
  112. END
  113. END INTERFACE
  114. INTERFACE
  115. SUBROUTINE MKL_SET_NUM_THREADS(NTHRS)
  116. INTEGER(4), INTENT(IN) :: NTHRS
  117. END
  118. END INTERFACE
  119. INTERFACE
  120. SUBROUTINE MKL_SET_NUM_STRIPES(NSTRP)
  121. INTEGER(4), INTENT(IN) :: NSTRP
  122. END
  123. END INTERFACE
  124. INTERFACE
  125. INTEGER(4) FUNCTION MKL_DOMAIN_SET_NUM_THREADS(NTHRS,DOMAIN)
  126. INTEGER(4), INTENT(IN) :: NTHRS
  127. INTEGER(4), INTENT(IN) :: DOMAIN
  128. END
  129. END INTERFACE
  130. INTERFACE
  131. INTEGER(4) FUNCTION MKL_GET_DYNAMIC()
  132. END
  133. END INTERFACE
  134. INTERFACE
  135. SUBROUTINE MKL_SET_DYNAMIC(MKL_DYNAMIC)
  136. INTEGER(4), INTENT(IN) :: MKL_DYNAMIC
  137. END
  138. END INTERFACE
  139. ! oneMKL Memory functions
  140. INTERFACE
  141. FUNCTION MKL_MALLOC(SIZE,ALIGN)
  142. USE ISO_C_BINDING
  143. INTEGER(KIND=C_INTPTR_T) MKL_MALLOC
  144. INTEGER(KIND=C_SIZE_T) SIZE
  145. INTEGER(4) ALIGN
  146. END FUNCTION MKL_MALLOC
  147. END INTERFACE
  148. INTERFACE
  149. FUNCTION MKL_CALLOC(NUM,SIZE,ALIGN)
  150. USE ISO_C_BINDING
  151. INTEGER(KIND=C_INTPTR_T) MKL_CALLOC
  152. INTEGER(KIND=C_SIZE_T) NUM,SIZE
  153. INTEGER(4) ALIGN
  154. END FUNCTION MKL_CALLOC
  155. END INTERFACE
  156. INTERFACE
  157. FUNCTION MKL_REALLOC(PTR,SIZE)
  158. USE ISO_C_BINDING
  159. INTEGER(KIND=C_INTPTR_T) MKL_REALLOC,PTR
  160. INTEGER(KIND=C_SIZE_T) SIZE
  161. END FUNCTION MKL_REALLOC
  162. END INTERFACE
  163. INTERFACE
  164. SUBROUTINE MKL_FREE(PTR)
  165. USE ISO_C_BINDING
  166. INTEGER(KIND=C_INTPTR_T) PTR
  167. END SUBROUTINE MKL_FREE
  168. END INTERFACE
  169. INTERFACE
  170. INTEGER(8) FUNCTION MKL_MEM_STAT(N_BUFF)
  171. INTEGER(4), INTENT(OUT) :: N_BUFF
  172. END
  173. END INTERFACE
  174. INTERFACE
  175. INTEGER(8) FUNCTION MKL_PEAK_MEM_USAGE(RESET)
  176. INTEGER(4), INTENT(IN) :: RESET
  177. END
  178. END INTERFACE
  179. INTERFACE
  180. SUBROUTINE MKL_FREE_BUFFERS()
  181. END
  182. END INTERFACE
  183. INTERFACE
  184. SUBROUTINE MKL_THREAD_FREE_BUFFERS()
  185. END
  186. END INTERFACE
  187. INTERFACE
  188. INTEGER(4) FUNCTION MKL_DISABLE_FAST_MM()
  189. END
  190. END INTERFACE
  191. INTERFACE
  192. INTEGER(4) FUNCTION MKL_SET_MEMORY_LIMIT(MEM_TYPE,LIMIT)
  193. USE ISO_C_BINDING
  194. INTEGER(4), INTENT(IN) :: MEM_TYPE
  195. INTEGER(KIND=C_SIZE_T), INTENT(IN) :: LIMIT
  196. END
  197. END INTERFACE
  198. ! oneMKL Progress routine
  199. INTERFACE
  200. FUNCTION MKL_PROGRESS( THREAD, STEP, STAGE )
  201. INTEGER(4), INTENT(IN) :: THREAD,STEP
  202. CHARACTER*(*), INTENT(IN) :: STAGE
  203. INTEGER MKL_PROGRESS
  204. END
  205. END INTERFACE
  206. INTERFACE
  207. INTEGER(4) FUNCTION MKL_ENABLE_INSTRUCTIONS(TYPE)
  208. INTEGER(4), INTENT(IN) :: TYPE
  209. END
  210. END INTERFACE
  211. ! oneMKL layer routines
  212. INTERFACE
  213. INTEGER(4) FUNCTION MKL_SET_INTERFACE_LAYER(MKL_INTERFACE)
  214. INTEGER(4), INTENT(IN) :: MKL_INTERFACE
  215. END
  216. END INTERFACE
  217. INTERFACE
  218. INTEGER(4) FUNCTION MKL_SET_THREADING_LAYER(MKL_THREADING)
  219. INTEGER(4), INTENT(IN) :: MKL_THREADING
  220. END
  221. END INTERFACE
  222. ! oneMKL CBWR routines
  223. INTERFACE
  224. INTEGER(4) FUNCTION MKL_CBWR_GET(MKL_CBWR)
  225. INTEGER(4), INTENT(IN) :: MKL_CBWR
  226. END
  227. END INTERFACE
  228. INTERFACE
  229. INTEGER(4) FUNCTION MKL_CBWR_SET(MKL_CBWR)
  230. INTEGER(4), INTENT(IN) :: MKL_CBWR
  231. END
  232. END INTERFACE
  233. INTERFACE
  234. INTEGER(4) FUNCTION MKL_CBWR_GET_AUTO_BRANCH()
  235. END
  236. END INTERFACE
  237. ! oneMKL MPI routines
  238. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_BLACS_CUSTOM = 0
  239. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_BLACS_MSMPI = 1
  240. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_BLACS_INTELMPI = 2
  241. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_BLACS_MPICH2 = 3
  242. INTERFACE
  243. INTEGER(4) FUNCTION MKL_SET_MPI(VENDOR, CUSTOM_LIBRARY_NAME)
  244. INTEGER(4), INTENT(IN) :: VENDOR
  245. CHARACTER*(*) :: CUSTOM_LIBRARY_NAME
  246. END
  247. END INTERFACE
  248. ! oneMKL verbose function
  249. INTERFACE
  250. INTEGER(4) FUNCTION MKL_VERBOSE(ENABLE)
  251. INTEGER(4), INTENT(IN) :: ENABLE
  252. END
  253. END INTERFACE
  254. INTERFACE
  255. INTEGER(4) FUNCTION MKL_VERBOSE_OUTPUT_FILE(FILE_PATH)
  256. CHARACTER*(*), INTENT(IN) :: FILE_PATH
  257. END
  258. END INTERFACE
  259. INTERFACE
  260. INTEGER(4) FUNCTION MKL_SET_ENV_MODE(MODE)
  261. INTEGER(4), INTENT(IN) :: MODE
  262. END
  263. END INTERFACE
  264. ! Obsolete names and routines
  265. INTEGER (KIND=4), PARAMETER, PUBLIC :: MKL_CBWR_SSE3 = 5
  266. !*******************************************************************************
  267. END MODULE MKL_SERVICE