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 42 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121
  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/distributing/">
  7. <link rel="prev" href="../runtime_variables/">
  8. <link rel="next" href="../ci/">
  9. <link rel="icon" href="../logo.svg">
  10. <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
  11. <title>Redistributing OpenBLAS - 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="#redistributing-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. Redistributing OpenBLAS
  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">
  144. <a href="../user_manual/" class="md-nav__link">
  145. <span class="md-ellipsis">
  146. User manual
  147. </span>
  148. </a>
  149. </li>
  150. <li class="md-nav__item">
  151. <a href="../extensions/" class="md-nav__link">
  152. <span class="md-ellipsis">
  153. Extensions
  154. </span>
  155. </a>
  156. </li>
  157. <li class="md-nav__item">
  158. <a href="../developers/" class="md-nav__link">
  159. <span class="md-ellipsis">
  160. Developer manual
  161. </span>
  162. </a>
  163. </li>
  164. <li class="md-nav__item">
  165. <a href="../build_system/" class="md-nav__link">
  166. <span class="md-ellipsis">
  167. Build system
  168. </span>
  169. </a>
  170. </li>
  171. <li class="md-nav__item">
  172. <a href="../runtime_variables/" class="md-nav__link">
  173. <span class="md-ellipsis">
  174. Runtime variables
  175. </span>
  176. </a>
  177. </li>
  178. <li class="md-nav__item md-nav__item--active">
  179. <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
  180. <label class="md-nav__link md-nav__link--active" for="__toc">
  181. <span class="md-ellipsis">
  182. Redistributing OpenBLAS
  183. </span>
  184. <span class="md-nav__icon md-icon"></span>
  185. </label>
  186. <a href="./" class="md-nav__link md-nav__link--active">
  187. <span class="md-ellipsis">
  188. Redistributing OpenBLAS
  189. </span>
  190. </a>
  191. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  192. <label class="md-nav__title" for="__toc">
  193. <span class="md-nav__icon md-icon"></span>
  194. Table of contents
  195. </label>
  196. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  197. <li class="md-nav__item">
  198. <a href="#ilp64-interface-builds" class="md-nav__link">
  199. <span class="md-ellipsis">
  200. ILP64 interface builds
  201. </span>
  202. </a>
  203. <nav class="md-nav" aria-label="ILP64 interface builds">
  204. <ul class="md-nav__list">
  205. <li class="md-nav__item">
  206. <a href="#the-current-openblas-agreed-upon-ilp64-convention" class="md-nav__link">
  207. <span class="md-ellipsis">
  208. The current OpenBLAS agreed-upon ILP64 convention
  209. </span>
  210. </a>
  211. </li>
  212. <li class="md-nav__item">
  213. <a href="#the-upcoming-standardized-ilp64-convention" class="md-nav__link">
  214. <span class="md-ellipsis">
  215. The upcoming standardized ILP64 convention
  216. </span>
  217. </a>
  218. </li>
  219. </ul>
  220. </nav>
  221. </li>
  222. <li class="md-nav__item">
  223. <a href="#performance-and-runtime-behavior-related-build-options" class="md-nav__link">
  224. <span class="md-ellipsis">
  225. Performance and runtime behavior related build options
  226. </span>
  227. </a>
  228. <nav class="md-nav" aria-label="Performance and runtime behavior related build options">
  229. <ul class="md-nav__list">
  230. <li class="md-nav__item">
  231. <a href="#threading-related-options" class="md-nav__link">
  232. <span class="md-ellipsis">
  233. Threading related options
  234. </span>
  235. </a>
  236. </li>
  237. <li class="md-nav__item">
  238. <a href="#cpu-architecture-related-options" class="md-nav__link">
  239. <span class="md-ellipsis">
  240. CPU architecture related options
  241. </span>
  242. </a>
  243. </li>
  244. </ul>
  245. </nav>
  246. </li>
  247. <li class="md-nav__item">
  248. <a href="#real-world-examples" class="md-nav__link">
  249. <span class="md-ellipsis">
  250. Real-world examples
  251. </span>
  252. </a>
  253. </li>
  254. </ul>
  255. </nav>
  256. </li>
  257. <li class="md-nav__item">
  258. <a href="../ci/" class="md-nav__link">
  259. <span class="md-ellipsis">
  260. CI jobs
  261. </span>
  262. </a>
  263. </li>
  264. <li class="md-nav__item">
  265. <a href="../about/" class="md-nav__link">
  266. <span class="md-ellipsis">
  267. About
  268. </span>
  269. </a>
  270. </li>
  271. <li class="md-nav__item">
  272. <a href="../faq/" class="md-nav__link">
  273. <span class="md-ellipsis">
  274. FAQ
  275. </span>
  276. </a>
  277. </li>
  278. </ul>
  279. </nav>
  280. </div>
  281. </div>
  282. </div>
  283. <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
  284. <div class="md-sidebar__scrollwrap">
  285. <div class="md-sidebar__inner">
  286. <nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  287. <label class="md-nav__title" for="__toc">
  288. <span class="md-nav__icon md-icon"></span>
  289. Table of contents
  290. </label>
  291. <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
  292. <li class="md-nav__item">
  293. <a href="#ilp64-interface-builds" class="md-nav__link">
  294. <span class="md-ellipsis">
  295. ILP64 interface builds
  296. </span>
  297. </a>
  298. <nav class="md-nav" aria-label="ILP64 interface builds">
  299. <ul class="md-nav__list">
  300. <li class="md-nav__item">
  301. <a href="#the-current-openblas-agreed-upon-ilp64-convention" class="md-nav__link">
  302. <span class="md-ellipsis">
  303. The current OpenBLAS agreed-upon ILP64 convention
  304. </span>
  305. </a>
  306. </li>
  307. <li class="md-nav__item">
  308. <a href="#the-upcoming-standardized-ilp64-convention" class="md-nav__link">
  309. <span class="md-ellipsis">
  310. The upcoming standardized ILP64 convention
  311. </span>
  312. </a>
  313. </li>
  314. </ul>
  315. </nav>
  316. </li>
  317. <li class="md-nav__item">
  318. <a href="#performance-and-runtime-behavior-related-build-options" class="md-nav__link">
  319. <span class="md-ellipsis">
  320. Performance and runtime behavior related build options
  321. </span>
  322. </a>
  323. <nav class="md-nav" aria-label="Performance and runtime behavior related build options">
  324. <ul class="md-nav__list">
  325. <li class="md-nav__item">
  326. <a href="#threading-related-options" class="md-nav__link">
  327. <span class="md-ellipsis">
  328. Threading related options
  329. </span>
  330. </a>
  331. </li>
  332. <li class="md-nav__item">
  333. <a href="#cpu-architecture-related-options" class="md-nav__link">
  334. <span class="md-ellipsis">
  335. CPU architecture related options
  336. </span>
  337. </a>
  338. </li>
  339. </ul>
  340. </nav>
  341. </li>
  342. <li class="md-nav__item">
  343. <a href="#real-world-examples" class="md-nav__link">
  344. <span class="md-ellipsis">
  345. Real-world examples
  346. </span>
  347. </a>
  348. </li>
  349. </ul>
  350. </nav>
  351. </div>
  352. </div>
  353. </div>
  354. <div class="md-content" data-md-component="content">
  355. <article class="md-content__inner md-typeset">
  356. <h1 id="redistributing-openblas">Redistributing OpenBLAS</h1>
  357. <div class="admonition note">
  358. <p class="admonition-title">Note</p>
  359. <p>This document contains recommendations only - packagers and other
  360. redistributors are in charge of how OpenBLAS is built and distributed in their
  361. systems, and may have good reasons to deviate from the guidance given on this
  362. page. These recommendations are aimed at general packaging systems, with a user
  363. base that typically is large, open source (or freely available at least), and
  364. doesn't behave uniformly or that the packager is directly connected with.*</p>
  365. </div>
  366. <p>OpenBLAS has a large number of build-time options which can be used to change
  367. how it behaves at runtime, how artifacts or symbols are named, etc. Variation
  368. in build configuration can be necessary to acheive a given end goal within a
  369. distribution or as an end user. However, such variation can also make it more
  370. difficult to build on top of OpenBLAS and ship code or other packages in a way
  371. that works across many different distros. Here we provide guidance about the
  372. most important build options, what effects they may have when changed, and
  373. which ones to default to.</p>
  374. <p>The Make and CMake build systems provide equivalent options and yield more or
  375. less the same artifacts, but not exactly (the CMake builds are still
  376. experimental). You can choose either one and the options will function in the
  377. same way, however the CMake outputs may require some renaming. To review
  378. available build options, see <code>Makefile.rule</code> or <code>CMakeLists.txt</code> in the root of
  379. the repository.</p>
  380. <p>Build options typically fall into two categories: (a) options that affect the
  381. user interface, such as library and symbol names or APIs that are made
  382. available, and (b) options that affect performance and runtime behavior, such
  383. as threading behavior or CPU architecture-specific code paths. The user
  384. interface options are more important to keep aligned between distributions,
  385. while for the performance-related options there are typically more reasons to
  386. make choices that deviate from the defaults.</p>
  387. <p>Here are recommendations for user interface related packaging choices where it
  388. is not likely to be a good idea to deviate (typically these are the default
  389. settings):</p>
  390. <ol>
  391. <li>Include CBLAS. The CBLAS interface is widely used and it doesn't affect
  392. binary size much, so don't turn it off.</li>
  393. <li>Include LAPACK and LAPACKE. The LAPACK interface is also widely used, and
  394. while it does make up a significant part of the binary size of the installed
  395. library, that does not outweigh the regression in usability when deviating
  396. from the default here.<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup></li>
  397. <li>Always distribute the pkg-config (<code>.pc</code>) and CMake <code>.cmake</code>) dependency
  398. detection files. These files are used by build systems when users want to
  399. link against OpenBLAS, and there is no benefit of leaving them out.</li>
  400. <li>Provide the LP64 interface by default, and if in addition to that you choose
  401. to provide an ILP64 interface build as well, use a symbol suffix to avoid
  402. symbol name clashes (see the next section).</li>
  403. </ol>
  404. <h2 id="ilp64-interface-builds">ILP64 interface builds</h2>
  405. <p>The LP64 (32-bit integer) interface is the default build, and has
  406. well-established C and Fortran APIs as determined by the reference (Netlib)
  407. BLAS and LAPACK libraries. The ILP64 (64-bit integer) interface however does
  408. not have a standard API: symbol names and shared/static library names can be
  409. produced in multiple ways, and this tends to make it difficult to use.
  410. As of today there is an agreed-upon way of choosing names for OpenBLAS between
  411. a number of key users/redistributors, which is the closest thing to a standard
  412. that there is now. However, there is an ongoing standardization effort in the
  413. reference BLAS and LAPACK libraries, which differs from the current OpenBLAS
  414. agreed-upon convention. In this section we'll aim to explain both.</p>
  415. <p>Those two methods are fairly similar, and have a key thing in common: <em>using a
  416. symbol suffix</em>. This is good practice; it is recommended that if you distribute
  417. an ILP64 build, to have it use a symbol suffix containing <code>64</code> in the name.
  418. This avoids potential symbol clashes when different packages which depend on
  419. OpenBLAS load both an LP64 and an ILP64 library into memory at the same time.</p>
  420. <h3 id="the-current-openblas-agreed-upon-ilp64-convention">The current OpenBLAS agreed-upon ILP64 convention</h3>
  421. <p>This convention comprises the shared library name and the symbol suffix in the
  422. shared library. The symbol suffix to use is <code>64_</code>, implying that the library
  423. name will be <code>libopenblas64_.so</code> and the symbols in that library end in <code>64_</code>.
  424. The central issue where this was discussed is
  425. <a href="https://github.com/xianyi/OpenBLAS/issues/646">openblas#646</a>, and adopters
  426. include Fedora, Julia, NumPy and SciPy - SuiteSparse already used it as well.</p>
  427. <p>To build shared and static libraries with the currently recommended ILP64
  428. conventions with Make:
  429. <div class="highlight"><pre><span></span><code>$<span class="w"> </span>make<span class="w"> </span><span class="nv">INTERFACE64</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">SYMBOLSUFFIX</span><span class="o">=</span>64_
  430. </code></pre></div></p>
  431. <p>This will produce libraries named <code>libopenblas64_.so|a</code>, a pkg-config file
  432. named <code>openblas64.pc</code>, and CMake and header files.</p>
  433. <p>Installing locally and inspecting the output will show a few more details:
  434. <div class="highlight"><pre><span></span><code>$<span class="w"> </span>make<span class="w"> </span>install<span class="w"> </span><span class="nv">PREFIX</span><span class="o">=</span><span class="nv">$PWD</span>/../openblas/make64<span class="w"> </span><span class="nv">INTERFACE64</span><span class="o">=</span><span class="m">1</span><span class="w"> </span><span class="nv">SYMBOLSUFFIX</span><span class="o">=</span>64_
  435. $<span class="w"> </span>tree<span class="w"> </span>.<span class="w"> </span><span class="c1"># output slightly edited down</span>
  436. .
  437. ├──<span class="w"> </span>include
  438. │<span class="w">   </span>├──<span class="w"> </span>cblas.h
  439. │<span class="w">   </span>├──<span class="w"> </span>f77blas.h
  440. │<span class="w">   </span>├──<span class="w"> </span>lapacke_config.h
  441. │<span class="w">   </span>├──<span class="w"> </span>lapacke.h
  442. │<span class="w">   </span>├──<span class="w"> </span>lapacke_mangling.h
  443. │<span class="w">   </span>├──<span class="w"> </span>lapacke_utils.h
  444. │<span class="w">   </span>├──<span class="w"> </span>lapack.h
  445. │<span class="w">   </span>└──<span class="w"> </span>openblas_config.h
  446. └──<span class="w"> </span>lib
  447. <span class="w"> </span>├──<span class="w"> </span>cmake
  448. <span class="w"> </span>│<span class="w">   </span>└──<span class="w"> </span>openblas
  449. <span class="w"> </span>│<span class="w">   </span>├──<span class="w"> </span>OpenBLASConfig.cmake
  450. <span class="w"> </span>│<span class="w">   </span>└──<span class="w"> </span>OpenBLASConfigVersion.cmake
  451. <span class="w"> </span>├──<span class="w"> </span>libopenblas64_.a
  452. <span class="w"> </span>├──<span class="w"> </span>libopenblas64_.so
  453. <span class="w"> </span>└──<span class="w"> </span>pkgconfig
  454. <span class="w"> </span>└──<span class="w"> </span>openblas64.pc
  455. </code></pre></div></p>
  456. <p>A key point are the symbol names. These will equal the LP64 symbol names, then
  457. (for Fortran only) the compiler mangling, and then the <code>64_</code> symbol suffix.
  458. Hence to obtain the final symbol names, we need to take into account which
  459. Fortran compiler we are using. For the most common cases (e.g., gfortran, Intel
  460. Fortran, or Flang), that means appending a single underscore. In that case, the
  461. result is:</p>
  462. <table>
  463. <thead>
  464. <tr>
  465. <th>base API name</th>
  466. <th>binary symbol name</th>
  467. <th>call from Fortran code</th>
  468. <th>call from C code</th>
  469. </tr>
  470. </thead>
  471. <tbody>
  472. <tr>
  473. <td><code>dgemm</code></td>
  474. <td><code>dgemm_64_</code></td>
  475. <td><code>dgemm_64(...)</code></td>
  476. <td><code>dgemm_64_(...)</code></td>
  477. </tr>
  478. <tr>
  479. <td><code>cblas_dgemm</code></td>
  480. <td><code>cblas_dgemm64_</code></td>
  481. <td>n/a</td>
  482. <td><code>cblas_dgemm64_(...)</code></td>
  483. </tr>
  484. </tbody>
  485. </table>
  486. <p>It is quite useful to have these symbol names be as uniform as possible across
  487. different packaging systems.</p>
  488. <p>The equivalent build options with CMake are:
  489. <div class="highlight"><pre><span></span><code>$<span class="w"> </span>mkdir<span class="w"> </span>build<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="nb">cd</span><span class="w"> </span>build
  490. $<span class="w"> </span>cmake<span class="w"> </span>..<span class="w"> </span>-DINTERFACE64<span class="o">=</span><span class="m">1</span><span class="w"> </span>-DSYMBOLSUFFIX<span class="o">=</span>64_<span class="w"> </span>-DBUILD_SHARED_LIBS<span class="o">=</span>ON<span class="w"> </span>-DBUILD_STATIC_LIBS<span class="o">=</span>ON
  491. $<span class="w"> </span>cmake<span class="w"> </span>--build<span class="w"> </span>.<span class="w"> </span>-j
  492. </code></pre></div></p>
  493. <p>Note that the result is not 100% identical to the Make result. For example, the
  494. library name ends in <code>_64</code> rather than <code>64_</code> - it is recommended to rename them
  495. to match the Make library names (also update the <code>libsuffix</code> entry in
  496. <code>openblas64.pc</code> to match that rename).
  497. <div class="highlight"><pre><span></span><code>$<span class="w"> </span>cmake<span class="w"> </span>--install<span class="w"> </span>.<span class="w"> </span>--prefix<span class="w"> </span><span class="nv">$PWD</span>/../../openblas/cmake64
  498. $<span class="w"> </span>tree<span class="w"> </span>.
  499. .
  500. ├──<span class="w"> </span>include
  501. │<span class="w">   </span>└──<span class="w"> </span>openblas64
  502. │<span class="w">   </span>├──<span class="w"> </span>cblas.h
  503. │<span class="w">   </span>├──<span class="w"> </span>f77blas.h
  504. │<span class="w">   </span>├──<span class="w"> </span>lapacke_config.h
  505. │<span class="w">   </span>├──<span class="w"> </span>lapacke_example_aux.h
  506. │<span class="w">   </span>├──<span class="w"> </span>lapacke.h
  507. │<span class="w">   </span>├──<span class="w"> </span>lapacke_mangling.h
  508. │<span class="w">   </span>├──<span class="w"> </span>lapacke_utils.h
  509. │<span class="w">   </span>├──<span class="w"> </span>lapack.h
  510. │<span class="w">   </span>├──<span class="w"> </span>openblas64
  511. │<span class="w">   </span>│<span class="w">   </span>└──<span class="w"> </span>lapacke_mangling.h
  512. │<span class="w">   </span>└──<span class="w"> </span>openblas_config.h
  513. └──<span class="w"> </span>lib
  514. <span class="w"> </span>├──<span class="w"> </span>cmake
  515. <span class="w"> </span>│<span class="w">   </span>└──<span class="w"> </span>OpenBLAS64
  516. <span class="w"> </span>│<span class="w">   </span>├──<span class="w"> </span>OpenBLAS64Config.cmake
  517. <span class="w"> </span>│<span class="w">   </span>├──<span class="w"> </span>OpenBLAS64ConfigVersion.cmake
  518. <span class="w"> </span>│<span class="w">   </span>├──<span class="w"> </span>OpenBLAS64Targets.cmake
  519. <span class="w"> </span>│<span class="w">   </span>└──<span class="w"> </span>OpenBLAS64Targets-noconfig.cmake
  520. <span class="w"> </span>├──<span class="w"> </span>libopenblas_64.a
  521. <span class="w"> </span>├──<span class="w"> </span>libopenblas_64.so<span class="w"> </span>-&gt;<span class="w"> </span>libopenblas_64.so.0
  522. <span class="w"> </span>└──<span class="w"> </span>pkgconfig
  523. <span class="w"> </span>└──<span class="w"> </span>openblas64.pc
  524. </code></pre></div></p>
  525. <h3 id="the-upcoming-standardized-ilp64-convention">The upcoming standardized ILP64 convention</h3>
  526. <p>While the <code>64_</code> convention above got some adoption, it's slightly hacky and is
  527. implemented through the use of <code>objcopy</code>. An effort is ongoing for a more
  528. broadly adopted convention in the reference BLAS and LAPACK libraries, using
  529. (a) the <code>_64</code> suffix, and (b) applying that suffix <em>before</em> rather than after
  530. Fortran compiler mangling. The central issue for this is
  531. <a href="https://github.com/Reference-LAPACK/lapack/issues/666">lapack#666</a>.</p>
  532. <p>For the most common cases of compiler mangling (a single <code>_</code> appended), the end
  533. result will be:</p>
  534. <table>
  535. <thead>
  536. <tr>
  537. <th>base API name</th>
  538. <th>binary symbol name</th>
  539. <th>call from Fortran code</th>
  540. <th>call from C code</th>
  541. </tr>
  542. </thead>
  543. <tbody>
  544. <tr>
  545. <td><code>dgemm</code></td>
  546. <td><code>dgemm_64_</code></td>
  547. <td><code>dgemm_64(...)</code></td>
  548. <td><code>dgemm_64_(...)</code></td>
  549. </tr>
  550. <tr>
  551. <td><code>cblas_dgemm</code></td>
  552. <td><code>cblas_dgemm_64</code></td>
  553. <td>n/a</td>
  554. <td><code>cblas_dgemm_64(...)</code></td>
  555. </tr>
  556. </tbody>
  557. </table>
  558. <p>For other compiler mangling schemes, replace the trailing <code>_</code> by the scheme in use.</p>
  559. <p>The shared library name for this <code>_64</code> convention should be <code>libopenblas_64.so</code>.</p>
  560. <p>Note: it is not yet possible to produce an OpenBLAS build which employs this
  561. convention! Once reference BLAS and LAPACK with support for <code>_64</code> have been
  562. released, a future OpenBLAS release will support it. For now, please use the
  563. older <code>64_</code> scheme and avoid using the name <code>libopenblas_64.so</code>; it should be
  564. considered reserved for future use of the <code>_64</code> standard as prescribed by
  565. reference BLAS/LAPACK.</p>
  566. <h2 id="performance-and-runtime-behavior-related-build-options">Performance and runtime behavior related build options</h2>
  567. <p>For these options there are multiple reasonable or common choices.</p>
  568. <h3 id="threading-related-options">Threading related options</h3>
  569. <p>OpenBLAS can be built as a multi-threaded or single-threaded library, with the
  570. default being multi-threaded. It's expected that the default <code>libopenblas</code>
  571. library is multi-threaded; if you'd like to also distribute single-threaded
  572. builds, consider naming them <code>libopenblas_sequential</code>.</p>
  573. <p>OpenBLAS can be built with pthreads or OpenMP as the threading model, with the
  574. default being pthreads. Both options are commonly used, and the choice here
  575. should not influence the shared library name. The choice will be captured by
  576. the <code>.pc</code> file. E.g.,:
  577. <div class="highlight"><pre><span></span><code>$<span class="w"> </span>pkg-config<span class="w"> </span>--libs<span class="w"> </span>openblas
  578. -fopenmp<span class="w"> </span>-lopenblas
  579. $<span class="w"> </span>cat<span class="w"> </span>openblas.pc
  580. ...
  581. <span class="nv">openblas_config</span><span class="o">=</span><span class="w"> </span>...<span class="w"> </span><span class="nv">USE_OPENMP</span><span class="o">=</span><span class="m">0</span><span class="w"> </span><span class="nv">MAX_THREADS</span><span class="o">=</span><span class="m">24</span>
  582. </code></pre></div></p>
  583. <p>The maximum number of threads users will be able to use is determined at build
  584. time by the <code>NUM_THREADS</code> build option. It defaults to 24, and there's a wide
  585. range of values that are reasonable to use (up to 256). 64 is a typical choice
  586. here; there is a memory footprint penalty that is linear in <code>NUM_THREADS</code>.
  587. Please see <code>Makefile.rule</code> for more details.</p>
  588. <h3 id="cpu-architecture-related-options">CPU architecture related options</h3>
  589. <p>OpenBLAS contains a lot of CPU architecture-specific optimizations, hence when
  590. distributing to a user base with a variety of hardware, it is recommended to
  591. enable CPU architecture runtime detection. This will dynamically select
  592. optimized kernels for individual APIs. To do this, use the <code>DYNAMIC_ARCH=1</code>
  593. build option. This is usually done on all common CPU families, except when
  594. there are known issues.</p>
  595. <p>In case the CPU architecture is known (e.g. you're building binaries for macOS
  596. M1 users), it is possible to specify the target architecture directly with the
  597. <code>TARGET=</code> build option.</p>
  598. <p><code>DYNAMIC_ARCH</code> and <code>TARGET</code> are covered in more detail in the main <code>README.md</code>
  599. in this repository.</p>
  600. <h2 id="real-world-examples">Real-world examples</h2>
  601. <p>OpenBLAS is likely to be distributed in one of these distribution models:</p>
  602. <ol>
  603. <li>As a standalone package, or multiple packages, in a packaging ecosystem like
  604. a Linux distro, Homebrew, conda-forge or MSYS2.</li>
  605. <li>Vendored as part of a larger package, e.g. in Julia, NumPy, SciPy, or R.</li>
  606. <li>Locally, e.g. making available as a build on a single HPC cluster.</li>
  607. </ol>
  608. <p>The guidance on this page is most important for models (1) and (2). These links
  609. to build recipes for a representative selection of packaging systems may be
  610. helpful as a reference:</p>
  611. <ul>
  612. <li><a href="https://src.fedoraproject.org/rpms/openblas/blob/rawhide/f/openblas.spec">Fedora</a></li>
  613. <li><a href="https://salsa.debian.org/science-team/openblas/-/blob/master/debian/rules">Debian</a></li>
  614. <li><a href="https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/openblas.rb">Homebrew</a></li>
  615. <li><a href="https://github.com/msys2/MINGW-packages/blob/master/mingw-w64-openblas/PKGBUILD">MSYS2</a></li>
  616. <li><a href="https://github.com/conda-forge/openblas-feedstock/blob/main/recipe/build.sh">conda-forge</a></li>
  617. <li><a href="https://github.com/MacPython/openblas-libs/blob/main/tools/build_openblas.sh">NumPy/SciPy</a></li>
  618. <li><a href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/libraries/science/math/openblas/default.nix">Nixpkgs</a></li>
  619. </ul>
  620. <div class="footnote">
  621. <hr />
  622. <ol>
  623. <li id="fn:1">
  624. <p>All major distributions do include LAPACK as of mid 2023 as far as we
  625. know. Older versions of Arch Linux did not, and that was known to cause
  626. problems.&#160;<a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">&#8617;</a></p>
  627. </li>
  628. </ol>
  629. </div>
  630. <aside class="md-source-file">
  631. <span class="md-source-file__fact">
  632. <span class="md-icon" title="Last update">
  633. <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>
  634. </span>
  635. <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="June 29, 2024 07:56:30 UTC">June 29, 2024</span>
  636. </span>
  637. <span class="md-source-file__fact">
  638. <span class="md-icon" title="Created">
  639. <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>
  640. </span>
  641. <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date" title="July 26, 2023 11:00:07 UTC">July 26, 2023</span>
  642. </span>
  643. </aside>
  644. </article>
  645. </div>
  646. <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
  647. </div>
  648. </main>
  649. <footer class="md-footer">
  650. <div class="md-footer-meta md-typeset">
  651. <div class="md-footer-meta__inner md-grid">
  652. <div class="md-copyright">
  653. <div class="md-copyright__highlight">
  654. Copyright &copy; 2012- OpenBLAS contributors
  655. </div>
  656. Made with
  657. <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
  658. Material for MkDocs
  659. </a>
  660. </div>
  661. <div class="md-social">
  662. <a href="https://github.com/OpenMathLib/OpenBLAS" target="_blank" rel="noopener" title="github.com" class="md-social__link">
  663. <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>
  664. </a>
  665. <a href="https://github.com/OpenMathLib/OpenBLAS/LICENSE" target="_blank" rel="noopener" title="github.com" class="md-social__link">
  666. <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>
  667. </a>
  668. </div>
  669. </div>
  670. </div>
  671. </footer>
  672. </div>
  673. <div class="md-dialog" data-md-component="dialog">
  674. <div class="md-dialog__inner md-typeset"></div>
  675. </div>
  676. <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>
  677. <script src="../assets/javascripts/bundle.56ea9cef.min.js"></script>
  678. </body>
  679. </html>

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