<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Terry,<div class=""><br class=""></div><div class="">Thanks for passing along Jim's advice. I agree with Jim’s reasons why shared libraries are often the best choice. However, for creating statically-linked executables, they are not a choice. <br class=""><div apple-content-edited="true" class="">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; border-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-stroke-width: 0px;"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; border-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-stroke-width: 0px;"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div style="font-size: 12px;" class=""><font face="Courier" class="">--<br class="">John Mellor-Crummey         Professor<br class="">Dept of Computer Science    Rice University<br class="">email: <a href="mailto:johnmc@rice.edu" class="">johnmc@rice.edu</a>      phone: 713-348-5179</font><br class=""></div></div></span></div></span>
</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Jan 22, 2016, at 1:51 PM, Wilmarth, Terry L <<a href="mailto:terry.l.wilmarth@intel.com" class="">terry.l.wilmarth@intel.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="WordSection1" style="page: WordSection1; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class=""><span style="font-size: 10pt; font-family: Gisha, sans-serif;" class="">I’m going to just share Jim Cownie’s standard disclaimer here ;-)   Just as a reminder to proceed with caution.<o:p class=""></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class="">“Compiling a static OpenMP library is, in general, a very bad idea.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class="">It can easily lead to both awful performance (due to over-subscription) and incorrect program execution when you use any libraries which also use OpenMP.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class="">Imagine that your static instance of the OpenMP runtime starts one thread/core. Now you call into some other library which has its own statically linked OpenMP runtime. That runtime knows nothing about the threads you have already created, so it creates a whole new set. Now you have double over-subscription. Ouch.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class="">Or, suppose you execute an omp atomic statement in a case where it is implemented using a static lock inside the runtime. If you have two runtimes, you have two different locks, and its possible for atomicity not to be enforced between code that uses the two different OpenMP runtimes.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class="">For correctness and performance you need to ensure that there's only one OpenMP runtime in a process. As soon as you create a static OpenMP runtime you make it very easy for that not to be the case.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class="">So, I'm sure it's possible (heck, "It's only software"), but it's not made easy because doing it is a really bad idea.<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 8pt; font-family: 'Lucida Console';" class="">-- Jim”<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-size: 10pt; font-family: Gisha, sans-serif; color: rgb(77, 116, 121);" class=""> </span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-size: 10pt; font-family: Gisha, sans-serif; color: rgb(77, 116, 121);" class=""> </span></div><div class=""><div style="border-style: solid none none; border-top-color: rgb(225, 225, 225); border-top-width: 1pt; padding: 3pt 0in 0in;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><a name="_____replyseparator" class=""></a><b class=""><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class="">From:</span></b><span style="font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span class="Apple-converted-space"> </span>Openmp-dev [<a href="mailto:openmp-dev-bounces@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">mailto:openmp-dev-bounces@lists.llvm.org</a>]<span class="Apple-converted-space"> </span><b class="">On Behalf Of<span class="Apple-converted-space"> </span></b>John Mellor-Crummey via Openmp-dev<br class=""><b class="">Sent:</b><span class="Apple-converted-space"> </span>Friday, January 22, 2016 1:34 PM<br class=""><b class="">To:</b><span class="Apple-converted-space"> </span><a href="mailto:openmp-dev@lists.llvm.org" style="color: purple; text-decoration: underline;" class="">openmp-dev@lists.llvm.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space"> </span>[Openmp-dev] Building a static LLVM OpenMP library?<o:p class=""></o:p></span></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><o:p class=""> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class="">I’m not a cmake expert, but I didn’t see any support anywhere in the LLVM OpenMP directories for creating a static library to be used by statically-linked executables. I want this for use on Cray platforms, where statically-linked binaries are preferred.<o:p class=""></o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><o:p class=""> </o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class="">Are there cmake build options that can be used with the current build system to create a statically-linked library? If not, is there a cmake expert on this list willing to add such support so that static libraries are either created by default or can be added by setting a cmake variable?<o:p class=""></o:p></div><div class=""><div class=""><div class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><span style="font-size: 9pt; font-family: Courier;" class="">--<br class="">John Mellor-Crummey         Professor<br class="">Dept of Computer Science    Rice University<br class="">email:<span class="Apple-converted-space"> </span><a href="mailto:johnmc@rice.edu" style="color: purple; text-decoration: underline;" class="">johnmc@rice.edu</a><span class="Apple-converted-space"> </span>     phone: 713-348-5179</span><span style="font-size: 9pt; font-family: Helvetica, sans-serif;" class=""><o:p class=""></o:p></span></div></div></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;" class=""><o:p class=""> </o:p></div></div></div><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">!DSPAM:8504,56a28853142061120617705!</span></div></blockquote></div><br class=""></div></body></html>