Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to tell if OpenMP is working?

Tags:

c++

openmp

libsvm

I am trying to run LIBSVM in parallel mode, however my question is in OpenMP in general. According to LIBSVM FAQ, I have modified the code with #pragma calls to use OpenMP. I also modified the Makefile (for un*x) by adding a -fopenmp argument so it becomes:

CFLAGS = -Wall -Wconversion -O3 -fPIC -fopenmp

The code compiles well. I check (since it's not my PC) whether OpenMP is installed by :

/sbin/ldconfig -p | grep gomp

and see that it is -probably- installed:

 libgomp.so.1 (libc6,x86-64) => /usr/lib64/libgomp.so.1
 libgomp.so.1 (libc6) => /usr/lib/libgomp.so.1

Now; when I run the program, I don't see any speed improvements. Also when I check with "top" the process is using at most %100 CPU (there are 8 cores), also there is not a CPU bottleneck (only one more user with %100 CPU usage), I was expecting to see more than %100 (or a different indicator) that process is using multiple cores.

Is there a way to check that it is working multiple core?

like image 372
paul simmons Avatar asked May 07 '12 11:05

paul simmons


People also ask

How does OpenMP work?

OpenMP introduces parallelism into your application by launching a set of threads that execute portions of your code concurrently. There are mechanisms, described below, that determine how many threads are launched and what portion of your code and what portion of your data each thread will use.

Is OpenMP still used?

OpenMP is extensively used as a second level to improve parallelism inside each MPI domain.


2 Answers

You can use the function omp_get_num_threads(). It will return you the number of threads that are used by your program.

like image 56
Charles Brunet Avatar answered Sep 19 '22 05:09

Charles Brunet


With omp_get_max_threads() you get the maximum number of threads available to your program. It is also the maximum of all possible return values of omp_get_num_threads(). You can explicitly set the number of threads to be used by your program with the environment variable OMP_NUM_THREADS, e.g. in bash via

$export OMP_NUM_THREADS=8; your_program
like image 44
afischer Avatar answered Sep 19 '22 05:09

afischer