source: Sophya/trunk/Eval/Speed/tompCXX.cc@ 1098

Last change on this file since 1098 was 1098, checked in by ansari, 25 years ago

Extension test OpenMP 2 (tompCXX.cc) - Reza 26/7/2000

File size: 1.7 KB
RevLine 
[991]1#include <stdlib.h>
2#include <stdio.h>
3
4extern "C" {
5void InitTim();
6void PrtTim(char *);
7}
8
9void Mult(int n, double *v1, double *v2, double *v3);
10void MultOMP(int n, double *v1, double *v2, double *v3);
[1096]11void MultOMP2(int N, int n, double *v1, double *v2, double *v3);
[991]12
13int main (int narg, char *arg[])
14{
15int i,j, N, M;
16
17double *v1, *v2, *v3;
18
19if (narg < 2) {
20 printf("\n Usage tompCXX P/x [N M] \n \n");
[1096]21 printf(" P -> Calling MultOMP2 p -> Calling MultOMP, x -> Calling Mult \n");
[991]22 printf(" N (=100): External loop number M : Array Size (500000) \n");
23 exit(0);
24}
25N = 100;
26M = 500000;
27if (narg > 2) N = atoi(arg[2]);
28if (narg > 3) M = atoi(arg[3]);
29
30InitTim();
31
32v1 = new double[M];
33v2 = new double[M];
34v3 = new double[M];
35
36 for(i=0; i<M; i++) { v1[i] = random()%1000; v2[i] = random()%5000; }
37PrtTim("End of Init ");
38
[1098]39if (*arg[1] == 'P') {
[1096]40 printf("Calling MultOMP2(N=%d, Size= %d) \n", N, M);
[1098]41 MultOMP2(N, M, v1, v2, v3);
[1096]42}
43else if (*arg[1] == 'p') {
[991]44 printf("Calling N=%d times MultOMP(Size= %d) \n", N, M);
45 for(i=0; i<N; i++) MultOMP(M, v1, v2, v3);
46}
47else {
48 printf("Calling N=%d times Mult(Size= %d) \n", N, M);
49 for(i=0; i<N; i++) Mult(M, v1, v2, v3);
50}
51
52PrtTim("End of Multiplication ");
53
54delete[] v1;
55delete[] v2;
56delete[] v3;
57exit(0);
58}
59
60
61void Mult(int n, double *v1, double *v2, double *v3)
62{
63int k;
64for(k=0; k<n; k++)
65 v3[k] = v1[k] * v2[k];
66}
67
68void MultOMP(int n, double *v1, double *v2, double *v3)
69{
70int k;
71#pragma omp parallel for
72for(k=0; k<n; k++)
73 v3[k] = v1[k] * v2[k];
74}
[1096]75void MultOMP2(int N, int n, double *v1, double *v2, double *v3)
76{
77int k;
78int i;
79#pragma omp parallel default(shared)
[1098]80 {
[1096]81#pragma omp parallel for
82for(i=0; i<N; i++)
83#pragma omp parallel for
84 for(k=0; k<n; k++)
85 v3[k] = v1[k] * v2[k];
[1098]86 }
[1096]87}
Note: See TracBrowser for help on using the repository browser.