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
68 lines
2.7 KiB
Plaintext
68 lines
2.7 KiB
Plaintext
// SPDX-FileCopyrightText: Copyright (c) 2011, Duane Merrill. All rights reserved.
|
|
// SPDX-FileCopyrightText: Copyright (c) 2011-2024, NVIDIA CORPORATION. All rights reserved.
|
|
// SPDX-License-Identifier: BSD-3
|
|
|
|
/******************************************************************************
|
|
* Common C/C++ macro utilities
|
|
******************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#include <cuda/__cccl_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 <cub/detail/detect_cuda_runtime.cuh> // IWYU pragma: export
|
|
#include <cub/util_namespace.cuh> // IWYU pragma: export
|
|
|
|
CUB_NAMESPACE_BEGIN
|
|
|
|
#ifdef _CCCL_DOXYGEN_INVOKED
|
|
# define CUB_DISABLE_KERNEL_VISIBILITY_WARNING_SUPPRESSION
|
|
#endif
|
|
|
|
/**
|
|
* @def CUB_DISABLE_KERNEL_VISIBILITY_WARNING_SUPPRESSION
|
|
* If defined, the default suppression of kernel visibility attribute warning is disabled.
|
|
*/
|
|
#if !defined(CUB_DISABLE_KERNEL_VISIBILITY_WARNING_SUPPRESSION)
|
|
_CCCL_DIAG_SUPPRESS_GCC("-Wattributes")
|
|
_CCCL_DIAG_SUPPRESS_CLANG("-Wattributes")
|
|
# if !_CCCL_CUDA_COMPILER(NVHPC)
|
|
_CCCL_DIAG_SUPPRESS_NVHPC(attribute_requires_external_linkage)
|
|
# endif // !_CCCL_CUDA_COMPILER(NVHPC)
|
|
#endif // !CUB_DISABLE_KERNEL_VISIBILITY_WARNING_SUPPRESSION
|
|
|
|
#ifndef CUB_DEFINE_KERNEL_GETTER
|
|
# define CUB_DEFINE_KERNEL_GETTER(name, ...) \
|
|
_CCCL_HIDE_FROM_ABI CUB_RUNTIME_FUNCTION static constexpr decltype(&__VA_ARGS__) name() \
|
|
{ \
|
|
return &__VA_ARGS__; \
|
|
}
|
|
#endif
|
|
|
|
// TODO(bgruber): drop in CCCL 4.0 when we drop the public dispatchers
|
|
#ifndef CUB_DEFINE_SUB_POLICY_GETTER
|
|
# define CUB_DEFINE_SUB_POLICY_GETTER(name) \
|
|
_CCCL_HOST_DEVICE static constexpr auto name() \
|
|
{ \
|
|
return MakePolicyWrapper(typename StaticPolicyT::name##Policy()); \
|
|
}
|
|
#endif
|
|
|
|
#if defined(CUB_DEFINE_RUNTIME_POLICIES)
|
|
# define CUB_DETAIL_STATIC_ISH_ASSERT(expr, msg) _CCCL_ASSERT(expr, msg)
|
|
# define CUB_DETAIL_CONSTEXPR_ISH
|
|
#else // ^^^ CUB_DEFINE_RUNTIME_POLICIES ^^^ / vvv !CUB_DEFINE_RUNTIME_POLICIES vvv
|
|
# define CUB_DETAIL_STATIC_ISH_ASSERT(expr, msg) static_assert(expr, msg);
|
|
# define CUB_DETAIL_CONSTEXPR_ISH constexpr
|
|
#endif // !(CUB_DEFINE_RUNTIME_POLICIES)
|
|
|
|
CUB_NAMESPACE_END
|