Révision 79

Pi/C/Hybrid/Pi_Hybrid.c (revision 79)
27 27
#define CONG  (jcong=69069*jcong+1234567)
28 28
#define KISS  ((MWC^CONG)+SHR3)
29 29

  
30
#define ITERATIONS 1000000000
31

  
30 32
#define MWCfp MWC * 2.328306435454494e-10f
31 33
#define KISSfp KISS * 2.328306435454494e-10f
34
#define SHR3fp SHR3 * 2.328306435454494e-10f
35
#define CONGfp CONG * 2.328306435454494e-10f
32 36

  
33
#define ITERATIONS 1000000000
34

  
35 37
#define PROCESS 1
36 38

  
37 39
#ifdef LONG
......
55 57

  
56 58
LENGTH MainLoopGlobal(LENGTH iterations,unsigned int seed_w,unsigned int seed_z)
57 59
{
60

  
61
#if defined TCONG
62
   unsigned int jcong=seed_z;
63
#elif defined TSHR3
64
   unsigned int jsr=seed_w;
65
#elif defined TMWC
58 66
   unsigned int z=seed_z;
59 67
   unsigned int w=seed_w;
60

  
68
#elif defined TKISS
69
   unsigned int jcong=seed_z;
70
   unsigned int jsr=seed_w;
71
   unsigned int z=seed_z;
72
   unsigned int w=seed_w;
73
#endif
74
   
61 75
   LENGTH total=0;
62 76

  
63 77
   for (LENGTH i=0;i<iterations;i++) {
64 78

  
65
      float x=MWCfp ;
66
      float y=MWCfp ;
79
#if defined TINT32
80
    #define THEONE 1073741824
81
    #if defined TCONG
82
        unsigned int x=CONG>>17 ;
83
        unsigned int y=CONG>>17 ;
84
    #elif defined TSHR3
85
        unsigned int x=SHR3>>17 ;
86
        unsigned int y=SHR3>>17 ;
87
    #elif defined TMWC
88
        unsigned int x=MWC>>17 ;
89
        unsigned int y=MWC>>17 ;
90
    #elif defined TKISS
91
        unsigned int x=KISS>>17 ;
92
        unsigned int y=KISS>>17 ;
93
    #endif
94
#elif defined TINT64
95
    #define THEONE 4611686018427387904
96
    #if defined TCONG
97
        unsigned long x=(unsigned long)(CONG>>1) ;
98
        unsigned long y=(unsigned long)(CONG>>1) ;
99
    #elif defined TSHR3
100
        unsigned long x=(unsigned long)(SHR3>>1) ;
101
        unsigned long y=(unsigned long)(SHR3>>1) ;
102
    #elif defined TMWC
103
        unsigned long x=(unsigned long)(MWC>>1) ;
104
        unsigned long y=(unsigned long)(MWC>>1) ;
105
    #elif defined TKISS
106
        unsigned long x=(unsigned long)(KISS>>1) ;
107
        unsigned long y=(unsigned long)(KISS>>1) ;
108
    #endif
109
#elif defined TFP32
110
    #define THEONE 1.0f
111
    #if defined TCONG
112
        float x=CONGfp ;
113
        float y=CONGfp ;
114
    #elif defined TSHR3
115
        float x=SHR3fp ;
116
        float y=SHR3fp ;
117
    #elif defined TMWC
118
        float x=MWCfp ;
119
        float y=MWCfp ;
120
    #elif defined TKISS
121
      float x=KISSfp ;
122
      float y=KISSfp ;
123
    #endif
124
#elif defined TFP64
125
    #define THEONE 1.0f
126
    #if defined TCONG
127
        double x=(double)CONGfp ;
128
        double y=(double)CONGfp ;
129
    #elif defined TSHR3
130
        double x=(double)SHR3fp ;
131
        double y=(double)SHR3fp ;
132
    #elif defined TMWC
133
        double x=(double)MWCfp ;
134
        double y=(double)MWCfp ;
135
    #elif defined TKISS
136
        double x=(double)KISSfp ;
137
        double y=(double)KISSfp ;
138
    #endif
139
#endif
67 140

  
68 141
      // Matching test
69
      int inside=((x*x+y*y) < 1.0f) ? 1:0;
142
      unsigned long inside=((x*x+y*y) < THEONE) ? 1:0;
70 143
      total+=inside;
71 144
   }
72 145

  
Pi/C/Hybrid/Makefile (revision 79)
1
EXECUTABLE=Pi_Hybrid_LONG Pi_Hybrid_INT Pi_Hybrid_LONG_TIME Pi_Hybrid_INT_TIME
1
COMPUTING=INT32 INT64 FP32 FP64
2 2

  
3
MARSAGLIA=SHR3 CONG MWC KISS
4

  
3 5
SOURCE=Pi_Hybrid.c
4 6

  
5 7
CC=mpicc.openmpi
6 8
CFLAGS=-Wall -O3 -std=c99 -fopenmp 
7 9
LIBRARY=-lm
8 10

  
9
all: $(EXECUTABLE)
11
all: $(SOURCE)
12
	$(foreach TVAR,$(COMPUTING),$(foreach TRND,$(MARSAGLIA),$(CC) $(CFLAGS) -DT$(TVAR) -DT$(TRND) -DLONG -DTIME -o $(<:.c=)_$(TVAR)_$(TRND) $< $(LIBRARY); ) )
10 13

  
11
Pi_Hybrid_LONG_TIME: $(SOURCE)
12

  
13
	$(CC) $(CFLAGS) $(DIRECTIVES) -DLONG -DTIME -o $@ $< $(LIBRARY)
14

  
15
Pi_Hybrid_INT_TIME: $(SOURCE)
16

  
17
	$(CC) $(CFLAGS) $(DIRECTIVES) -DINTEGER -DTIME -o $@ $< $(LIBRARY)
18

  
19
Pi_Hybrid_LONG: $(SOURCE)
20

  
21
	$(CC) $(CFLAGS) $(DIRECTIVES) -DLONG -o $@ $< $(LIBRARY)
22

  
23
Pi_Hybrid_INT: $(SOURCE)
24

  
25
	$(CC) $(CFLAGS) $(DIRECTIVES) -DINTEGER -o $@ $< $(LIBRARY)
26

  
27 14
.PHONY: clean check mrproper
28 15

  
29
mrproper: 
30
	rm -rf $(EXECUTABLE)
16
mrproper: $(SOURCE)
17
	rm -rf $(foreach TVAR,$(TVARS),$(foreach TRND,$(MARSAGLIA),$(<:.c=)_$(TVAR)_$(TRND) ) )
31 18
	find . -name "*~" -exec rm {} \;
32 19

  
33 20
clean:

Formats disponibles : Unified diff