You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 58 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223
  1. <!doctype html>
  2. <html lang="en" class="no-js">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <link rel="canonical" href="https://openblas.net/docs/user_manual/">
  7. <link rel="prev" href="../install/">
  8. <link rel="next" href="../extensions/">
  9. <link rel="icon" href="../logo.svg">
  10. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.14">
  11. <title>User manual - OpenBLAS</title>
  12. <link rel="stylesheet" href="../assets/stylesheets/main.342714a4.min.css">
  13. <link rel="stylesheet" href="../assets/stylesheets/palette.06af60db.min.css">
  14. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  15. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
  16. <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
  17. <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
  18. </head>
  19. <body dir="ltr" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo">
  20. <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
  21. <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
  22. <label class="md-overlay" for="__drawer"></label>
  23. <div data-md-component="skip">
  24. <a href="#compiling-openblas" class="md-skip">
  25. Skip to content
  26. </a>
  27. </div>
  28. <div data-md-component="announce">
  29. </div>
  30. <header class="md-header md-header--shadow" data-md-component="header">
  31. <nav class="md-header__inner md-grid" aria-label="Header">
  32. <a href=".." title="OpenBLAS" class="md-header__button md-logo" aria-label="OpenBLAS" data-md-component="logo">
  33. <img src="../logo.svg" alt="logo">
  34. </a>
  35. <label class="md-header__button md-icon" for="__drawer">
  36. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
  37. </label>
  38. <div class="md-header__title" data-md-component="header-title">
  39. <div class="md-header__ellipsis">
  40. <div class="md-header__topic">
  41. <span class="md-ellipsis">
  42. OpenBLAS
  43. </span>
  44. </div>
  45. <div class="md-header__topic" data-md-component="header-topic">
  46. <span class="md-ellipsis">
  47. User manual
  48. </span>
  49. </div>
  50. </div>
  51. </div>
  52. <form class="md-header__option" data-md-component="palette">
  53. <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_0">
  54. <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_1" hidden>
  55. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  56. </label>
  57. <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="blue-grey" data-md-color-accent="indigo" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
  58. <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_0" hidden>
  59. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
  60. </label>
  61. </form>
  62. <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
  63. <label class="md-header__button md-icon" for="__search">
  64. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
  65. </label>
  66. <div class="md-search" data-md-component="search" role="dialog">
  67. <label class="md-search__overlay" for="__search"></label>
  68. <div class="md-search__inner" role="search">
  69. <form class="md-search__form" name="search">
  70. <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
  71. <label class="md-search__icon md-icon" for="__search">
  72. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
  73. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
  74. </label>
  75. <nav class="md-search__options" aria-label="Search">
  76. <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
  77. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
  78. </button>
  79. </nav>
  80. </form>
  81. <div class="md-search__output">
  82. <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
  83. <div class="md-search-result" data-md-component="search-result">
  84. <div class="md-search-result__meta">
  85. Initializing search
  86. </div>
  87. <ol class="md-search-result__list" role="presentation"></ol>
  88. </div>
  89. </div>
  90. </div>
  91. </div>
  92. </div>
  93. <div class="md-header__source">
  94. <a href="https://github.com/OpenMathLib/OpenBLAS" title="Go to repository" class="md-source" data-md-component="source">
  95. <div class="md-source__icon md-icon">
  96. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  97. </div>
  98. <div class="md-source__repository">
  99. GitHub
  100. </div>
  101. </a>
  102. </div>
  103. </nav>
  104. </header>
  105. <div class="md-container" data-md-component="container">
  106. <main class="md-main" data-md-component="main">
  107. <div class="md-main__inner md-grid">
  108. <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
  109. <div class="md-sidebar__scrollwrap">
  110. <div class="md-sidebar__inner">
  111. <nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  112. <label class="md-nav__title" for="__drawer">
  113. <a href=".." title="OpenBLAS" class="md-nav__button md-logo" aria-label="OpenBLAS" data-md-component="logo">
  114. <img src="../logo.svg" alt="logo">
  115. </a>
  116. OpenBLAS
  117. </label>
  118. <div class="md-nav__source">
  119. <a href="https://github.com/OpenMathLib/OpenBLAS" title="Go to repository" class="md-source" data-md-component="source">
  120. <div class="md-source__icon md-icon">
  121. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  122. </div>
  123. <div class="md-source__repository">
  124. GitHub
  125. </div>
  126. </a>
  127. </div>
  128. <ul class="md-nav__list" data-md-scrollfix>
  129. <li class="md-nav__item">
  130. <a href=".." class="md-nav__link">
  131. <span class="md-ellipsis">
  132. Home
  133. </span>
  134. </a>
  135. </li>
  136. <li class="md-nav__item">
  137. <a href="../install/" class="md-nav__link">
  138. <span class="md-ellipsis">
  139. Install OpenBLAS
  140. </span>
  141. </a>
  142. </li>
  143. <li class="md-nav__item md-nav__item--active">
  144. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  145. <label class="md-nav__link md-nav__link--active" for="__toc">
  146. <span class="md-ellipsis">
  147. User manual
  148. </span>
  149. <span class="md-nav__icon md-icon"></span>
  150. </label>
  151. <a href="./" class="md-nav__link md-nav__link--active">
  152. <span class="md-ellipsis">
  153. User manual
  154. </span>
  155. </a>
  156. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  157. <label class="md-nav__title" for="__toc">
  158. <span class="md-nav__icon md-icon"></span>
  159. Table of contents
  160. </label>
  161. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  162. <li class="md-nav__item">
  163. <a href="#compiling-openblas" class="md-nav__link">
  164. <span class="md-ellipsis">
  165. Compiling OpenBLAS
  166. </span>
  167. </a>
  168. <nav class="md-nav" aria-label="Compiling OpenBLAS">
  169. <ul class="md-nav__list">
  170. <li class="md-nav__item">
  171. <a href="#normal-compile" class="md-nav__link">
  172. <span class="md-ellipsis">
  173. Normal compile
  174. </span>
  175. </a>
  176. </li>
  177. <li class="md-nav__item">
  178. <a href="#cross-compile" class="md-nav__link">
  179. <span class="md-ellipsis">
  180. Cross compile
  181. </span>
  182. </a>
  183. <nav class="md-nav" aria-label="Cross compile">
  184. <ul class="md-nav__list">
  185. <li class="md-nav__item">
  186. <a href="#cross-compilation-examples" class="md-nav__link">
  187. <span class="md-ellipsis">
  188. Cross-compilation examples
  189. </span>
  190. </a>
  191. </li>
  192. </ul>
  193. </nav>
  194. </li>
  195. <li class="md-nav__item">
  196. <a href="#building-a-debug-version" class="md-nav__link">
  197. <span class="md-ellipsis">
  198. Building a debug version
  199. </span>
  200. </a>
  201. </li>
  202. <li class="md-nav__item">
  203. <a href="#install-to-a-specific-directory" class="md-nav__link">
  204. <span class="md-ellipsis">
  205. Install to a specific directory
  206. </span>
  207. </a>
  208. </li>
  209. </ul>
  210. </nav>
  211. </li>
  212. <li class="md-nav__item">
  213. <a href="#linking-to-openblas" class="md-nav__link">
  214. <span class="md-ellipsis">
  215. Linking to OpenBLAS
  216. </span>
  217. </a>
  218. <nav class="md-nav" aria-label="Linking to OpenBLAS">
  219. <ul class="md-nav__list">
  220. <li class="md-nav__item">
  221. <a href="#link-a-shared-library" class="md-nav__link">
  222. <span class="md-ellipsis">
  223. Link a shared library
  224. </span>
  225. </a>
  226. </li>
  227. <li class="md-nav__item">
  228. <a href="#link-a-static-library" class="md-nav__link">
  229. <span class="md-ellipsis">
  230. Link a static library
  231. </span>
  232. </a>
  233. </li>
  234. </ul>
  235. </nav>
  236. </li>
  237. <li class="md-nav__item">
  238. <a href="#code-examples" class="md-nav__link">
  239. <span class="md-ellipsis">
  240. Code examples
  241. </span>
  242. </a>
  243. <nav class="md-nav" aria-label="Code examples">
  244. <ul class="md-nav__list">
  245. <li class="md-nav__item">
  246. <a href="#call-cblas-interface" class="md-nav__link">
  247. <span class="md-ellipsis">
  248. Call CBLAS interface
  249. </span>
  250. </a>
  251. </li>
  252. <li class="md-nav__item">
  253. <a href="#call-blas-fortran-interface" class="md-nav__link">
  254. <span class="md-ellipsis">
  255. Call BLAS Fortran interface
  256. </span>
  257. </a>
  258. </li>
  259. </ul>
  260. </nav>
  261. </li>
  262. <li class="md-nav__item">
  263. <a href="#troubleshooting" class="md-nav__link">
  264. <span class="md-ellipsis">
  265. Troubleshooting
  266. </span>
  267. </a>
  268. </li>
  269. </ul>
  270. </nav>
  271. </li>
  272. <li class="md-nav__item">
  273. <a href="../extensions/" class="md-nav__link">
  274. <span class="md-ellipsis">
  275. Extensions
  276. </span>
  277. </a>
  278. </li>
  279. <li class="md-nav__item">
  280. <a href="../developers/" class="md-nav__link">
  281. <span class="md-ellipsis">
  282. Developer manual
  283. </span>
  284. </a>
  285. </li>
  286. <li class="md-nav__item">
  287. <a href="../build_system/" class="md-nav__link">
  288. <span class="md-ellipsis">
  289. Build system
  290. </span>
  291. </a>
  292. </li>
  293. <li class="md-nav__item">
  294. <a href="../runtime_variables/" class="md-nav__link">
  295. <span class="md-ellipsis">
  296. Runtime variables
  297. </span>
  298. </a>
  299. </li>
  300. <li class="md-nav__item">
  301. <a href="../distributing/" class="md-nav__link">
  302. <span class="md-ellipsis">
  303. Redistributing OpenBLAS
  304. </span>
  305. </a>
  306. </li>
  307. <li class="md-nav__item">
  308. <a href="../ci/" class="md-nav__link">
  309. <span class="md-ellipsis">
  310. CI jobs
  311. </span>
  312. </a>
  313. </li>
  314. <li class="md-nav__item">
  315. <a href="../about/" class="md-nav__link">
  316. <span class="md-ellipsis">
  317. About
  318. </span>
  319. </a>
  320. </li>
  321. <li class="md-nav__item">
  322. <a href="../faq/" class="md-nav__link">
  323. <span class="md-ellipsis">
  324. FAQ
  325. </span>
  326. </a>
  327. </li>
  328. </ul>
  329. </nav>
  330. </div>
  331. </div>
  332. </div>
  333. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  334. <div class="md-sidebar__scrollwrap">
  335. <div class="md-sidebar__inner">
  336. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  337. <label class="md-nav__title" for="__toc">
  338. <span class="md-nav__icon md-icon"></span>
  339. Table of contents
  340. </label>
  341. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  342. <li class="md-nav__item">
  343. <a href="#compiling-openblas" class="md-nav__link">
  344. <span class="md-ellipsis">
  345. Compiling OpenBLAS
  346. </span>
  347. </a>
  348. <nav class="md-nav" aria-label="Compiling OpenBLAS">
  349. <ul class="md-nav__list">
  350. <li class="md-nav__item">
  351. <a href="#normal-compile" class="md-nav__link">
  352. <span class="md-ellipsis">
  353. Normal compile
  354. </span>
  355. </a>
  356. </li>
  357. <li class="md-nav__item">
  358. <a href="#cross-compile" class="md-nav__link">
  359. <span class="md-ellipsis">
  360. Cross compile
  361. </span>
  362. </a>
  363. <nav class="md-nav" aria-label="Cross compile">
  364. <ul class="md-nav__list">
  365. <li class="md-nav__item">
  366. <a href="#cross-compilation-examples" class="md-nav__link">
  367. <span class="md-ellipsis">
  368. Cross-compilation examples
  369. </span>
  370. </a>
  371. </li>
  372. </ul>
  373. </nav>
  374. </li>
  375. <li class="md-nav__item">
  376. <a href="#building-a-debug-version" class="md-nav__link">
  377. <span class="md-ellipsis">
  378. Building a debug version
  379. </span>
  380. </a>
  381. </li>
  382. <li class="md-nav__item">
  383. <a href="#install-to-a-specific-directory" class="md-nav__link">
  384. <span class="md-ellipsis">
  385. Install to a specific directory
  386. </span>
  387. </a>
  388. </li>
  389. </ul>
  390. </nav>
  391. </li>
  392. <li class="md-nav__item">
  393. <a href="#linking-to-openblas" class="md-nav__link">
  394. <span class="md-ellipsis">
  395. Linking to OpenBLAS
  396. </span>
  397. </a>
  398. <nav class="md-nav" aria-label="Linking to OpenBLAS">
  399. <ul class="md-nav__list">
  400. <li class="md-nav__item">
  401. <a href="#link-a-shared-library" class="md-nav__link">
  402. <span class="md-ellipsis">
  403. Link a shared library
  404. </span>
  405. </a>
  406. </li>
  407. <li class="md-nav__item">
  408. <a href="#link-a-static-library" class="md-nav__link">
  409. <span class="md-ellipsis">
  410. Link a static library
  411. </span>
  412. </a>
  413. </li>
  414. </ul>
  415. </nav>
  416. </li>
  417. <li class="md-nav__item">
  418. <a href="#code-examples" class="md-nav__link">
  419. <span class="md-ellipsis">
  420. Code examples
  421. </span>
  422. </a>
  423. <nav class="md-nav" aria-label="Code examples">
  424. <ul class="md-nav__list">
  425. <li class="md-nav__item">
  426. <a href="#call-cblas-interface" class="md-nav__link">
  427. <span class="md-ellipsis">
  428. Call CBLAS interface
  429. </span>
  430. </a>
  431. </li>
  432. <li class="md-nav__item">
  433. <a href="#call-blas-fortran-interface" class="md-nav__link">
  434. <span class="md-ellipsis">
  435. Call BLAS Fortran interface
  436. </span>
  437. </a>
  438. </li>
  439. </ul>
  440. </nav>
  441. </li>
  442. <li class="md-nav__item">
  443. <a href="#troubleshooting" class="md-nav__link">
  444. <span class="md-ellipsis">
  445. Troubleshooting
  446. </span>
  447. </a>
  448. </li>
  449. </ul>
  450. </nav>
  451. </div>
  452. </div>
  453. </div>
  454. <div class="md-content" data-md-component="content">
  455. <article class="md-content__inner md-typeset">
  456. <h1>User manual</h1>
  457. <p>This user manual covers compiling OpenBLAS itself, linking your code to OpenBLAS,
  458. example code to use the C (CBLAS) and Fortran (BLAS) APIs, and some troubleshooting
  459. tips. Compiling OpenBLAS is optional, since you may be able to install with a
  460. package manager.</p>
  461. <div class="admonition note blas api reference documentation">
  462. <p class="admonition-title">Note</p>
  463. <p>The OpenBLAS documentation does not contain API reference documentation for
  464. BLAS or LAPACK, since these are standardized APIs, the documentation for
  465. which can be found in other places. If you want to understand every BLAS
  466. and LAPACK function and definition, we recommend reading the
  467. <a href="http://netlib.org/blas/">Netlib BLAS </a> and <a href="http://netlib.org/lapack/">Netlib LAPACK</a>
  468. documentation.</p>
  469. <p>OpenBLAS does contain a limited number of functions that are non-standard,
  470. these are documented at <a href="../extensions/">OpenBLAS extension functions</a>.</p>
  471. </div>
  472. <h2 id="compiling-openblas">Compiling OpenBLAS</h2>
  473. <h3 id="normal-compile">Normal compile</h3>
  474. <p>The default way to build and install OpenBLAS from source is with Make:
  475. <div class="highlight"><pre><span></span><code>make # add `-j4` to compile in parallel with 4 processes
  476. make install
  477. </code></pre></div></p>
  478. <p>By default, the CPU architecture is detected automatically when invoking
  479. <code>make</code>, and the build is optimized for the detected CPU. To override the
  480. autodetection, use the <code>TARGET</code> flag:</p>
  481. <p><div class="highlight"><pre><span></span><code># `make TARGET=xxx` sets target CPU: e.g. for an Intel Nehalem CPU:
  482. make TARGET=NEHALEM
  483. </code></pre></div>
  484. The full list of known target CPU architectures can be found in
  485. <code>TargetList.txt</code> in the root of the repository.</p>
  486. <h3 id="cross-compile">Cross compile</h3>
  487. <p>For a basic cross-compilation with Make, three steps need to be taken:</p>
  488. <ul>
  489. <li>Set the <code>CC</code> and <code>FC</code> environment variables to select the cross toolchains
  490. for C and Fortran.</li>
  491. <li>Set the <code>HOSTCC</code> environment variable to select the host C compiler (i.e. the
  492. regular C compiler for the machine on which you are invoking the build).</li>
  493. <li>Set <code>TARGET</code> explicitly to the CPU architecture on which the produced
  494. OpenBLAS binaries will be used.</li>
  495. </ul>
  496. <h4 id="cross-compilation-examples">Cross-compilation examples</h4>
  497. <p>Compile the library for ARM Cortex-A9 linux on an x86-64 machine
  498. <em>(note: install only <code>gnueabihf</code> versions of the cross toolchain - see
  499. <a href="https://github.com/OpenMathLib/OpenBLAS/issues/936#issuecomment-237596847">this issue comment</a>
  500. for why</em>):
  501. <div class="highlight"><pre><span></span><code>make CC=arm-linux-gnueabihf-gcc FC=arm-linux-gnueabihf-gfortran HOSTCC=gcc TARGET=CORTEXA9
  502. </code></pre></div></p>
  503. <p>Compile OpenBLAS for a loongson3a CPU on an x86-64 machine:
  504. <div class="highlight"><pre><span></span><code>make BINARY=64 CC=mips64el-unknown-linux-gnu-gcc FC=mips64el-unknown-linux-gnu-gfortran HOSTCC=gcc TARGET=LOONGSON3A
  505. </code></pre></div></p>
  506. <p>Compile OpenBLAS for loongson3a CPU with the <code>loongcc</code> (based on Open64) compiler on an x86-64 machine:
  507. <div class="highlight"><pre><span></span><code>make CC=loongcc FC=loongf95 HOSTCC=gcc TARGET=LOONGSON3A CROSS=1 CROSS_SUFFIX=mips64el-st-linux-gnu- NO_LAPACKE=1 NO_SHARED=1 BINARY=32
  508. </code></pre></div></p>
  509. <h3 id="building-a-debug-version">Building a debug version</h3>
  510. <p>Add <code>DEBUG=1</code> to your build command, e.g.:
  511. <div class="highlight"><pre><span></span><code>make DEBUG=1
  512. </code></pre></div></p>
  513. <h3 id="install-to-a-specific-directory">Install to a specific directory</h3>
  514. <div class="admonition note">
  515. <p class="admonition-title">Note</p>
  516. <p>Installing to a directory is optional; it is also possible to use the shared or static
  517. libraries directly from the build directory.</p>
  518. </div>
  519. <p>Use <code>make install</code> with the <code>PREFIX</code> flag to install to a specific directory:</p>
  520. <div class="highlight"><pre><span></span><code>make install PREFIX=/path/to/installation/directory
  521. </code></pre></div>
  522. <p>The default directory is <code>/opt/OpenBLAS</code>.</p>
  523. <div class="admonition important">
  524. <p class="admonition-title">Important</p>
  525. <p>Note that any flags passed to <code>make</code> during build should also be passed to
  526. <code>make install</code> to circumvent any install errors, i.e. some headers not
  527. being copied over correctly.</p>
  528. </div>
  529. <p>For more detailed information on building/installing from source, please read
  530. the <a href="../install/">Installation Guide</a>.</p>
  531. <h2 id="linking-to-openblas">Linking to OpenBLAS</h2>
  532. <p>OpenBLAS can be used as a shared or a static library.</p>
  533. <h3 id="link-a-shared-library">Link a shared library</h3>
  534. <p>The shared library is normally called <code>libopenblas.so</code>, but not that the name
  535. may be different as a result of build flags used or naming choices by a distro
  536. packager (see [distributing.md] for details). To link a shared library named
  537. <code>libopenblas.so</code>, the flag <code>-lopenblas</code> is needed. To find the OpenBLAS headers,
  538. a <code>-I/path/to/includedir</code> is needed. And unless the library is installed in a
  539. directory that the linker searches by default, also <code>-L</code> and <code>-Wl,-rpath</code> flags
  540. are needed. For a source file <code>test.c</code> (e.g., the example code under <em>Call
  541. CBLAS interface</em> further down), the shared library can then be linked with:
  542. <div class="highlight"><pre><span></span><code>gcc -o test test.c -I/your_path/OpenBLAS/include/ -L/your_path/OpenBLAS/lib -Wl,-rpath,/your_path/OpenBLAS/lib -lopenblas
  543. </code></pre></div></p>
  544. <p>The <code>-Wl,-rpath,/your_path/OpenBLAS/lib</code> linker flag can be omitted if you
  545. ran <code>ldconfig</code> to update linker cache, put <code>/your_path/OpenBLAS/lib</code> in
  546. <code>/etc/ld.so.conf</code> or a file in <code>/etc/ld.so.conf.d</code>, or installed OpenBLAS in a
  547. location that is part of the <code>ld.so</code> default search path (usually <code>/lib</code>,
  548. <code>/usr/lib</code> and <code>/usr/local/lib</code>). Alternatively, you can set the environment
  549. variable <code>LD_LIBRARY_PATH</code> to point to the folder that contains <code>libopenblas.so</code>.
  550. Otherwise, the build may succeed but at runtime loading the library will fail
  551. with a message like:
  552. <div class="highlight"><pre><span></span><code>cannot open shared object file: no such file or directory
  553. </code></pre></div></p>
  554. <p>More flags may be needed, depending on how OpenBLAS was built:</p>
  555. <ul>
  556. <li>If <code>libopenblas</code> is multi-threaded, please add <code>-lpthread</code>.</li>
  557. <li>If the library contains LAPACK functions (usually also true), please add
  558. <code>-lgfortran</code> (other Fortran libraries may also be needed, e.g. <code>-lquadmath</code>).
  559. Note that if you only make calls to LAPACKE routines, i.e. your code has
  560. <code>#include "lapacke.h"</code> and makes calls to methods like <code>LAPACKE_dgeqrf</code>,
  561. then <code>-lgfortran</code> is not needed.</li>
  562. </ul>
  563. <div class="admonition tip use pkg-config">
  564. <p class="admonition-title">Tip</p>
  565. <p>Usually a pkg-config file (e.g., <code>openblas.pc</code>) is installed together
  566. with a <code>libopenblas</code> shared library. pkg-config is a tool that will
  567. tell you the exact flags needed for linking. For example:</p>
  568. <div class="highlight"><pre><span></span><code>$ pkg-config --cflags openblas
  569. -I/usr/local/include
  570. $ pkg-config --libs openblas
  571. -L/usr/local/lib -lopenblas
  572. </code></pre></div>
  573. </div>
  574. <h3 id="link-a-static-library">Link a static library</h3>
  575. <p>Linking a static library is simpler - add the path to the static OpenBLAS
  576. library to the compile command:
  577. <div class="highlight"><pre><span></span><code>gcc -o test test.c /your/path/libopenblas.a
  578. </code></pre></div></p>
  579. <h2 id="code-examples">Code examples</h2>
  580. <h3 id="call-cblas-interface">Call CBLAS interface</h3>
  581. <p>This example shows calling <code>cblas_dgemm</code> in C:</p>
  582. <!-- Source: https://gist.github.com/xianyi/6930656 -->
  583. <div class="highlight"><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;cblas.h&gt;</span>
  584. <span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdio.h&gt;</span>
  585. <span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span>
  586. <span class="p">{</span>
  587. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>
  588. <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">2.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">-3.0</span><span class="p">,</span><span class="mf">4.0</span><span class="p">,</span><span class="mf">-1.0</span><span class="p">};</span><span class="w"> </span>
  589. <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">2.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">-3.0</span><span class="p">,</span><span class="mf">4.0</span><span class="p">,</span><span class="mf">-1.0</span><span class="p">};</span><span class="w"> </span>
  590. <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="mi">9</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">,</span><span class="mf">.5</span><span class="p">};</span><span class="w"> </span>
  591. <span class="w"> </span><span class="n">cblas_dgemm</span><span class="p">(</span><span class="n">CblasColMajor</span><span class="p">,</span><span class="w"> </span><span class="n">CblasNoTrans</span><span class="p">,</span><span class="w"> </span><span class="n">CblasTrans</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">A</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="n">C</span><span class="p">,</span><span class="mi">3</span><span class="p">);</span>
  592. <span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="mi">9</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
  593. <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%lf &quot;</span><span class="p">,</span><span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="n">i</span><span class="p">]);</span>
  594. <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
  595. <span class="p">}</span>
  596. </code></pre></div>
  597. <p>To compile this file, save it as <code>test_cblas_dgemm.c</code> and then run:
  598. <div class="highlight"><pre><span></span><code>gcc -o test_cblas_open test_cblas_dgemm.c -I/your_path/OpenBLAS/include/ -L/your_path/OpenBLAS/lib -lopenblas -lpthread -lgfortran
  599. </code></pre></div>
  600. will result in a <code>test_cblas_open</code> executable.</p>
  601. <h3 id="call-blas-fortran-interface">Call BLAS Fortran interface</h3>
  602. <p>This example shows calling the <code>dgemm</code> Fortran interface in C:</p>
  603. <!-- Source: https://gist.github.com/xianyi/5780018 -->
  604. <div class="highlight"><pre><span></span><code><span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;stdio.h&quot;</span>
  605. <span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;stdlib.h&quot;</span>
  606. <span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;sys/time.h&quot;</span>
  607. <span class="cp">#include</span><span class="w"> </span><span class="cpf">&quot;time.h&quot;</span>
  608. <span class="k">extern</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">dgemm_</span><span class="p">(</span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">*</span><span class="p">,</span><span class="kt">int</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="o">*</span><span class="p">);</span>
  609. <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">argc</span><span class="p">,</span><span class="w"> </span><span class="kt">char</span><span class="o">*</span><span class="w"> </span><span class="n">argv</span><span class="p">[])</span>
  610. <span class="p">{</span>
  611. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">;</span>
  612. <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;test!</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
  613. <span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="n">argc</span><span class="o">&lt;</span><span class="mi">4</span><span class="p">){</span>
  614. <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;Input Error</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">);</span>
  615. <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
  616. <span class="w"> </span><span class="p">}</span>
  617. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">m</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">atoi</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]);</span>
  618. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">atoi</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span>
  619. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">atoi</span><span class="p">(</span><span class="n">argv</span><span class="p">[</span><span class="mi">3</span><span class="p">]);</span>
  620. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sizeofa</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">m</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">k</span><span class="p">;</span>
  621. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sizeofb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">k</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">n</span><span class="p">;</span>
  622. <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sizeofc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">m</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">n</span><span class="p">;</span>
  623. <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">ta</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">&#39;N&#39;</span><span class="p">;</span>
  624. <span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="n">tb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sc">&#39;N&#39;</span><span class="p">;</span>
  625. <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">alpha</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1.2</span><span class="p">;</span>
  626. <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">beta</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.001</span><span class="p">;</span>
  627. <span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">timeval</span><span class="w"> </span><span class="n">start</span><span class="p">,</span><span class="n">finish</span><span class="p">;</span>
  628. <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">duration</span><span class="p">;</span>
  629. <span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">double</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">double</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">sizeofa</span><span class="p">);</span>
  630. <span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">double</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">double</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">sizeofb</span><span class="p">);</span>
  631. <span class="w"> </span><span class="kt">double</span><span class="o">*</span><span class="w"> </span><span class="n">C</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">double</span><span class="o">*</span><span class="p">)</span><span class="n">malloc</span><span class="p">(</span><span class="k">sizeof</span><span class="p">(</span><span class="kt">double</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">sizeofc</span><span class="p">);</span>
  632. <span class="w"> </span><span class="n">srand</span><span class="p">((</span><span class="kt">unsigned</span><span class="p">)</span><span class="n">time</span><span class="p">(</span><span class="nb">NULL</span><span class="p">));</span>
  633. <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">sizeofa</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
  634. <span class="w"> </span><span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="o">%</span><span class="mi">3</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span><span class="c1">//(rand()%100)/10.0;</span>
  635. <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">sizeofb</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
  636. <span class="w"> </span><span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="o">%</span><span class="mi">3</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span><span class="c1">//(rand()%100)/10.0;</span>
  637. <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">&lt;</span><span class="n">sizeofc</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span>
  638. <span class="w"> </span><span class="n">C</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="o">%</span><span class="mi">3</span><span class="o">+</span><span class="mi">1</span><span class="p">;</span><span class="c1">//(rand()%100)/10.0;</span>
  639. <span class="w"> </span><span class="c1">//#if 0</span>
  640. <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;m=%d,n=%d,k=%d,alpha=%lf,beta=%lf,sizeofc=%d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="n">m</span><span class="p">,</span><span class="n">n</span><span class="p">,</span><span class="n">k</span><span class="p">,</span><span class="n">alpha</span><span class="p">,</span><span class="n">beta</span><span class="p">,</span><span class="n">sizeofc</span><span class="p">);</span>
  641. <span class="w"> </span><span class="n">gettimeofday</span><span class="p">(</span><span class="o">&amp;</span><span class="n">start</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span>
  642. <span class="w"> </span><span class="n">dgemm_</span><span class="p">(</span><span class="o">&amp;</span><span class="n">ta</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">tb</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">m</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">alpha</span><span class="p">,</span><span class="w"> </span><span class="n">A</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">m</span><span class="p">,</span><span class="w"> </span><span class="n">B</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">beta</span><span class="p">,</span><span class="w"> </span><span class="n">C</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">m</span><span class="p">);</span>
  643. <span class="w"> </span><span class="n">gettimeofday</span><span class="p">(</span><span class="o">&amp;</span><span class="n">finish</span><span class="p">,</span><span class="w"> </span><span class="nb">NULL</span><span class="p">);</span>
  644. <span class="w"> </span><span class="n">duration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="kt">double</span><span class="p">)(</span><span class="n">finish</span><span class="p">.</span><span class="n">tv_sec</span><span class="o">-</span><span class="n">start</span><span class="p">.</span><span class="n">tv_sec</span><span class="p">)</span><span class="o">*</span><span class="mi">1000000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="kt">double</span><span class="p">)(</span><span class="n">finish</span><span class="p">.</span><span class="n">tv_usec</span><span class="o">-</span><span class="n">start</span><span class="p">.</span><span class="n">tv_usec</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">1000000</span><span class="p">;</span>
  645. <span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">gflops</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">2.0</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">m</span><span class="w"> </span><span class="o">*</span><span class="n">n</span><span class="o">*</span><span class="n">k</span><span class="p">;</span>
  646. <span class="w"> </span><span class="n">gflops</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">gflops</span><span class="o">/</span><span class="n">duration</span><span class="o">*</span><span class="mf">1.0e-6</span><span class="p">;</span>
  647. <span class="w"> </span><span class="kt">FILE</span><span class="w"> </span><span class="o">*</span><span class="n">fp</span><span class="p">;</span>
  648. <span class="w"> </span><span class="n">fp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fopen</span><span class="p">(</span><span class="s">&quot;timeDGEMM.txt&quot;</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;a&quot;</span><span class="p">);</span>
  649. <span class="w"> </span><span class="n">fprintf</span><span class="p">(</span><span class="n">fp</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;%dx%dx%d</span><span class="se">\t</span><span class="s">%lf s</span><span class="se">\t</span><span class="s">%lf MFLOPS</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">m</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="n">k</span><span class="p">,</span><span class="w"> </span><span class="n">duration</span><span class="p">,</span><span class="w"> </span><span class="n">gflops</span><span class="p">);</span>
  650. <span class="w"> </span><span class="n">fclose</span><span class="p">(</span><span class="n">fp</span><span class="p">);</span>
  651. <span class="w"> </span><span class="n">free</span><span class="p">(</span><span class="n">A</span><span class="p">);</span>
  652. <span class="w"> </span><span class="n">free</span><span class="p">(</span><span class="n">B</span><span class="p">);</span>
  653. <span class="w"> </span><span class="n">free</span><span class="p">(</span><span class="n">C</span><span class="p">);</span>
  654. <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
  655. <span class="p">}</span>
  656. </code></pre></div>
  657. <p>To compile this file, save it as <code>time_dgemm.c</code> and then run:
  658. <div class="highlight"><pre><span></span><code>gcc -o time_dgemm time_dgemm.c /your/path/libopenblas.a -lpthread
  659. </code></pre></div>
  660. You can then run it as: <code>./time_dgemm &lt;m&gt; &lt;n&gt; &lt;k&gt;</code>, with <code>m</code>, <code>n</code>, and <code>k</code> input
  661. parameters to the <code>time_dgemm</code> executable.</p>
  662. <div class="admonition note">
  663. <p class="admonition-title">Note</p>
  664. <p>When calling the Fortran interface from C, you have to deal with symbol name
  665. differences caused by compiler conventions. That is why the <code>dgemm_</code> function
  666. call in the example above has a trailing underscore. This is what it looks like
  667. when using <code>gcc</code>/<code>gfortran</code>, however such details may change for different
  668. compilers. Hence it requires extra support code. The CBLAS interface may be
  669. more portable when writing C code.</p>
  670. <p>When writing code that needs to be portable and work across different
  671. platforms and compilers, the above code example is not recommended for
  672. usage. Instead, we advise looking at how OpenBLAS (or BLAS in general, since
  673. this problem isn't specific to OpenBLAS) functions are called in widely
  674. used projects like Julia, SciPy, or R.</p>
  675. </div>
  676. <h2 id="troubleshooting">Troubleshooting</h2>
  677. <ul>
  678. <li>Please read the <a href="../faq/">FAQ</a> first, your problem may be described there.</li>
  679. <li>Please ensure you are using a recent enough compiler, that supports the
  680. features your CPU provides (example: GCC versions before 4.6 were known to
  681. not support AVX kernels, and before 6.1 AVX512CD kernels).</li>
  682. <li>The number of CPU cores supported by default is &lt;=256. On Linux x86-64, there
  683. is experimental support for up to 1024 cores and 128 NUMA nodes if you build
  684. the library with <code>BIGNUMA=1</code>.</li>
  685. <li>OpenBLAS does not set processor affinity by default. On Linux, you can enable
  686. processor affinity by commenting out the line <code>NO_AFFINITY=1</code> in
  687. <code>Makefile.rule</code>.</li>
  688. <li>On Loongson 3A, <code>make test</code> is known to fail with a <code>pthread_create</code> error
  689. and an <code>EAGAIN</code> error code. However, it will be OK when you run the same
  690. testcase in a shell.</li>
  691. </ul>
  692. <aside class="md-source-file">
  693. <span class="md-source-file__fact">
  694. <span class="md-icon" title="Last update">
  695. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
  696. </span>
  697. <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="July 2, 2024 12:05:47 UTC">July 2, 2024</span>
  698. </span>
  699. <span class="md-source-file__fact">
  700. <span class="md-icon" title="Created">
  701. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3z"/></svg>
  702. </span>
  703. <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="August 4, 2023 07:21:01 UTC">August 4, 2023</span>
  704. </span>
  705. </aside>
  706. </article>
  707. </div>
  708. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  709. </div>
  710. </main>
  711. <footer class="md-footer">
  712. <div class="md-footer-meta md-typeset">
  713. <div class="md-footer-meta__inner md-grid">
  714. <div class="md-copyright">
  715. <div class="md-copyright__highlight">
  716. Copyright &copy; 2012- OpenBLAS contributors
  717. </div>
  718. Made with
  719. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  720. Material for MkDocs
  721. </a>
  722. </div>
  723. <div class="md-social">
  724. <a href="https://github.com/OpenMathLib/OpenBLAS" target="_blank" rel="noopener" title="github.com" class="md-social__link">
  725. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
  726. </a>
  727. <a href="https://github.com/OpenMathLib/OpenBLAS/LICENSE" target="_blank" rel="noopener" title="github.com" class="md-social__link">
  728. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9 10a3.04 3.04 0 0 1 3-3 3.04 3.04 0 0 1 3 3 3.04 3.04 0 0 1-3 3 3.04 3.04 0 0 1-3-3m3 9 4 1v-3.08A7.54 7.54 0 0 1 12 18a7.54 7.54 0 0 1-4-1.08V20m4-16a5.78 5.78 0 0 0-4.24 1.74A5.78 5.78 0 0 0 6 10a5.78 5.78 0 0 0 1.76 4.23A5.78 5.78 0 0 0 12 16a5.78 5.78 0 0 0 4.24-1.77A5.78 5.78 0 0 0 18 10a5.78 5.78 0 0 0-1.76-4.26A5.78 5.78 0 0 0 12 4m8 6a8 8 0 0 1-.57 2.8A7.8 7.8 0 0 1 18 15.28V23l-6-2-6 2v-7.72A7.9 7.9 0 0 1 4 10a7.68 7.68 0 0 1 2.33-5.64A7.73 7.73 0 0 1 12 2a7.73 7.73 0 0 1 5.67 2.36A7.68 7.68 0 0 1 20 10"/></svg>
  729. </a>
  730. </div>
  731. </div>
  732. </div>
  733. </footer>
  734. </div>
  735. <div class="md-dialog" data-md-component="dialog">
  736. <div class="md-dialog__inner md-typeset"></div>
  737. </div>
  738. <script id="__config" type="application/json">{"base": "..", "features": ["header.autohide"], "search": "../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
  739. <script src="../assets/javascripts/bundle.13a4f30d.min.js"></script>
  740. </body>
  741. </html>

OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.