Back to home page

EIC code displayed by LXR

 
 

    


Warning, /acts/Detray/tests/unit_tests/device/hip/detector_hip_kernel.hip is written in an unsupported language. File is not indexed.

0001 // This file is part of the ACTS project.
0002 //
0003 // Copyright (C) 2016 CERN for the benefit of the ACTS project
0004 //
0005 // This Source Code Form is subject to the terms of the Mozilla Public
0006 // License, v. 2.0. If a copy of the MPL was not distributed with this
0007 // file, You can obtain one at https://mozilla.org/MPL/2.0/.
0008 
0009 #include "detray/definitions/detail/hip_definitions.hpp"
0010 #include "detray/geometry/tracking_surface.hpp"
0011 
0012 // Detray test include(s)
0013 #include "detector_hip_kernel.hpp"
0014 
0015 namespace detray {
0016 
0017 __global__ void detector_test_kernel(
0018 
0019     typename detector_host_t::view_type det_data,
0020     vecmem::data::vector_view<det_volume_t> volumes_data,
0021     vecmem::data::vector_view<det_surface_t> surfaces_data,
0022     vecmem::data::vector_view<transform_t> transforms_data,
0023     vecmem::data::vector_view<rectangle_t> rectangles_data,
0024     vecmem::data::vector_view<disc_t> discs_data,
0025     vecmem::data::vector_view<cylinder_t> cylinders_data) {
0026 
0027     // convert toy detector_data into detector w/ device vectors
0028     detector_device_t det_device(det_data);
0029 
0030     // convert subdetector data objects into objects w/ device vectors
0031     vecmem::device_vector<det_volume_t> volumes_device(volumes_data);
0032     vecmem::device_vector<det_surface_t> surfaces_device(surfaces_data);
0033     vecmem::device_vector<transform_t> transforms_device(transforms_data);
0034     vecmem::device_vector<rectangle_t> rectangles_device(rectangles_data);
0035     vecmem::device_vector<disc_t> discs_device(discs_data);
0036     vecmem::device_vector<cylinder_t> cylinders_device(cylinders_data);
0037 
0038     // copy objects - volume
0039     for (unsigned int i = 0u; i < det_device.volumes().size(); i++) {
0040         volumes_device[i] = det_device.volumes()[i];
0041     }
0042 
0043     // copy objects - surfaces
0044     for (unsigned int i = 0u; i < det_device.surfaces().size(); i++) {
0045         surfaces_device[i] = det_device.surfaces()[i];
0046     }
0047 
0048     // copy objects - transforms
0049     auto& trfs = det_device.transform_store();
0050     auto ctx = typename detector_host_t::geometry_context{};
0051     for (unsigned int i = 0u; i < trfs.size(ctx); i++) {
0052         transforms_device[i] = trfs.at(i, ctx);
0053     }
0054 
0055     // copy objects - masks
0056     auto& masks = det_device.mask_store();
0057     auto& rectangles =
0058         masks.template get<detector_host_t::masks::id::e_rectangle2D>();
0059     for (unsigned int i = 0u; i < rectangles.size(); i++) {
0060         rectangles_device[i] = rectangles[i];
0061     }
0062 
0063     auto& discs = masks.template get<detector_host_t::masks::id::e_ring2D>();
0064     for (unsigned int i = 0u; i < discs.size(); i++) {
0065         discs_device[i] = discs[i];
0066     }
0067 
0068     auto& cylinders = masks.template get<
0069         detector_host_t::masks::id::e_concentric_cylinder2D>();
0070     for (unsigned int i = 0u; i < cylinders.size(); i++) {
0071         cylinders_device[i] = cylinders[i];
0072     }
0073 }
0074 
0075 /// implementation of the test function for detector
0076 void detector_test(typename detector_host_t::view_type det_data,
0077                    vecmem::data::vector_view<det_volume_t> volumes_data,
0078                    vecmem::data::vector_view<det_surface_t> surfaces_data,
0079                    vecmem::data::vector_view<transform_t> transforms_data,
0080                    vecmem::data::vector_view<rectangle_t> rectangles_data,
0081                    vecmem::data::vector_view<disc_t> discs_data,
0082                    vecmem::data::vector_view<cylinder_t> cylinders_data) {
0083 
0084     constexpr int block_dim = 1u;
0085     constexpr int thread_dim = 1u;
0086     // run the test kernel
0087     hipLaunchKernelGGL(detector_test_kernel, dim3(block_dim), dim3(thread_dim),
0088                        0, 0, det_data, volumes_data, surfaces_data,
0089                        transforms_data, rectangles_data, discs_data,
0090                        cylinders_data);
0091     // HIP error check
0092     DETRAY_HIP_ERROR_CHECK(hipGetLastError());
0093     DETRAY_HIP_ERROR_CHECK(hipDeviceSynchronize());
0094 }
0095 }  // namespace detray