cuda::ilog2 and cuda::ilog10

Contents

cuda::ilog2 and cuda::ilog10#

2026-10-01

3 min read time

Applies to Linux and Windows

This page documents cuda::ilog2 and cuda::ilog10, which compute the integer logarithm to base 2 or base 10 of an integer value.

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 type.

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 if T == uint32_t or T == __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;
}

See it on Godbolt 🔗