Re: multithread on multicore processor on linux
On Feb 1, 2:09 pm, Gianni Mariani <gi4nos...@mariani.ws> wrote:
ciccio wrote:
Will this approach make my program four times faster than just a
single thread program?
What multithread library should I use? I know multithread is not
support in native c++...
As stated by the others, a 4x speedup will for sure not be possible, but=
if you program clever, you can for sure gain a lot.
Have a look at openmp. It is supported by g++ as well as intel. An=
d
most likely also others.
Info on this can be found onwww.openmp.orgwhere you can download a
very readable standard, and a simple tutorial is on
https://computing.llnl.gov/tutorials/openMP/
For a newbie who just wants a spattering of MP this is the fastest way
to do it. It does not give you all the flexibility you may think you
need but more than likely you don't (depending on your app).
I second the reccomendation.- Hide quoted text -
- Show quoted text -
Thanks for everyone.
Here is my code using OpenMP:
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>
#include <math.h>
#define CHUNKSIZE 10000
#define N 100000
#define NUM 1
float compute(float a, float b)
{
return sin(a) * sin(b);
}
main ()
{
int start, end;
int nthreads, tid;
int i, j, k, m, n, chunk;
float a[N], b[N], c[N], sum;
/* Some initializations */
for (i=0; i < N; i++){
a[i] = b[i] = i * 1.0;
}
chunk = CHUNKSIZE;
sum = 0;
start = clock();
for (i=0; i < N; i++){
c[i] = compute(a[i], b[i]);
sum = sum + c[i];
}
end = clock();
printf("time=%d, sum=%f\n", end - start, sum);
sum = 0;
start = clock();
#pragma omp parallel shared(a,b,c,chunk) private(i)
{
#pragma omp for schedule(dynaic,chunk) nowait
for (i = 0; i < N; i++){
c[i] = compute(a[i], b[i]);
sum = sum + c[i];
}
}
end = clock();
printf("time=%d, sum=%f\n", end - start, sum);
}
I found however, the output is
time=10000, sum=49999.394531
time=20000, sum=49999.394531
Which means OpenMP is even slower!!!!
How come?
I am using
g++ -O3 -march=x86-64 -mfpmath=sse -funroll-loops -fomit-fram-pointer -
pthread -o t main.cc
to compile the program.
help....