<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Hi Fenglai, in Intel® oneAPI Math Kernel Library</title>
    <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959108#M15722</link>
    <description>&lt;P&gt;Hi Fenglai,&lt;/P&gt;

&lt;P&gt;The&amp;nbsp;problem is in&amp;nbsp;the call&lt;/P&gt;

&lt;P&gt;void openOMP()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; //int np = omp_get_max_threads();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; omp_set_num_threads(2);&lt;BR /&gt;
	}&lt;BR /&gt;
	Once you called turnoff OpenMP&amp;nbsp;one time, the system&amp;nbsp;has only 1 OpenMP thread.&amp;nbsp;&amp;nbsp;Then you call omp_get_max_threads(),&amp;nbsp; it will&amp;nbsp;return 1 always. so you saw such behavious.&amp;nbsp; you can change as above, then the thread will work as you wish.&lt;/P&gt;

&lt;P&gt;Not sure how&amp;nbsp;you do in MKL.&amp;nbsp; but MKL should allow you&amp;nbsp;to make MKL dynamically switch on/off.&amp;nbsp; For example, the example code in MKL userguide.&lt;/P&gt;

&lt;P&gt;Best Regards,&lt;BR /&gt;
	Ying&lt;/P&gt;

&lt;P&gt;P.S Copy from MKL userguide:&lt;/P&gt;

&lt;H1 class="topictitle1"&gt;Changing the Number of Threads at Run Time&lt;/H1&gt;

&lt;DIV id="GUID-8F64F2E5-630B-4B6B-ACC0-5ADB1DCC56EA"&gt;
	&lt;P id="GUID-7CCEC684-47B7-4A2A-8929-F4646DB18CDD"&gt;You cannot change the number of threads during run time using environment variables. However, you can call OpenMP API functions from your program to change the number of threads during run time. The following sample code shows how to change the number of threads during run time using the &lt;SAMP class="codeph" id="GUID-0A113DA3-2044-4A8C-8155-8316618880C6"&gt;&lt;FONT face="Courier New"&gt;omp_set_num_threads()&lt;/FONT&gt;&lt;/SAMP&gt; routine. See also &lt;A href="http://software.intel.com/GUID-DEEF0363-2B34-4BAB-87FA-A75DBE842040.htm"&gt;&lt;SPAN id="GUID-071DED76-8126-4CEA-A151-099258F6F7BB"&gt;&lt;U&gt;&lt;FONT color="#000080"&gt;Techniques to Set the Number of Threads&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;

	&lt;P id="GUID-09E92E73-7D04-4715-8396-6FC53E387B95"&gt;The following example shows both C and Fortran code examples. To run this example in the C language, use the &lt;SPAN class="filepath" id="GUID-C6326546-D5DF-4EF6-8E5A-B3970392666C"&gt;omp.h&lt;/SPAN&gt; header file from the Intel® compiler package. If you do not have the Intel compiler but wish to explore the functionality in the example, use Fortran API for &lt;SAMP class="codeph" id="GUID-75E1D0DA-4E73-466A-9EE4-2CCD7D867944"&gt;&lt;FONT face="Courier New"&gt;omp_set_num_threads()&lt;/FONT&gt;&lt;/SAMP&gt; rather than the C version. For example, &lt;SAMP class="codeph" id="GUID-65C9DF1D-3F1D-4E6F-88D9-1DE4CC273DC1"&gt;&lt;FONT face="Courier New"&gt;omp_set_num_threads_( &amp;amp;i_one );&lt;/FONT&gt;&lt;/SAMP&gt;&lt;/P&gt;

	&lt;PRE&gt;
