mkl_cblas.h 76 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247
  1. /*******************************************************************************
  2. * Copyright 1999-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. /*
  15. ! Content:
  16. ! Intel(R) oneAPI Math Kernel Library (oneMKL) CBLAS interface
  17. !******************************************************************************/
  18. #ifndef __MKL_CBLAS_H__
  19. #define __MKL_CBLAS_H__
  20. #include <stddef.h>
  21. #include "mkl_types.h"
  22. #ifdef __cplusplus
  23. #if __cplusplus > 199711L
  24. #define NOTHROW noexcept
  25. #else
  26. #define NOTHROW throw()
  27. #endif
  28. #else
  29. #define NOTHROW
  30. #endif
  31. #ifdef __cplusplus
  32. extern "C" { /* Assume C declarations for C++ */
  33. #endif /* __cplusplus */
  34. #ifndef MKL_DECLSPEC
  35. #ifdef _WIN32
  36. #define MKL_DECLSPEC __declspec(dllexport)
  37. #else
  38. #define MKL_DECLSPEC
  39. #endif
  40. #endif
  41. /*
  42. * Enumerated and derived types
  43. */
  44. #define CBLAS_INDEX size_t /* this may vary between platforms */
  45. enum CBLAS_LAYOUT {CblasRowMajor=101, CblasColMajor=102};
  46. enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
  47. enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
  48. enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
  49. enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
  50. enum CBLAS_STORAGE {CblasPacked=151};
  51. enum CBLAS_IDENTIFIER {CblasAMatrix=161, CblasBMatrix=162};
  52. enum CBLAS_OFFSET {CblasRowOffset=171, CblasColOffset=172, CblasFixOffset=173};
  53. typedef enum CBLAS_LAYOUT CBLAS_LAYOUT;
  54. typedef enum CBLAS_TRANSPOSE CBLAS_TRANSPOSE;
  55. typedef enum CBLAS_UPLO CBLAS_UPLO;
  56. typedef enum CBLAS_DIAG CBLAS_DIAG;
  57. typedef enum CBLAS_SIDE CBLAS_SIDE;
  58. typedef enum CBLAS_STORAGE CBLAS_STORAGE;
  59. typedef enum CBLAS_IDENTIFIER CBLAS_IDENTIFIER;
  60. typedef enum CBLAS_OFFSET CBLAS_OFFSET;
  61. typedef CBLAS_LAYOUT CBLAS_ORDER; /* this for backward compatibility with CBLAS_ORDER */
  62. /*
  63. * ===========================================================================
  64. * Prototypes for level 1 BLAS functions (complex are recast as routines)
  65. * ===========================================================================
  66. */
  67. double cblas_dcabs1(const void *z);
  68. float cblas_scabs1(const void *c);
  69. float cblas_sdot(const MKL_INT N, const float *X, const MKL_INT incX,
  70. const float *Y, const MKL_INT incY) NOTHROW;
  71. float cblas_sdoti(const MKL_INT N, const float *X, const MKL_INT *indx,
  72. const float *Y) NOTHROW;
  73. double cblas_ddot(const MKL_INT N, const double *X, const MKL_INT incX,
  74. const double *Y, const MKL_INT incY) NOTHROW;
  75. double cblas_ddoti(const MKL_INT N, const double *X, const MKL_INT *indx,
  76. const double *Y);
  77. double cblas_dsdot(const MKL_INT N, const float *X, const MKL_INT incX,
  78. const float *Y, const MKL_INT incY) NOTHROW;
  79. float cblas_sdsdot(const MKL_INT N, const float sb, const float *X,
  80. const MKL_INT incX, const float *Y, const MKL_INT incY) NOTHROW;
  81. /*
  82. * Functions having prefixes Z and C only
  83. */
  84. void cblas_cdotu_sub(const MKL_INT N, const void *X, const MKL_INT incX,
  85. const void *Y, const MKL_INT incY, void *dotu) NOTHROW;
  86. void cblas_cdotui_sub(const MKL_INT N, const void *X, const MKL_INT *indx,
  87. const void *Y, void *dotui);
  88. void cblas_cdotc_sub(const MKL_INT N, const void *X, const MKL_INT incX,
  89. const void *Y, const MKL_INT incY, void *dotc) NOTHROW;
  90. void cblas_cdotci_sub(const MKL_INT N, const void *X, const MKL_INT *indx,
  91. const void *Y, void *dotui);
  92. void cblas_zdotu_sub(const MKL_INT N, const void *X, const MKL_INT incX,
  93. const void *Y, const MKL_INT incY, void *dotu) NOTHROW;
  94. void cblas_zdotui_sub(const MKL_INT N, const void *X, const MKL_INT *indx,
  95. const void *Y, void *dotui);
  96. void cblas_zdotc_sub(const MKL_INT N, const void *X, const MKL_INT incX,
  97. const void *Y, const MKL_INT incY, void *dotc) NOTHROW;
  98. void cblas_zdotci_sub(const MKL_INT N, const void *X, const MKL_INT *indx,
  99. const void *Y, void *dotui);
  100. /*
  101. * Functions having prefixes S D SC DZ
  102. */
  103. float cblas_snrm2(const MKL_INT N, const float *X, const MKL_INT incX) NOTHROW;
  104. float cblas_sasum(const MKL_INT N, const float *X, const MKL_INT incX) NOTHROW;
  105. double cblas_dnrm2(const MKL_INT N, const double *X, const MKL_INT incX) NOTHROW;
  106. double cblas_dasum(const MKL_INT N, const double *X, const MKL_INT incX) NOTHROW;
  107. float cblas_scnrm2(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  108. float cblas_scasum(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  109. double cblas_dznrm2(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  110. double cblas_dzasum(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  111. /*
  112. * Functions having standard 4 prefixes (S D C Z)
  113. */
  114. CBLAS_INDEX cblas_isamax(const MKL_INT N, const float *X, const MKL_INT incX) NOTHROW;
  115. CBLAS_INDEX cblas_idamax(const MKL_INT N, const double *X, const MKL_INT incX) NOTHROW;
  116. CBLAS_INDEX cblas_icamax(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  117. CBLAS_INDEX cblas_izamax(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  118. CBLAS_INDEX cblas_isamin(const MKL_INT N, const float *X, const MKL_INT incX) NOTHROW;
  119. CBLAS_INDEX cblas_idamin(const MKL_INT N, const double *X, const MKL_INT incX) NOTHROW;
  120. CBLAS_INDEX cblas_icamin(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  121. CBLAS_INDEX cblas_izamin(const MKL_INT N, const void *X, const MKL_INT incX) NOTHROW;
  122. /*
  123. * ===========================================================================
  124. * Prototypes for level 1 BLAS routines
  125. * ===========================================================================
  126. */
  127. /*
  128. * Routines with standard 4 prefixes (s, d, c, z)
  129. */
  130. void cblas_sswap(const MKL_INT N, float *X, const MKL_INT incX,
  131. float *Y, const MKL_INT incY) NOTHROW;
  132. void cblas_scopy(const MKL_INT N, const float *X, const MKL_INT incX,
  133. float *Y, const MKL_INT incY) NOTHROW;
  134. void cblas_saxpy(const MKL_INT N, const float alpha, const float *X,
  135. const MKL_INT incX, float *Y, const MKL_INT incY) NOTHROW;
  136. void cblas_saxpby(const MKL_INT N, const float alpha, const float *X,
  137. const MKL_INT incX, const float beta, float *Y, const MKL_INT incY) NOTHROW;
  138. void cblas_saxpyi(const MKL_INT N, const float alpha, const float *X,
  139. const MKL_INT *indx, float *Y);
  140. void cblas_sgthr(const MKL_INT N, const float *Y, float *X,
  141. const MKL_INT *indx);
  142. void cblas_sgthrz(const MKL_INT N, float *Y, float *X,
  143. const MKL_INT *indx);
  144. void cblas_ssctr(const MKL_INT N, const float *X, const MKL_INT *indx,
  145. float *Y);
  146. void cblas_srotg(float *a, float *b, float *c, float *s) NOTHROW;
  147. void cblas_dswap(const MKL_INT N, double *X, const MKL_INT incX,
  148. double *Y, const MKL_INT incY) NOTHROW;
  149. void cblas_dcopy(const MKL_INT N, const double *X, const MKL_INT incX,
  150. double *Y, const MKL_INT incY) NOTHROW;
  151. void cblas_daxpy(const MKL_INT N, const double alpha, const double *X,
  152. const MKL_INT incX, double *Y, const MKL_INT incY) NOTHROW;
  153. void cblas_daxpby(const MKL_INT N, const double alpha, const double *X,
  154. const MKL_INT incX, const double beta, double *Y, const MKL_INT incY) NOTHROW;
  155. void cblas_daxpyi(const MKL_INT N, const double alpha, const double *X,
  156. const MKL_INT *indx, double *Y);
  157. void cblas_dgthr(const MKL_INT N, const double *Y, double *X,
  158. const MKL_INT *indx);
  159. void cblas_dgthrz(const MKL_INT N, double *Y, double *X,
  160. const MKL_INT *indx);
  161. void cblas_dsctr(const MKL_INT N, const double *X, const MKL_INT *indx,
  162. double *Y);
  163. void cblas_drotg(double *a, double *b, double *c, double *s) NOTHROW;
  164. void cblas_cswap(const MKL_INT N, void *X, const MKL_INT incX,
  165. void *Y, const MKL_INT incY) NOTHROW;
  166. void cblas_ccopy(const MKL_INT N, const void *X, const MKL_INT incX,
  167. void *Y, const MKL_INT incY) NOTHROW;
  168. void cblas_caxpy(const MKL_INT N, const void *alpha, const void *X,
  169. const MKL_INT incX, void *Y, const MKL_INT incY) NOTHROW;
  170. void cblas_caxpby(const MKL_INT N, const void *alpha, const void *X,
  171. const MKL_INT incX, const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  172. void cblas_caxpyi(const MKL_INT N, const void *alpha, const void *X,
  173. const MKL_INT *indx, void *Y);
  174. void cblas_cgthr(const MKL_INT N, const void *Y, void *X,
  175. const MKL_INT *indx);
  176. void cblas_cgthrz(const MKL_INT N, void *Y, void *X,
  177. const MKL_INT *indx);
  178. void cblas_csctr(const MKL_INT N, const void *X, const MKL_INT *indx,
  179. void *Y);
  180. void cblas_crotg(void *a, const void *b, float *c, void *s) NOTHROW;
  181. void cblas_zswap(const MKL_INT N, void *X, const MKL_INT incX,
  182. void *Y, const MKL_INT incY) NOTHROW;
  183. void cblas_zcopy(const MKL_INT N, const void *X, const MKL_INT incX,
  184. void *Y, const MKL_INT incY) NOTHROW;
  185. void cblas_zaxpy(const MKL_INT N, const void *alpha, const void *X,
  186. const MKL_INT incX, void *Y, const MKL_INT incY) NOTHROW;
  187. void cblas_zaxpby(const MKL_INT N, const void *alpha, const void *X,
  188. const MKL_INT incX, const void *beta, void *Y, const MKL_INT incY) NOTHROW ;
  189. void cblas_zaxpyi(const MKL_INT N, const void *alpha, const void *X,
  190. const MKL_INT *indx, void *Y);
  191. void cblas_zgthr(const MKL_INT N, const void *Y, void *X,
  192. const MKL_INT *indx);
  193. void cblas_zgthrz(const MKL_INT N, void *Y, void *X,
  194. const MKL_INT *indx);
  195. void cblas_zsctr(const MKL_INT N, const void *X, const MKL_INT *indx,
  196. void *Y);
  197. void cblas_zrotg(void *a, const void *b, double *c, void *s) NOTHROW;
  198. /*
  199. * Routines with S and D prefix only
  200. */
  201. void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P) NOTHROW;
  202. void cblas_sroti(const MKL_INT N, float *X, const MKL_INT *indx,
  203. float *Y, const float c, const float s);
  204. void cblas_srotm(const MKL_INT N, float *X, const MKL_INT incX,
  205. float *Y, const MKL_INT incY, const float *P) NOTHROW;
  206. void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P) NOTHROW;
  207. void cblas_drotm(const MKL_INT N, double *X, const MKL_INT incX,
  208. double *Y, const MKL_INT incY, const double *P) NOTHROW;
  209. void cblas_droti(const MKL_INT N, double *X, const MKL_INT *indx,
  210. double *Y, const double c, const double s);
  211. /*
  212. * Routines with S D C Z CS and ZD prefixes
  213. */
  214. void cblas_sscal(const MKL_INT N, const float alpha, float *X, const MKL_INT incX) NOTHROW;
  215. void cblas_dscal(const MKL_INT N, const double alpha, double *X, const MKL_INT incX) NOTHROW;
  216. void cblas_cscal(const MKL_INT N, const void *alpha, void *X, const MKL_INT incX) NOTHROW;
  217. void cblas_zscal(const MKL_INT N, const void *alpha, void *X, const MKL_INT incX) NOTHROW;
  218. void cblas_csscal(const MKL_INT N, const float alpha, void *X, const MKL_INT incX) NOTHROW;
  219. void cblas_zdscal(const MKL_INT N, const double alpha, void *X, const MKL_INT incX) NOTHROW;
  220. void cblas_srot(const MKL_INT N, float *X, const MKL_INT incX,
  221. float *Y, const MKL_INT incY, const float c, const float s) NOTHROW;
  222. void cblas_drot(const MKL_INT N, double *X, const MKL_INT incX,
  223. double *Y, const MKL_INT incY, const double c, const double s) NOTHROW;
  224. void cblas_crot(const MKL_INT N, void *X, const MKL_INT incX,
  225. void *Y, const MKL_INT incY, const float c, const void* s) NOTHROW;
  226. void cblas_zrot(const MKL_INT N, void *X, const MKL_INT incX,
  227. void *Y, const MKL_INT incY, const double c, const void* s) NOTHROW;
  228. void cblas_csrot(const MKL_INT N, void *X, const MKL_INT incX,
  229. void *Y, const MKL_INT incY, const float c, const float s) NOTHROW;
  230. void cblas_zdrot(const MKL_INT N, void *X, const MKL_INT incX,
  231. void *Y, const MKL_INT incY, const double c, const double s) NOTHROW;
  232. /*
  233. * ===========================================================================
  234. * Prototypes for level 2 BLAS
  235. * ===========================================================================
  236. */
  237. /*
  238. * Routines with standard 4 prefixes (S, D, C, Z)
  239. */
  240. void cblas_sgemv(const CBLAS_LAYOUT Layout,
  241. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  242. const float alpha, const float *A, const MKL_INT lda,
  243. const float *X, const MKL_INT incX, const float beta,
  244. float *Y, const MKL_INT incY) NOTHROW;
  245. void cblas_sgbmv(const CBLAS_LAYOUT Layout,
  246. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  247. const MKL_INT KL, const MKL_INT KU, const float alpha,
  248. const float *A, const MKL_INT lda, const float *X,
  249. const MKL_INT incX, const float beta, float *Y, const MKL_INT incY) NOTHROW;
  250. void cblas_strmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  251. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  252. const MKL_INT N, const float *A, const MKL_INT lda,
  253. float *X, const MKL_INT incX) NOTHROW;
  254. void cblas_stbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  255. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  256. const MKL_INT N, const MKL_INT K, const float *A, const MKL_INT lda,
  257. float *X, const MKL_INT incX) NOTHROW;
  258. void cblas_stpmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  259. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  260. const MKL_INT N, const float *Ap, float *X, const MKL_INT incX) NOTHROW;
  261. void cblas_strsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  262. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  263. const MKL_INT N, const float *A, const MKL_INT lda, float *X,
  264. const MKL_INT incX) NOTHROW;
  265. void cblas_stbsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  266. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  267. const MKL_INT N, const MKL_INT K, const float *A, const MKL_INT lda,
  268. float *X, const MKL_INT incX) NOTHROW;
  269. void cblas_stpsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  270. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  271. const MKL_INT N, const float *Ap, float *X, const MKL_INT incX) NOTHROW;
  272. void cblas_dgemv(const CBLAS_LAYOUT Layout,
  273. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  274. const double alpha, const double *A, const MKL_INT lda,
  275. const double *X, const MKL_INT incX, const double beta,
  276. double *Y, const MKL_INT incY) NOTHROW;
  277. void cblas_dgbmv(const CBLAS_LAYOUT Layout,
  278. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  279. const MKL_INT KL, const MKL_INT KU, const double alpha,
  280. const double *A, const MKL_INT lda, const double *X,
  281. const MKL_INT incX, const double beta, double *Y, const MKL_INT incY) NOTHROW;
  282. void cblas_dtrmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  283. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  284. const MKL_INT N, const double *A, const MKL_INT lda,
  285. double *X, const MKL_INT incX) NOTHROW;
  286. void cblas_dtbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  287. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  288. const MKL_INT N, const MKL_INT K, const double *A, const MKL_INT lda,
  289. double *X, const MKL_INT incX) NOTHROW;
  290. void cblas_dtpmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  291. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  292. const MKL_INT N, const double *Ap, double *X, const MKL_INT incX) NOTHROW;
  293. void cblas_dtrsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  294. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  295. const MKL_INT N, const double *A, const MKL_INT lda, double *X,
  296. const MKL_INT incX) NOTHROW;
  297. void cblas_dtbsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  298. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  299. const MKL_INT N, const MKL_INT K, const double *A, const MKL_INT lda,
  300. double *X, const MKL_INT incX) NOTHROW;
  301. void cblas_dtpsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  302. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  303. const MKL_INT N, const double *Ap, double *X, const MKL_INT incX) NOTHROW;
  304. void cblas_cgemv(const CBLAS_LAYOUT Layout,
  305. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  306. const void *alpha, const void *A, const MKL_INT lda,
  307. const void *X, const MKL_INT incX, const void *beta,
  308. void *Y, const MKL_INT incY) NOTHROW;
  309. void cblas_cgbmv(const CBLAS_LAYOUT Layout,
  310. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  311. const MKL_INT KL, const MKL_INT KU, const void *alpha,
  312. const void *A, const MKL_INT lda, const void *X,
  313. const MKL_INT incX, const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  314. void cblas_ctrmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  315. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  316. const MKL_INT N, const void *A, const MKL_INT lda,
  317. void *X, const MKL_INT incX) NOTHROW;
  318. void cblas_ctbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  319. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  320. const MKL_INT N, const MKL_INT K, const void *A, const MKL_INT lda,
  321. void *X, const MKL_INT incX) NOTHROW;
  322. void cblas_ctpmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  323. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  324. const MKL_INT N, const void *Ap, void *X, const MKL_INT incX) NOTHROW;
  325. void cblas_ctrsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  326. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  327. const MKL_INT N, const void *A, const MKL_INT lda, void *X,
  328. const MKL_INT incX) NOTHROW;
  329. void cblas_ctbsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  330. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  331. const MKL_INT N, const MKL_INT K, const void *A, const MKL_INT lda,
  332. void *X, const MKL_INT incX) NOTHROW;
  333. void cblas_ctpsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  334. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  335. const MKL_INT N, const void *Ap, void *X, const MKL_INT incX) NOTHROW;
  336. void cblas_zgemv(const CBLAS_LAYOUT Layout,
  337. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  338. const void *alpha, const void *A, const MKL_INT lda,
  339. const void *X, const MKL_INT incX, const void *beta,
  340. void *Y, const MKL_INT incY) NOTHROW;
  341. void cblas_zgbmv(const CBLAS_LAYOUT Layout,
  342. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  343. const MKL_INT KL, const MKL_INT KU, const void *alpha,
  344. const void *A, const MKL_INT lda, const void *X,
  345. const MKL_INT incX, const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  346. void cblas_ztrmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  347. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  348. const MKL_INT N, const void *A, const MKL_INT lda,
  349. void *X, const MKL_INT incX) NOTHROW;
  350. void cblas_ztbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  351. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  352. const MKL_INT N, const MKL_INT K, const void *A, const MKL_INT lda,
  353. void *X, const MKL_INT incX) NOTHROW;
  354. void cblas_ztpmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  355. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  356. const MKL_INT N, const void *Ap, void *X, const MKL_INT incX) NOTHROW;
  357. void cblas_ztrsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  358. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  359. const MKL_INT N, const void *A, const MKL_INT lda, void *X,
  360. const MKL_INT incX) NOTHROW;
  361. void cblas_ztbsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  362. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  363. const MKL_INT N, const MKL_INT K, const void *A, const MKL_INT lda,
  364. void *X, const MKL_INT incX) NOTHROW;
  365. void cblas_ztpsv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  366. const CBLAS_TRANSPOSE TransA, const CBLAS_DIAG Diag,
  367. const MKL_INT N, const void *Ap, void *X, const MKL_INT incX) NOTHROW;
  368. /*
  369. * Routines with S and D prefixes only
  370. */
  371. void cblas_ssymv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  372. const MKL_INT N, const float alpha, const float *A,
  373. const MKL_INT lda, const float *X, const MKL_INT incX,
  374. const float beta, float *Y, const MKL_INT incY) NOTHROW;
  375. void cblas_ssbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  376. const MKL_INT N, const MKL_INT K, const float alpha, const float *A,
  377. const MKL_INT lda, const float *X, const MKL_INT incX,
  378. const float beta, float *Y, const MKL_INT incY) NOTHROW;
  379. void cblas_sspmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  380. const MKL_INT N, const float alpha, const float *Ap,
  381. const float *X, const MKL_INT incX,
  382. const float beta, float *Y, const MKL_INT incY) NOTHROW;
  383. void cblas_sger(const CBLAS_LAYOUT Layout, const MKL_INT M, const MKL_INT N,
  384. const float alpha, const float *X, const MKL_INT incX,
  385. const float *Y, const MKL_INT incY, float *A, const MKL_INT lda) NOTHROW;
  386. void cblas_ssyr(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  387. const MKL_INT N, const float alpha, const float *X,
  388. const MKL_INT incX, float *A, const MKL_INT lda) NOTHROW;
  389. void cblas_sspr(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  390. const MKL_INT N, const float alpha, const float *X,
  391. const MKL_INT incX, float *Ap) NOTHROW;
  392. void cblas_ssyr2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  393. const MKL_INT N, const float alpha, const float *X,
  394. const MKL_INT incX, const float *Y, const MKL_INT incY, float *A,
  395. const MKL_INT lda) NOTHROW;
  396. void cblas_sspr2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  397. const MKL_INT N, const float alpha, const float *X,
  398. const MKL_INT incX, const float *Y, const MKL_INT incY, float *A) NOTHROW;
  399. void cblas_dsymv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  400. const MKL_INT N, const double alpha, const double *A,
  401. const MKL_INT lda, const double *X, const MKL_INT incX,
  402. const double beta, double *Y, const MKL_INT incY) NOTHROW;
  403. void cblas_dsbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  404. const MKL_INT N, const MKL_INT K, const double alpha, const double *A,
  405. const MKL_INT lda, const double *X, const MKL_INT incX,
  406. const double beta, double *Y, const MKL_INT incY) NOTHROW;
  407. void cblas_dspmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  408. const MKL_INT N, const double alpha, const double *Ap,
  409. const double *X, const MKL_INT incX,
  410. const double beta, double *Y, const MKL_INT incY) NOTHROW;
  411. void cblas_dger(const CBLAS_LAYOUT Layout, const MKL_INT M, const MKL_INT N,
  412. const double alpha, const double *X, const MKL_INT incX,
  413. const double *Y, const MKL_INT incY, double *A, const MKL_INT lda) NOTHROW;
  414. void cblas_dsyr(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  415. const MKL_INT N, const double alpha, const double *X,
  416. const MKL_INT incX, double *A, const MKL_INT lda) NOTHROW;
  417. void cblas_dspr(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  418. const MKL_INT N, const double alpha, const double *X,
  419. const MKL_INT incX, double *Ap) NOTHROW;
  420. void cblas_dsyr2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  421. const MKL_INT N, const double alpha, const double *X,
  422. const MKL_INT incX, const double *Y, const MKL_INT incY, double *A,
  423. const MKL_INT lda) NOTHROW;
  424. void cblas_dspr2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  425. const MKL_INT N, const double alpha, const double *X,
  426. const MKL_INT incX, const double *Y, const MKL_INT incY, double *A) NOTHROW;
  427. /*
  428. * Routines with C and Z prefixes only
  429. */
  430. void cblas_chemv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  431. const MKL_INT N, const void *alpha, const void *A,
  432. const MKL_INT lda, const void *X, const MKL_INT incX,
  433. const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  434. void cblas_chbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  435. const MKL_INT N, const MKL_INT K, const void *alpha, const void *A,
  436. const MKL_INT lda, const void *X, const MKL_INT incX,
  437. const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  438. void cblas_chpmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  439. const MKL_INT N, const void *alpha, const void *Ap,
  440. const void *X, const MKL_INT incX,
  441. const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  442. void cblas_cgeru(const CBLAS_LAYOUT Layout, const MKL_INT M, const MKL_INT N,
  443. const void *alpha, const void *X, const MKL_INT incX,
  444. const void *Y, const MKL_INT incY, void *A, const MKL_INT lda) NOTHROW;
  445. void cblas_cgerc(const CBLAS_LAYOUT Layout, const MKL_INT M, const MKL_INT N,
  446. const void *alpha, const void *X, const MKL_INT incX,
  447. const void *Y, const MKL_INT incY, void *A, const MKL_INT lda) NOTHROW;
  448. void cblas_cher(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  449. const MKL_INT N, const float alpha, const void *X, const MKL_INT incX,
  450. void *A, const MKL_INT lda) NOTHROW;
  451. void cblas_chpr(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  452. const MKL_INT N, const float alpha, const void *X,
  453. const MKL_INT incX, void *A) NOTHROW;
  454. void cblas_cher2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo, const MKL_INT N,
  455. const void *alpha, const void *X, const MKL_INT incX,
  456. const void *Y, const MKL_INT incY, void *A, const MKL_INT lda) NOTHROW;
  457. void cblas_chpr2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo, const MKL_INT N,
  458. const void *alpha, const void *X, const MKL_INT incX,
  459. const void *Y, const MKL_INT incY, void *Ap) NOTHROW;
  460. void cblas_zhemv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  461. const MKL_INT N, const void *alpha, const void *A,
  462. const MKL_INT lda, const void *X, const MKL_INT incX,
  463. const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  464. void cblas_zhbmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  465. const MKL_INT N, const MKL_INT K, const void *alpha, const void *A,
  466. const MKL_INT lda, const void *X, const MKL_INT incX,
  467. const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  468. void cblas_zhpmv(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  469. const MKL_INT N, const void *alpha, const void *Ap,
  470. const void *X, const MKL_INT incX,
  471. const void *beta, void *Y, const MKL_INT incY) NOTHROW;
  472. void cblas_zgeru(const CBLAS_LAYOUT Layout, const MKL_INT M, const MKL_INT N,
  473. const void *alpha, const void *X, const MKL_INT incX,
  474. const void *Y, const MKL_INT incY, void *A, const MKL_INT lda) NOTHROW;
  475. void cblas_zgerc(const CBLAS_LAYOUT Layout, const MKL_INT M, const MKL_INT N,
  476. const void *alpha, const void *X, const MKL_INT incX,
  477. const void *Y, const MKL_INT incY, void *A, const MKL_INT lda) NOTHROW;
  478. void cblas_zher(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  479. const MKL_INT N, const double alpha, const void *X, const MKL_INT incX,
  480. void *A, const MKL_INT lda) NOTHROW;
  481. void cblas_zhpr(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  482. const MKL_INT N, const double alpha, const void *X,
  483. const MKL_INT incX, void *A) NOTHROW;
  484. void cblas_zher2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo, const MKL_INT N,
  485. const void *alpha, const void *X, const MKL_INT incX,
  486. const void *Y, const MKL_INT incY, void *A, const MKL_INT lda) NOTHROW;
  487. void cblas_zhpr2(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo, const MKL_INT N,
  488. const void *alpha, const void *X, const MKL_INT incX,
  489. const void *Y, const MKL_INT incY, void *Ap) NOTHROW;
  490. /*
  491. * ===========================================================================
  492. * Prototypes for level 3 BLAS
  493. * ===========================================================================
  494. */
  495. /*
  496. * Routines with standard 4 prefixes (S, D, C, Z)
  497. */
  498. void cblas_sgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  499. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  500. const MKL_INT K, const float alpha, const float *A,
  501. const MKL_INT lda, const float *B, const MKL_INT ldb,
  502. const float beta, float *C, const MKL_INT ldc) NOTHROW;
  503. void cblas_sgemm_batch(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE *TransA_Array,
  504. const CBLAS_TRANSPOSE *TransB_Array, const MKL_INT *M_Array, const MKL_INT *N_Array,
  505. const MKL_INT *K_Array, const float *alpha_Array, const float **A_Array,
  506. const MKL_INT *lda_Array, const float **B_Array, const MKL_INT *ldb_Array,
  507. const float *beta_Array, float **C_Array, const MKL_INT *ldc_Array,
  508. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  509. void cblas_sgemm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  510. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  511. const MKL_INT K, const float alpha, const float *A,
  512. const MKL_INT lda, const MKL_INT stridea,
  513. const float *B, const MKL_INT ldb, const MKL_INT strideb,
  514. const float beta, float *C, const MKL_INT ldc, const MKL_INT stridec,
  515. const MKL_INT batch_size) NOTHROW;
  516. void cblas_sgemmt(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  517. const CBLAS_TRANSPOSE TransA, const CBLAS_TRANSPOSE TransB,
  518. const MKL_INT N, const MKL_INT K,
  519. const float alpha, const float *A, const MKL_INT lda,
  520. const float *B, const MKL_INT ldb, const float beta,
  521. float *C, const MKL_INT ldc) NOTHROW;
  522. void cblas_ssymm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  523. const CBLAS_UPLO Uplo, const MKL_INT M, const MKL_INT N,
  524. const float alpha, const float *A, const MKL_INT lda,
  525. const float *B, const MKL_INT ldb, const float beta,
  526. float *C, const MKL_INT ldc) NOTHROW;
  527. void cblas_ssyrk(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  528. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  529. const float alpha, const float *A, const MKL_INT lda,
  530. const float beta, float *C, const MKL_INT ldc) NOTHROW;
  531. void cblas_ssyrk_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  532. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  533. const float alpha, const float *A, const MKL_INT lda, const MKL_INT stridea,
  534. const float beta, float *C, const MKL_INT ldc, const MKL_INT stridec,
  535. const MKL_INT batch_size) NOTHROW;
  536. void cblas_ssyrk_batch(const CBLAS_LAYOUT Layout, const CBLAS_UPLO *Uplo_array,
  537. const CBLAS_TRANSPOSE *Trans_array, const MKL_INT *N_array, const MKL_INT *K_array,
  538. const float *alpha_array, const float **A_array, const MKL_INT *lda_array,
  539. const float *beta_array, float **C_array, const MKL_INT *ldc_array,
  540. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  541. void cblas_ssyr2k(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  542. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  543. const float alpha, const float *A, const MKL_INT lda,
  544. const float *B, const MKL_INT ldb, const float beta,
  545. float *C, const MKL_INT ldc) NOTHROW;
  546. void cblas_strmm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  547. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  548. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  549. const float alpha, const float *A, const MKL_INT lda,
  550. float *B, const MKL_INT ldb) NOTHROW;
  551. void cblas_strsm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  552. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  553. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  554. const float alpha, const float *A, const MKL_INT lda,
  555. float *B, const MKL_INT ldb) NOTHROW;
  556. void cblas_strsm_batch(const CBLAS_LAYOUT Layout, const CBLAS_SIDE *Side_Array,
  557. const CBLAS_UPLO *Uplo_Array, const CBLAS_TRANSPOSE *TransA_Array,
  558. const CBLAS_DIAG *Diag_Array, const MKL_INT *M_Array,
  559. const MKL_INT *N_Array, const float *alpha_Array,
  560. const float **A_Array, const MKL_INT *lda_Array,
  561. float **B_Array, const MKL_INT *ldb_Array,
  562. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  563. void cblas_strsm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  564. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  565. const CBLAS_DIAG Diag, const MKL_INT M,
  566. const MKL_INT N, const float alpha,
  567. const float *A, const MKL_INT lda, const MKL_INT stridea,
  568. float *B, const MKL_INT ldb, const MKL_INT strideb,
  569. const MKL_INT batch_size) NOTHROW;
  570. void cblas_dgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  571. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  572. const MKL_INT K, const double alpha, const double *A,
  573. const MKL_INT lda, const double *B, const MKL_INT ldb,
  574. const double beta, double *C, const MKL_INT ldc) NOTHROW;
  575. void cblas_dgemm_batch(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE *TransA_Array,
  576. const CBLAS_TRANSPOSE *TransB_Array, const MKL_INT *M_Array, const MKL_INT *N_Array,
  577. const MKL_INT *K_Array, const double *alpha_Array, const double **A_Array,
  578. const MKL_INT *lda_Array, const double **B_Array, const MKL_INT* ldb_Array,
  579. const double *beta_Array, double **C_Array, const MKL_INT *ldc_Array,
  580. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  581. void cblas_dgemm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  582. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  583. const MKL_INT K, const double alpha, const double *A,
  584. const MKL_INT lda, const MKL_INT stridea,
  585. const double *B, const MKL_INT ldb, const MKL_INT strideb,
  586. const double beta, double *C, const MKL_INT ldc, const MKL_INT stridec,
  587. const MKL_INT batch_size) NOTHROW;
  588. void cblas_dgemmt(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  589. const CBLAS_TRANSPOSE TransA, const CBLAS_TRANSPOSE TransB,
  590. const MKL_INT N, const MKL_INT K,
  591. const double alpha, const double *A, const MKL_INT lda,
  592. const double *B, const MKL_INT ldb, const double beta,
  593. double *C, const MKL_INT ldc) NOTHROW;
  594. void cblas_dsymm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  595. const CBLAS_UPLO Uplo, const MKL_INT M, const MKL_INT N,
  596. const double alpha, const double *A, const MKL_INT lda,
  597. const double *B, const MKL_INT ldb, const double beta,
  598. double *C, const MKL_INT ldc) NOTHROW;
  599. void cblas_dsyrk(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  600. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  601. const double alpha, const double *A, const MKL_INT lda,
  602. const double beta, double *C, const MKL_INT ldc) NOTHROW;
  603. void cblas_dsyrk_batch(const CBLAS_LAYOUT Layout, const CBLAS_UPLO *Uplo_array,
  604. const CBLAS_TRANSPOSE *Trans_array, const MKL_INT *N_array, const MKL_INT *K_array,
  605. const double *alpha_array, const double **A_array, const MKL_INT *lda_array,
  606. const double *beta_array, double **C_array, const MKL_INT *ldc_array,
  607. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  608. void cblas_dsyrk_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  609. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  610. const double alpha, const double *A, const MKL_INT lda, const MKL_INT stridea,
  611. const double beta, double *C, const MKL_INT ldc, const MKL_INT stridec,
  612. const MKL_INT batch_size) NOTHROW;
  613. void cblas_dsyr2k(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  614. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  615. const double alpha, const double *A, const MKL_INT lda,
  616. const double *B, const MKL_INT ldb, const double beta,
  617. double *C, const MKL_INT ldc) NOTHROW;
  618. void cblas_dtrmm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  619. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  620. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  621. const double alpha, const double *A, const MKL_INT lda,
  622. double *B, const MKL_INT ldb) NOTHROW;
  623. void cblas_dtrsm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  624. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  625. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  626. const double alpha, const double *A, const MKL_INT lda,
  627. double *B, const MKL_INT ldb) NOTHROW;
  628. void cblas_dtrsm_batch(const CBLAS_LAYOUT Layout, const CBLAS_SIDE *Side_Array,
  629. const CBLAS_UPLO *Uplo_Array, const CBLAS_TRANSPOSE *Transa_Array,
  630. const CBLAS_DIAG *Diag_Array, const MKL_INT *M_Array,
  631. const MKL_INT *N_Array, const double *alpha_Array,
  632. const double **A_Array, const MKL_INT *lda_Array,
  633. double **B_Array, const MKL_INT *ldb_Array,
  634. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  635. void cblas_dtrsm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  636. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  637. const CBLAS_DIAG Diag, const MKL_INT M,
  638. const MKL_INT N, const double alpha,
  639. const double *A, const MKL_INT lda, const MKL_INT stridea,
  640. double *B, const MKL_INT ldb, const MKL_INT strideb,
  641. const MKL_INT batch_size) NOTHROW;
  642. void cblas_cgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  643. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  644. const MKL_INT K, const void *alpha, const void *A,
  645. const MKL_INT lda, const void *B, const MKL_INT ldb,
  646. const void *beta, void *C, const MKL_INT ldc) NOTHROW;
  647. void cblas_cgemm3m(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  648. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  649. const MKL_INT K, const void *alpha, const void *A,
  650. const MKL_INT lda, const void *B, const MKL_INT ldb,
  651. const void *beta, void *C, const MKL_INT ldc);
  652. void cblas_cgemm_batch(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE *TransA_Array,
  653. const CBLAS_TRANSPOSE *TransB_Array, const MKL_INT *M_Array, const MKL_INT *N_Array,
  654. const MKL_INT *K_Array, const void *alpha_Array, const void **A_Array,
  655. const MKL_INT *lda_Array, const void **B_Array, const MKL_INT* ldb_Array,
  656. const void *beta_Array, void **C_Array, const MKL_INT *ldc_Array,
  657. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  658. void cblas_cgemm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  659. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  660. const MKL_INT K, const void *alpha, const void *A,
  661. const MKL_INT lda, const MKL_INT stridea,
  662. const void *B, const MKL_INT ldb, const MKL_INT strideb,
  663. const void *beta, void *C, const MKL_INT ldc, const MKL_INT stridec,
  664. const MKL_INT batch_size) NOTHROW;
  665. void cblas_cgemm3m_batch(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE *TransA_Array,
  666. const CBLAS_TRANSPOSE *TransB_Array, const MKL_INT *M_Array, const MKL_INT *N_Array,
  667. const MKL_INT *K_Array, const void *alpha_Array, const void **A_Array,
  668. const MKL_INT *lda_Array, const void **B_Array, const MKL_INT* ldb_Array,
  669. const void *beta_Array, void **C_Array, const MKL_INT *ldc_Array,
  670. const MKL_INT group_count, const MKL_INT *group_size);
  671. void cblas_cgemmt(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  672. const CBLAS_TRANSPOSE TransA, const CBLAS_TRANSPOSE TransB,
  673. const MKL_INT N, const MKL_INT K,
  674. const void *alpha, const void *A, const MKL_INT lda,
  675. const void *B, const MKL_INT ldb, const void *beta,
  676. void *C, const MKL_INT ldc) NOTHROW;
  677. void cblas_csymm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  678. const CBLAS_UPLO Uplo, const MKL_INT M, const MKL_INT N,
  679. const void *alpha, const void *A, const MKL_INT lda,
  680. const void *B, const MKL_INT ldb, const void *beta,
  681. void *C, const MKL_INT ldc) NOTHROW;
  682. void cblas_csyrk(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  683. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  684. const void *alpha, const void *A, const MKL_INT lda,
  685. const void *beta, void *C, const MKL_INT ldc) NOTHROW;
  686. void cblas_csyrk_batch(const CBLAS_LAYOUT Layout, const CBLAS_UPLO *Uplo_array,
  687. const CBLAS_TRANSPOSE *Trans_array, const MKL_INT *N_array, const MKL_INT *K_array,
  688. const void *alpha_array, const void **A_array, const MKL_INT *lda_array,
  689. const void *beta_array, void **C_array, const MKL_INT *ldc_array,
  690. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  691. void cblas_csyrk_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  692. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  693. const void *alpha, const void *A, const MKL_INT lda, const MKL_INT stridea,
  694. const void *beta, void *C, const MKL_INT ldc, const MKL_INT stridec,
  695. const MKL_INT batch_size) NOTHROW;
  696. void cblas_csyr2k(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  697. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  698. const void *alpha, const void *A, const MKL_INT lda,
  699. const void *B, const MKL_INT ldb, const void *beta,
  700. void *C, const MKL_INT ldc) NOTHROW;
  701. void cblas_ctrmm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  702. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  703. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  704. const void *alpha, const void *A, const MKL_INT lda,
  705. void *B, const MKL_INT ldb) NOTHROW;
  706. void cblas_ctrsm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  707. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  708. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  709. const void *alpha, const void *A, const MKL_INT lda,
  710. void *B, const MKL_INT ldb) NOTHROW;
  711. void cblas_ctrsm_batch(const CBLAS_LAYOUT Layout, const CBLAS_SIDE *Side_Array,
  712. const CBLAS_UPLO *Uplo_Array, const CBLAS_TRANSPOSE *Transa_Array,
  713. const CBLAS_DIAG *Diag_Array, const MKL_INT *M_Array,
  714. const MKL_INT *N_Array, const void *alpha_Array,
  715. const void **A_Array, const MKL_INT *lda_Array,
  716. void **B_Array, const MKL_INT *ldb_Array,
  717. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  718. void cblas_ctrsm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  719. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  720. const CBLAS_DIAG Diag, const MKL_INT M,
  721. const MKL_INT N, const void* alpha,
  722. const void *A, const MKL_INT lda, const MKL_INT stridea,
  723. void *B, const MKL_INT ldb, const MKL_INT strideb,
  724. const MKL_INT batch_size) NOTHROW;
  725. void cblas_zgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  726. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  727. const MKL_INT K, const void *alpha, const void *A,
  728. const MKL_INT lda, const void *B, const MKL_INT ldb,
  729. const void *beta, void *C, const MKL_INT ldc) NOTHROW;
  730. void cblas_zgemm3m(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  731. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  732. const MKL_INT K, const void *alpha, const void *A,
  733. const MKL_INT lda, const void *B, const MKL_INT ldb,
  734. const void *beta, void *C, const MKL_INT ldc);
  735. void cblas_zgemm_batch(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE *TransA_Array,
  736. const CBLAS_TRANSPOSE *TransB_Array, const MKL_INT *M_Array, const MKL_INT *N_Array,
  737. const MKL_INT *K_Array, const void *alpha_Array, const void **A_Array,
  738. const MKL_INT *lda_Array, const void **B_Array, const MKL_INT* ldb_Array,
  739. const void *beta_Array, void **C_Array, const MKL_INT *ldc_Array,
  740. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  741. void cblas_zgemm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  742. const CBLAS_TRANSPOSE TransB, const MKL_INT M, const MKL_INT N,
  743. const MKL_INT K, const void *alpha, const void *A,
  744. const MKL_INT lda, const MKL_INT stridea,
  745. const void *B, const MKL_INT ldb, const MKL_INT strideb,
  746. const void *beta, void *C, const MKL_INT ldc, const MKL_INT stridec,
  747. const MKL_INT batch_size) NOTHROW;
  748. void cblas_zgemm3m_batch(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE *TransA_Array,
  749. const CBLAS_TRANSPOSE *TransB_Array, const MKL_INT *M_Array, const MKL_INT *N_Array,
  750. const MKL_INT *K_Array, const void *alpha_Array, const void **A_Array,
  751. const MKL_INT *lda_Array, const void **B_Array, const MKL_INT* ldb_Array,
  752. const void *beta_Array, void **C_Array, const MKL_INT *ldc_Array,
  753. const MKL_INT group_count, const MKL_INT *group_size);
  754. void cblas_zgemmt(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  755. const CBLAS_TRANSPOSE TransA, const CBLAS_TRANSPOSE TransB,
  756. const MKL_INT N, const MKL_INT K,
  757. const void *alpha, const void *A, const MKL_INT lda,
  758. const void *B, const MKL_INT ldb, const void *beta,
  759. void *C, const MKL_INT ldc) NOTHROW;
  760. void cblas_zsymm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  761. const CBLAS_UPLO Uplo, const MKL_INT M, const MKL_INT N,
  762. const void *alpha, const void *A, const MKL_INT lda,
  763. const void *B, const MKL_INT ldb, const void *beta,
  764. void *C, const MKL_INT ldc) NOTHROW;
  765. void cblas_zsyrk(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  766. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  767. const void *alpha, const void *A, const MKL_INT lda,
  768. const void *beta, void *C, const MKL_INT ldc) NOTHROW;
  769. void cblas_zsyrk_batch(const CBLAS_LAYOUT Layout, const CBLAS_UPLO *Uplo_array,
  770. const CBLAS_TRANSPOSE *Trans_array, const MKL_INT *N_array, const MKL_INT *K_array,
  771. const void *alpha_array, const void **A_array, const MKL_INT *lda_array,
  772. const void *beta_array, void **C_array, const MKL_INT *ldc_array,
  773. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  774. void cblas_zsyrk_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  775. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  776. const void *alpha, const void *A, const MKL_INT lda, const MKL_INT stridea,
  777. const void *beta, void *C, const MKL_INT ldc, const MKL_INT stridec,
  778. const MKL_INT batch_size) NOTHROW;
  779. void cblas_zsyr2k(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  780. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  781. const void *alpha, const void *A, const MKL_INT lda,
  782. const void *B, const MKL_INT ldb, const void *beta,
  783. void *C, const MKL_INT ldc) NOTHROW;
  784. void cblas_ztrmm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  785. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  786. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  787. const void *alpha, const void *A, const MKL_INT lda,
  788. void *B, const MKL_INT ldb) NOTHROW;
  789. void cblas_ztrsm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  790. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  791. const CBLAS_DIAG Diag, const MKL_INT M, const MKL_INT N,
  792. const void *alpha, const void *A, const MKL_INT lda,
  793. void *B, const MKL_INT ldb) NOTHROW;
  794. void cblas_ztrsm_batch(const CBLAS_LAYOUT Layout, const CBLAS_SIDE *Side_Array,
  795. const CBLAS_UPLO *Uplo_Array, const CBLAS_TRANSPOSE *Transa_Array,
  796. const CBLAS_DIAG *Diag_Array, const MKL_INT *M_Array,
  797. const MKL_INT *N_Array, const void *alpha_Array,
  798. const void **A_Array, const MKL_INT *lda_Array,
  799. void **B_Array, const MKL_INT *ldb_Array,
  800. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  801. void cblas_ztrsm_batch_strided(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  802. const CBLAS_UPLO Uplo, const CBLAS_TRANSPOSE TransA,
  803. const CBLAS_DIAG Diag, const MKL_INT M,
  804. const MKL_INT N, const void *alpha,
  805. const void *A, const MKL_INT lda, const MKL_INT stridea,
  806. void *B, const MKL_INT ldb, const MKL_INT strideb,
  807. const MKL_INT batch_size) NOTHROW;
  808. /*
  809. * Routines with prefixes C and Z only
  810. */
  811. void cblas_chemm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  812. const CBLAS_UPLO Uplo, const MKL_INT M, const MKL_INT N,
  813. const void *alpha, const void *A, const MKL_INT lda,
  814. const void *B, const MKL_INT ldb, const void *beta,
  815. void *C, const MKL_INT ldc) NOTHROW;
  816. void cblas_cherk(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  817. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  818. const float alpha, const void *A, const MKL_INT lda,
  819. const float beta, void *C, const MKL_INT ldc) NOTHROW;
  820. void cblas_cher2k(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  821. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  822. const void *alpha, const void *A, const MKL_INT lda,
  823. const void *B, const MKL_INT ldb, const float beta,
  824. void *C, const MKL_INT ldc) NOTHROW;
  825. void cblas_zhemm(const CBLAS_LAYOUT Layout, const CBLAS_SIDE Side,
  826. const CBLAS_UPLO Uplo, const MKL_INT M, const MKL_INT N,
  827. const void *alpha, const void *A, const MKL_INT lda,
  828. const void *B, const MKL_INT ldb, const void *beta,
  829. void *C, const MKL_INT ldc) NOTHROW;
  830. void cblas_zherk(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  831. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  832. const double alpha, const void *A, const MKL_INT lda,
  833. const double beta, void *C, const MKL_INT ldc) NOTHROW;
  834. void cblas_zher2k(const CBLAS_LAYOUT Layout, const CBLAS_UPLO Uplo,
  835. const CBLAS_TRANSPOSE Trans, const MKL_INT N, const MKL_INT K,
  836. const void *alpha, const void *A, const MKL_INT lda,
  837. const void *B, const MKL_INT ldb, const double beta,
  838. void *C, const MKL_INT ldc) NOTHROW;
  839. /*
  840. * Routines with prefixes S and D only
  841. */
  842. size_t cblas_sgemm_pack_get_size(const CBLAS_IDENTIFIER identifier,
  843. const MKL_INT M, const MKL_INT N, const MKL_INT K);
  844. void cblas_sgemm_pack(const CBLAS_LAYOUT Layout, const CBLAS_IDENTIFIER identifier,
  845. const CBLAS_TRANSPOSE Trans, const MKL_INT M, const MKL_INT N,
  846. const MKL_INT K, const float alpha, const float *src,
  847. const MKL_INT ld, float *dest);
  848. void cblas_sgemm_compute(const CBLAS_LAYOUT Layout, const MKL_INT TransA,
  849. const MKL_INT TransB, const MKL_INT M, const MKL_INT N,
  850. const MKL_INT K, const float *A,
  851. const MKL_INT lda, const float *B, const MKL_INT ldb,
  852. const float beta, float *C, const MKL_INT ldc);
  853. size_t cblas_dgemm_pack_get_size(const CBLAS_IDENTIFIER identifier,
  854. const MKL_INT M, const MKL_INT N, const MKL_INT K);
  855. void cblas_dgemm_pack(const CBLAS_LAYOUT Layout, const CBLAS_IDENTIFIER identifier,
  856. const CBLAS_TRANSPOSE Trans, const MKL_INT M, const MKL_INT N,
  857. const MKL_INT K, const double alpha, const double *src,
  858. const MKL_INT ld, double *dest);
  859. void cblas_dgemm_compute(const CBLAS_LAYOUT Layout, const MKL_INT TransA,
  860. const MKL_INT TransB, const MKL_INT M, const MKL_INT N,
  861. const MKL_INT K, const double *A,
  862. const MKL_INT lda, const double *B, const MKL_INT ldb,
  863. const double beta, double *C, const MKL_INT ldc);
  864. void cblas_hgemm(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  865. const CBLAS_TRANSPOSE TransB,
  866. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  867. const MKL_F16 alpha, const MKL_F16 *A, const MKL_INT lda,
  868. const MKL_F16 *B, const MKL_INT ldb, const MKL_F16 beta,
  869. MKL_F16 *C, const MKL_INT ldc) NOTHROW;
  870. size_t cblas_hgemm_pack_get_size(const CBLAS_IDENTIFIER identifier,
  871. const MKL_INT M, const MKL_INT N, const MKL_INT K);
  872. void cblas_hgemm_pack(const CBLAS_LAYOUT Layout, const CBLAS_IDENTIFIER identifier,
  873. const CBLAS_TRANSPOSE Trans, const MKL_INT M, const MKL_INT N, const MKL_INT K,
  874. const MKL_F16 alpha, const MKL_F16 *src, const MKL_INT ld, MKL_F16 *dest);
  875. void cblas_hgemm_compute(const CBLAS_LAYOUT Layout, const MKL_INT TransA,
  876. const MKL_INT TransB,
  877. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  878. const MKL_F16 *A, const MKL_INT lda,
  879. const MKL_F16 *B, const MKL_INT ldb,
  880. const MKL_F16 beta,
  881. MKL_F16 *C, const MKL_INT ldc);
  882. /*
  883. * Integer Routines
  884. */
  885. void cblas_gemm_s16s16s32(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  886. const CBLAS_TRANSPOSE TransB, const CBLAS_OFFSET OffsetC,
  887. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  888. const float alpha, const MKL_INT16 *A, const MKL_INT lda, const MKL_INT16 ao,
  889. const MKL_INT16 *B, const MKL_INT ldb, const MKL_INT16 bo, const float beta,
  890. MKL_INT32 *C, const MKL_INT ldc, const MKL_INT32 *cb);
  891. void cblas_gemm_s8u8s32(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  892. const CBLAS_TRANSPOSE TransB, const CBLAS_OFFSET OffsetC,
  893. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  894. const float alpha, const void *A, const MKL_INT lda, const MKL_INT8 ao,
  895. const void *B, const MKL_INT ldb, const MKL_INT8 bo, const float beta,
  896. MKL_INT32 *C, const MKL_INT ldc, const MKL_INT32 *cb) NOTHROW;
  897. void cblas_gemm_bf16bf16f32(const CBLAS_LAYOUT Layout, const CBLAS_TRANSPOSE TransA,
  898. const CBLAS_TRANSPOSE TransB,
  899. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  900. const float alpha, const MKL_BF16 *A, const MKL_INT lda,
  901. const MKL_BF16 *B, const MKL_INT ldb, const float beta,
  902. float *C, const MKL_INT ldc) NOTHROW;
  903. size_t cblas_gemm_s8u8s32_pack_get_size(const CBLAS_IDENTIFIER identifier,
  904. const MKL_INT M, const MKL_INT N, const MKL_INT K);
  905. size_t cblas_gemm_s16s16s32_pack_get_size(const CBLAS_IDENTIFIER identifier,
  906. const MKL_INT M, const MKL_INT N, const MKL_INT K);
  907. size_t cblas_gemm_bf16bf16f32_pack_get_size(const CBLAS_IDENTIFIER identifier,
  908. const MKL_INT M, const MKL_INT N, const MKL_INT K);
  909. void cblas_gemm_s8u8s32_pack (const CBLAS_LAYOUT Layout, const CBLAS_IDENTIFIER identifier,
  910. const CBLAS_TRANSPOSE Trans, const MKL_INT M, const MKL_INT N, const MKL_INT K,
  911. const void *src, const MKL_INT ld, void *dest);
  912. void cblas_gemm_s16s16s32_pack(const CBLAS_LAYOUT Layout, const CBLAS_IDENTIFIER identifier,
  913. const CBLAS_TRANSPOSE Trans, const MKL_INT M, const MKL_INT N, const MKL_INT K,
  914. const MKL_INT16 *src, const MKL_INT ld, MKL_INT16 *dest);
  915. void cblas_gemm_bf16bf16f32_pack(const CBLAS_LAYOUT Layout, const CBLAS_IDENTIFIER identifier,
  916. const CBLAS_TRANSPOSE Trans, const MKL_INT M, const MKL_INT N, const MKL_INT K,
  917. const MKL_BF16 *src, const MKL_INT ld, MKL_BF16 *dest);
  918. void cblas_gemm_s8u8s32_compute (const CBLAS_LAYOUT Layout, const MKL_INT TransA,
  919. const MKL_INT TransB, const CBLAS_OFFSET offsetc,
  920. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  921. const float alpha,
  922. const void *A, const MKL_INT lda, const MKL_INT8 ao,
  923. const void *B, const MKL_INT ldb, const MKL_INT8 bo,
  924. const float beta,
  925. MKL_INT32 *C, const MKL_INT ldc, const MKL_INT32 *co);
  926. void cblas_gemm_s16s16s32_compute(const CBLAS_LAYOUT Layout, const MKL_INT TransA,
  927. const MKL_INT TransB, const CBLAS_OFFSET offsetc,
  928. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  929. const float alpha,
  930. const MKL_INT16 *A, const MKL_INT lda, const MKL_INT16 ao,
  931. const MKL_INT16 *B, const MKL_INT ldb, const MKL_INT16 bo,
  932. const float beta,
  933. MKL_INT32 *C, const MKL_INT ldc, const MKL_INT32 *co);
  934. void cblas_gemm_bf16bf16f32_compute(const CBLAS_LAYOUT Layout, const MKL_INT TransA,
  935. const MKL_INT TransB,
  936. const MKL_INT M, const MKL_INT N, const MKL_INT K,
  937. const float alpha,
  938. const MKL_BF16 *A, const MKL_INT lda,
  939. const MKL_BF16 *B, const MKL_INT ldb,
  940. const float beta,
  941. float *C, const MKL_INT ldc);
  942. /*
  943. * Jit routines
  944. */
  945. #ifndef mkl_jit_create_dgemm
  946. #define mkl_jit_create_dgemm mkl_cblas_jit_create_dgemm
  947. #endif
  948. mkl_jit_status_t mkl_cblas_jit_create_dgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANSPOSE transa, const MKL_TRANSPOSE transb,
  949. const MKL_INT m, const MKL_INT n, const MKL_INT k,
  950. const double alpha, const MKL_INT lda, const MKL_INT ldb,
  951. const double beta, const MKL_INT ldc);
  952. #ifndef mkl_jit_create_sgemm
  953. #define mkl_jit_create_sgemm mkl_cblas_jit_create_sgemm
  954. #endif
  955. mkl_jit_status_t mkl_cblas_jit_create_sgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANSPOSE transa, const MKL_TRANSPOSE transb,
  956. const MKL_INT m, const MKL_INT n, const MKL_INT k,
  957. const float alpha, const MKL_INT lda, const MKL_INT ldb,
  958. const float beta, const MKL_INT ldc);
  959. #ifndef mkl_jit_create_cgemm
  960. #define mkl_jit_create_cgemm mkl_cblas_jit_create_cgemm
  961. #endif
  962. mkl_jit_status_t mkl_cblas_jit_create_cgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANSPOSE transa, const MKL_TRANSPOSE transb,
  963. const MKL_INT m, const MKL_INT n, const MKL_INT k,
  964. const void* alpha, const MKL_INT lda, const MKL_INT ldb,
  965. const void* beta, const MKL_INT ldc);
  966. #ifndef mkl_jit_create_zgemm
  967. #define mkl_jit_create_zgemm mkl_cblas_jit_create_zgemm
  968. #endif
  969. mkl_jit_status_t mkl_cblas_jit_create_zgemm(void** jitter, const MKL_LAYOUT layout, const MKL_TRANSPOSE transa, const MKL_TRANSPOSE transb,
  970. const MKL_INT m, const MKL_INT n, const MKL_INT k,
  971. const void* alpha, const MKL_INT lda, const MKL_INT ldb,
  972. const void* beta, const MKL_INT ldc);
  973. dgemm_jit_kernel_t mkl_jit_get_dgemm_ptr(const void* jitter);
  974. sgemm_jit_kernel_t mkl_jit_get_sgemm_ptr(const void* jitter);
  975. cgemm_jit_kernel_t mkl_jit_get_cgemm_ptr(const void* jitter);
  976. zgemm_jit_kernel_t mkl_jit_get_zgemm_ptr(const void* jitter);
  977. mkl_jit_status_t mkl_jit_destroy(void* jitter);
  978. /* Level1 BLAS batch API */
  979. void cblas_saxpy_batch(const MKL_INT *n, const float *alpha,
  980. const float **x, const MKL_INT *incx,
  981. float **y, const MKL_INT *incy,
  982. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  983. void cblas_daxpy_batch(const MKL_INT *n, const double *alpha,
  984. const double **x, const MKL_INT *incx,
  985. double **y, const MKL_INT *incy,
  986. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  987. void cblas_caxpy_batch(const MKL_INT *n, const void *alpha,
  988. const void **x, const MKL_INT *incx,
  989. void **y, const MKL_INT *incy,
  990. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  991. void cblas_zaxpy_batch(const MKL_INT *n, const void *alpha,
  992. const void **x, const MKL_INT *incx,
  993. void **y, const MKL_INT *incy,
  994. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  995. void cblas_saxpy_batch_strided(const MKL_INT N, const float alpha,
  996. const float *X, const MKL_INT incX, const MKL_INT stridex,
  997. float *Y, const MKL_INT incY, const MKL_INT stridey,
  998. const MKL_INT batch_size) NOTHROW;
  999. void cblas_daxpy_batch_strided(const MKL_INT N, const double alpha,
  1000. const double *X, const MKL_INT incX, const MKL_INT stridex,
  1001. double *Y, const MKL_INT incY, const MKL_INT stridey,
  1002. const MKL_INT batch_size) NOTHROW;
  1003. void cblas_caxpy_batch_strided(const MKL_INT N, const void *alpha,
  1004. const void *X, const MKL_INT incX, const MKL_INT stridex,
  1005. void *Y, const MKL_INT incY, const MKL_INT stridey,
  1006. const MKL_INT batch_size) NOTHROW;
  1007. void cblas_zaxpy_batch_strided(const MKL_INT N, const void *alpha,
  1008. const void *X, const MKL_INT incX, const MKL_INT stridex,
  1009. void *Y, const MKL_INT incY, const MKL_INT stridey,
  1010. const MKL_INT batch_size) NOTHROW;
  1011. void cblas_scopy_batch(const MKL_INT *n,
  1012. const float **x, const MKL_INT *incx,
  1013. float **y, const MKL_INT *incy,
  1014. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1015. void cblas_dcopy_batch(const MKL_INT *n,
  1016. const double **x, const MKL_INT *incx,
  1017. double **y, const MKL_INT *incy,
  1018. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1019. void cblas_ccopy_batch(const MKL_INT *n,
  1020. const void **x, const MKL_INT *incx,
  1021. void **y, const MKL_INT *incy,
  1022. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1023. void cblas_zcopy_batch(const MKL_INT *n,
  1024. const void **x, const MKL_INT *incx,
  1025. void **y, const MKL_INT *incy,
  1026. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1027. void cblas_scopy_batch_strided(const MKL_INT N,
  1028. const float *X, const MKL_INT incX, const MKL_INT stridex,
  1029. float *Y, const MKL_INT incY, const MKL_INT stridey,
  1030. const MKL_INT batch_size) NOTHROW;
  1031. void cblas_dcopy_batch_strided(const MKL_INT N,
  1032. const double *X, const MKL_INT incX, const MKL_INT stridex,
  1033. double *Y, const MKL_INT incY, const MKL_INT stridey,
  1034. const MKL_INT batch_size) NOTHROW;
  1035. void cblas_ccopy_batch_strided(const MKL_INT N,
  1036. const void *X, const MKL_INT incX, const MKL_INT stridex,
  1037. void *Y, const MKL_INT incY, const MKL_INT stridey,
  1038. const MKL_INT batch_size) NOTHROW;
  1039. void cblas_zcopy_batch_strided(const MKL_INT N,
  1040. const void *X, const MKL_INT incX, const MKL_INT stridex,
  1041. void *Y, const MKL_INT incY, const MKL_INT stridey,
  1042. const MKL_INT batch_size) NOTHROW;
  1043. /* Level2 BLAS batch API */
  1044. void cblas_sgemv_batch(const CBLAS_LAYOUT Layout,
  1045. const CBLAS_TRANSPOSE *TransA, const MKL_INT *M, const MKL_INT *N,
  1046. const float *alpha, const float **A, const MKL_INT *lda,
  1047. const float **X, const MKL_INT *incX, const float *beta,
  1048. float **Y, const MKL_INT *incY,
  1049. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1050. void cblas_sgemv_batch_strided(const CBLAS_LAYOUT Layout,
  1051. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  1052. const float alpha, const float *A, const MKL_INT lda, const MKL_INT stridea,
  1053. const float *X, const MKL_INT incX, const MKL_INT stridex, const float beta,
  1054. float *Y, const MKL_INT incY, const MKL_INT stridey,
  1055. const MKL_INT batch_size) NOTHROW;
  1056. void cblas_dgemv_batch(const CBLAS_LAYOUT Layout,
  1057. const CBLAS_TRANSPOSE *TransA, const MKL_INT *M, const MKL_INT *N,
  1058. const double *alpha, const double **A, const MKL_INT *lda,
  1059. const double **X, const MKL_INT *incX, const double *beta,
  1060. double **Y, const MKL_INT *incY,
  1061. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1062. void cblas_dgemv_batch_strided(const CBLAS_LAYOUT Layout,
  1063. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  1064. const double alpha, const double *A, const MKL_INT lda, const MKL_INT stridea,
  1065. const double *X, const MKL_INT incX, const MKL_INT stridex, const double beta,
  1066. double *Y, const MKL_INT incY, const MKL_INT stridey,
  1067. const MKL_INT batch_size) NOTHROW;
  1068. void cblas_cgemv_batch(const CBLAS_LAYOUT Layout,
  1069. const CBLAS_TRANSPOSE *TransA, const MKL_INT *M, const MKL_INT *N,
  1070. const void *alpha, const void **A, const MKL_INT *lda,
  1071. const void **X, const MKL_INT *incX, const void *beta,
  1072. void **Y, const MKL_INT *incY,
  1073. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1074. void cblas_cgemv_batch_strided(const CBLAS_LAYOUT Layout,
  1075. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  1076. const void *alpha, const void *A, const MKL_INT lda, const MKL_INT stridea,
  1077. const void *X, const MKL_INT incX, const MKL_INT stridex, const void *beta,
  1078. void *Y, const MKL_INT incY, const MKL_INT stridey,
  1079. const MKL_INT batch_size) NOTHROW;
  1080. void cblas_zgemv_batch(const CBLAS_LAYOUT Layout,
  1081. const CBLAS_TRANSPOSE *TransA, const MKL_INT *M, const MKL_INT *N,
  1082. const void *alpha, const void **A, const MKL_INT *lda,
  1083. const void **X, const MKL_INT *incX, const void *beta,
  1084. void **Y, const MKL_INT *incY,
  1085. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1086. void cblas_zgemv_batch_strided(const CBLAS_LAYOUT Layout,
  1087. const CBLAS_TRANSPOSE TransA, const MKL_INT M, const MKL_INT N,
  1088. const void *alpha, const void *A, const MKL_INT lda, const MKL_INT stridea,
  1089. const void *X, const MKL_INT incX, const MKL_INT stridex, const void *beta,
  1090. void *Y, const MKL_INT incY, const MKL_INT stridey,
  1091. const MKL_INT batch_size) NOTHROW;
  1092. void cblas_sdgmm_batch(const CBLAS_LAYOUT layout,
  1093. const CBLAS_SIDE *side, const MKL_INT *m, const MKL_INT *n,
  1094. const float **a, const MKL_INT *lda,
  1095. const float **x, const MKL_INT *incx,
  1096. float **c, const MKL_INT *ldc,
  1097. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1098. void cblas_sdgmm_batch_strided(const CBLAS_LAYOUT layout,
  1099. const CBLAS_SIDE side, const MKL_INT m, const MKL_INT n,
  1100. const float *a, const MKL_INT lda, const MKL_INT stridea,
  1101. const float *x, const MKL_INT incx, const MKL_INT stridex,
  1102. float *c, const MKL_INT ldc, const MKL_INT stridec,
  1103. const MKL_INT batch_size) NOTHROW;
  1104. void cblas_ddgmm_batch(const CBLAS_LAYOUT layout,
  1105. const CBLAS_SIDE *side, const MKL_INT *m, const MKL_INT *n,
  1106. const double **a, const MKL_INT *lda,
  1107. const double **x, const MKL_INT *incx,
  1108. double **c, const MKL_INT *ldc,
  1109. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1110. void cblas_ddgmm_batch_strided(const CBLAS_LAYOUT layout,
  1111. const CBLAS_SIDE side, const MKL_INT m, const MKL_INT n,
  1112. const double *a, const MKL_INT lda, const MKL_INT stridea,
  1113. const double *x, const MKL_INT incx, const MKL_INT stridex,
  1114. double *c, const MKL_INT ldc, const MKL_INT stridec,
  1115. const MKL_INT batch_size) NOTHROW;
  1116. void cblas_cdgmm_batch(const CBLAS_LAYOUT layout,
  1117. const CBLAS_SIDE *side, const MKL_INT *m, const MKL_INT *n,
  1118. const void **a, const MKL_INT *lda,
  1119. const void **x, const MKL_INT *incx,
  1120. void **c, const MKL_INT *ldc,
  1121. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1122. void cblas_cdgmm_batch_strided(const CBLAS_LAYOUT layout,
  1123. const CBLAS_SIDE side, const MKL_INT m, const MKL_INT n,
  1124. const void *a, const MKL_INT lda, const MKL_INT stridea,
  1125. const void *x, const MKL_INT incx, const MKL_INT stridex,
  1126. void *c, const MKL_INT ldc, const MKL_INT stridec,
  1127. const MKL_INT batch_size) NOTHROW;
  1128. void cblas_zdgmm_batch(const CBLAS_LAYOUT layout,
  1129. const CBLAS_SIDE *side, const MKL_INT *m, const MKL_INT *n,
  1130. const void **a, const MKL_INT *lda,
  1131. const void **x, const MKL_INT *incx,
  1132. void **c, const MKL_INT *ldc,
  1133. const MKL_INT group_count, const MKL_INT *group_size) NOTHROW;
  1134. void cblas_zdgmm_batch_strided(const CBLAS_LAYOUT layout,
  1135. const CBLAS_SIDE side, const MKL_INT m, const MKL_INT n,
  1136. const void *a, const MKL_INT lda, const MKL_INT stridea,
  1137. const void *x, const MKL_INT incx, const MKL_INT stridex,
  1138. void *c, const MKL_INT ldc, const MKL_INT stridec,
  1139. const MKL_INT batch_size) NOTHROW;
  1140. #ifdef __cplusplus
  1141. }
  1142. #endif /* __cplusplus */
  1143. #include "mkl_cblas_64.h"
  1144. #endif /* __MKL_CBLAS_H__ */