Line Code
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;
}