CINXE.COM
OpenMP - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>OpenMP - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"87f52517-9cea-47f4-975b-f9cf7c90471a","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"OpenMP","wgTitle":"OpenMP","wgCurRevisionId":1276703435,"wgRevisionId":1276703435,"wgArticleId":381842,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["CS1 maint: multiple names: authors list","Articles containing potentially dated statements from 2016","All articles containing potentially dated statements","Webarchive template wayback links","Articles with short description","Short description matches Wikidata","All articles with unsourced statements","Articles with unsourced statements from September 2022","All articles with incomplete citations","Articles with incomplete citations from March 2015", "Articles needing additional references from February 2017","All articles needing additional references","Articles containing potentially dated statements from 2017","Articles with example Fortran code","Application programming interfaces","C programming language family","Fortran","Parallel computing"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"OpenMP","wgRelevantArticleId":381842,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample" :false,"wgWMEPageLength":40000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q496579","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready", "ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.17"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/OpenMP_logo.png/1200px-OpenMP_logo.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="389"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/OpenMP_logo.png/800px-OpenMP_logo.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="260"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/e/eb/OpenMP_logo.png/640px-OpenMP_logo.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="208"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="OpenMP - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/OpenMP"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=OpenMP&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/OpenMP"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-OpenMP rootpage-OpenMP skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" title="Main menu" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages"><span>Special pages</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=OpenMP" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=OpenMP" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=OpenMP" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=OpenMP" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Design" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Design"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Design</span> </div> </a> <ul id="toc-Design-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Core_elements" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Core_elements"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Core elements</span> </div> </a> <button aria-controls="toc-Core_elements-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Core elements subsection</span> </button> <ul id="toc-Core_elements-sublist" class="vector-toc-list"> <li id="toc-Thread_creation" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Thread_creation"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Thread creation</span> </div> </a> <ul id="toc-Thread_creation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Work-sharing_constructs" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Work-sharing_constructs"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Work-sharing constructs</span> </div> </a> <ul id="toc-Work-sharing_constructs-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Variant_directives" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Variant_directives"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.3</span> <span>Variant directives</span> </div> </a> <ul id="toc-Variant_directives-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Clauses" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Clauses"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.4</span> <span>Clauses</span> </div> </a> <ul id="toc-Clauses-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-User-level_runtime_routines" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#User-level_runtime_routines"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.5</span> <span>User-level runtime routines</span> </div> </a> <ul id="toc-User-level_runtime_routines-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Environment_variables" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Environment_variables"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.6</span> <span>Environment variables</span> </div> </a> <ul id="toc-Environment_variables-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Implementations" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Implementations"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Implementations</span> </div> </a> <ul id="toc-Implementations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Pros_and_cons" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Pros_and_cons"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Pros and cons</span> </div> </a> <ul id="toc-Pros_and_cons-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Performance_expectations" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Performance_expectations"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Performance expectations</span> </div> </a> <ul id="toc-Performance_expectations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Thread_affinity" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Thread_affinity"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Thread affinity</span> </div> </a> <ul id="toc-Thread_affinity-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Benchmarks" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Benchmarks"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Benchmarks</span> </div> </a> <ul id="toc-Benchmarks-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Further_reading" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Further_reading"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Further reading</span> </div> </a> <ul id="toc-Further_reading-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" title="Table of Contents" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">OpenMP</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 21 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-21" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">21 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%A3%D9%88%D8%A8%D9%86_%D8%A3%D9%85_%D8%A8%D9%8A" title="أوبن أم بي – Arabic" lang="ar" hreflang="ar" data-title="أوبن أم بي" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/OpenMP" title="OpenMP – Azerbaijani" lang="az" hreflang="az" data-title="OpenMP" data-language-autonym="Azərbaycanca" data-language-local-name="Azerbaijani" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/OpenMP" title="OpenMP – Catalan" lang="ca" hreflang="ca" data-title="OpenMP" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/OpenMP" title="OpenMP – Czech" lang="cs" hreflang="cs" data-title="OpenMP" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/OpenMP" title="OpenMP – German" lang="de" hreflang="de" data-title="OpenMP" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/OpenMP" title="OpenMP – Spanish" lang="es" hreflang="es" data-title="OpenMP" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A7%D9%BE%D9%86%E2%80%8C%D8%A7%D9%85%E2%80%8C%D9%BE%DB%8C" title="اپنامپی – Persian" lang="fa" hreflang="fa" data-title="اپنامپی" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/OpenMP" title="OpenMP – French" lang="fr" hreflang="fr" data-title="OpenMP" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/OpenMP" title="OpenMP – Korean" lang="ko" hreflang="ko" data-title="OpenMP" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/OpenMP" title="OpenMP – Italian" lang="it" hreflang="it" data-title="OpenMP" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/OpenMP" title="OpenMP – Lithuanian" lang="lt" hreflang="lt" data-title="OpenMP" data-language-autonym="Lietuvių" data-language-local-name="Lithuanian" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/OpenMP" title="OpenMP – Dutch" lang="nl" hreflang="nl" data-title="OpenMP" data-language-autonym="Nederlands" data-language-local-name="Dutch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/OpenMP" title="OpenMP – Japanese" lang="ja" hreflang="ja" data-title="OpenMP" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/OpenMP" title="OpenMP – Norwegian Bokmål" lang="nb" hreflang="nb" data-title="OpenMP" data-language-autonym="Norsk bokmål" data-language-local-name="Norwegian Bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/OpenMP" title="OpenMP – Polish" lang="pl" hreflang="pl" data-title="OpenMP" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/OpenMP" title="OpenMP – Portuguese" lang="pt" hreflang="pt" data-title="OpenMP" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/OpenMP" title="OpenMP – Russian" lang="ru" hreflang="ru" data-title="OpenMP" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/OpenMP" title="OpenMP – Albanian" lang="sq" hreflang="sq" data-title="OpenMP" data-language-autonym="Shqip" data-language-local-name="Albanian" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/OpenMP" title="OpenMP – Turkish" lang="tr" hreflang="tr" data-title="OpenMP" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/OpenMP" title="OpenMP – Ukrainian" lang="uk" hreflang="uk" data-title="OpenMP" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/OpenMP" title="OpenMP – Chinese" lang="zh" hreflang="zh" data-title="OpenMP" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q496579#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/OpenMP" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:OpenMP" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/OpenMP"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=OpenMP&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=OpenMP&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/OpenMP"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=OpenMP&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=OpenMP&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/OpenMP" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/OpenMP" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=OpenMP&oldid=1276703435" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=OpenMP&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=OpenMP&id=1276703435&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FOpenMP"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FOpenMP"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=OpenMP&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=OpenMP&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:OpenMP" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://en.wikibooks.org/wiki/OpenMP" hreflang="en"><span>Wikibooks</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q496579" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Open standard for parallelizing</div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">Not to be confused with <a href="/wiki/Open_MPI" title="Open MPI">Open MPI</a>.</div> <style data-mw-deduplicate="TemplateStyles:r1257001546">.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme) div:not(.notheme){background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table tr{display:table-row!important}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}</style><table class="infobox vevent"><caption class="infobox-title summary">OpenMP</caption><tbody><tr><td colspan="2" class="infobox-image logo"><span typeof="mw:File"><a href="/wiki/File:OpenMP_logo.png" class="mw-file-description" title="OpenMP logo"><img alt="OpenMP logo" src="//upload.wikimedia.org/wikipedia/commons/thumb/e/eb/OpenMP_logo.png/180px-OpenMP_logo.png" decoding="async" width="180" height="58" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/eb/OpenMP_logo.png/270px-OpenMP_logo.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/e/eb/OpenMP_logo.png/360px-OpenMP_logo.png 2x" data-file-width="1467" data-file-height="476" /></a></span></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Programmer" title="Programmer">Original author(s)</a></th><td class="infobox-data">OpenMP Architecture Review Board<sup id="cite_ref-Board_1-0" class="reference"><a href="#cite_note-Board-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Programmer" title="Programmer">Developer(s)</a></th><td class="infobox-data">OpenMP Architecture Review Board<sup id="cite_ref-Board_1-1" class="reference"><a href="#cite_note-Board-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></td></tr><tr style="display: none;"><td colspan="2" class="infobox-full-data"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1257001546"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">6.0 / November 2024<span class="noprint">; 3 months ago</span><span style="display:none"> (<span class="bday dtstart published updated">2024-11</span>)</span></div></td></tr><tr style="display:none"><td colspan="2"> </td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Operating_system" title="Operating system">Operating system</a></th><td class="infobox-data"><a href="/wiki/Cross-platform" class="mw-redirect" title="Cross-platform">Cross-platform</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Computing_platform" title="Computing platform">Platform</a></th><td class="infobox-data">Cross-platform</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_categories#Categorization_approaches" title="Software categories">Type</a></th><td class="infobox-data">Extension to <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a>, <a href="/wiki/C%2B%2B" title="C++">C++</a>, and <a href="/wiki/Fortran" title="Fortran">Fortran</a>; <a href="/wiki/Application_programming_interface" class="mw-redirect" title="Application programming interface">API</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_license" title="Software license">License</a></th><td class="infobox-data">Various<sup id="cite_ref-openmp.org_2-0" class="reference"><a href="#cite_note-openmp.org-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="http://openmp.org">openmp<wbr />.org</a></span></td></tr></tbody></table> <p><b>OpenMP</b> is an <a href="/wiki/Application_programming_interface" class="mw-redirect" title="Application programming interface">application programming interface</a> (API) that supports multi-platform <a href="/wiki/Shared_memory_architecture" class="mw-redirect" title="Shared memory architecture">shared-memory</a> <a href="/wiki/Multiprocessing" title="Multiprocessing">multiprocessing</a> programming in <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a>, <a href="/wiki/C%2B%2B" title="C++">C++</a>, and <a href="/wiki/Fortran" title="Fortran">Fortran</a>,<sup id="cite_ref-OSConcepts_3-0" class="reference"><a href="#cite_note-OSConcepts-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> on many platforms, <a href="/wiki/Instruction_set_architecture" title="Instruction set architecture">instruction-set architectures</a> and <a href="/wiki/Operating_system" title="Operating system">operating systems</a>, including <a href="/wiki/Solaris_(operating_system)" class="mw-redirect" title="Solaris (operating system)">Solaris</a>, <a href="/wiki/IBM_AIX" title="IBM AIX">AIX</a>, <a href="/wiki/FreeBSD" title="FreeBSD">FreeBSD</a>, <a href="/wiki/HP-UX" title="HP-UX">HP-UX</a>, <a href="/wiki/Linux" title="Linux">Linux</a>, <a href="/wiki/MacOS" title="MacOS">macOS</a>, and <a href="/wiki/Microsoft_Windows" title="Microsoft Windows">Windows</a>. It consists of a set of <a href="/wiki/Compiler_directive" class="mw-redirect" title="Compiler directive">compiler directives</a>, <a href="/wiki/Library_(computing)" title="Library (computing)">library routines</a>, and <a href="/wiki/Environment_variable" title="Environment variable">environment variables</a> that influence run-time behavior.<sup id="cite_ref-openmp.org_2-1" class="reference"><a href="#cite_note-openmp.org-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </p><p>OpenMP is managed by the <a href="/wiki/Nonprofit_organization" title="Nonprofit organization">nonprofit</a> technology <a href="/wiki/Consortium" title="Consortium">consortium</a> <i>OpenMP Architecture Review Board</i> (or <i>OpenMP ARB</i>), jointly defined by a broad swath of leading computer hardware and software vendors, including <a href="/wiki/Arm_(company)" class="mw-redirect" title="Arm (company)">Arm</a>, <a href="/wiki/AMD" title="AMD">AMD</a>, <a href="/wiki/IBM" title="IBM">IBM</a>, <a href="/wiki/Intel" title="Intel">Intel</a>, <a href="/wiki/Cray" title="Cray">Cray</a>, <a href="/wiki/Hewlett-Packard" title="Hewlett-Packard">HP</a>, <a href="/wiki/Fujitsu" title="Fujitsu">Fujitsu</a>, <a href="/wiki/Nvidia" title="Nvidia">Nvidia</a>, <a href="/wiki/NEC" title="NEC">NEC</a>, <a href="/wiki/Red_Hat" title="Red Hat">Red Hat</a>, <a href="/wiki/Texas_Instruments" title="Texas Instruments">Texas Instruments</a>, and <a href="/wiki/Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a>.<sup id="cite_ref-Board_1-2" class="reference"><a href="#cite_note-Board-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> </p><p>OpenMP uses a <a href="/wiki/Software_portability" title="Software portability">portable</a>, scalable model that gives <a href="/wiki/Programmer" title="Programmer">programmers</a> a simple and flexible interface for developing parallel applications for platforms ranging from the standard <a href="/wiki/Desktop_computer" title="Desktop computer">desktop computer</a> to the <a href="/wiki/Supercomputer" title="Supercomputer">supercomputer</a>. </p><p>An application built with the hybrid model of <a href="/wiki/Parallel_programming" class="mw-redirect" title="Parallel programming">parallel programming</a> can run on a <a href="/wiki/Computer_cluster" title="Computer cluster">computer cluster</a> using both OpenMP and <a href="/wiki/Message_Passing_Interface" title="Message Passing Interface">Message Passing Interface</a> (MPI), such that OpenMP is used for parallelism <i>within</i> a (multi-core) node while MPI is used for parallelism <i>between</i> nodes. There have also been efforts to run OpenMP on <a href="/wiki/Distributed_shared_memory" title="Distributed shared memory">software distributed shared memory</a> systems,<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> to translate OpenMP into MPI<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> and to extend OpenMP for non-shared memory systems.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Design">Design</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=1" title="Edit section: Design"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:Fork_join.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Fork_join.svg/220px-Fork_join.svg.png" decoding="async" width="220" height="92" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Fork_join.svg/330px-Fork_join.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/f/f1/Fork_join.svg/440px-Fork_join.svg.png 2x" data-file-width="1040" data-file-height="433" /></a><figcaption>An illustration of <a href="/wiki/Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">multithreading</a> where the primary thread forks off a number of threads which execute blocks of code in parallel</figcaption></figure> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">See also: <a href="/wiki/Fork%E2%80%93join_model" title="Fork–join model">Fork–join model</a></div> <p>OpenMP is an implementation of <a href="/wiki/Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">multithreading</a>, a method of parallelizing whereby a <i>primary</i> thread (a series of instructions executed consecutively) <a href="/wiki/Fork_(system_call)" title="Fork (system call)"><i>forks</i></a> a specified number of <i>sub</i>-threads and the system divides a task among them. The threads then run <a href="/wiki/Concurrent_computing" title="Concurrent computing">concurrently</a>, with the <a href="/wiki/Runtime_environment" class="mw-redirect" title="Runtime environment">runtime environment</a> allocating threads to different processors. </p><p>The section of code that is meant to run in parallel is marked accordingly, with a compiler directive that will cause the threads to form before the section is executed.<sup id="cite_ref-OSConcepts_3-1" class="reference"><a href="#cite_note-OSConcepts-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Each thread has an <i>ID</i> attached to it which can be obtained using a <a href="/wiki/Function_(computer_science)" class="mw-redirect" title="Function (computer science)">function</a> (called <code>omp_get_thread_num()</code>). The thread ID is an integer, and the primary thread has an ID of <i>0</i>. After the execution of the parallelized code, the threads <i>join</i> back into the primary thread, which continues onward to the end of the program. </p><p>By default, each thread executes the parallelized section of code independently. <i>Work-sharing constructs</i> can be used to divide a task among the threads so that each thread executes its allocated part of the code. Both <a href="/wiki/Task_parallelism" title="Task parallelism">task parallelism</a> and <a href="/wiki/Data_parallelism" title="Data parallelism">data parallelism</a> can be achieved using OpenMP in this way. </p><p>The runtime environment allocates threads to processors depending on usage, machine load and other factors. The runtime environment can assign the number of threads based on <a href="/wiki/Environment_variable" title="Environment variable">environment variables</a>, or the code can do so using functions. The OpenMP functions are included in a <a href="/wiki/Header_file" class="mw-redirect" title="Header file">header file</a> labelled <style data-mw-deduplicate="TemplateStyles:r886049734">.mw-parser-output .monospaced{font-family:monospace,monospace}</style><span class="monospaced">omp.h</span> in <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a>/<a href="/wiki/C%2B%2B" title="C++">C++</a>. </p> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=2" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The OpenMP Architecture Review Board (ARB) published its first API specifications, OpenMP for Fortran 1.0, in October 1997. In October the following year they released the C/C++ standard. 2000 saw version 2.0 of the Fortran specifications with version 2.0 of the C/C++ specifications being released in 2002. Version 2.5 is a combined C/C++/Fortran specification that was released in 2005.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (September 2022)">citation needed</span></a></i>]</sup> </p><p>Up to version 2.0, OpenMP primarily specified ways to parallelize highly regular loops, as they occur in matrix-oriented <a href="/wiki/Numerical_programming" class="mw-redirect" title="Numerical programming">numerical programming</a>, where the number of iterations of the loop is known at entry time. This was recognized as a limitation, and various task parallel extensions were added to implementations. In 2005, an effort to standardize task parallelism was formed, which published a proposal in 2007, taking inspiration from task parallelism features in <a href="/wiki/Cilk" title="Cilk">Cilk</a>, <a href="/wiki/X10_(programming_language)" title="X10 (programming language)">X10</a> and <a href="/wiki/Chapel_(programming_language)" title="Chapel (programming language)">Chapel</a>.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> </p><p>Version 3.0 was released in May 2008. Included in the new features in 3.0 is the concept of <i>tasks</i> and the <i>task</i> construct,<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> significantly broadening the scope of OpenMP beyond the parallel loop constructs that made up most of OpenMP 2.0.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> </p><p>Version 4.0 of the specification was released in July 2013.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> It adds or improves the following features: support for <a href="/wiki/Hardware_acceleration" title="Hardware acceleration">accelerators</a>; <a href="/wiki/Linearizability" title="Linearizability">atomics</a>; error handling; <a href="/wiki/Processor_affinity" title="Processor affinity">thread affinity</a>; tasking extensions; user defined <a href="/wiki/Fold_(higher-order_function)" title="Fold (higher-order function)">reduction</a>; <a href="/wiki/SIMD" class="mw-redirect" title="SIMD">SIMD</a> support; <a href="/wiki/Fortran_2003" class="mw-redirect" title="Fortran 2003">Fortran 2003</a> support.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup><sup class="noprint Inline-Template" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citing_sources#What_information_to_include" title="Wikipedia:Citing sources"><span title="A complete citation is needed. (March 2015)">full citation needed</span></a></i>]</sup> </p><p>Version 5.2 of OpenMP was released in November 2021.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> </p><p>Version 6.0 was released in November 2024.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> </p><p>Note that not all compilers (and OSes) support the full set of features for the latest version/s. </p> <div class="mw-heading mw-heading2"><h2 id="Core_elements">Core elements</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=3" title="Edit section: Core elements"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:OpenMP_language_extensions.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/9/9b/OpenMP_language_extensions.svg/220px-OpenMP_language_extensions.svg.png" decoding="async" width="220" height="102" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/9/9b/OpenMP_language_extensions.svg/330px-OpenMP_language_extensions.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/9/9b/OpenMP_language_extensions.svg/440px-OpenMP_language_extensions.svg.png 2x" data-file-width="944" data-file-height="436" /></a><figcaption>Chart of OpenMP constructs</figcaption></figure> <p>The core elements of OpenMP are the constructs for thread creation, workload distribution (work sharing), data-environment management, thread synchronization, user-level runtime routines and environment variables. </p><p>In C/C++, OpenMP uses <a href="/wiki/C_preprocessor#Compiler-specific_preprocessor_features" title="C preprocessor">#pragmas</a>. The OpenMP specific pragmas are listed below. </p> <div class="mw-heading mw-heading3"><h3 id="Thread_creation">Thread creation</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=4" title="Edit section: Thread creation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The pragma <i>omp parallel</i> is used to fork additional threads to carry out the work enclosed in the construct in parallel. The original thread will be denoted as <i>master thread</i> with thread ID 0. </p><p>Example (C program): Display "Hello, world." using multiple threads. </p> <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdio.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><omp.h></span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="cp">#pragma omp parallel</span> <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">"Hello, world.</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>Use flag -fopenmp to compile using GCC: </p> <div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>$<span class="w"> </span>gcc<span class="w"> </span>-fopenmp<span class="w"> </span>hello.c<span class="w"> </span>-o<span class="w"> </span>hello<span class="w"> </span>-ldl </pre></div> <p>Output on a computer with two cores, and thus two threads: </p> <div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>Hello,<span class="w"> </span>world. Hello,<span class="w"> </span>world. </pre></div> <p>However, the output may also be garbled because of the <a href="/wiki/Race_condition" title="Race condition">race condition</a> caused from the two threads sharing the <a href="/wiki/Standard_output" class="mw-redirect" title="Standard output">standard output</a>. </p> <div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>Hello,<span class="w"> </span>wHello,<span class="w"> </span>woorld. rld. </pre></div> <p>Whether <code>printf</code> is atomic depends on the underlying implementation<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> unlike C++11's <code>std::cout</code>, which is thread-safe by default.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Work-sharing_constructs">Work-sharing constructs</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=5" title="Edit section: Work-sharing constructs"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Used to specify how to assign independent work to one or all of the threads. </p> <ul><li><i>omp for</i> or <i>omp do</i>: used to <a href="/wiki/Map_(parallel_pattern)" title="Map (parallel pattern)">split up loop iterations</a> among the threads, also called loop constructs.</li> <li><i>sections</i>: assigning consecutive but independent code blocks to different threads</li> <li><i>single</i>: specifying a code block that is executed by only one thread, a barrier is implied in the end</li> <li><i>master</i>: similar to single, but the code block will be executed by the master thread only and no barrier implied in the end.</li></ul> <p>Example: initialize the value of a large array in parallel, using each thread to do part of the work </p> <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><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="w"> </span><span class="o">**</span><span class="n">argv</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">[</span><span class="mi">100000</span><span class="p">];</span> <span class="w"> </span><span class="cp">#pragma omp parallel for</span> <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">100000</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <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="mi">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">i</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <p>This example is <a href="/wiki/Embarrassingly_parallel" title="Embarrassingly parallel">embarrassingly parallel</a>, and depends only on the value of <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">i</span>. The OpenMP <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">parallel for</span> flag tells the OpenMP system to split this task among its working threads. The threads will each receive a unique and private version of the variable.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> For instance, with two worker threads, one thread might be handed a version of <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r886049734"><span class="monospaced">i</span> that runs from 0 to 49999 while the second gets a version running from 50000 to 99999. </p> <div class="mw-heading mw-heading3"><h3 id="Variant_directives">Variant directives</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=6" title="Edit section: Variant directives"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Variant directives are one of the major features introduced in OpenMP 5.0 specification to facilitate programmers to improve performance portability. They enable adaptation of OpenMP pragmas and user code at compile time. The specification defines traits to describe active OpenMP constructs, execution devices, and functionality provided by an implementation, context selectors based on the traits and user-defined conditions, and <i>metadirective</i> and <i>declare directive</i> directives for users to program the same code region with variant directives. </p> <ul><li>The <i>metadirective</i> is an executable directive that conditionally resolves to another directive at compile time by selecting from multiple directive variants based on traits that define an OpenMP condition or context.</li> <li>The <i>declare variant</i> directive has similar functionality as <i>metadirective</i> but selects a function variant at the call-site based on context or user-defined conditions.</li></ul> <p>The mechanism provided by the two variant directives for selecting variants is more convenient to use than the C/C++ preprocessing since it directly supports variant selection in OpenMP and allows an OpenMP compiler to analyze and determine the final directive from variants and context. </p> <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// code adaptation using preprocessing directives</span> <span class="kt">int</span><span class="w"> </span><span class="n">v1</span><span class="p">[</span><span class="n">N</span><span class="p">],</span><span class="w"> </span><span class="n">v2</span><span class="p">[</span><span class="n">N</span><span class="p">],</span><span class="w"> </span><span class="n">v3</span><span class="p">[</span><span class="n">N</span><span class="p">];</span> <span class="cp">#if defined(nvptx)</span> <span class="w"> </span><span class="cp">#pragma omp target teams distribute parallel for map(to:v1,v2) map(from:v3)</span> <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o"><</span><span class="w"> </span><span class="n">N</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span> <span class="w"> </span><span class="n">v3</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">v1</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">v2</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> <span class="cp">#else </span> <span class="w"> </span><span class="cp">#pragma omp target parallel for map(to:v1,v2) map(from:v3)</span> <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o"><</span><span class="w"> </span><span class="n">N</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span> <span class="w"> </span><span class="n">v3</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">v1</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">v2</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> <span class="cp">#endif</span> <span class="c1">// code adaptation using metadirective in OpenMP 5.0</span> <span class="kt">int</span><span class="w"> </span><span class="n">v1</span><span class="p">[</span><span class="n">N</span><span class="p">],</span><span class="w"> </span><span class="n">v2</span><span class="p">[</span><span class="n">N</span><span class="p">],</span><span class="w"> </span><span class="n">v3</span><span class="p">[</span><span class="n">N</span><span class="p">];</span> <span class="cp">#pragma omp target map(to:v1,v2) map(from:v3)</span> <span class="w"> </span><span class="cp">#pragma omp metadirective \</span> <span class="cp"> when(device={arch(nvptx)}: target teams distribute parallel for)\</span> <span class="cp"> default(target parallel for)</span> <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o"><</span><span class="w"> </span><span class="n">N</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span> <span class="w"> </span><span class="n">v3</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">v1</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">v2</span><span class="p">[</span><span class="n">i</span><span class="p">];</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Clauses">Clauses</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=7" title="Edit section: Clauses"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Since OpenMP is a shared memory programming model, most variables in OpenMP code are visible to all threads by default. But sometimes private variables are necessary to avoid <a href="/wiki/Race_condition" title="Race condition">race conditions</a> and there is a need to pass values between the sequential part and the parallel region (the code block executed in parallel), so data environment management is introduced as <i>data sharing attribute clauses</i> by appending them to the OpenMP directive. The different types of clauses are: </p> <dl><dt>Data sharing attribute clauses</dt> <dd></dd></dl> <ul><li><i>shared</i>: the data declared outside a parallel region is shared, which means visible and accessible by all threads simultaneously. By default, all variables in the work sharing region are shared except the loop iteration counter.</li> <li><i>private</i>: the data declared within a parallel region is private to each thread, which means each thread will have a local copy and use it as a temporary variable. A private variable is not initialized and the value is not maintained for use outside the parallel region. By default, the loop iteration counters in the OpenMP loop constructs are private.</li> <li><i>default</i>: allows the programmer to state that the default data scoping within a parallel region will be either <i>shared</i>, or <i>none</i> for C/C++, or <i>shared</i>, <i>firstprivate</i>, <i>private</i>, or <i>none</i> for Fortran. The <i>none</i> option forces the programmer to declare each variable in the parallel region using the data sharing attribute clauses.</li> <li><i>firstprivate</i>: like <i>private</i> except initialized to original value.</li> <li><i>lastprivate</i>: like <i>private</i> except original value is updated after construct.</li> <li><i>reduction</i>: a safe way of joining work from all threads after construct.</li></ul> <dl><dt>Synchronization clauses</dt> <dd></dd></dl> <ul><li><i>critical</i>: the enclosed code block will be executed by only one thread at a time, and not simultaneously executed by multiple threads. It is often used to protect shared data from <a href="/wiki/Race_condition" title="Race condition">race conditions</a>.</li> <li><i>atomic</i>: the memory update (write, or read-modify-write) in the next instruction will be performed atomically. It does not make the entire statement atomic; only the memory update is atomic. A compiler might use special hardware instructions for better performance than when using <i>critical</i>.</li> <li><i>ordered</i>: the structured block is executed in the order in which iterations would be executed in a sequential loop</li> <li><i>barrier</i>: each thread waits until all of the other threads of a team have reached this point. A work-sharing construct has an implicit barrier synchronization at the end.</li> <li><i>nowait</i>: specifies that threads completing assigned work can proceed without waiting for all threads in the team to finish. In the absence of this clause, threads encounter a barrier synchronization at the end of the work sharing construct.</li></ul> <dl><dt>Scheduling clauses</dt> <dd></dd></dl> <ul><li><i>schedule (type, chunk)</i>: This is useful if the work sharing construct is a do-loop or for-loop. The iterations in the work sharing construct are assigned to threads according to the scheduling method defined by this clause. The three types of scheduling are: <ol><li><i>static</i>: Here, all the threads are allocated iterations before they execute the loop iterations. The iterations are divided among threads equally by default. However, specifying an integer for the parameter <i>chunk</i> will allocate chunk number of contiguous iterations to a particular thread.</li> <li><i>dynamic</i>: Here, some of the iterations are allocated to a smaller number of threads. Once a particular thread finishes its allocated iteration, it returns to get another one from the iterations that are left. The parameter <i>chunk</i> defines the number of contiguous iterations that are allocated to a thread at a time.</li> <li><i>guided</i>: A large chunk of contiguous iterations are allocated to each thread dynamically (as above). The chunk size decreases exponentially with each successive allocation to a minimum size specified in the parameter <i>chunk</i></li></ol></li></ul> <dl><dt>IF control</dt> <dd></dd></dl> <ul><li><i>if</i>: This will cause the threads to parallelize the task only if a condition is met. Otherwise the code block executes serially.</li></ul> <dl><dt>Initialization</dt> <dd></dd></dl> <ul><li><i>firstprivate</i>: the data is private to each thread, but initialized using the value of the variable using the same name from the master thread.</li> <li><i>lastprivate</i>: the data is private to each thread. The value of this private data will be copied to a global variable using the same name outside the parallel region if current iteration is the last iteration in the parallelized loop. A variable can be both <i>firstprivate</i> and <i>lastprivate</i>.</li> <li><i>threadprivate</i>: The data is a global data, but it is private in each parallel region during the runtime. The difference between <i>threadprivate</i> and <i>private</i> is the global scope associated with threadprivate and the preserved value across parallel regions.</li></ul> <dl><dt>Data copying</dt> <dd></dd></dl> <ul><li><i>copyin</i>: similar to <i>firstprivate</i> for <i>private</i> variables, <i>threadprivate</i> variables are not initialized, unless using <i>copyin</i> to pass the value from the corresponding global variables. No <i>copyout</i> is needed because the value of a threadprivate variable is maintained throughout the execution of the whole program.</li> <li><i>copyprivate</i>: used with <i>single</i> to support the copying of data values from private objects on one thread (the <i>single</i> thread) to the corresponding objects on other threads in the team.</li></ul> <dl><dt>Reduction</dt> <dd></dd></dl> <ul><li><i>reduction (operator | intrinsic : list)</i>: the variable has a local copy in each thread, but the values of the local copies will be summarized (reduced) into a global shared variable. This is very useful if a particular operation (specified in <i>operator</i> for this particular clause) on a variable runs iteratively, so that its value at a particular iteration depends on its value at a prior iteration. The steps that lead up to the operational increment are parallelized, but the threads updates the global variable in a thread safe manner. This would be required in parallelizing <a href="/wiki/Numerical_integration" title="Numerical integration">numerical integration</a> of functions and <a href="/wiki/Differential_equation" title="Differential equation">differential equations</a>, as a common example.</li></ul> <dl><dt>Others</dt> <dd></dd></dl> <ul><li><i>flush</i>: The value of this variable is restored from the register to the memory for using this value outside of a parallel part</li> <li><i>master</i>: Executed only by the master thread (the thread which forked off all the others during the execution of the OpenMP directive). No implicit barrier; other team members (threads) not required to reach.</li></ul> <div class="mw-heading mw-heading3"><h3 id="User-level_runtime_routines">User-level runtime routines</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=8" title="Edit section: User-level runtime routines"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Used to modify/check the number of threads, detect if the execution context is in a parallel region, how many processors in current system, set/unset locks, timing functions, etc </p> <div class="mw-heading mw-heading3"><h3 id="Environment_variables">Environment variables</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=9" title="Edit section: Environment variables"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A method to alter the execution features of OpenMP applications. Used to control loop iterations scheduling, default number of threads, etc. For example, <i>OMP_NUM_THREADS</i> is used to specify number of threads for an application. </p> <div class="mw-heading mw-heading2"><h2 id="Implementations">Implementations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=10" title="Edit section: Implementations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>OpenMP has been implemented in many commercial compilers. For instance, Visual C++ 2005, 2008, 2010, 2012 and 2013 support it (OpenMP 2.0, in Professional, Team System, Premium and Ultimate editions<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>), as well as <a href="/wiki/Intel_Parallel_Studio" title="Intel Parallel Studio">Intel Parallel Studio</a> for various processors.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Oracle_Solaris_Studio" class="mw-redirect" title="Oracle Solaris Studio">Oracle Solaris Studio</a> compilers and tools support the latest OpenMP specifications with productivity enhancements for Solaris OS (UltraSPARC and x86/x64) and Linux platforms. The Fortran, C and C++ compilers from <a href="/wiki/The_Portland_Group" title="The Portland Group">The Portland Group</a> also support OpenMP 2.5. <a href="/wiki/GNU_Compiler_Collection" title="GNU Compiler Collection">GCC</a> has also supported OpenMP since version 4.2. </p><p>Compilers with an implementation of OpenMP 3.0: </p> <ul><li>GCC 4.3.1</li> <li>Mercurium compiler</li> <li>Intel Fortran and C/C++ versions 11.0 and 11.1 compilers, Intel C/C++ and Fortran Composer XE 2011 and Intel Parallel Studio.</li> <li>IBM XL compiler<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup></li> <li>Sun Studio 12 update 1 has a full implementation of OpenMP 3.0<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup></li> <li>Multi-Processor Computing</li></ul> <p>Several compilers support OpenMP 3.1: </p> <ul><li>GCC 4.7<sup id="cite_ref-openmp_–_GCC_Wiki_26-0" class="reference"><a href="#cite_note-openmp_–_GCC_Wiki-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup></li> <li>Intel Fortran and C/C++ compilers 12.1<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup></li> <li>IBM XL C/C++ compilers for AIX and Linux, V13.1<sup id="cite_ref-ibm.com_28-0" class="reference"><a href="#cite_note-ibm.com-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> & IBM XL Fortran compilers for AIX and Linux, V14.1<sup id="cite_ref-www-01.ibm.com_29-0" class="reference"><a href="#cite_note-www-01.ibm.com-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup></li> <li>LLVM/Clang 3.7<sup id="cite_ref-Clang_3.7_Release_Notes_30-0" class="reference"><a href="#cite_note-Clang_3.7_Release_Notes-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/Absoft_Fortran_Compilers" class="mw-redirect" title="Absoft Fortran Compilers">Absoft Fortran Compilers</a> v. 19 for Windows, Mac OS X and Linux<sup id="cite_ref-Absoft_Pro_Fortran_Compilers_and_Debuggers_31-0" class="reference"><a href="#cite_note-Absoft_Pro_Fortran_Compilers_and_Debuggers-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup></li></ul> <p>Compilers supporting OpenMP 4.0: </p> <ul><li>GCC 4.9.0 for C/C++, GCC 4.9.1 for Fortran<sup id="cite_ref-openmp_–_GCC_Wiki_26-1" class="reference"><a href="#cite_note-openmp_–_GCC_Wiki-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup></li> <li>Intel Fortran and C/C++ compilers 15.0<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup></li> <li>IBM XL C/C++ for Linux, V13.1 (partial)<sup id="cite_ref-ibm.com_28-1" class="reference"><a href="#cite_note-ibm.com-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> & XL Fortran for Linux, V15.1 (partial)<sup id="cite_ref-www-01.ibm.com_29-1" class="reference"><a href="#cite_note-www-01.ibm.com-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup></li> <li>LLVM/Clang 3.7 (partial)<sup id="cite_ref-Clang_3.7_Release_Notes_30-1" class="reference"><a href="#cite_note-Clang_3.7_Release_Notes-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup></li></ul> <p>Several Compilers supporting OpenMP 4.5: </p> <ul><li>GCC 6 for C/C++ <sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup></li> <li>Intel Fortran and C/C++ compilers 17.0, 18.0, 19.0 <sup id="cite_ref-OpenMP_Tools_35-0" class="reference"><a href="#cite_note-OpenMP_Tools-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup></li> <li>LLVM/Clang 12 <sup id="cite_ref-:0_36-0" class="reference"><a href="#cite_note-:0-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup></li></ul> <p>Partial support for OpenMP 5.0: </p> <ul><li>GCC 9 for C/C++ <sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup></li> <li>Intel Fortran and C/C++ compilers 19.1 <sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup></li> <li>LLVM/Clang 12 <sup id="cite_ref-:0_36-1" class="reference"><a href="#cite_note-:0-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup></li></ul> <p><a href="/wiki/Automatic_parallelization" title="Automatic parallelization">Auto-parallelizing</a> compilers that generates source code annotated with OpenMP directives: </p> <ul><li>iPat/OMP</li> <li><a href="/w/index.php?title=Parallware&action=edit&redlink=1" class="new" title="Parallware (page does not exist)">Parallware</a></li> <li>PLUTO</li> <li><a href="/wiki/ROSE_(compiler_framework)" title="ROSE (compiler framework)">ROSE (compiler framework)</a></li> <li>S2P by KPIT Cummins Infosystems Ltd.</li> <li><a rel="nofollow" class="external text" href="https://link.springer.com/chapter/10.1007/978-3-030-58144-2_16">ComPar</a></li> <li><a rel="nofollow" class="external text" href="https://arxiv.org/pdf/2204.12835.pdf">PragFormer</a></li></ul> <p>Several profilers and debuggers expressly support OpenMP: </p> <ul><li>Intel <a href="/wiki/VTune" title="VTune">VTune</a> Profiler - a profiler for the <a href="/wiki/X86" title="X86">x86</a> CPU and <a href="/wiki/Intel_Xe" title="Intel Xe">X<sup>e</sup></a> GPU architectures</li> <li><a href="/wiki/Intel_Advisor" title="Intel Advisor">Intel Advisor</a> - a design assistance and analysis tool for OpenMP and MPI codes</li> <li><a href="/wiki/Allinea_Distributed_Debugging_Tool" class="mw-redirect" title="Allinea Distributed Debugging Tool">Allinea Distributed Debugging Tool</a> (DDT) – debugger for OpenMP and MPI codes</li> <li><a href="/wiki/Allinea_MAP" class="mw-redirect" title="Allinea MAP">Allinea MAP</a> – profiler for OpenMP and MPI codes</li> <li>TotalView - debugger from <a href="/wiki/Rogue_Wave_Software" title="Rogue Wave Software">Rogue Wave Software</a> for OpenMP, MPI and serial codes</li> <li>ompP – profiler for OpenMP</li> <li>VAMPIR – profiler for OpenMP and MPI code</li></ul> <div class="mw-heading mw-heading2"><h2 id="Pros_and_cons">Pros and cons</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=11" title="Edit section: Pros and cons"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1251242444">.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}</style><table class="box-More_citations_needed_section plainlinks metadata ambox ambox-content ambox-Refimprove" role="presentation"><tbody><tr><td class="mbox-image"><div class="mbox-image-div"><span typeof="mw:File"><a href="/wiki/File:Question_book-new.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/75px-Question_book-new.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/100px-Question_book-new.svg.png 2x" data-file-width="512" data-file-height="399" /></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">This section <b>needs additional citations for <a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability">verification</a></b>.<span class="hide-when-compact"> Please help <a href="/wiki/Special:EditPage/OpenMP" title="Special:EditPage/OpenMP">improve this article</a> by <a href="/wiki/Help:Referencing_for_beginners" title="Help:Referencing for beginners">adding citations to reliable sources</a> in this section. Unsourced material may be challenged and removed.</span> <span class="date-container"><i>(<span class="date">February 2017</span>)</i></span><span class="hide-when-compact"><i> (<small><a href="/wiki/Help:Maintenance_template_removal" title="Help:Maintenance template removal">Learn how and when to remove this message</a></small>)</i></span></div></td></tr></tbody></table> <p>Pros: </p> <ul><li>Portable multithreading code (in C/C++ and other languages, one typically has to call platform-specific primitives in order to get multithreading).</li> <li>Simple: need not deal with message passing as <a href="/wiki/Message_Passing_Interface" title="Message Passing Interface">MPI</a> does.</li> <li>Data layout and decomposition is handled automatically by directives.</li> <li>Scalability comparable to <a href="/wiki/Message_Passing_Interface" title="Message Passing Interface">MPI</a> on shared-memory systems.<sup id="cite_ref-ReferenceA_39-0" class="reference"><a href="#cite_note-ReferenceA-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup></li> <li>Incremental parallelism: can work on one part of the program at one time, no dramatic change to code is needed.</li> <li>Unified code for both serial and parallel applications: OpenMP constructs are treated as comments when sequential compilers are used.</li> <li>Original (serial) code statements need not, in general, be modified when parallelized with OpenMP. This reduces the chance of inadvertently introducing bugs.</li> <li>Both <a href="/wiki/Granularity_(parallel_computing)" title="Granularity (parallel computing)">coarse-grained</a> and <a href="/wiki/Granularity_(parallel_computing)" title="Granularity (parallel computing)">fine-grained</a> parallelism are possible.</li> <li>In irregular multi-physics applications which do not adhere solely to the <a href="/wiki/SPMD" class="mw-redirect" title="SPMD">SPMD</a> mode of computation, as encountered in tightly coupled fluid-particulate systems, the flexibility of OpenMP can have a big performance advantage over <a href="/wiki/Message_Passing_Interface" title="Message Passing Interface">MPI</a>.<sup id="cite_ref-ReferenceA_39-1" class="reference"><a href="#cite_note-ReferenceA-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup></li> <li>Can be used on various accelerators such as <a href="/wiki/GPGPU" class="mw-redirect" title="GPGPU">GPGPU</a><sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup> and <a href="/wiki/Field-programmable_gate_array" title="Field-programmable gate array">FPGAs</a>.</li></ul> <p>Cons: </p> <ul><li>Risk of introducing difficult to debug synchronization bugs and <a href="/wiki/Race_condition" title="Race condition">race conditions</a>.<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup></li> <li>As of 2017<sup class="plainlinks noexcerpt noprint asof-tag update" style="display:none;"><a class="external text" href="https://en.wikipedia.org/w/index.php?title=OpenMP&action=edit">[update]</a></sup> only runs efficiently in shared-memory multiprocessor platforms (see however Intel's <a rel="nofollow" class="external text" href="http://software.intel.com/en-us/articles/cluster-openmp-for-intel-compilers">Cluster OpenMP</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20181116055322/https://software.intel.com/en-us/articles/cluster-openmp-for-intel-compilers">Archived</a> 2018-11-16 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a> and other <a href="/wiki/Distributed_shared_memory" title="Distributed shared memory">distributed shared memory</a> platforms).</li> <li>Requires a compiler that supports OpenMP.</li> <li>Scalability is limited by memory architecture.</li> <li>No support for <a href="/wiki/Compare-and-swap" title="Compare-and-swap">compare-and-swap</a>.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup></li> <li>Reliable error handling is missing.</li> <li>Lacks fine-grained mechanisms to control thread-processor mapping.</li> <li>High chance of accidentally writing <a href="/wiki/False_sharing" title="False sharing">false sharing</a> code.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Performance_expectations">Performance expectations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=12" title="Edit section: Performance expectations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>One might expect to get an <i>N</i> times <a href="/wiki/Speedup" title="Speedup">speedup</a> when running a program parallelized using OpenMP on a <i>N</i> processor platform. However, this seldom occurs for these reasons: </p> <ul><li>When a dependency exists, a process must wait until the data it depends on is computed.</li> <li>When multiple processes share a non-parallel proof resource (like a file to write in), their requests are executed sequentially. Therefore, each thread must wait until the other thread releases the resource.</li> <li>A large part of the program may not be parallelized by OpenMP, which means that the theoretical upper limit of speedup is limited according to <a href="/wiki/Amdahl%27s_law" title="Amdahl's law">Amdahl's law</a>.</li> <li>N processors in a <a href="/wiki/Symmetric_multiprocessing" title="Symmetric multiprocessing">symmetric multiprocessing</a> (SMP) may have N times the computation power, but the <a href="/wiki/Memory_bandwidth" title="Memory bandwidth">memory bandwidth</a> usually does not scale up N times. Quite often, the original memory path is shared by multiple processors and performance degradation may be observed when they compete for the shared memory bandwidth.</li> <li>Many other common problems affecting the final speedup in <a href="/wiki/Parallel_computing" title="Parallel computing">parallel computing</a> also apply to OpenMP, like <a href="/wiki/Load_balancing_(computing)" title="Load balancing (computing)">load balancing</a> and synchronization overhead.</li> <li>Compiler optimisation may not be as effective when invoking OpenMP. This can commonly lead to a single-threaded OpenMP program running slower than the same code compiled without an OpenMP flag (which will be fully serial).</li></ul> <div class="mw-heading mw-heading2"><h2 id="Thread_affinity">Thread affinity</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=13" title="Edit section: Thread affinity"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Some vendors recommend setting the <a href="/wiki/Processor_affinity" title="Processor affinity">processor affinity</a> on OpenMP threads to associate them with particular processor cores.<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup> This minimizes thread migration and context-switching cost among cores. It also improves the data locality and reduces the cache-coherency traffic among the cores (or processors). </p> <div class="mw-heading mw-heading2"><h2 id="Benchmarks">Benchmarks</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=14" title="Edit section: Benchmarks"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A variety of benchmarks has been developed to demonstrate the use of OpenMP, test its performance and evaluate correctness. </p><p>Simple examples </p> <ul><li>OmpSCR: OpenMP Source Code Repository</li></ul> <p>Performance benchmarks include: </p> <ul><li>NAS Parallel Benchmark</li> <li>Barcelona OpenMP Task Suite a collection of applications that allow to test OpenMP tasking implementations.</li> <li>SPEC series <ul><li>SPEC OMP 2012</li> <li>The SPEC ACCEL benchmark suite testing OpenMP 4 target offloading API</li> <li>The SPEChpc 2002 benchmark</li></ul></li> <li>CORAL benchmarks</li> <li>Exascale Proxy Applications</li> <li>Rodinia focusing on accelerators.</li> <li>Problem Based Benchmark Suite</li></ul> <p>Correctness benchmarks include: </p> <ul><li>OpenMP Validation Suite</li> <li>OpenMP Validation and Verification Testsuite</li> <li>DataRaceBench is a benchmark suite designed to systematically and quantitatively evaluate the effectiveness of OpenMP data race detection tools.</li> <li>AutoParBench is a benchmark suite to evaluate compilers and tools which can automatically insert OpenMP directives.</li></ul> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=15" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1184024115">.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}</style><div class="div-col"> <ul><li><a href="/wiki/Concurrency_(computer_science)" title="Concurrency (computer science)">Concurrency (computer science)</a></li> <li><a href="/wiki/Heterogeneous_System_Architecture" title="Heterogeneous System Architecture">Heterogeneous System Architecture</a></li> <li><a href="/wiki/Parallel_programming_model" title="Parallel programming model">Parallel programming model</a></li> <li><a href="/wiki/POSIX_Threads" class="mw-redirect" title="POSIX Threads">POSIX Threads</a></li> <li><a href="/wiki/Unified_Parallel_C" title="Unified Parallel C">Unified Parallel C</a></li> <li><a href="/wiki/Bulk_synchronous_parallel" title="Bulk synchronous parallel">Bulk synchronous parallel</a></li> <li><a href="/wiki/Partitioned_global_address_space" title="Partitioned global address space">Partitioned global address space</a></li> <li><a href="/wiki/SequenceL" title="SequenceL">SequenceL</a></li></ul> </div> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=16" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;"> <ol class="references"> <li id="cite_note-Board-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-Board_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Board_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Board_1-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130809153922/http://openmp.org/wp/about-openmp/">"About the OpenMP ARB and"</a>. OpenMP.org. 2013-07-11. Archived from <a rel="nofollow" class="external text" href="http://openmp.org/wp/about-openmp/">the original</a> on 2013-08-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=About+the+OpenMP+ARB+and&rft.pub=OpenMP.org&rft.date=2013-07-11&rft_id=http%3A%2F%2Fopenmp.org%2Fwp%2Fabout-openmp%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-openmp.org-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-openmp.org_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-openmp.org_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.openmp.org/resources/openmp-compilers-tools/">"OpenMP Compilers & Tools"</a>. OpenMP.org. November 2019<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-03-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OpenMP+Compilers+%26+Tools&rft.pub=OpenMP.org&rft.date=2019-11&rft_id=https%3A%2F%2Fwww.openmp.org%2Fresources%2Fopenmp-compilers-tools%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-OSConcepts-3"><span class="mw-cite-backlink">^ <a href="#cite_ref-OSConcepts_3-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-OSConcepts_3-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGagne2012" class="citation book cs1">Gagne, Abraham Silberschatz, Peter Baer Galvin, Greg (2012-12-17). <i>Operating system concepts</i> (9th ed.). Hoboken, N.J.: Wiley. pp. <span class="nowrap">181–</span>182. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-118-06333-0" title="Special:BookSources/978-1-118-06333-0"><bdi>978-1-118-06333-0</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Operating+system+concepts&rft.place=Hoboken%2C+N.J.&rft.pages=%3Cspan+class%3D%22nowrap%22%3E181-%3C%2Fspan%3E182&rft.edition=9th&rft.pub=Wiley&rft.date=2012-12-17&rft.isbn=978-1-118-06333-0&rft.aulast=Gagne&rft.aufirst=Abraham+Silberschatz%2C+Peter+Baer+Galvin%2C+Greg&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span><span class="cs1-maint citation-comment"><code class="cs1-code">{{<a href="/wiki/Template:Cite_book" title="Template:Cite book">cite book</a>}}</code>: CS1 maint: multiple names: authors list (<a href="/wiki/Category:CS1_maint:_multiple_names:_authors_list" title="Category:CS1 maint: multiple names: authors list">link</a>)</span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://openmp.org/wp/2008/10/openmp-tutorial-at-supercomputing-2008/">OpenMP Tutorial at Supercomputing 2008</a></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://openmp.org/wp/2009/04/download-book-examples-and-discuss/">Using OpenMP – Portable Shared Memory Parallel Programming – Download Book Examples and Discuss</a></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCosta2006" class="citation journal cs1">Costa, J.J.; et al. (May 2006). "Running OpenMP applications efficiently on an everything-shared SDSM". <i>Journal of Parallel and Distributed Computing</i>. <b>66</b> (5): <span class="nowrap">647–</span>658. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.jpdc.2005.06.018">10.1016/j.jpdc.2005.06.018</a>. <a href="/wiki/Hdl_(identifier)" class="mw-redirect" title="Hdl (identifier)">hdl</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://hdl.handle.net/2117%2F370260">2117/370260</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Parallel+and+Distributed+Computing&rft.atitle=Running+OpenMP+applications+efficiently+on+an+everything-shared+SDSM&rft.volume=66&rft.issue=5&rft.pages=%3Cspan+class%3D%22nowrap%22%3E647-%3C%2Fspan%3E658&rft.date=2006-05&rft_id=info%3Ahdl%2F2117%2F370260&rft_id=info%3Adoi%2F10.1016%2Fj.jpdc.2005.06.018&rft.aulast=Costa&rft.aufirst=J.J.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBasumallikMinEigenmann2007" class="citation book cs1">Basumallik, Ayon; Min, Seung-Jai; Eigenmann, Rudolf (2007). "Programming Distributed Memory Systems Using OpenMP". <i>2007 IEEE International Parallel and Distributed Processing Symposium</i>. New York: IEEE Press. pp. <span class="nowrap">1–</span>8. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.421.8570">10.1.1.421.8570</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FIPDPS.2007.370397">10.1109/IPDPS.2007.370397</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-4244-0909-9" title="Special:BookSources/978-1-4244-0909-9"><bdi>978-1-4244-0909-9</bdi></a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14237507">14237507</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Programming+Distributed+Memory+Systems+Using+OpenMP&rft.btitle=2007+IEEE+International+Parallel+and+Distributed+Processing+Symposium&rft.place=New+York&rft.pages=%3Cspan+class%3D%22nowrap%22%3E1-%3C%2Fspan%3E8&rft.pub=IEEE+Press&rft.date=2007&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.421.8570%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14237507%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1109%2FIPDPS.2007.370397&rft.isbn=978-1-4244-0909-9&rft.aulast=Basumallik&rft.aufirst=Ayon&rft.au=Min%2C+Seung-Jai&rft.au=Eigenmann%2C+Rudolf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span> A <a rel="nofollow" class="external text" href="https://www.cs.rochester.edu/~cding/Announcements/HIPS07/openmp.pdf">preprint is available on Chen Ding's home page</a>; see especially Section 3 on Translation of OpenMP to MPI.</span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWangHuZhangLi2010" class="citation journal cs1">Wang, Jue; Hu, ChangJun; Zhang, JiLin; Li, JianJiang (May 2010). <a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs11432-010-0074-0">"OpenMP compiler for distributed memory architectures"</a>. <i>Science China Information Sciences</i>. <b>53</b> (5): <span class="nowrap">932–</span>944. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs11432-010-0074-0">10.1007/s11432-010-0074-0</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Science+China+Information+Sciences&rft.atitle=OpenMP+compiler+for+distributed+memory+architectures&rft.volume=53&rft.issue=5&rft.pages=%3Cspan+class%3D%22nowrap%22%3E932-%3C%2Fspan%3E944&rft.date=2010-05&rft_id=info%3Adoi%2F10.1007%2Fs11432-010-0074-0&rft.aulast=Wang&rft.aufirst=Jue&rft.au=Hu%2C+ChangJun&rft.au=Zhang%2C+JiLin&rft.au=Li%2C+JianJiang&rft_id=https%3A%2F%2Fdoi.org%2F10.1007%252Fs11432-010-0074-0&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span> (As of 2016<sup class="plainlinks noexcerpt noprint asof-tag update" style="display:none;"><a class="external text" href="https://en.wikipedia.org/w/index.php?title=OpenMP&action=edit">[update]</a></sup> the KLCoMP software described in this paper does not appear to be publicly available)</span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://software.intel.com/en-us/articles/cluster-openmp-for-intel-compilers">Cluster OpenMP</a> (a product that used to be available for <a href="/wiki/Intel_C%2B%2B_Compiler" title="Intel C++ Compiler">Intel C++ Compiler</a> versions 9.1 to 11.1 but was dropped in 13.0)</span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAyguadeCoptyDuranHoeflinger2007" class="citation conference cs1">Ayguade, Eduard; Copty, Nawal; Duran, Alejandro; Hoeflinger, Jay; Lin, Yuan; Massaioli, Federico; Su, Ernesto; Unnikrishnan, Priya; Zhang, Guansong (2007). <a rel="nofollow" class="external text" href="http://people.ac.upc.edu/aduran/papers/2007/tasks_iwomp07.pdf"><i>A proposal for task parallelism in OpenMP</i></a> <span class="cs1-format">(PDF)</span>. Proc. Int'l Workshop on OpenMP.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=A+proposal+for+task+parallelism+in+OpenMP&rft.date=2007&rft.aulast=Ayguade&rft.aufirst=Eduard&rft.au=Copty%2C+Nawal&rft.au=Duran%2C+Alejandro&rft.au=Hoeflinger%2C+Jay&rft.au=Lin%2C+Yuan&rft.au=Massaioli%2C+Federico&rft.au=Su%2C+Ernesto&rft.au=Unnikrishnan%2C+Priya&rft.au=Zhang%2C+Guansong&rft_id=http%3A%2F%2Fpeople.ac.upc.edu%2Faduran%2Fpapers%2F2007%2Ftasks_iwomp07.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.openmp.org/mp-documents/spec30.pdf">"OpenMP Application Program Interface, Version 3.0"</a> <span class="cs1-format">(PDF)</span>. openmp.org. May 2008<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-02-06</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OpenMP+Application+Program+Interface%2C+Version+3.0&rft.pub=openmp.org&rft.date=2008-05&rft_id=http%3A%2F%2Fwww.openmp.org%2Fmp-documents%2Fspec30.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLaGroneAribukiAddisonChapman2011" class="citation conference cs1">LaGrone, James; Aribuki, Ayodunni; Addison, Cody; Chapman, Barbara (2011). <i>A Runtime Implementation of OpenMP Tasks</i>. Proc. Int'l Workshop on OpenMP. pp. <span class="nowrap">165–</span>178. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.221.2775">10.1.1.221.2775</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F978-3-642-21487-5_13">10.1007/978-3-642-21487-5_13</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=conference&rft.btitle=A+Runtime+Implementation+of+OpenMP+Tasks&rft.pages=%3Cspan+class%3D%22nowrap%22%3E165-%3C%2Fspan%3E178&rft.date=2011&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.221.2775%23id-name%3DCiteSeerX&rft_id=info%3Adoi%2F10.1007%2F978-3-642-21487-5_13&rft.aulast=LaGrone&rft.aufirst=James&rft.au=Aribuki%2C+Ayodunni&rft.au=Addison%2C+Cody&rft.au=Chapman%2C+Barbara&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20131109175921/http://openmp.org/wp/openmp-40-api-released/">"OpenMP 4.0 API Released"</a>. OpenMP.org. 2013-07-26. Archived from <a rel="nofollow" class="external text" href="http://openmp.org/wp/openmp-40-api-released/">the original</a> on 2013-11-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OpenMP+4.0+API+Released&rft.pub=OpenMP.org&rft.date=2013-07-26&rft_id=http%3A%2F%2Fopenmp.org%2Fwp%2Fopenmp-40-api-released%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.openmp.org/mp-documents/OpenMP4.0.0.pdf">"OpenMP Application Program Interface, Version 4.0"</a> <span class="cs1-format">(PDF)</span>. openmp.org. July 2013<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-02-06</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OpenMP+Application+Program+Interface%2C+Version+4.0&rft.pub=openmp.org&rft.date=2013-07&rft_id=http%3A%2F%2Fwww.openmp.org%2Fmp-documents%2FOpenMP4.0.0.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.openmp.org/specifications/">"OpenMP 5.2 Specification"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OpenMP+5.2+Specification&rft_id=https%3A%2F%2Fwww.openmp.org%2Fspecifications%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.openmp.org/home-news/openmp-arb-releases-openmp-6-0-for-easier-programming/">"OpenMP ARB Releases OpenMP 6.0 for Easier Programming"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OpenMP+ARB+Releases+OpenMP+6.0+for+Easier+Programming&rft_id=https%3A%2F%2Fwww.openmp.org%2Fhome-news%2Fopenmp-arb-releases-openmp-6-0-for-easier-programming%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://stackoverflow.com/a/40186101">"C - How to use printf() in multiple threads"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=C+-+How+to+use+printf%28%29+in+multiple+threads&rft_id=https%3A%2F%2Fstackoverflow.com%2Fa%2F40186101&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://en.cppreference.com/w/cpp/io/cout">"std::cout, std::wcout - cppreference.com"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=std%3A%3Acout%2C+std%3A%3Awcout+-+cppreference.com&rft_id=https%3A%2F%2Fen.cppreference.com%2Fw%2Fcpp%2Fio%2Fcout&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://supercomputingblog.com/openmp/tutorial-parallel-for-loops-with-openmp/">"Tutorial – Parallel for Loops with OpenMP"</a>. 2009-07-14.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Tutorial+%E2%80%93+Parallel+for+Loops+with+OpenMP&rft.date=2009-07-14&rft_id=http%3A%2F%2Fsupercomputingblog.com%2Fopenmp%2Ftutorial-parallel-for-loops-with-openmp%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://msdn2.microsoft.com/en-us/library/hs24szh9(vs.80).aspx">Visual C++ Editions, Visual Studio 2005</a></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://msdn2.microsoft.com/en-us/library/hs24szh9(vs.90).aspx">Visual C++ Editions, Visual Studio 2008</a></span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://msdn2.microsoft.com/en-us/library/hs24szh9(vs.100).aspx">Visual C++ Editions, Visual Studio 2010</a></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text">David Worthington, <a rel="nofollow" class="external text" href="http://www.sdtimes.com/intel_addresses_development_life_cycle_with_parallel_studio/about_intel_and_multicore/33497">"Intel addresses development life cycle with Parallel Studio"</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120215032407/http://www.sdtimes.com/INTEL_ADDRESSES_DEVELOPMENT_LIFE_CYCLE_WITH_PARALLEL_STUDIO/About_INTEL_and_MULTICORE/33497">Archived</a> 2012-02-15 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a>, SDTimes, 26 May 2009 (accessed 28 May 2009)</span> </li> <li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www-01.ibm.com/software/awdtools/xlcpp/linux/features/?S_CMP=rnav">"XL C/C++ for Linux Features"</a>, (accessed 9 June 2009)</span> </li> <li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://developers.sun.com/sunstudio/features/">"Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle"</a>. Developers.sun.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Oracle+Technology+Network+for+Java+Developers+%26%23124%3B+Oracle+Technology+Network+%26%23124%3B+Oracle&rft.pub=Developers.sun.com&rft_id=http%3A%2F%2Fdevelopers.sun.com%2Fsunstudio%2Ffeatures%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-openmp_–_GCC_Wiki-26"><span class="mw-cite-backlink">^ <a href="#cite_ref-openmp_–_GCC_Wiki_26-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-openmp_–_GCC_Wiki_26-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://gcc.gnu.org/wiki/openmp">"openmp – GCC Wiki"</a>. Gcc.gnu.org. 2013-07-30<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=openmp+%E2%80%93+GCC+Wiki&rft.pub=Gcc.gnu.org&rft.date=2013-07-30&rft_id=https%3A%2F%2Fgcc.gnu.org%2Fwiki%2Fopenmp&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKennedy2011" class="citation web cs1">Kennedy, Patrick (2011-09-06). <a rel="nofollow" class="external text" href="http://software.intel.com/en-us/articles/intel-c-and-fortran-compilers-now-support-the-openmp-31-specification/">"Intel® C++ and Fortran Compilers now support the OpenMP* 3.1 Specification | Intel® Developer Zone"</a>. Software.intel.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-14</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Intel%C2%AE+C%2B%2B+and+Fortran+Compilers+now+support+the+OpenMP%2A+3.1+Specification+%26%23124%3B+Intel%C2%AE+Developer+Zone&rft.pub=Software.intel.com&rft.date=2011-09-06&rft.aulast=Kennedy&rft.aufirst=Patrick&rft_id=http%3A%2F%2Fsoftware.intel.com%2Fen-us%2Farticles%2Fintel-c-and-fortran-compilers-now-support-the-openmp-31-specification%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-ibm.com-28"><span class="mw-cite-backlink">^ <a href="#cite_ref-ibm.com_28-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ibm.com_28-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.ibm.com/support/docview.wss?uid=swg27007322&aid=1">"IBM XL C/C++ compilers features"</a>. <i><a href="/wiki/IBM" title="IBM">IBM</a></i>. 13 December 2018.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=IBM&rft.atitle=IBM+XL+C%2FC%2B%2B+compilers+features&rft.date=2018-12-13&rft_id=https%3A%2F%2Fwww.ibm.com%2Fsupport%2Fdocview.wss%3Fuid%3Dswg27007322%26aid%3D1&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-www-01.ibm.com-29"><span class="mw-cite-backlink">^ <a href="#cite_ref-www-01.ibm.com_29-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-www-01.ibm.com_29-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www-01.ibm.com/support/docview.wss?uid=swg27007323&aid=1">"IBM XL Fortran compilers features"</a>. 13 December 2018.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=IBM+XL+Fortran+compilers+features&rft.date=2018-12-13&rft_id=http%3A%2F%2Fwww-01.ibm.com%2Fsupport%2Fdocview.wss%3Fuid%3Dswg27007323%26aid%3D1&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-Clang_3.7_Release_Notes-30"><span class="mw-cite-backlink">^ <a href="#cite_ref-Clang_3.7_Release_Notes_30-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Clang_3.7_Release_Notes_30-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://llvm.org/releases/3.7.0/tools/clang/docs/ReleaseNotes.html#openmp-support">"Clang 3.7 Release Notes"</a>. llvm.org<span class="reference-accessdate">. Retrieved <span class="nowrap">2015-10-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Clang+3.7+Release+Notes&rft.pub=llvm.org&rft_id=http%3A%2F%2Fllvm.org%2Freleases%2F3.7.0%2Ftools%2Fclang%2Fdocs%2FReleaseNotes.html%23openmp-support&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-Absoft_Pro_Fortran_Compilers_and_Debuggers-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-Absoft_Pro_Fortran_Compilers_and_Debuggers_31-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.absoft.com/">"Absoft Home Page"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2019-02-12</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Absoft+Home+Page&rft_id=https%3A%2F%2Fwww.absoft.com%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.gnu.org/software/gcc/gcc-4.9/changes.html">"GCC 4.9 Release Series – Changes"</a>. www.gnu.org.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=GCC+4.9+Release+Series+%E2%80%93+Changes&rft.pub=www.gnu.org&rft_id=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgcc%2Fgcc-4.9%2Fchanges.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20181116055150/https://software.intel.com/en-us/articles/openmp-40-features-in-intel-compiler-150">"OpenMP* 4.0 Features in Intel Compiler 15.0"</a>. Software.intel.com. 2014-08-13. Archived from <a rel="nofollow" class="external text" href="https://software.intel.com/en-us/articles/openmp-40-features-in-intel-compiler-150">the original</a> on 2018-11-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-11-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OpenMP%2A+4.0+Features+in+Intel+Compiler+15.0&rft.pub=Software.intel.com&rft.date=2014-08-13&rft_id=https%3A%2F%2Fsoftware.intel.com%2Fen-us%2Farticles%2Fopenmp-40-features-in-intel-compiler-150&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.gnu.org/software/gcc/gcc-6/changes.html">"GCC 6 Release Series - Changes"</a>. www.gnu.org.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=GCC+6+Release+Series+-+Changes&rft.pub=www.gnu.org&rft_id=https%3A%2F%2Fwww.gnu.org%2Fsoftware%2Fgcc%2Fgcc-6%2Fchanges.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-OpenMP_Tools-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-OpenMP_Tools_35-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="openmp-tools" class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.openmp.org/resources/openmp-compilers-tools/">"OpenMP Compilers & Tools"</a>. <i>openmp.org</i>. www.openmp.org<span class="reference-accessdate">. Retrieved <span class="nowrap">29 October</span> 2019</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=openmp.org&rft.atitle=OpenMP+Compilers+%26+Tools&rft_id=https%3A%2F%2Fwww.openmp.org%2Fresources%2Fopenmp-compilers-tools%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-:0-36"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_36-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_36-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://clang.llvm.org/docs/OpenMPSupport.html#openmp-5-0-implementation-details">"OpenMP Support — Clang 12 documentation"</a>. <i>clang.llvm.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-10-23</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=clang.llvm.org&rft.atitle=OpenMP+Support+%E2%80%94+Clang+12+documentation&rft_id=https%3A%2F%2Fclang.llvm.org%2Fdocs%2FOpenMPSupport.html%23openmp-5-0-implementation-details&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20210227083702/http://gcc.gnu.org/projects/gomp/">"GOMP — An OpenMP implementation for GCC - GNU Project - Free Software Foundation (FSF)"</a>. <i>gcc.gnu.org</i>. Archived from <a rel="nofollow" class="external text" href="https://gcc.gnu.org/projects/gomp/">the original</a> on 2021-02-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-10-23</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=gcc.gnu.org&rft.atitle=GOMP+%E2%80%94+An+OpenMP+implementation+for+GCC+-+GNU+Project+-+Free+Software+Foundation+%28FSF%29&rft_id=https%3A%2F%2Fgcc.gnu.org%2Fprojects%2Fgomp%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/optimization-and-programming-guide/openmp-support.html">"OpenMP* Support"</a>. <i>Intel</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-10-23</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Intel&rft.atitle=OpenMP%2A+Support&rft_id=https%3A%2F%2Fwww.intel.com%2Fcontent%2Fwww%2Fus%2Fen%2Fdevelop%2Fdocumentation%2Fcpp-compiler-developer-guide-and-reference%2Ftop%2Foptimization-and-programming-guide%2Fopenmp-support.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-ReferenceA-39"><span class="mw-cite-backlink">^ <a href="#cite_ref-ReferenceA_39-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-ReferenceA_39-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAmritkarTaftiLiuKufrin2012" class="citation journal cs1">Amritkar, Amit; Tafti, Danesh; Liu, Rui; Kufrin, Rick; Chapman, Barbara (2012). "OpenMP parallelism for fluid and fluid-particulate systems". <i>Parallel Computing</i>. <b>38</b> (9): 501. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.parco.2012.05.005">10.1016/j.parco.2012.05.005</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Parallel+Computing&rft.atitle=OpenMP+parallelism+for+fluid+and+fluid-particulate+systems&rft.volume=38&rft.issue=9&rft.pages=501&rft.date=2012&rft_id=info%3Adoi%2F10.1016%2Fj.parco.2012.05.005&rft.aulast=Amritkar&rft.aufirst=Amit&rft.au=Tafti%2C+Danesh&rft.au=Liu%2C+Rui&rft.au=Kufrin%2C+Rick&rft.au=Chapman%2C+Barbara&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAmritkarDebTafti2014" class="citation journal cs1">Amritkar, Amit; Deb, Surya; Tafti, Danesh (2014). <a href="/wiki/CFD-DEM" title="CFD-DEM">"Efficient parallel CFD-DEM simulations using OpenMP"</a>. <i>Journal of Computational Physics</i>. <b>256</b>: 501. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2014JCoPh.256..501A">2014JCoPh.256..501A</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.jcp.2013.09.007">10.1016/j.jcp.2013.09.007</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Computational+Physics&rft.atitle=Efficient+parallel+CFD-DEM+simulations+using+OpenMP&rft.volume=256&rft.pages=501&rft.date=2014&rft_id=info%3Adoi%2F10.1016%2Fj.jcp.2013.09.007&rft_id=info%3Abibcode%2F2014JCoPh.256..501A&rft.aulast=Amritkar&rft.aufirst=Amit&rft.au=Deb%2C+Surya&rft.au=Tafti%2C+Danesh&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.openmp.org/updates/openmp-accelerator-support-gpus/">OpenMP Accelerator Support for GPUs</a></span> </li> <li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://developers.sun.com/solaris/articles/cpp_race.html">Detecting and Avoiding OpenMP Race Conditions in C++</a></span> </li> <li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20170707064110/https://software.intel.com/en-us/articles/32-openmp-traps-for-c-developers">"Alexey Kolosov, Evgeniy Ryzhkov, Andrey Karpov 32 OpenMP traps for C++ developers"</a>. Archived from <a rel="nofollow" class="external text" href="http://software.intel.com/en-us/articles/32-openmp-traps-for-c-developers">the original</a> on 2017-07-07<span class="reference-accessdate">. Retrieved <span class="nowrap">2009-04-15</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Alexey+Kolosov%2C+Evgeniy+Ryzhkov%2C+Andrey+Karpov+32+OpenMP+traps+for+C%2B%2B+developers&rft_id=http%3A%2F%2Fsoftware.intel.com%2Fen-us%2Farticles%2F32-openmp-traps-for-c-developers&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text">Stephen Blair-Chappell, Intel Corporation, Becoming a Parallel Programming Expert in Nine Minutes, presentation on <a href="/wiki/ACCU_(organisation)" title="ACCU (organisation)">ACCU</a> 2010 conference</span> </li> <li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChen2007" class="citation journal cs1">Chen, Yurong (2007-11-15). "Multi-Core Software". <i>Intel Technology Journal</i>. <b>11</b> (4). <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1535%2Fitj.1104.08">10.1535/itj.1104.08</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Intel+Technology+Journal&rft.atitle=Multi-Core+Software&rft.volume=11&rft.issue=4&rft.date=2007-11-15&rft_id=info%3Adoi%2F10.1535%2Fitj.1104.08&rft.aulast=Chen&rft.aufirst=Yurong&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.spec.org/omp/results/res2008q1/omp2001-20080128-00288.html">"OMPM2001 Result"</a>. SPEC. 2008-01-28.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OMPM2001+Result&rft.pub=SPEC&rft.date=2008-01-28&rft_id=http%3A%2F%2Fwww.spec.org%2Fomp%2Fresults%2Fres2008q1%2Fomp2001-20080128-00288.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> <li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20210225023254/http://www.spec.org/omp/results/res2003q2/omp2001-20030401-00079.html">"OMPM2001 Result"</a>. SPEC. 2003-04-01. Archived from <a rel="nofollow" class="external text" href="http://www.spec.org/omp/results/res2003q2/omp2001-20030401-00079.html">the original</a> on 2021-02-25<span class="reference-accessdate">. Retrieved <span class="nowrap">2008-03-28</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OMPM2001+Result&rft.pub=SPEC&rft.date=2003-04-01&rft_id=http%3A%2F%2Fwww.spec.org%2Fomp%2Fresults%2Fres2003q2%2Fomp2001-20030401-00079.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AOpenMP" class="Z3988"></span></span> </li> </ol></div> <div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=17" title="Edit section: Further reading"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239549316">.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}</style><div class="refbegin" style=""> <ul><li>Quinn Michael J, <cite>Parallel Programming in C with MPI and OpenMP</cite> McGraw-Hill Inc. 2004. <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0-07-058201-7" title="Special:BookSources/0-07-058201-7">0-07-058201-7</a></li> <li>R. Chandra, R. Menon, L. Dagum, D. Kohr, D. Maydan, J. McDonald, <cite>Parallel Programming in OpenMP.</cite> Morgan Kaufmann, 2000. <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/1-55860-671-8" title="Special:BookSources/1-55860-671-8">1-55860-671-8</a></li> <li>R. Eigenmann (Editor), M. Voss (Editor), <cite>OpenMP Shared Memory Parallel Programming: International Workshop on OpenMP Applications and Tools, WOMPAT 2001, West Lafayette, IN, USA, July 30–31, 2001.</cite> (Lecture Notes in Computer Science). Springer 2001. <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/3-540-42346-X" title="Special:BookSources/3-540-42346-X">3-540-42346-X</a></li> <li>B. Chapman, G. Jost, R. van der Pas, D.J. Kuck (foreword), <cite>Using OpenMP: Portable Shared Memory Parallel Programming.</cite> The MIT Press (October 31, 2007). <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0-262-53302-2" title="Special:BookSources/0-262-53302-2">0-262-53302-2</a></li> <li>Tom Deakin and Timothy G. Mattson: <i>Programming Your GPU with OpenMP: Performance Portability for GPUs</i>, The MIT Press, ISBN 978-0-262547536 (Nov, 7,2023).</li> <li>Parallel Processing via MPI & OpenMP, M. Firuziaan, O. Nommensen. Linux Enterprise, 10/2002</li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080705180752/http://msdn.microsoft.com/msdnmag/issues/05/10/OpenMP/default.aspx">MSDN Magazine article on OpenMP</a></li> <li><a rel="nofollow" class="external text" href="http://openmp.org/mp-documents/omp-hands-on-SC08.pdf">SC08 OpenMP Tutorial</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130319133253/http://openmp.org/mp-documents/omp-hands-on-SC08.pdf">Archived</a> 2013-03-19 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a> (PDF) – Hands-On Introduction to OpenMP, Mattson and Meadows, from SC08 (Austin)</li> <li><a rel="nofollow" class="external text" href="https://www.openmp.org/specifications/">OpenMP Specifications</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210302235321/https://www.openmp.org/specifications/">Archived</a> 2021-03-02 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a></li> <li><a rel="nofollow" class="external text" href="http://www.openmp.org/wp-content/uploads/F95_OpenMPv1_v2.pdf">Miguel Hermanns:<i>Parallel Programming in Fortran 95 using OpenMP</i> (19th, April, 2002)</a> (PDF) (OpenMP ver.1 and ver.2)</li></ul> </div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=OpenMP&action=edit&section=18" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://www.openmp.org/">Official website</a></span></span></li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Parallel_computing346" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Parallel_computing" title="Template:Parallel computing"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Parallel_computing" title="Template talk:Parallel computing"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Parallel_computing" title="Special:EditPage/Template:Parallel computing"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Parallel_computing346" style="font-size:114%;margin:0 4em"><a href="/wiki/Parallel_computing" title="Parallel computing">Parallel computing</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">General</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Distributed_computing" title="Distributed computing">Distributed computing</a></li> <li><a href="/wiki/Parallel_computing" title="Parallel computing">Parallel computing</a></li> <li><a href="/wiki/Massively_parallel" title="Massively parallel">Massively parallel</a></li> <li><a href="/wiki/Cloud_computing" title="Cloud computing">Cloud computing</a></li> <li><a href="/wiki/High-performance_computing" title="High-performance computing">High-performance computing</a></li> <li><a href="/wiki/Multiprocessing" title="Multiprocessing">Multiprocessing</a></li> <li><a href="/wiki/Manycore_processor" title="Manycore processor">Manycore processor</a></li> <li><a href="/wiki/General-purpose_computing_on_graphics_processing_units" title="General-purpose computing on graphics processing units">GPGPU</a></li> <li><a href="/wiki/Computer_network" title="Computer network">Computer network</a></li> <li><a href="/wiki/Systolic_array" title="Systolic array">Systolic array</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Levels</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Bit-level_parallelism" title="Bit-level parallelism">Bit</a></li> <li><a href="/wiki/Instruction-level_parallelism" title="Instruction-level parallelism">Instruction</a></li> <li><a href="/wiki/Task_parallelism" title="Task parallelism">Thread</a></li> <li><a href="/wiki/Task_parallelism" title="Task parallelism">Task</a></li> <li><a href="/wiki/Data_parallelism" title="Data parallelism">Data</a></li> <li><a href="/wiki/Memory-level_parallelism" title="Memory-level parallelism">Memory</a></li> <li><a href="/wiki/Loop-level_parallelism" title="Loop-level parallelism">Loop</a></li> <li><a href="/wiki/Pipeline_(computing)" title="Pipeline (computing)">Pipeline</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Multithreading_(computer_architecture)" title="Multithreading (computer architecture)">Multithreading</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Temporal_multithreading" title="Temporal multithreading">Temporal</a></li> <li><a href="/wiki/Simultaneous_multithreading" title="Simultaneous multithreading">Simultaneous</a> (SMT)</li> <li><a href="/wiki/Simultaneous_and_heterogeneous_multithreading" title="Simultaneous and heterogeneous multithreading">Simultaneous and heterogenous</a></li> <li><a href="/wiki/Speculative_multithreading" title="Speculative multithreading">Speculative</a> (SpMT)</li> <li><a href="/wiki/Preemption_(computing)" title="Preemption (computing)">Preemptive</a></li> <li><a href="/wiki/Computer_multitasking#Cooperative_multitasking" title="Computer multitasking">Cooperative</a></li> <li><a href="/wiki/Bulldozer_(microarchitecture)#Bulldozer_core" title="Bulldozer (microarchitecture)">Clustered multi-thread</a> (CMT)</li> <li><a href="/wiki/Hardware_scout" title="Hardware scout">Hardware scout</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Theory</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Parallel_RAM" title="Parallel RAM">PRAM model</a></li> <li><a href="/wiki/Parallel_external_memory" title="Parallel external memory">PEM model</a></li> <li><a href="/wiki/Analysis_of_parallel_algorithms" title="Analysis of parallel algorithms">Analysis of parallel algorithms</a></li> <li><a href="/wiki/Amdahl%27s_law" title="Amdahl's law">Amdahl's law</a></li> <li><a href="/wiki/Gustafson%27s_law" title="Gustafson's law">Gustafson's law</a></li> <li><a href="/wiki/Cost_efficiency" title="Cost efficiency">Cost efficiency</a></li> <li><a href="/wiki/Karp%E2%80%93Flatt_metric" title="Karp–Flatt metric">Karp–Flatt metric</a></li> <li><a href="/wiki/Parallel_slowdown" title="Parallel slowdown">Slowdown</a></li> <li><a href="/wiki/Speedup" title="Speedup">Speedup</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Elements</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Process_(computing)" title="Process (computing)">Process</a></li> <li><a href="/wiki/Thread_(computing)" title="Thread (computing)">Thread</a></li> <li><a href="/wiki/Fiber_(computer_science)" title="Fiber (computer science)">Fiber</a></li> <li><a href="/wiki/Instruction_window" title="Instruction window">Instruction window</a></li> <li><a href="/wiki/Array_(data_structure)" title="Array (data structure)">Array</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Coordination</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Multiprocessing" title="Multiprocessing">Multiprocessing</a></li> <li><a href="/wiki/Memory_coherence" title="Memory coherence">Memory coherence</a></li> <li><a href="/wiki/Cache_coherence" title="Cache coherence">Cache coherence</a></li> <li><a href="/wiki/Cache_invalidation" title="Cache invalidation">Cache invalidation</a></li> <li><a href="/wiki/Barrier_(computer_science)" title="Barrier (computer science)">Barrier</a></li> <li><a href="/wiki/Synchronization_(computer_science)" title="Synchronization (computer science)">Synchronization</a></li> <li><a href="/wiki/Application_checkpointing" title="Application checkpointing">Application checkpointing</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Computer_programming" title="Computer programming">Programming</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Stream_processing" title="Stream processing">Stream processing</a></li> <li><a href="/wiki/Dataflow_programming" title="Dataflow programming">Dataflow programming</a></li> <li><a href="/wiki/Parallel_programming_model" title="Parallel programming model">Models</a> <ul><li><a href="/wiki/Implicit_parallelism" title="Implicit parallelism">Implicit parallelism</a></li> <li><a href="/wiki/Explicit_parallelism" title="Explicit parallelism">Explicit parallelism</a></li> <li><a href="/wiki/Concurrency_(computer_science)" title="Concurrency (computer science)">Concurrency</a></li></ul></li> <li><a href="/wiki/Non-blocking_algorithm" title="Non-blocking algorithm">Non-blocking algorithm</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Computer_hardware" title="Computer hardware">Hardware</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Flynn%27s_taxonomy" title="Flynn's taxonomy">Flynn's taxonomy</a> <ul><li><a href="/wiki/Single_instruction,_single_data" title="Single instruction, single data">SISD</a></li> <li><a href="/wiki/Single_instruction,_multiple_data" title="Single instruction, multiple data">SIMD</a> <ul><li><a href="/wiki/Single_instruction,_multiple_threads" title="Single instruction, multiple threads">Array processing</a> (SIMT)</li> <li><a href="/wiki/Flynn%27s_taxonomy#Pipelined_processor" title="Flynn's taxonomy">Pipelined processing</a></li> <li><a href="/wiki/Flynn%27s_taxonomy#Associative_processor" title="Flynn's taxonomy">Associative processing</a></li></ul></li> <li><a href="/wiki/Multiple_instruction,_single_data" title="Multiple instruction, single data">MISD</a></li> <li><a href="/wiki/Multiple_instruction,_multiple_data" title="Multiple instruction, multiple data">MIMD</a></li></ul></li> <li><a href="/wiki/Dataflow_architecture" title="Dataflow architecture">Dataflow architecture</a></li> <li><a href="/wiki/Instruction_pipelining" title="Instruction pipelining">Pipelined processor</a></li> <li><a href="/wiki/Superscalar_processor" title="Superscalar processor">Superscalar processor</a></li> <li><a href="/wiki/Vector_processor" title="Vector processor">Vector processor</a></li> <li><a href="/wiki/Multiprocessing" title="Multiprocessing">Multiprocessor</a> <ul><li><a href="/wiki/Symmetric_multiprocessing" title="Symmetric multiprocessing">symmetric</a></li> <li><a href="/wiki/Asymmetric_multiprocessing" title="Asymmetric multiprocessing">asymmetric</a></li></ul></li> <li><a href="/wiki/Semiconductor_memory" title="Semiconductor memory">Memory</a> <ul><li><a href="/wiki/Shared_memory" title="Shared memory">shared</a></li> <li><a href="/wiki/Distributed_memory" title="Distributed memory">distributed</a></li> <li><a href="/wiki/Distributed_shared_memory" title="Distributed shared memory">distributed shared</a></li> <li><a href="/wiki/Uniform_memory_access" title="Uniform memory access">UMA</a></li> <li><a href="/wiki/Non-uniform_memory_access" title="Non-uniform memory access">NUMA</a></li> <li><a href="/wiki/Cache-only_memory_architecture" title="Cache-only memory architecture">COMA</a></li></ul></li> <li><a href="/wiki/Massively_parallel" title="Massively parallel">Massively parallel</a> computer</li> <li><a href="/wiki/Computer_cluster" title="Computer cluster">Computer cluster</a> <ul><li><a href="/wiki/Beowulf_cluster" title="Beowulf cluster">Beowulf cluster</a></li></ul></li> <li><a href="/wiki/Grid_computing" title="Grid computing">Grid computer</a></li> <li><a href="/wiki/Hardware_acceleration" title="Hardware acceleration">Hardware acceleration</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/API" title="API">APIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Ateji_PX" title="Ateji PX">Ateji PX</a></li> <li><a href="/wiki/Boost_(C%2B%2B_libraries)" title="Boost (C++ libraries)">Boost</a></li> <li><a href="/wiki/Chapel_(programming_language)" title="Chapel (programming language)">Chapel</a></li> <li><a href="/wiki/HPX" title="HPX">HPX</a></li> <li><a href="/wiki/Charm%2B%2B" title="Charm++">Charm++</a></li> <li><a href="/wiki/Cilk" title="Cilk">Cilk</a></li> <li><a href="/wiki/Coarray_Fortran" title="Coarray Fortran">Coarray Fortran</a></li> <li><a href="/wiki/CUDA" title="CUDA">CUDA</a></li> <li><a href="/wiki/Dryad_(programming)" title="Dryad (programming)">Dryad</a></li> <li><a href="/wiki/C%2B%2B_AMP" title="C++ AMP">C++ AMP</a></li> <li><a href="/wiki/Global_Arrays" title="Global Arrays">Global Arrays</a></li> <li><a href="/wiki/GPUOpen" title="GPUOpen">GPUOpen</a></li> <li><a href="/wiki/Message_Passing_Interface" title="Message Passing Interface">MPI</a></li> <li><a class="mw-selflink selflink">OpenMP</a></li> <li><a href="/wiki/OpenCL" title="OpenCL">OpenCL</a></li> <li><a href="/wiki/OpenHMPP" title="OpenHMPP">OpenHMPP</a></li> <li><a href="/wiki/OpenACC" title="OpenACC">OpenACC</a></li> <li><a href="/wiki/Parallel_Extensions" title="Parallel Extensions">Parallel Extensions</a></li> <li><a href="/wiki/Parallel_Virtual_Machine" title="Parallel Virtual Machine">PVM</a></li> <li><a href="/wiki/Pthreads" title="Pthreads">pthreads</a></li> <li><a href="/wiki/RaftLib" title="RaftLib">RaftLib</a></li> <li><a href="/wiki/ROCm" title="ROCm">ROCm</a></li> <li><a href="/wiki/Unified_Parallel_C" title="Unified Parallel C">UPC</a></li> <li><a href="/wiki/Threading_Building_Blocks" title="Threading Building Blocks">TBB</a></li> <li><a href="/wiki/ZPL_(programming_language)" class="mw-redirect" title="ZPL (programming language)">ZPL</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Problems</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Automatic_parallelization" title="Automatic parallelization">Automatic parallelization</a></li> <li><a href="/wiki/Deadlock_(computer_science)" title="Deadlock (computer science)">Deadlock</a></li> <li><a href="/wiki/Deterministic_algorithm" title="Deterministic algorithm">Deterministic algorithm</a></li> <li><a href="/wiki/Embarrassingly_parallel" title="Embarrassingly parallel">Embarrassingly parallel</a></li> <li><a href="/wiki/Parallel_slowdown" title="Parallel slowdown">Parallel slowdown</a></li> <li><a href="/wiki/Race_condition" title="Race condition">Race condition</a></li> <li><a href="/wiki/Software_lockout" title="Software lockout">Software lockout</a></li> <li><a href="/wiki/Scalability" title="Scalability">Scalability</a></li> <li><a href="/wiki/Starvation_(computer_science)" title="Starvation (computer science)">Starvation</a></li></ul> </div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div> <ul><li><span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <a href="/wiki/Category:Parallel_computing" title="Category:Parallel computing">Category: Parallel computing</a></li></ul> </div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐api‐int.codfw.main‐d476997df‐26cmd Cached time: 20250224215808 Cache expiry: 352921 Reduced expiry: true Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.728 seconds Real time usage: 0.894 seconds Preprocessor visited node count: 4882/1000000 Post‐expand include size: 106637/2097152 bytes Template argument size: 5002/2097152 bytes Highest expansion depth: 26/100 Expensive parser function count: 16/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 162541/5000000 bytes Lua time usage: 0.410/10.000 seconds Lua memory usage: 7383486/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 764.548 1 -total 36.33% 277.771 1 Template:Reflist 24.23% 185.223 27 Template:Cite_web 13.83% 105.759 2 Template:Infobox 12.60% 96.309 1 Template:Parallel_computing 12.31% 94.113 1 Template:Navbox 10.50% 80.249 1 Template:Short_description 10.10% 77.220 1 Template:Infobox_software 6.22% 47.573 2 Template:Pagetype 4.87% 37.214 1 Template:Citation_needed --> <!-- Saved in parser cache with key enwiki:pcache:381842:|#|:idhash:canonical and timestamp 20250224215808 and revision id 1276703435. Rendering was triggered because: api-parse --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=0" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=OpenMP&oldid=1276703435">https://en.wikipedia.org/w/index.php?title=OpenMP&oldid=1276703435</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Application_programming_interfaces" title="Category:Application programming interfaces">Application programming interfaces</a></li><li><a href="/wiki/Category:C_programming_language_family" title="Category:C programming language family">C programming language family</a></li><li><a href="/wiki/Category:Fortran" title="Category:Fortran">Fortran</a></li><li><a href="/wiki/Category:Parallel_computing" title="Category:Parallel computing">Parallel computing</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:CS1_maint:_multiple_names:_authors_list" title="Category:CS1 maint: multiple names: authors list">CS1 maint: multiple names: authors list</a></li><li><a href="/wiki/Category:Articles_containing_potentially_dated_statements_from_2016" title="Category:Articles containing potentially dated statements from 2016">Articles containing potentially dated statements from 2016</a></li><li><a href="/wiki/Category:All_articles_containing_potentially_dated_statements" title="Category:All articles containing potentially dated statements">All articles containing potentially dated statements</a></li><li><a href="/wiki/Category:Webarchive_template_wayback_links" title="Category:Webarchive template wayback links">Webarchive template wayback links</a></li><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_matches_Wikidata" title="Category:Short description matches Wikidata">Short description matches Wikidata</a></li><li><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_September_2022" title="Category:Articles with unsourced statements from September 2022">Articles with unsourced statements from September 2022</a></li><li><a href="/wiki/Category:All_articles_with_incomplete_citations" title="Category:All articles with incomplete citations">All articles with incomplete citations</a></li><li><a href="/wiki/Category:Articles_with_incomplete_citations_from_March_2015" title="Category:Articles with incomplete citations from March 2015">Articles with incomplete citations from March 2015</a></li><li><a href="/wiki/Category:Articles_needing_additional_references_from_February_2017" title="Category:Articles needing additional references from February 2017">Articles needing additional references from February 2017</a></li><li><a href="/wiki/Category:All_articles_needing_additional_references" title="Category:All articles needing additional references">All articles needing additional references</a></li><li><a href="/wiki/Category:Articles_containing_potentially_dated_statements_from_2017" title="Category:Articles containing potentially dated statements from 2017">Articles containing potentially dated statements from 2017</a></li><li><a href="/wiki/Category:Articles_with_example_Fortran_code" title="Category:Articles with example Fortran code">Articles with example Fortran code</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 20 February 2025, at 08:47<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=OpenMP&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/static/images/footer/wikimedia-button.svg" width="84" height="29"><img src="/static/images/footer/wikimedia.svg" width="25" height="25" alt="Wikimedia Foundation" lang="en" loading="lazy"></picture></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/w/resources/assets/poweredby_mediawiki.svg" width="88" height="31"><img src="/w/resources/assets/mediawiki_compact.svg" alt="Powered by MediaWiki" width="25" height="25" loading="lazy"></picture></a></li> </ul> </footer> </div> </div> </div> <div class="vector-header-container vector-sticky-header-container"> <div id="vector-sticky-header" class="vector-sticky-header"> <div class="vector-sticky-header-start"> <div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true"> <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" tabindex="-1" data-event-name="ui.vector-sticky-search-form.icon"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </button> </div> <div role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box"> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail"> <form action="/w/index.php" id="vector-sticky-search-form" class="cdx-search-input cdx-search-input--has-end-button"> <div class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia"> <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <div class="vector-sticky-header-context-bar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc vector-button-flush-left" > <input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-sticky-header-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div class="vector-sticky-header-context-bar-primary" aria-hidden="true" ><span class="mw-page-title-main">OpenMP</span></div> </div> </div> <div class="vector-sticky-header-end" aria-hidden="true"> <div class="vector-sticky-header-icons"> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-talk-sticky-header" tabindex="-1" data-event-name="talk-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-subject-sticky-header" tabindex="-1" data-event-name="subject-sticky-header"><span class="vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-history-sticky-header" tabindex="-1" data-event-name="history-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-history mw-ui-icon-wikimedia-wikimedia-history"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only mw-watchlink" id="ca-watchstar-sticky-header" tabindex="-1" data-event-name="watch-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-star mw-ui-icon-wikimedia-wikimedia-star"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-edit-sticky-header" tabindex="-1" data-event-name="wikitext-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-wikiText mw-ui-icon-wikimedia-wikimedia-wikiText"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-ve-edit-sticky-header" tabindex="-1" data-event-name="ve-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-edit mw-ui-icon-wikimedia-wikimedia-edit"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-viewsource-sticky-header" tabindex="-1" data-event-name="ve-edit-protected-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-editLock mw-ui-icon-wikimedia-wikimedia-editLock"></span> <span></span> </a> </div> <div class="vector-sticky-header-buttons"> <button class="cdx-button cdx-button--weight-quiet mw-interlanguage-selector" id="p-lang-btn-sticky-header" tabindex="-1" data-event-name="ui.dropdown-p-lang-btn-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>21 languages</span> </button> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive" id="ca-addsection-sticky-header" tabindex="-1" data-event-name="addsection-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbleAdd-progressive mw-ui-icon-wikimedia-speechBubbleAdd-progressive"></span> <span>Add topic</span> </a> </div> <div class="vector-sticky-header-icon-end"> <div class="vector-user-links"> </div> </div> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-55f85cbc4-j7fxk","wgBackendResponseTime":153,"wgPageParseReport":{"limitreport":{"cputime":"0.728","walltime":"0.894","ppvisitednodes":{"value":4882,"limit":1000000},"postexpandincludesize":{"value":106637,"limit":2097152},"templateargumentsize":{"value":5002,"limit":2097152},"expansiondepth":{"value":26,"limit":100},"expensivefunctioncount":{"value":16,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":162541,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 764.548 1 -total"," 36.33% 277.771 1 Template:Reflist"," 24.23% 185.223 27 Template:Cite_web"," 13.83% 105.759 2 Template:Infobox"," 12.60% 96.309 1 Template:Parallel_computing"," 12.31% 94.113 1 Template:Navbox"," 10.50% 80.249 1 Template:Short_description"," 10.10% 77.220 1 Template:Infobox_software"," 6.22% 47.573 2 Template:Pagetype"," 4.87% 37.214 1 Template:Citation_needed"]},"scribunto":{"limitreport-timeusage":{"value":"0.410","limit":"10.000"},"limitreport-memusage":{"value":7383486,"limit":52428800}},"cachereport":{"origin":"mw-api-int.codfw.main-d476997df-26cmd","timestamp":"20250224215808","ttl":352921,"transientcontent":true}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"OpenMP","url":"https:\/\/en.wikipedia.org\/wiki\/OpenMP","sameAs":"http:\/\/www.wikidata.org\/entity\/Q496579","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q496579","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2003-11-28T13:04:20Z","dateModified":"2025-02-20T08:47:20Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/e\/eb\/OpenMP_logo.png","headline":"open standard for parallelizing"}</script> </body> </html>