cuda::ilog2
and cuda::ilog10
template <typename T>
[[nodiscard]] __host__ __device__ inline constexpr
int ilog2(T value) noexcept;
template <typename T>
[[nodiscard]] __host__ __device__ inline constexpr
int ilog10(T value) noexcept;
The functions compute the logarithm to the base 2 and 10 respectively of an integer value.
Parameters
value
: The input value.
Return value
The logarithm to the base 2 and 10 respectively, rounded down to the nearest integer.
Constraints
T
is an integer types.
Preconditions
value > 0
Performance considerations
The function performs the following operations in device code:
ilog2
:FLO
ilog10
:FLO
,FMUL
,F2I
, constant memory lookup,SEL
+IADD
only ifT == uint32_t
orT == __uint128_t
Example
#include <cuda/cmath>
#include <cuda/std/cassert>
__global__ void ilog_kernel() {
assert(cuda::ilog2(20) == 4);
assert(cuda::ilog2(32) == 5);
assert(cuda::ilog10(100) == 2);
assert(cuda::ilog10(2000) == 3);
}
int main() {
ilog_kernel<<<1, 1>>>();
cudaDeviceSynchronize();
return 0;
}