<div dir="ltr"><div>OK. Problem solved!</div><div>After looking at the linker line for my code, I noticed that it links against lapack and blas as well (needed for some other packages), but I forgot to remove these for the DFTB+ API compilation. <br></div><div>After removing the links to lapack and blas, and leaving only the mkl libraries, everything works as expected.</div><div><br></div><div>Thanks for the help!</div><div><br></div><div>David<br></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <b class="gmail_sendername" dir="auto">David Furman</b> <span dir="auto"><<a href="mailto:sirok4@gmail.com">sirok4@gmail.com</a>></span><br>Date: Wed, Nov 27, 2019 at 9:27 PM<br>Subject: Re: [DFTB-Plus-User] Parallel OpenMP with the DFTB+ API<br>To: Bálint Aradi <<a href="mailto:aradi@uni-bremen.de">aradi@uni-bremen.de</a>><br></div><br><br><div dir="ltr"><div>Hi Bálint,</div><div>Thanks for reaching out!</div><div><br></div><div>Following the manual, I compiled DFTB+ API via `make api` and linked to the <i>mkl_intel_lp</i>, <i>mkl_intel_thread</i> and <i>mkl_core</i> libraries. (I also tried linking to libiomp5 which did not help).</div><div><br></div><div>When I execute my code which is interfaced to the DFTB+ API, I can see (in the DFTB+ output file) that the correct number of threads is recognized (OpenMP threads:              6),</div><div> but there is no effect whatsoever, regardless of the number of threads I use. <br></div><div>The same dftb_in.hsd file, when is run directly with DFTB+ executable (which was compiled alongside the API library), does benefit from the increased number of threads.</div><div><br></div><div>Doing `ldd mycode` results in the following:</div><div>       linux-vdso.so.1 =>  (0x00007ffff7290000)<br>  libmkl_intel_lp64.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64/libmkl_intel_lp64.so (0x00007f6f47758000)<br> libmkl_intel_thread.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64/libmkl_intel_thread.so (0x00007f6f451eb000)<br>     libmkl_core.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64/libmkl_core.so (0x00007f6f40eba000)<br>     libiomp5.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/compiler/lib/intel64/libiomp5.so (0x00007f6f40ac4000)<br>      libstdc++.so.6 => /usr/local/chemistry/gcc/7.3.0/lib/gcc/x86_64-pc-linux-gnu/7.3.0/libstdc++.so.6 (0x00007f6f4072c000)<br>     libm.so.6 => /lib64/libm.so.6 (0x0000003be3800000)<br> libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003be3c00000)<br>     libc.so.6 => /lib64/libc.so.6 (0x0000003be3400000)<br> libgcc_s.so.1 => /usr/local/chemistry/gcc/7.3.0/lib/gcc/x86_64-pc-linux-gnu/lib64/libgcc_s.so.1 (0x00007f6f404fe000)<br>       libdl.so.2 => /lib64/libdl.so.2 (0x0000003be4000000)<br>       /lib64/ld-linux-x86-64.so.2 (0x000055d981518000)</div><div><br></div><div>While the same command for the standalone DFTB+ (compiled alongside the DFTB+ API libray) results in:</div><div>    linux-vdso.so.1 =>  (0x00007ffd9f784000)<br>  libmkl_intel_lp64.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64/libmkl_intel_lp64.so (0x00007f4f83897000)<br> libmkl_intel_thread.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64/libmkl_intel_thread.so (0x00007f4f8132a000)<br>     libmkl_core.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/mkl/lib/intel64/libmkl_core.so (0x00007f4f7cff9000)<br>     libiomp5.so => /usr/local/shared/intel/compilers_and_libraries_2019.5.281/linux/compiler/lib/intel64/libiomp5.so (0x00007f4f7cc03000)<br>      libm.so.6 => /lib64/libm.so.6 (0x0000003be3800000)<br> libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003be3c00000)<br>     libc.so.6 => /lib64/libc.so.6 (0x0000003be3400000)<br> libgcc_s.so.1 => /usr/local/chemistry/gcc/7.3.0/lib/gcc/x86_64-pc-linux-gnu/lib64/libgcc_s.so.1 (0x00007f4f7c9d5000)<br>       libdl.so.2 => /lib64/libdl.so.2 (0x0000003be4000000)<br>       /lib64/ld-linux-x86-64.so.2 (0x000055be98040000)</div><div><br></div><div>The same behavior is reproducible with different systems (from small to large systems).<br></div><div>So, at the moment, I'm not sure what can cause the difference in "performance"... it's as if the mkl threading libraries have absolutely no effect...</div><div><br></div><div><br> </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Nov 26, 2019 at 3:37 PM Bálint Aradi <<a href="mailto:aradi@uni-bremen.de" target="_blank">aradi@uni-bremen.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear David,<br>
<br>
> Simply doing 'export OMP_NUM_THREADS=6' and running my code is just <br>
> using 1 thread. I did manage to run DFTB+ directly on 6 threads with<br>
> the above command though...<br>
<br>
Actually, that should work exactly this way. Are you sure, you linked<br>
the right (threaded) lapack/blas libraries to your application, when you<br>
linked it with the library?<br>
<br>
Note: When you compile DFTB+ with API support (-DWITH_API) and install<br>
it (via `make install`), it will create<br>
_install/lib/pkgconfig/dftbplus.pc. This file contains the flags which<br>
were used to link the DFTB+ standalone. If that standalone shows proper<br>
threading behaviour, an application using the library (which was<br>
produced during the same build) should show it as well, provided you use<br>
the same flags.<br>
<br>
Best regards,<br>
<br>
Bálint<br>
<br>
-- <br>
Dr. Bálint Aradi<br>
Bremen Center for Computational Materials Science, University of Bremen<br>
<a href="http://www.bccms.uni-bremen.de/cms/people/b-aradi/" rel="noreferrer" target="_blank">http://www.bccms.uni-bremen.de/cms/people/b-aradi/</a><br>
<br>
<br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><pre><span style="font-family:courier new,courier">David Furman, PhD, MRSC<b><br></b>Herchel Smith Research Fellow
Department of Chemistry<br>University of Cambridge
Lensfield Road<br>CB2 1EW</span></pre></div></div></div></div>
</div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><pre><span style="font-family:courier new,courier">David Furman, PhD, MRSC<b><br></b>Herchel Smith Research Fellow
Department of Chemistry<br>University of Cambridge
Lensfield Road<br>CB2 1EW</span></pre></div></div></div></div></div></div>