File: Wedge_Evolution.cpp

package info (click to toggle)
vecgeom 1.2.8%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 24,016 kB
  • sloc: cpp: 88,803; ansic: 6,888; python: 1,035; sh: 582; sql: 538; makefile: 23
file content (133 lines) | stat: -rw-r--r-- 8,739 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * Wedge.cpp
 *
 *  Created on: 28.03.2015
 *      Author: swenzel
 */
#include "VecGeom/base/Global.h"
#include "VecGeom/volumes/Wedge_Evolution.h"
#include <iostream>
#include <iomanip>

namespace vecgeom {
namespace evolution {
inline namespace VECGEOM_IMPL_NAMESPACE {

VECCORE_ATT_HOST_DEVICE
Wedge::Wedge(Precision angle, Precision zeroangle /* = 0 */) : fDPhi(angle), fAlongVector1(), fAlongVector2()
{
  // Note: This routine is outlined to work around a deficiency in NVCC's device code last checked
  // with nvcc 9.1.85, gcc 6.4.0 CentOS Linux release 7.4.1708.
  // When the constructor is included in the header file, the device crash during the
  // execution of the function cos as long as it takes input related to zeroangle
  // eg. any of this variation will crash:
  //
  // The crash stack trace is:
  // #0  0x0000000002c32e00 in __internal_trig_reduction_slowpathd ()
  // #1  0x0000000002c616e0 in cos ()
  // #2  0x0000000002c94168 in vecgeom::evolution::cuda::Wedge::Wedge (this=<optimized out>, angle=<optimized out>,
  // zeroangle=<optimized out>)
  //     at
  //     /data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/VecGeom/volumes/Wedge_Evolution.h:84
  // #3  0x0000000002d9d768 in vecgeom::cuda::TubeStruct<double>::TubeStruct (this=<optimized out>, _rmin=<optimized
  // out>, _rmax=<optimized out>, _z=<optimized out>, _sphi=<optimized out>, _dphi=<optimized out>)
  //     at
  //     /data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/VecGeom/volumes/TubeStruct.h:166
  // #4  0x0000000003c04990 in vecgeom::cuda::CutTubeStruct<double>::CutTubeStruct (this=<optimized out>,
  // rmin=<optimized out>, rmax=<optimized out>, z=<optimized out>, sphi=0.35355339059327384, dphi=<optimized out>,
  // bottomNormal=..., topNormal=...)
  //     at
  //     /data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/VecGeom/volumes/CutTubeStruct.h:40
  // #5  0x0000000003c00970 in vecgeom::cuda::UnplacedCutTube::UnplacedCutTube (this=<optimized out>, rmin=<optimized
  // out>, rmax=<optimized out>, z=<optimized out>, sphi=<optimized out>, dphi=<optimized out>, bx=<optimized out>,
  // by=<optimized out>,
  //     bz=<optimized out>, tx=<optimized out>, ty=<optimized out>, tz=<optimized out>) at
  //     /data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/VecGeom/volumes/UnplacedCutTube.h:55
  // #6  0x0000000003bfc758 in vecgeom::cuda::ConstructOnGpu<vecgeom::cuda::UnplacedCutTube, double, double, double,
  // double, double, double, double, double, double, double, double><<<(1,1,1),(1,1,1)>>> (gpu_ptr=0x4201700200,
  // params=3.3155729693438206e-316,
  //     params=3.3155729693438206e-316, params=3.3155729693438206e-316, params=3.3155729693438206e-316,
  //     params=3.3155729693438206e-316, params=3.3155729693438206e-316, params=3.3155729693438206e-316,
  //     params=3.3155729693438206e-316,
  //     params=3.3155729693438206e-316, params=3.3155729693438206e-316, params=3.3155729693438206e-316) at
  //     /data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/VecGeom/backend/cuda/Interface.h:25
  //
  // cuda-memcheck says:
  //
  // ========= Invalid __global__ read of size 8
  // =========     at 0x000004f0 in __internal_trig_reduction_slowpathd
  // =========     by thread (0,0,0) in block (0,0,0)
  // =========     Address 0x41e5300350 is out of bounds
  // =========     Device Frame:cos (cos : 0x460)
  // =========     Device Frame:vecgeom::evolution::cuda::Wedge::__complete_object_constructor__(double, double)
  // (vecgeom::evolution::cuda::Wedge::__complete_object_constructor__(double, double) : 0x6e8)
  // =========     Device Frame:vecgeom::cuda::TubeStruct<double>::__complete_object_constructor__(double, double,
  // double, double, double) (vecgeom::cuda::TubeStruct<double>::__complete_object_constructor__(double, double, double,
  // double, double) : 0x7a8)
  // =========     Device Frame:vecgeom::cuda::CutTubeStruct<double>::__complete_object_constructor__(double, double,
  // double, double, double, vecgeom::cuda::Vector3D<double>, vecgeom::cuda::Vector3D<double>)
  // (vecgeom::cuda::CutTubeStruct<double>::__complete_object_constructor__(double, double, double, double, double,
  // vecgeom::cuda::Vector3D<double>, vecgeom::cuda::Vector3D<double>) : 0x610)
  // =========     Device Frame:vecgeom::cuda::UnplacedCutTube::__complete_object_constructor__(double const &, double
  // const &, double const &, double const &, double const &, double const &, double const &, double const &, double
  // const &, double const &, double const &) (vecgeom::cuda::UnplacedCutTube::__complete_object_constructor__(double
  // const &, double const &, double const &, double const &, double const &, double const &, double const &, double
  // const &, double const &, double const &, double const &) : 0xb70)
  // =========     Device Frame:_ZN7vecgeom4cuda14ConstructOnGpuINS0_15UnplacedCutTubeEJdddddddddddEEEvPT_DpT0_
  // (_ZN7vecgeom4cuda14ConstructOnGpuINS0_15UnplacedCutTubeEJdddddddddddEEEvPT_DpT0_ : 0x818)
  // =========     Saved host backtrace up to driver entry point at kernel launch time
  // =========     Host Frame:/lib64/libcuda.so.1 (cuLaunchKernel + 0x2cd) [0x23c06d]
  // =========     Host Frame:/usr/local/cuda/lib64/libcudart.so.9.1 [0x15f70]
  // =========     Host Frame:/usr/local/cuda/lib64/libcudart.so.9.1 (cudaLaunch + 0x14e) [0x347be]
  // =========     Host
  // Frame:/data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/build.gcc.6.4.0/libvecgeomcuda.so
  // [0x170964]
  // =========     Host
  // Frame:/data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/build.gcc.6.4.0/libvecgeomcuda.so
  // [0x170388]
  // =========     Host
  // Frame:/data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/build.gcc.6.4.0/libvecgeomcuda.so
  // [0x170463]
  // =========     Host
  // Frame:/data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/build.gcc.6.4.0/libvecgeomcuda.so
  // (_ZN7vecgeom4cuda14ConstructOnGpuINS0_15UnplacedCutTubeEJdddddddddddEEEvPT_DpT0_ + 0x72) [0x1728d6]
  // =========     Host
  // Frame:/data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/build.gcc.6.4.0/libvecgeomcuda.so
  // (_ZNK7vecgeom3cxx9DevicePtrINS_4cuda15UnplacedCutTubeEE9ConstructIJdddddddddddEEEvDpT_ + 0xfe) [0x1726fa]
  // =========     Host Frame:./CutTubeBenchmark
  // (_ZNK7vecgeom3cxx15VUnplacedVolume13CopyToGpuImplINS0_15UnplacedCutTubeEJdddddddddddEEENS0_9DevicePtrINS_4cuda15VUnplacedVolumeEEES7_DpT0_
  // + 0xb1) [0x10170f]
  // =========     Host Frame:./CutTubeBenchmark
  // (_ZNK7vecgeom3cxx15UnplacedCutTube9CopyToGpuENS0_9DevicePtrINS_4cuda15VUnplacedVolumeEEE + 0x24e) [0xfaa6a]
  // =========     Host Frame:./CutTubeBenchmark (_ZN7vecgeom3cxx11CudaManager11SynchronizeEv + 0x3c9) [0x126c5d]
  // =========     Host Frame:./CutTubeBenchmark
  // (_ZN7vecgeom11Benchmarker17GetVolumePointersERNSt7__cxx114listINS_3cxx9DevicePtrINS_4cuda13VPlacedVolumeEEESaIS7_EEE
  // + 0x47) [0x11d09d]
  // =========     Host
  // Frame:/data/sftnight/workspace/VecGeom-gitlab-CUDA_2/BUILDTYPE/Debug/COMPILER/gcc49/LABEL/continuos-cc7/build.gcc.6.4.0/libvecgeomcuda.so
  // (_ZN7vecgeom11Benchmarker13RunInsideCudaEPdS1_S1_PbPi + 0x81) [0x1c4a61]
  // =========     Host Frame:./CutTubeBenchmark (_ZN7vecgeom11Benchmarker18RunInsideBenchmarkEv + 0x450) [0x114d12]
  // =========     Host Frame:./CutTubeBenchmark (_ZN7vecgeom11Benchmarker12RunBenchmarkEv + 0x4a) [0x114854]
  // =========     Host Frame:./CutTubeBenchmark (_Z9benchmarkdddddddddii + 0x3ce) [0x83392]
  // =========     Host Frame:./CutTubeBenchmark (main + 0x687) [0x83b45]
  // =========     Host Frame:/lib64/libc.so.6 (__libc_start_main + 0xf5) [0x21c05]
  // =========     Host Frame:./CutTubeBenchmark [0x81db9]

  // check input
  // assert(angle > 0.0 && angle <= kTwoPi);

  // initialize angles
  fAlongVector1.x() = std::cos(zeroangle);
  fAlongVector1.y() = std::sin(zeroangle);
  fAlongVector2.x() = std::cos(zeroangle + angle);
  fAlongVector2.y() = std::sin(zeroangle + angle);

  fNormalVector1.x() = -std::sin(zeroangle);
  fNormalVector1.y() = std::cos(zeroangle); // not the + sign
  fNormalVector2.x() = std::sin(zeroangle + angle);
  fNormalVector2.y() = -std::cos(zeroangle + angle); // note the - sign
}

} // VECGEOM_IMPL_NAMESPACE
} // namespace evolution
} // namespace vecgeom