CCCL (CUDA C++ Core Libraries) provides: - CUB: device/block/warp-level GPU primitives (reduce, scan, sort, topk) - Thrust: high-level parallel algorithms (transform_reduce, sort, scan) - libcudacxx: CUDA C++ standard library (atomics, barriers, memory) - cudax: experimental features (memory resources, allocators) - Tuning policies: per-SM hardware-specific algorithm parameters Competition optimization vectors mapped to CCCL: - Output TPS (83% weight): warp_reduce, block_reduce, device_topk - Input TPS (14% weight): device_scan, block_load, prefetch - Cache TPS (3% weight): prefix caching strategy patterns - Memory (0.9 util): pooled/cached/buddy allocators Source: https://github.com/NVIDIA/cccl (shallow clone, HEAD only) License: Apache-2.0
205 lines
6.0 KiB
Plaintext
205 lines
6.0 KiB
Plaintext
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of libcu++, the C++ Standard Library for your entire system,
|
|
// under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
// SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef _CUDA_STD_CSTDINT
|
|
#define _CUDA_STD_CSTDINT
|
|
|
|
#include <cuda/std/detail/__config>
|
|
|
|
#if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)
|
|
# pragma GCC system_header
|
|
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)
|
|
# pragma clang system_header
|
|
#elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)
|
|
# pragma system_header
|
|
#endif // no system header
|
|
|
|
#include <cuda/std/version>
|
|
|
|
#if _CCCL_HOSTED()
|
|
# include <cstdint>
|
|
#elif _CCCL_COMPILER(NVRTC) || (_CCCL_HOSTJIT() && _CCCL_OS(WINDOWS))
|
|
# include <cuda/std/climits>
|
|
|
|
using int8_t = signed char;
|
|
using int16_t = signed short;
|
|
using int32_t = signed int;
|
|
using int64_t = signed long long;
|
|
using uint8_t = unsigned char;
|
|
using uint16_t = unsigned short;
|
|
using uint32_t = unsigned int;
|
|
using uint64_t = unsigned long long;
|
|
|
|
# if _CCCL_OS(WINDOWS) // See https://learn.microsoft.com/en-us/cpp/c-runtime-library/standard-types?view=msvc-170
|
|
using int_fast8_t = signed char;
|
|
using int_fast16_t = int;
|
|
using int_fast32_t = int;
|
|
using int_fast64_t = long long;
|
|
using uint_fast8_t = unsigned char;
|
|
using uint_fast16_t = unsigned int;
|
|
using uint_fast32_t = unsigned int;
|
|
using uint_fast64_t = unsigned long long;
|
|
# else // ^^^ _CCCL_OS(WINDOWS) ^^^ / vvv !_CCCL_OS(WINDOWS) vvv
|
|
using int_fast8_t = int8_t;
|
|
using int_fast16_t = int16_t;
|
|
using int_fast32_t = int32_t;
|
|
using int_fast64_t = int64_t;
|
|
using uint_fast8_t = uint8_t;
|
|
using uint_fast16_t = uint16_t;
|
|
using uint_fast32_t = uint32_t;
|
|
using uint_fast64_t = uint64_t;
|
|
# endif // !_CCCL_OS(WINDOWS)
|
|
|
|
using int_least8_t = int8_t;
|
|
using int_least16_t = int16_t;
|
|
using int_least32_t = int32_t;
|
|
using int_least64_t = int64_t;
|
|
using uint_least8_t = uint8_t;
|
|
using uint_least16_t = uint16_t;
|
|
using uint_least32_t = uint32_t;
|
|
using uint_least64_t = uint64_t;
|
|
|
|
using intptr_t = int64_t;
|
|
using uintptr_t = uint64_t;
|
|
|
|
using intmax_t = int64_t;
|
|
using uintmax_t = uint64_t;
|
|
|
|
# define INT8_MIN SCHAR_MIN
|
|
# define INT16_MIN SHRT_MIN
|
|
# define INT32_MIN INT_MIN
|
|
# define INT64_MIN LLONG_MIN
|
|
# define INT8_MAX SCHAR_MAX
|
|
# define INT16_MAX SHRT_MAX
|
|
# define INT32_MAX INT_MAX
|
|
# define INT64_MAX LLONG_MAX
|
|
# define UINT8_MAX UCHAR_MAX
|
|
# define UINT16_MAX USHRT_MAX
|
|
# define UINT32_MAX UINT_MAX
|
|
# define UINT64_MAX ULLONG_MAX
|
|
|
|
# if _CCCL_OS(WINDOWS) // See https://learn.microsoft.com/en-us/cpp/c-runtime-library/standard-types?view=msvc-170
|
|
# define INT_FAST8_MIN INT8_MIN
|
|
# define INT_FAST16_MIN INT32_MIN
|
|
# define INT_FAST32_MIN INT32_MIN
|
|
# define INT_FAST64_MIN INT64_MIN
|
|
# define INT_FAST8_MAX INT8_MAX
|
|
# define INT_FAST16_MAX INT32_MAX
|
|
# define INT_FAST32_MAX INT32_MAX
|
|
# define INT_FAST64_MAX INT64_MAX
|
|
# define UINT_FAST8_MAX UINT8_MAX
|
|
# define UINT_FAST16_MAX UINT32_MAX
|
|
# define UINT_FAST32_MAX UINT32_MAX
|
|
# define UINT_FAST64_MAX UINT64_MAX
|
|
# else // ^^^ _CCCL_OS(WINDOWS) ^^^ / vvv !_CCCL_OS(WINDOWS) vvv
|
|
# define INT_FAST8_MIN INT8_MIN
|
|
# define INT_FAST16_MIN INT16_MIN
|
|
# define INT_FAST32_MIN INT32_MIN
|
|
# define INT_FAST64_MIN INT64_MIN
|
|
# define INT_FAST8_MAX INT8_MAX
|
|
# define INT_FAST16_MAX INT16_MAX
|
|
# define INT_FAST32_MAX INT32_MAX
|
|
# define INT_FAST64_MAX INT64_MAX
|
|
# define UINT_FAST8_MAX UINT8_MAX
|
|
# define UINT_FAST16_MAX UINT16_MAX
|
|
# define UINT_FAST32_MAX UINT32_MAX
|
|
# define UINT_FAST64_MAX UINT64_MAX
|
|
# endif // !_CCCL_OS(WINDOWS)
|
|
|
|
# define INT_LEAST8_MIN INT8_MIN
|
|
# define INT_LEAST16_MIN INT16_MIN
|
|
# define INT_LEAST32_MIN INT32_MIN
|
|
# define INT_LEAST64_MIN INT64_MIN
|
|
# define INT_LEAST8_MAX INT8_MAX
|
|
# define INT_LEAST16_MAX INT16_MAX
|
|
# define INT_LEAST32_MAX INT32_MAX
|
|
# define INT_LEAST64_MAX INT64_MAX
|
|
# define UINT_LEAST8_MAX UINT8_MAX
|
|
# define UINT_LEAST16_MAX UINT16_MAX
|
|
# define UINT_LEAST32_MAX UINT32_MAX
|
|
# define UINT_LEAST64_MAX UINT64_MAX
|
|
|
|
# define INTPTR_MIN INT64_MIN
|
|
# define INTPTR_MAX INT64_MAX
|
|
# define UINTPTR_MAX UINT64_MAX
|
|
|
|
# define INTMAX_MIN INT64_MIN
|
|
# define INTMAX_MAX INT64_MAX
|
|
# define UINTMAX_MAX UINT64_MAX
|
|
|
|
# define PTRDIFF_MIN INT64_MIN
|
|
# define PTRDIFF_MAX INT64_MAX
|
|
|
|
# define SIZE_MAX UINT64_MAX
|
|
|
|
# define INT8_C(X) ((::int_least8_t) (X))
|
|
# define INT16_C(X) ((::int_least16_t) (X))
|
|
# define INT32_C(X) ((::int_least32_t) (X))
|
|
# define INT64_C(X) ((::int_least64_t) (X))
|
|
# define UINT8_C(X) ((::uint_least8_t) (X))
|
|
# define UINT16_C(X) ((::uint_least16_t) (X))
|
|
# define UINT32_C(X) ((::uint_least32_t) (X))
|
|
# define UINT64_C(X) ((::uint_least64_t) (X))
|
|
|
|
# define INTMAX_C(X) ((::intmax_t) (X))
|
|
# define UINTMAX_C(X) ((::uintmax_t) (X))
|
|
#endif // _CCCL_COMPILER(NVRTC) || (_CCCL_HOSTJIT() && _CCCL_OS(WINDOWS))
|
|
|
|
#include <cuda/std/__cccl/prologue.h>
|
|
|
|
_CCCL_BEGIN_NAMESPACE_CUDA_STD
|
|
|
|
using ::int16_t;
|
|
using ::int32_t;
|
|
using ::int64_t;
|
|
using ::int8_t;
|
|
using ::uint16_t;
|
|
using ::uint32_t;
|
|
using ::uint64_t;
|
|
using ::uint8_t;
|
|
|
|
using ::int_fast16_t;
|
|
using ::int_fast32_t;
|
|
using ::int_fast64_t;
|
|
using ::int_fast8_t;
|
|
using ::uint_fast16_t;
|
|
using ::uint_fast32_t;
|
|
using ::uint_fast64_t;
|
|
using ::uint_fast8_t;
|
|
|
|
using ::int_least16_t;
|
|
using ::int_least32_t;
|
|
using ::int_least64_t;
|
|
using ::int_least8_t;
|
|
using ::uint_least16_t;
|
|
using ::uint_least32_t;
|
|
using ::uint_least64_t;
|
|
using ::uint_least8_t;
|
|
|
|
using ::intptr_t;
|
|
using ::uintptr_t;
|
|
|
|
using ::intmax_t;
|
|
using ::uintmax_t;
|
|
|
|
#if _CCCL_HAS_INT128()
|
|
using __cccl_intmax_t = __int128_t;
|
|
using __cccl_uintmax_t = __uint128_t;
|
|
#else // ^^^ _CCCL_HAS_INT128() ^^^ / vvv !_CCCL_HAS_INT128() vvv
|
|
using __cccl_intmax_t = long long;
|
|
using __cccl_uintmax_t = unsigned long long;
|
|
#endif // !_CCCL_HAS_INT128()
|
|
|
|
_CCCL_END_NAMESPACE_CUDA_STD
|
|
|
|
#include <cuda/std/__cccl/epilogue.h>
|
|
|
|
#endif // _CUDA_STD_CSTDINT
|