Révision 226

TrouNoir/TrouNoir.py (revision 226)
25 25
# - Luc Blanchet for his disponibility about my questions in General Relativity
26 26
# - Pierre Lena for his passion about science and vulgarisation
27 27

  
28
# If crash on OpenCL Intel implementation, disable VECTORIZER with
29
# export CL_CONFIG_USE_VECTORIZER=0
30

  
28 31
import pyopencl as cl
29 32
import numpy
30 33
import time,string
......
38 41
    PhysicsList={'Einstein':0,'Newton':1}
39 42
    return(PhysicsList)
40 43

  
44
#
45
# Blank space below to simplify debugging on OpenCL code
46
#
47

  
48

  
49

  
50

  
51

  
52

  
53

  
54

  
55

  
56

  
57

  
58

  
59

  
60

  
61

  
62

  
63

  
64

  
65

  
66

  
67

  
68

  
69

  
70

  
71

  
72

  
73

  
74

  
75

  
76

  
77

  
78

  
79

  
80

  
81

  
82

  
83

  
84

  
85

  
86

  
87

  
88

  
89

  
90

  
91

  
92

  
93

  
94

  
95

  
96

  
97

  
98

  
99

  
100

  
41 101
BlobOpenCL= """
42 102

  
43 103
#define PI (float)3.14159265359
......
221 281

  
222 282
   // Perform trajectory for each pixel, exit on hit
223 283

  
224
  private float m,rs,ri,re,tho;
225
  private int q,raie;
284
  float m,rs,ri,re,tho;
285
  int q,raie;
226 286

  
227 287
  m=Mass;
228 288
  rs=2.*m;
......
232 292
  q=-2;
233 293
  raie=Line;
234 294

  
235
  private float d,bmx,db,b,h;
236
  private float rp0,rpp,rps;
237
  private float phi,thi,phd,php,nr,r;
238
  private int nh;
239
  private float zp,fp;
295
  float bmx,db,b,h;
296
  float rp0,rpp,rps;
297
  float phi,phd;
298
  int nh;
299
  float zp=0.,fp=0.;
240 300

  
241 301
  // Autosize for image
242 302
  bmx=1.25*re;
243
  b=0.;
244 303

  
245 304
  h=4.e0f*PI/(float)TRACKPOINTS;
246 305

  
......
265 324
  nh=0;
266 325

  
267 326
  rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
268
    
327

  
269 328
  rps=fabs(b/us);
270 329
  rp0=rps;
271 330

  
......
277 336
     pp=ps;
278 337
     up=us;
279 338
     vp=vs;
280
     rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
281 339
     rpp=rps;
340
     //    rungekutta(&ps,&us,&vs,pp,up,vp,h,m,b);
282 341
     rps=fabs(b/us);
283
     ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rps>ri)&&(rps<re)?1:0;       
342
     ExitOnImpact = ((fmod(pp,PI)<fmod(phd,PI))&&(fmod(ps,PI)>fmod(phd,PI)))&&(rps>=ri)&&(rps<=re)?1:0;       
284 343

  
285 344
  } while ((rps>=rs)&&(rps<=rp0)&&(ExitOnImpact==0));
286 345

  
......
313 372

  
314 373
   // Perform trajectory for each pixel
315 374

  
316
  float m,rs,ri,re,tho;
375
  float m,ri,re,tho;
317 376
  int q,raie;
318 377

  
319 378
  m=Mass;
320
  rs=2.*m;
321 379
  ri=InternalRadius;
322 380
  re=ExternalRadius;
323 381
  tho=Angle;
324 382
  q=-2;
325 383
  raie=Line;
326 384

  
327
  float d,bmx,db,b,h;
328
  float phi,thi,phd,php,nr,r;
329
  int nh;
330
  float zp=0,fp=0;
385
  float bmx,db,b,h;
386
  float phi,phd,php,nr,r;
387
  float zp=0.,fp=0.;
331 388

  
332 389
  // Autosize for image, 25% greater than external radius
333 390
  bmx=1.25*re;
......
405 462

  
406 463
   // Perform trajectory for each pixel
407 464

  
408
  float m,rs,ri,re,tho;
465
  float m,ri,re,tho;
409 466
  int q,raie;
410 467

  
411 468
  m=Mass;
412
  rs=2.*m;
413 469
  ri=InternalRadius;
414 470
  re=ExternalRadius;
415 471
  tho=Angle;
416 472
  raie=Line;
417 473

  
418 474
  float bmx,db,b,h;
419
  float phi,thi,phd;
420
  int nh;
475
  float phi,phd;
421 476
  float zp=0,fp=0;
422 477

  
423 478
  // Autosize for image
TrouNoir/BenchTrouNoir.sh (revision 226)
1 1
#!/bin/bash
2
DEVICE=1
2
DEVICE=2
3 3
GPU=OpenCL
4 4
SEQ="6 1 14"
5 5
HOST=$(hostname)
......
53 53
    SIZE=$((2**$POWER))
54 54
    seq 1 1 10 | xargs -I TOTO /usr/bin/time python ./TrouNoir.py -d $DEVICE -g $GPU -n -s $SIZE -t $METHOD >>$LOGFILE 2>&1 
55 55
done
56
LINE=BB
57
METHOD=EachCircle
58
echo -e "Experience : $LINE $METHOD" >>$LOGFILE
59
echo -e "Experience : $LINE $METHOD $DEVICE $GPU"
60
seq $SEQ | while read POWER ; do
61
    SIZE=$((2**$POWER))
62
    seq 1 1 10 | xargs -I TOTO /usr/bin/time python ./TrouNoir.py -d $DEVICE -g $GPU -n -s $SIZE -t $METHOD >>$LOGFILE 2>&1 
63
done
64
LINE=MONO
65
METHOD=EachCircle
66
echo -e "Experience : $LINE $METHOD" >>$LOGFILE
67
echo -e "Experience : $LINE $METHOD $DEVICE $GPU"
68
seq $SEQ | while read POWER ; do
69
    SIZE=$((2**$POWER))
70
    seq 1 1 10 | xargs -I TOTO /usr/bin/time python ./TrouNoir.py -d $DEVICE -g $GPU -n -s $SIZE -t $METHOD >>$LOGFILE 2>&1 
71
done

Formats disponibles : Unified diff