// ******* C language *******
#include "omp.h"
#include "mkl.h"
#include &amp;lt;stdio.h&amp;gt;
#define SIZE 1000
int main(int args, char *argv[]){
double *a, *b, *c;
a = (double*)malloc(sizeof(double)*SIZE*SIZE);
b = (double*)malloc(sizeof(double)*SIZE*SIZE);
c = (double*)malloc(sizeof(double)*SIZE*SIZE);
double alpha=1, beta=1;
int m=SIZE, n=SIZE, k=SIZE, lda=SIZE, ldb=SIZE, ldc=SIZE, i=0, j=0;
char transa='n', transb='n';
for( i=0; i&amp;lt;SIZE; i++){
for( j=0; j&amp;lt;SIZE; j++){
a[i*SIZE+j]= (double)(i+j);
b[i*SIZE+j]= (double)(i*j);
c[i*SIZE+j]= (double)0;
}
}
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
printf("row\ta\tc\n");
for ( i=0;i&amp;lt;10;i++){
printf("%d:\t%f\t%f\n", i, a[i*SIZE], c[i*SIZE]);
}
omp_set_num_threads(1);
for( i=0; i&amp;lt;SIZE; i++){
for( j=0; j&amp;lt;SIZE; j++){
a[i*SIZE+j]= (double)(i+j);
b[i*SIZE+j]= (double)(i*j);
c[i*SIZE+j]= (double)0;
}
}
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
printf("row\ta\tc\n");
for ( i=0;i&amp;lt;10;i++){
printf("%d:\t%f\t%f\n", i, a[i*SIZE], c[i*SIZE]);
}
omp_set_num_threads(2);
for( i=0; i&amp;lt;SIZE; i++){
for( j=0; j&amp;lt;SIZE; j++){
a[i*SIZE+j]= (double)(i+j);
b[i*SIZE+j]= (double)(i*j);
c[i*SIZE+j]= (double)0;
}
}
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
printf("row\ta\tc\n");
for ( i=0;i&amp;lt;10;i++){
printf("%d:\t%f\t%f\n", i, a[i*SIZE],
c[i*SIZE]);
}
free (a);
free (b);
free (c);
return 0;
}
    &lt;/PRE&gt;
&lt;/DIV&gt;</description>
    <pubDate>Tue, 25 Mar 2014 03:01:53 GMT</pubDate>
    <dc:creator>Ying_H_Intel</dc:creator>
    <dc:date>2014-03-25T03:01:53Z</dc:date>
    <item>
      <title>opnemp dynamically switch on/off in mkl</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959106#M15720</link>
      <description>&lt;P&gt;Hello! I am trying to mix mkl and TBB in my project, therefore I am trying to make MKL dynamically switch on/off as I wish. I use the&amp;nbsp;mkl_set_num_threads() to set the number of threads, when I want the multi-threading mode off, I set it to one before I call the real working function, else if I want to use the multi-threading mode I set mkl_set_num_threads before the working function is called. The code (take BLAS2 as an example) is like this:&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;// set omp to run&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;if (withOMP) {&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; omp_init(); // set it to maximum number of threads we can find with&amp;nbsp;mkl_set_num_threads()&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;}else{&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; omp_turnoff(); // set the number of threads to 1&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;/P&gt;

&lt;P&gt;#ifdef WITH_SINGLE_PRECISION&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;sgemv(&amp;amp;symA, &amp;amp;row_A, &amp;amp;col_A, &amp;amp;alpha, A, &amp;amp;ld_A, x, &amp;amp;inc_x, &amp;amp;beta, y, &amp;amp;inc_y);&lt;BR /&gt;
	#else&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;dgemv(&amp;amp;symA, &amp;amp;row_A, &amp;amp;col_A, &amp;amp;alpha, A, &amp;amp;ld_A, x, &amp;amp;inc_x, &amp;amp;beta, y, &amp;amp;inc_y);&lt;BR /&gt;
	#endif&lt;/P&gt;

&lt;P&gt;&amp;nbsp;however, in my BLAS and LAPACK testing I find if the openmp is turned off, then it can never been switched on again. The running with MKL will always be in serial mode no matter the calls of&amp;nbsp;omp_init(). the multi-threading mode could be observed only if&amp;nbsp;omp_turnoff() is not called.&lt;/P&gt;

