[CMake] PLEASE HELP: about openmp and cmake !!!!

Kaveh Kohan kaveh.kohan at yahoo.com
Fri Jan 23 15:19:11 EST 2009


Many thanks and sorry for my naive question.



________________________________
From: Michael Jackson <mike.jackson at bluequartz.net>
To: Kaveh Kohan <kaveh.kohan at yahoo.com>
Cc: cmake at cmake.org
Sent: Thursday, January 22, 2009 8:59:27 PM
Subject: Re: [CMake] PLEASE HELP: about openmp and cmake !!!!

You need to also set the CMAKE_CXX_FLAGS and CMAKE_C_FLAGS using ccmake or your CMakeLists.txt file.


_________________________________________________________
Mike Jackson                  mike.jackson at bluequartz.net
BlueQuartz Software                    www.bluequartz.net
Principal Software Engineer                  Dayton, Ohio



On Jan 22, 2009, at 8:33 PM, Kaveh Kohan wrote:

> Hi everybody,
> 
> I have a problem with CMAKE and I would be very appreciated if anybody can help.
> 
> Basically, I am trying to compile very simple piece of multi-threaded code with CMAKE. I downloaded the code from:
> 
> https://computing.llnl.gov/tutorials/openMP/exercise.html
> 
> and specifically this:
> from: https://computing.llnl.gov/tutorials/openMP/samples/C/omp_mm.c
> /******************************************************************************
> * FILE: omp_mm.c
> * DESCRIPTION:
> *   OpenMp Example - Matrix Multiply - C Version
> *   Demonstrates a matrix multiply using OpenMP. Threads share row iterations
> *   according to a predefined chunk size.
> * AUTHOR: Blaise Barney
> * LAST REVISED: 06/28/05
> ******************************************************************************/
> #include <omp.h>
> #include <stdio.h>
> #include <stdlib.h>
> 
> #define NRA 62                 /* number of rows in matrix A */
> #define NCA 15                 /* number of columns in matrix A */
> #define NCB 7                  /* number of columns in matrix B */
> 
> int main (int argc, char *argv[])
> {
> int    tid, nthreads, i, j, k, chunk;
> double    a[NRA][NCA],           /* matrix A to be multiplied */
>     b[NCA][NCB],           /* matrix B to be multiplied */
>     c[NRA][NCB];           /* result matrix C */
> 
> chunk = 10;                    /* set loop iteration chunk size */
> 
> /*** Spawn a parallel region explicitly scoping all variables ***/
> #pragma omp parallel shared(a,b,c,nthreads,chunk) private(tid,i,j,k)
>   {
>   tid = omp_get_thread_num();
>   if (tid == 0)
>     {
>     nthreads = omp_get_num_threads();
>     printf("Starting matrix multiple example with %d threads\n",nthreads);
>     printf("Initializing matrices...\n");
>     }
>   /*** Initialize matrices ***/
>   #pragma omp for schedule (static, chunk)
>   for (i=0; i<NRA; i++)
>     for (j=0; j<NCA; j++)
>       a[i][j]= i+j;
>   #pragma omp for schedule (static, chunk)
>   for (i=0; i<NCA; i++)
>     for (j=0; j<NCB; j++)
>       b[i][j]= i*j;
>   #pragma omp for schedule (static, chunk)
>   for (i=0; i<NRA; i++)
>     for (j=0; j<NCB; j++)
>       c[i][j]= 0;
> 
>   /*** Do matrix multiply sharing iterations on outer loop ***/
>   /*** Display who does which iterations for demonstration purposes ***/
>   printf("Thread %d starting matrix multiply...\n",tid);
>   #pragma omp for schedule (static, chunk)
>   for (i=0; i<NRA; i++)
>     {
>     printf("Thread=%d did row=%d\n",tid,i);
>     for(j=0; j<NCB; j++)
>       for (k=0; k<NCA; k++)
>         c[i][j] += a[i][k] * b[k][j];
>     }
>   }   /*** End of parallel region ***/
> 
> /*** Print results ***/
> printf("******************************************************\n");
> printf("Result Matrix:\n");
> for (i=0; i<NRA; i++)
>   {
>   for (j=0; j<NCB; j++)
>     printf("%6.2f   ", c[i][j]);
>   printf("\n");
>   }
> printf("******************************************************\n");
> printf ("Done.\n");
> 
> }
> 
> Here is the CMakefile I use:
> 
> PROJECT(omp_mm)
> 
> SET(CurrentExe "omp_mm")
> ADD_EXECUTABLE(${CurrentExe} omp_mm.c )
> 
> and I change:
> CMAKE_EXE_LINKER_FLAGS : -fopenmp
> 
> "Seemingly", it compiles  correctly:
> make
> Linking C executable omp_mm
> [100%] Built target omp_mm
> 
> but it seems that it ignores #pragma and no matter how I set $OMP_NUM_THREADS, it always lunch one thread.
> 
> ""Surprisingly"", when  I compiled it on the command line by:
> >> g++  omp_mm.c  -o omp_mm -fopenmp
> 
> it compiles and "works" perfectly and lunch as many threads as I set it $OMP_NUM_THREADS.
> 
> I am quite frustrated, Makefile generated by cmake is not easy to edit.  Here is my Cmake and gcc information, in case it is required:
> 
> cmake version 2.6-patch 2
>  >> gcc -v
> Using built-in specs.
> Target: x86_64-linux-gnu
> 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
> Thread model: posix
> gcc version 4.3.2 (Ubuntu 4.3.2-1ubuntu11)
> 
> 
> 
> I would be thankful if you could help.
> 
> 
> Regards,
> Kaveh
> 
> 
> 
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake


      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090123/a9aaa217/attachment.htm>


More information about the CMake mailing list