speedup.

Use this forum to discuss the book: Using OpenMP - Portable Shared Memory Parallel Programming, by Barbara Chapman, Gabriele Jost and Ruud van der Pas Read the viewtopic.php?f=8&t=465 for book info and to download the examples. Post your feedback about the book and examples to this forum

speedup.

Postby anisurr » Thu Apr 08, 2010 8:16 am

i am working on a core 2 duo machine and actually trying to find speedup of some program using openmp. can anybody suggest a sample code. Am using RedHat Linuc and gcc complier.
ANis
anisurr
 
Posts: 1
Joined: Thu Apr 08, 2010 8:07 am

Re: speedup.

Postby anv » Thu May 06, 2010 4:20 am

Hi ANis!

Here is simple example:
Code: Select all
#include <stdlib.h>
#include <stdio.h>
#include <omp.h>
#define N 100000000
int main()
{
    int i, *a;
    long long sum = 0;
    double t;
    a = (int*)malloc(N*sizeof(int));
    t = omp_get_wtime();
    #pragma omp parallel for
    for( i=0; i<N; ++i)
    { a[i] = i; }
    #pragma omp parallel for reduction(+:sum)
    for( i=0; i<N; ++i)
    { sum += a[i]; }
    printf( "sum =%lld, t = %f\n", sum, omp_get_wtime()-t );
    return 0;
}

and usage:
Code: Select all
$ gcc -fopenmp 1.c

$ OMP_NUM_THREADS=1 ./a.out
sum =4999999950000000, t = 0.982977

$ OMP_NUM_THREADS=2 ./a.out
sum =4999999950000000, t = 0.696786

$ OMP_NUM_THREADS=4 ./a.out
sum =4999999950000000, t = 0.280423

Of cause you may get no speedup on dual core machine from more than 2 threads (I used quad core), but 2 threads should run faster than 1.

Regards,
Andrey
anv
 
Posts: 31
Joined: Wed Dec 12, 2007 9:36 am

Re: speedup.

Postby ruud » Tue May 11, 2010 5:59 pm

Hi ANis,

You could use one of the examples from the "Using OpenMP" book for this. Especially the matrix times vector program should be very suitable for your purpose. You can download all examples from viewforum.php?f=8

It would be best to insert calls to omp_get_wtime() around the call to "mxv" to time the performance of this algorithm. Something like this:

t_start = omp_get_wtime();
(void) mxv(m, n, a, b, c);
t_end = omp_get_wtime() - t_start;

printf("Execution time is %f\n",t_end);

You need to have a sufficiently large matrix to get reliable timings. The size depends on your system and how you compile, so you may need to try out a couple of sizes. Usually a 1000x1000 matrix or bigger should be okay though.

Kind regards, Ruud
ruud
 
Posts: 23
Joined: Mon Nov 26, 2007 2:13 am


Return to Using OpenMP - The Book and Examples

Who is online

Users browsing this forum: No registered users and 1 guest