<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:14pt"><div>Hi everybody,<br><br>I have a problem with CMAKE and I would be very appreciated if anybody can help.<br><br>Basically, I am trying to compile very simple piece of multi-threaded code with CMAKE. I downloaded the code from:<br><br>https://computing.llnl.gov/tutorials/openMP/exercise.html<br><br>and specifically this:<br>from: https://computing.llnl.gov/tutorials/openMP/samples/C/omp_mm.c <br>/******************************************************************************<br>
* FILE: omp_mm.c<br>
* DESCRIPTION:&nbsp; <br>
*&nbsp;&nbsp; OpenMp Example - Matrix Multiply - C Version<br>
*&nbsp;&nbsp; Demonstrates a matrix multiply using OpenMP. Threads share row iterations<br>
*&nbsp;&nbsp; according to a predefined chunk size.<br>
* AUTHOR: Blaise Barney<br>
* LAST REVISED: 06/28/05<br>
******************************************************************************/<br>
#include &lt;omp.h&gt;<br>
#include &lt;stdio.h&gt;<br>
#include &lt;stdlib.h&gt;<br>
<br>
#define NRA 62&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* number of rows in matrix A */<br>
#define NCA 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* number of columns in matrix A */<br>
#define NCB 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* number of columns in matrix B */<br>
<br>
int main (int argc, char *argv[]) <br>
{<br>
int&nbsp;&nbsp;&nbsp; tid, nthreads, i, j, k, chunk;<br>
double&nbsp;&nbsp;&nbsp; a[NRA][NCA],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* matrix A to be multiplied */<br>
&nbsp;&nbsp;&nbsp; b[NCA][NCB],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* matrix B to be multiplied */<br>
&nbsp;&nbsp;&nbsp; c[NRA][NCB];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* result matrix C */<br>
<br>
chunk = 10;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* set loop iteration chunk size */<br>
<br>
/*** Spawn a parallel region explicitly scoping all variables ***/<br>
#pragma omp parallel shared(a,b,c,nthreads,chunk) private(tid,i,j,k)<br>
&nbsp; {<br>
&nbsp; tid = omp_get_thread_num();<br>
&nbsp; if (tid == 0)<br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; nthreads = omp_get_num_threads();<br>
&nbsp;&nbsp;&nbsp; printf("Starting matrix multiple example with %d threads\n",nthreads);<br>
&nbsp;&nbsp;&nbsp; printf("Initializing matrices...\n");<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp; /*** Initialize matrices ***/<br>
&nbsp; #pragma omp for schedule (static, chunk) <br>
&nbsp; for (i=0; i&lt;NRA; i++)<br>
&nbsp;&nbsp;&nbsp; for (j=0; j&lt;NCA; j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[i][j]= i+j;<br>
&nbsp; #pragma omp for schedule (static, chunk)<br>
&nbsp; for (i=0; i&lt;NCA; i++)<br>
&nbsp;&nbsp;&nbsp; for (j=0; j&lt;NCB; j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b[i][j]= i*j;<br>
&nbsp; #pragma omp for schedule (static, chunk)<br>
&nbsp; for (i=0; i&lt;NRA; i++)<br>
&nbsp;&nbsp;&nbsp; for (j=0; j&lt;NCB; j++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c[i][j]= 0;<br>
<br>
&nbsp; /*** Do matrix multiply sharing iterations on outer loop ***/<br>
&nbsp; /*** Display who does which iterations for demonstration purposes ***/<br>
&nbsp; printf("Thread %d starting matrix multiply...\n",tid);<br>
&nbsp; #pragma omp for schedule (static, chunk)<br>
&nbsp; for (i=0; i&lt;NRA; i++)&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; {<br>
&nbsp;&nbsp;&nbsp; printf("Thread=%d did row=%d\n",tid,i);<br>
&nbsp;&nbsp;&nbsp; for(j=0; j&lt;NCB; j++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (k=0; k&lt;NCA; k++)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c[i][j] += a[i][k] * b[k][j];<br>
&nbsp;&nbsp;&nbsp; }<br>
&nbsp; }&nbsp;&nbsp; /*** End of parallel region ***/<br>
<br>
/*** Print results ***/<br>
printf("******************************************************\n");<br>
printf("Result Matrix:\n");<br>
for (i=0; i&lt;NRA; i++)<br>
&nbsp; {<br>
&nbsp; for (j=0; j&lt;NCB; j++) <br>
&nbsp;&nbsp;&nbsp; printf("%6.2f&nbsp;&nbsp; ", c[i][j]);<br>
&nbsp; printf("\n"); <br>
&nbsp; }<br>
printf("******************************************************\n");<br>
printf ("Done.\n");<br>
<br>
}<br><br>Here is the CMakefile I use:<br><br>PROJECT(omp_mm)<br><br>SET(CurrentExe "omp_mm")<br>ADD_EXECUTABLE(${CurrentExe} omp_mm.c ) <br><br>and I change:<br>CMAKE_EXE_LINKER_FLAGS : -fopenmp<br><br>"Seemingly", it compiles&nbsp; correctly:<br>make<br>Linking C executable omp_mm<br>[100%] Built target omp_mm<br><br>but it seems that it ignores #pragma and no matter how I set $OMP_NUM_THREADS, it always lunch one thread.<br><br>""Surprisingly"", when&nbsp; I compiled it on the command line by:<br>&gt;&gt; g++&nbsp; omp_mm.c&nbsp; -o omp_mm -fopenmp<br><br>it compiles and "works" perfectly and lunch as many threads as I set it $OMP_NUM_THREADS.<br><br>I am quite frustrated, Makefile generated by cmake is not easy to edit.&nbsp; Here is my Cmake and gcc information, in case it is required:<br><br>cmake version 2.6-patch 2<br>&nbsp;&gt;&gt; gcc -v<br>Using built-in specs.<br>Target: x86_64-linux-gnu<br>Configured with: ../src/configure -v
 --with-pkgversion='Ubuntu 4.3.2-1ubuntu11' --with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 --program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu<br>Thread model: posix<br>gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu11) <br><br><br><br>I would be thankful if you could help.<br><br><br>Regards,<br>Kaveh <br><br><br></div></div><br>

      </body></html>