Many thanks and sorry for my naive question.
________________________________ From: Michael Jackson <[email protected]> To: Kaveh Kohan <[email protected]> Cc: [email protected] 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 [email protected] 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 > [email protected] > http://www.cmake.org/mailman/listinfo/cmake
_______________________________________________ CMake mailing list [email protected] http://www.cmake.org/mailman/listinfo/cmake