&lt;P&gt;I am useing MKL 11.1 version of multi-threading library(intel64) together with g++(version 4.7.2, also 64 bit). My library linking is&amp;nbsp;&lt;/P&gt;

&lt;P&gt;-L$(MKLROOT)/lib/intel64 -lmkl_intel_lp64 -lmkl_core &amp;nbsp;-lmkl_intel_thread -liomp5 -ldl -lpthread -lm&lt;/P&gt;

&lt;P&gt;Thanks very much!&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-size: 1em; line-height: 1.5;"&gt;fenglai&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 24 Mar 2014 18:53:35 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959106#M15720</guid>
      <dc:creator>fenglai</dc:creator>
      <dc:date>2014-03-24T18:53:35Z</dc:date>
    </item>
    <item>
      <title>By the way, I also tested the</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959107#M15721</link>
      <description>&lt;P&gt;By the way, I also tested the idea purely with openmp itself. The code is like below:&lt;/P&gt;

&lt;P&gt;#include &amp;lt;iostream&amp;gt; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	#include &amp;lt;cstdio&amp;gt; &amp;nbsp; &amp;nbsp;&lt;BR /&gt;
	#include "omp.h"&lt;BR /&gt;
	using namespace std;&lt;/P&gt;

&lt;P&gt;void turnoffOMP()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;omp_set_num_threads(1);&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;void openOMP()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;int np = omp_get_max_threads();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;omp_set_num_threads(np);&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;void testingOMP()&lt;BR /&gt;
	{&lt;BR /&gt;
	#pragma omp parallel&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;{ &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp; &amp;nbsp; cout &amp;lt;&amp;lt; "number of threads " &amp;lt;&amp;lt; omp_get_num_threads() &amp;lt;&amp;lt; endl;&amp;nbsp;&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	}&lt;/P&gt;

&lt;P&gt;int main () &amp;nbsp;&lt;BR /&gt;
	{&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;// now it's threading part&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;openOMP();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;testingOMP();&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;//turnoffOMP();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;openOMP();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;testingOMP();&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;turnoffOMP();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;testingOMP();&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;//turnoffOMP();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;openOMP(); &amp;nbsp;// here is the last call that we want to use openmp&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;testingOMP();&lt;/P&gt;

&lt;P&gt;&amp;nbsp; &amp;nbsp;turnoffOMP();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;testingOMP();&lt;BR /&gt;
	&amp;nbsp; &amp;nbsp;return 0;&lt;BR /&gt;
	}&lt;BR /&gt;
	~ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;

&lt;P&gt;I can see that the last call of&amp;nbsp;openOMP() actually does not make it. the output is like this:&lt;/P&gt;

&lt;P&gt;./openmp_test&amp;nbsp;&lt;BR /&gt;
	number of threads number of threads number of threads number of threads number of threads 16161616number of threads &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;BR /&gt;
	number of threads number of threads 16&lt;BR /&gt;
	number of threads 16&lt;/P&gt;

&lt;P&gt;16&lt;BR /&gt;
	number of threads 16&lt;/P&gt;

&lt;P&gt;16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;/P&gt;

&lt;P&gt;number of threads number of threads number of threads number of threads number of threads number of threads number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	16&lt;BR /&gt;
	16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	16&lt;BR /&gt;
	16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	16&lt;BR /&gt;
	number of threads 16&lt;BR /&gt;
	number of threads 1&lt;BR /&gt;
	number of threads 1&lt;BR /&gt;
	number of threads 1&lt;/P&gt;

&lt;P&gt;So the problem could be due to the design of openmp itself. Do you have any ideas about that?&lt;/P&gt;

&lt;P&gt;Thanks in advance,&lt;/P&gt;

&lt;P&gt;fenglai&lt;/P&gt;</description>
      <pubDate>Mon, 24 Mar 2014 19:22:18 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959107#M15721</guid>
      <dc:creator>fenglai</dc:creator>
      <dc:date>2014-03-24T19:22:18Z</dc:date>
    </item>
    <item>
      <title>Hi Fenglai,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959108#M15722</link>
      <description>&lt;P&gt;Hi Fenglai,&lt;/P&gt;

&lt;P&gt;The&amp;nbsp;problem is in&amp;nbsp;the call&lt;/P&gt;

&lt;P&gt;void openOMP()&lt;BR /&gt;
	{&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; //int np = omp_get_max_threads();&lt;BR /&gt;
	&amp;nbsp;&amp;nbsp; omp_set_num_threads(2);&lt;BR /&gt;
	}&lt;BR /&gt;
	Once you called turnoff OpenMP&amp;nbsp;one time, the system&amp;nbsp;has only 1 OpenMP thread.&amp;nbsp;&amp;nbsp;Then you call omp_get_max_threads(),&amp;nbsp; it will&amp;nbsp;return 1 always. so you saw such behavious.&amp;nbsp; you can change as above, then the thread will work as you wish.&lt;/P&gt;

&lt;P&gt;Not sure how&amp;nbsp;you do in MKL.&amp;nbsp; but MKL should allow you&amp;nbsp;to make MKL dynamically switch on/off.&amp;nbsp; For example, the example code in MKL userguide.&lt;/P&gt;

&lt;P&gt;Best Regards,&lt;BR /&gt;
	Ying&lt;/P&gt;

&lt;P&gt;P.S Copy from MKL userguide:&lt;/P&gt;

&lt;H1 class="topictitle1"&gt;Changing the Number of Threads at Run Time&lt;/H1&gt;

&lt;DIV id="GUID-8F64F2E5-630B-4B6B-ACC0-5ADB1DCC56EA"&gt;
	&lt;P id="GUID-7CCEC684-47B7-4A2A-8929-F4646DB18CDD"&gt;You cannot change the number of threads during run time using environment variables. However, you can call OpenMP API functions from your program to change the number of threads during run time. The following sample code shows how to change the number of threads during run time using the &lt;SAMP class="codeph" id="GUID-0A113DA3-2044-4A8C-8155-8316618880C6"&gt;&lt;FONT face="Courier New"&gt;omp_set_num_threads()&lt;/FONT&gt;&lt;/SAMP&gt; routine. See also &lt;A href="http://software.intel.com/GUID-DEEF0363-2B34-4BAB-87FA-A75DBE842040.htm"&gt;&lt;SPAN id="GUID-071DED76-8126-4CEA-A151-099258F6F7BB"&gt;&lt;U&gt;&lt;FONT color="#000080"&gt;Techniques to Set the Number of Threads&lt;/FONT&gt;&lt;/U&gt;&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;

	&lt;P id="GUID-09E92E73-7D04-4715-8396-6FC53E387B95"&gt;The following example shows both C and Fortran code examples. To run this example in the C language, use the &lt;SPAN class="filepath" id="GUID-C6326546-D5DF-4EF6-8E5A-B3970392666C"&gt;omp.h&lt;/SPAN&gt; header file from the Intel® compiler package. If you do not have the Intel compiler but wish to explore the functionality in the example, use Fortran API for &lt;SAMP class="codeph" id="GUID-75E1D0DA-4E73-466A-9EE4-2CCD7D867944"&gt;&lt;FONT face="Courier New"&gt;omp_set_num_threads()&lt;/FONT&gt;&lt;/SAMP&gt; rather than the C version. For example, &lt;SAMP class="codeph" id="GUID-65C9DF1D-3F1D-4E6F-88D9-1DE4CC273DC1"&gt;&lt;FONT face="Courier New"&gt;omp_set_num_threads_( &amp;amp;i_one );&lt;/FONT&gt;&lt;/SAMP&gt;&lt;/P&gt;

	&lt;PRE&gt;
// ******* C language *******
#include "omp.h"
#include "mkl.h"
#include &amp;lt;stdio.h&amp;gt;
#define SIZE 1000
int main(int args, char *argv[]){
double *a, *b, *c;
a = (double*)malloc(sizeof(double)*SIZE*SIZE);
b = (double*)malloc(sizeof(double)*SIZE*SIZE);
c = (double*)malloc(sizeof(double)*SIZE*SIZE);
double alpha=1, beta=1;
int m=SIZE, n=SIZE, k=SIZE, lda=SIZE, ldb=SIZE, ldc=SIZE, i=0, j=0;
char transa='n', transb='n';
for( i=0; i&amp;lt;SIZE; i++){
for( j=0; j&amp;lt;SIZE; j++){
a[i*SIZE+j]= (double)(i+j);
b[i*SIZE+j]= (double)(i*j);
c[i*SIZE+j]= (double)0;
}
}
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
printf("row\ta\tc\n");
for ( i=0;i&amp;lt;10;i++){
printf("%d:\t%f\t%f\n", i, a[i*SIZE], c[i*SIZE]);
}
omp_set_num_threads(1);
for( i=0; i&amp;lt;SIZE; i++){
for( j=0; j&amp;lt;SIZE; j++){
a[i*SIZE+j]= (double)(i+j);
b[i*SIZE+j]= (double)(i*j);
c[i*SIZE+j]= (double)0;
}
}
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
printf("row\ta\tc\n");
for ( i=0;i&amp;lt;10;i++){
printf("%d:\t%f\t%f\n", i, a[i*SIZE], c[i*SIZE]);
}
omp_set_num_threads(2);
for( i=0; i&amp;lt;SIZE; i++){
for( j=0; j&amp;lt;SIZE; j++){
a[i*SIZE+j]= (double)(i+j);
b[i*SIZE+j]= (double)(i*j);
c[i*SIZE+j]= (double)0;
}
}
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
m, n, k, alpha, a, lda, b, ldb, beta, c, ldc);
printf("row\ta\tc\n");
for ( i=0;i&amp;lt;10;i++){
printf("%d:\t%f\t%f\n", i, a[i*SIZE],
c[i*SIZE]);
}
free (a);
free (b);
free (c);
return 0;
}
    &lt;/PRE&gt;
