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
|
#include <cassert>
#include <iostream>
#include <cuda.h>
#include <cuda_runtime.h>
#include "DataFormats/DetId/interface/DetId.h"
#include "DataFormats/HcalDetId/interface/HcalDetId.h"
#include "HeterogeneousCore/CUDAUtilities/interface/requireDevices.h"
__global__ void test_gen_detid(DetId *id) {
DetId did;
*id = did;
}
__global__ void test_gen_hcal_detid(HcalDetId *id) {
HcalDetId did(HcalBarrel, 5, 5, 0);
*id = did;
// trigger functions on the device
did.iphi();
did.ieta();
did.zside();
did.subdet();
did.ietaAbs();
did.depth();
did.hfdepth();
did.maskDepth();
did.baseDetId();
did.secondAnodeId();
did.crystal_ieta_low();
did.crystal_ieta_high();
did.crystal_iphi_low();
did.crystal_iphi_high();
}
void test_detid() {
// test det ids
DetId h_id, h_id_test;
DetId h_test0{1};
DetId *d_id;
cudaMalloc((void **)&d_id, sizeof(DetId));
cudaMemcpy(d_id, &h_id, sizeof(DetId), cudaMemcpyHostToDevice);
test_gen_detid<<<1, 1>>>(d_id);
cudaMemcpy(&h_id_test, d_id, sizeof(DetId), cudaMemcpyDeviceToHost);
assert(h_id_test == h_id);
assert(h_id != h_test0);
}
void test_hcal_detid() {
HcalDetId h_id;
HcalDetId h_id_test0{HcalBarrel, 5, 5, 0};
HcalDetId *d_id;
cudaMalloc((void **)&d_id, sizeof(HcalDetId));
cudaMemcpy(d_id, &h_id, sizeof(HcalDetId), cudaMemcpyHostToDevice);
test_gen_hcal_detid<<<1, 1>>>(d_id);
cudaMemcpy(&h_id, d_id, sizeof(HcalDetId), cudaMemcpyDeviceToHost);
std::cout << h_id_test0 << std::endl;
std::cout << h_id << std::endl;
assert(h_id_test0 == h_id);
}
int main(int argc, char **argv) {
cms::cudatest::requireDevices();
// test det id functionality
test_detid();
// test hcal det ids
test_hcal_detid();
return 0;
}
|