ATLAS Offline Software
Loading...
Searching...
No Matches
IGPUKernelSizeOptimizer.h
Go to the documentation of this file.
1//
2// Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3//
4// Dear emacs, this is -*- c++ -*-
5//
6
7#ifndef CALORECGPU_IGPUKERNELSIZEOPTIMIZER_H
8#define CALORECGPU_IGPUKERNELSIZEOPTIMIZER_H
9
10#include <string>
11
13{
14 int grid_x = 0, grid_y = 0, grid_z = 0, block_x = 0, block_y = 0, block_z = 0;
15};
16
27
29{
30 public:
31
36
38
39 virtual void register_kernel(const std::string & kernel_name,
40 void * kernel,
41 const int blocksize_hint,
42 const int gridsize_hint,
43 const int max_total_threads)
44 {
45 this->register_kernels(kernel_name, 1, &kernel, &blocksize_hint, &gridsize_hint, &max_total_threads, 0);
46 }
47
54 virtual void register_kernels(const std::string & tool_name,
55 const int number,
56 void ** kernels,
57 const int * blocksize_hints,
58 const int * gridsize_hints,
59 const int * max_total_threads,
60 const int offset = 0) = 0;
61
64 const int number = 0,
65 const int dynamic_memory = 0) const = 0;
66
68 virtual bool can_use_cooperative_groups() const = 0;
69
71 virtual bool can_use_dynamic_parallelism() const = 0;
72
74 virtual bool use_minimal_kernel_sizes() const
75 {
76 //Testing shows that, at least on the devices we use,
77 //we only lose performance by dyn-par'ing our way to do this.
78 return false;
79 }
80
81 virtual ~IGPUKernelSizeOptimizer() = default;
82};
83#endif
Interface for GPU kernel size optimization (allowing adjustment of kernel sizes to the properties of ...
virtual void register_kernels(const std::string &tool_name, const int number, void **kernels, const int *blocksize_hints, const int *gridsize_hints, const int *max_total_threads, const int offset=0)=0
Register a set of kernels that can be referred back to with a name and a number.
virtual bool can_use_cooperative_groups() const =0
Whether the device + environment in use support cooperative groups.
virtual bool can_use_dynamic_parallelism() const =0
Whether the device + environment in use support dynamic parallelism.
virtual ~IGPUKernelSizeOptimizer()=default
virtual void register_kernel(const std::string &kernel_name, void *kernel, const int blocksize_hint, const int gridsize_hint, const int max_total_threads)
Register a kernel with a specific name.
virtual bool use_minimal_kernel_sizes() const
Whether to avoid oversizing kernels and instead (if possible) launch kernels with the exact number of...
virtual CUDAKernelLaunchConfiguration get_launch_configuration(const std::string &name, const int number=0, const int dynamic_memory=0) const =0
Retrieve the (hopefully optimal) kernel launch configuration.
std::string number(const double &d, const std::string &s)
Definition utils.cxx:186