&lt;/DIV&gt;</description>
      <pubDate>Tue, 25 Mar 2014 03:01:53 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959108#M15722</guid>
      <dc:creator>Ying_H_Intel</dc:creator>
      <dc:date>2014-03-25T03:01:53Z</dc:date>
    </item>
    <item>
      <title>Hi Ying,</title>
      <link>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959109#M15723</link>
      <description>&lt;P&gt;Hi Ying,&lt;/P&gt;

&lt;P&gt;Thanks for your help! My problem is solved.&lt;/P&gt;

&lt;P&gt;I changed the use of&amp;nbsp;&lt;SPAN style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;omp_get_max_threads() into omp_get_num_procs(). Now I can dynamically switch on/off the MKL multi-threading mode.&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;&lt;SPAN style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;"&gt;Thanks again!&lt;/SPAN&gt;&lt;/P&gt;

&lt;P&gt;best,&lt;/P&gt;

&lt;P&gt;fenglai&lt;/P&gt;</description>
      <pubDate>Tue, 25 Mar 2014 15:27:14 GMT</pubDate>
      <guid>https://community.intel.com/t5/Intel-oneAPI-Math-Kernel-Library/opnemp-dynamically-switch-on-off-in-mkl/m-p/959109#M15723</guid>
      <dc:creator>fenglai</dc:creator>
      <dc:date>2014-03-25T15:27:14Z</dc:date>
    </item>
  </channel>
</rss>

