padding.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023, NVIDIA CORPORATION.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #pragma once
18 
19 namespace raft_proto {
20 
21 /* Return the value that must be added to val to equal the next multiple of
22  * alignment greater than or equal to val */
23 template <typename T, typename U>
24 HOST DEVICE auto padding_size(T val, U alignment)
25 {
26  auto result = val;
27  if (alignment != 0) {
28  auto remainder = val % alignment;
29  result = alignment - remainder;
30  result *= (remainder != 0);
31  }
32  return result;
33 }
34 
35 /* Return the next multiple of alignment >= val */
36 template <typename T, typename U>
37 HOST DEVICE auto padded_size(T val, U alignment)
38 {
39  return val + padding_size(val, alignment);
40 }
41 
42 /* Return the value that must be added to val to equal the next multiple of
43  * alignment less than or equal to val */
44 template <typename T, typename U>
45 HOST DEVICE auto downpadding_size(T val, U alignment)
46 {
47  auto result = val;
48  if (alignment != 0) { result = val % alignment; }
49  return result;
50 }
51 
52 /* Return the next multiple of alignment <= val */
53 template <typename T, typename U>
54 HOST DEVICE auto downpadded_size(T val, U alignment)
55 {
56  return val - downpadding_size(val, alignment);
57 }
58 
59 } // namespace raft_proto
#define DEVICE
Definition: gpu_support.hpp:35
#define HOST
Definition: gpu_support.hpp:34
Definition: buffer.hpp:35
HOST DEVICE auto padded_size(T val, U alignment)
Definition: padding.hpp:37
HOST DEVICE auto downpadded_size(T val, U alignment)
Definition: padding.hpp:54
HOST DEVICE auto downpadding_size(T val, U alignment)
Definition: padding.hpp:45
HOST DEVICE auto padding_size(T val, U alignment)
Definition: padding.hpp:24