Files
TheRock/math-libs/libhipcxx/include/cuda/__ptx/ptx_dot_variants.h
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

227 lines
6.7 KiB
C++

// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// 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.
//
//===----------------------------------------------------------------------===//
// WARNING: The source of truth for this file is libcuda-ptx. Do not modify without syncing with libcuda-ptx.
#ifndef _CUDA_PTX_DOT_VARIANTS_H_
#define _CUDA_PTX_DOT_VARIANTS_H_
#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/__type_traits/integral_constant.h>
/*
* Public integral constant types and values for ".variant"s:
*
* - .sem: acquire, release, ..
* - .space: global, shared, constant, ..
* - .scope: cta, cluster, gpu, ..
* - .op: add, min, cas, ..
*
* For each .variant, the code below defines:
* - An enum `dot_variant` with each possible value
* - A type template `variant_t<dot_variant>`
* - Types `variant_A_t`, ..., `variant_Z_t`
* - Constexpr values `variant_A` of type `variant_A_t`
*
* These types enable specifying fine-grained overloads of a PTX binding. If a
* binding can handle multiple variants, then it is defined as:
*
* template <dot_variant var>
* [...] void ptx_binding(variant_t<var> __v) { ... }
*
* If it only handles a single variant, then it is defined as:
*
* [...] void ptx_binding(variant_A __v) { ... }
*
* If two variants have different behaviors or return types (see .space
* overloads of mbarrier.arrive.expect_tx for an example), then these can be
* provided as separate overloads of the same function:
*
* [...] void ptx_binding(variant_A __v) { ... }
* [...] int ptx_binding(variant_B __v) { ... }
*
*/
_LIBCUDACXX_BEGIN_NAMESPACE_CUDA_PTX
// https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#operation-types
enum class dot_sem
{
acq_rel,
acquire,
relaxed,
release,
sc,
weak
};
// https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#state-spaces
enum class dot_space
{
global,
cluster, // The PTX spelling is shared::cluster
shared, // The PTX spelling is shared::cta
// The following state spaces are unlikely to be used in cuda::ptx in the near
// future, so they are not exposed:
// reg,
// sreg,
// const_mem, // Using const_mem as `const` is reserved in C++.
// local,
// param,
// tex // deprecated
};
// https://docs.nvidia.com/cuda/parallel-thread-execution/index.html#scope
enum class dot_scope
{
cta,
cluster,
gpu,
sys
};
enum class dot_op
{
add,
dec,
inc,
max,
min,
and_op, // Using and_op, as `and, or, xor` are reserved in C++.
or_op,
xor_op,
cas,
exch
};
enum class dot_cta_group
{
cta_group_1,
cta_group_2
};
enum class dot_kind
{
f16,
f8f6f4,
i8,
mxf4,
mxf4nvf4,
mxf8f6f4,
tf32
};
template <dot_sem __sem>
using sem_t = _CUDA_VSTD::integral_constant<dot_sem, __sem>;
using sem_acq_rel_t = sem_t<dot_sem::acq_rel>;
using sem_acquire_t = sem_t<dot_sem::acquire>;
using sem_relaxed_t = sem_t<dot_sem::relaxed>;
using sem_release_t = sem_t<dot_sem::release>;
using sem_sc_t = sem_t<dot_sem::sc>;
using sem_weak_t = sem_t<dot_sem::weak>;
static constexpr sem_acq_rel_t sem_acq_rel{};
static constexpr sem_acquire_t sem_acquire{};
static constexpr sem_relaxed_t sem_relaxed{};
static constexpr sem_release_t sem_release{};
static constexpr sem_sc_t sem_sc{};
static constexpr sem_weak_t sem_weak{};
template <dot_space __spc>
using space_t = _CUDA_VSTD::integral_constant<dot_space, __spc>;
using space_global_t = space_t<dot_space::global>;
using space_shared_t = space_t<dot_space::shared>;
using space_cluster_t = space_t<dot_space::cluster>;
static constexpr space_global_t space_global{};
static constexpr space_shared_t space_shared{};
static constexpr space_cluster_t space_cluster{};
template <dot_scope __scope>
using scope_t = _CUDA_VSTD::integral_constant<dot_scope, __scope>;
using scope_cluster_t = scope_t<dot_scope::cluster>;
using scope_cta_t = scope_t<dot_scope::cta>;
using scope_gpu_t = scope_t<dot_scope::gpu>;
using scope_sys_t = scope_t<dot_scope::sys>;
static constexpr scope_cluster_t scope_cluster{};
static constexpr scope_cta_t scope_cta{};
static constexpr scope_gpu_t scope_gpu{};
static constexpr scope_sys_t scope_sys{};
template <dot_op __op>
using op_t = _CUDA_VSTD::integral_constant<dot_op, __op>;
using op_add_t = op_t<dot_op::add>;
using op_dec_t = op_t<dot_op::dec>;
using op_inc_t = op_t<dot_op::inc>;
using op_max_t = op_t<dot_op::max>;
using op_min_t = op_t<dot_op::min>;
using op_and_op_t = op_t<dot_op::and_op>;
using op_or_op_t = op_t<dot_op::or_op>;
using op_xor_op_t = op_t<dot_op::xor_op>;
using op_cas_t = op_t<dot_op::cas>;
using op_exch_t = op_t<dot_op::exch>;
static constexpr op_add_t op_add{};
static constexpr op_dec_t op_dec{};
static constexpr op_inc_t op_inc{};
static constexpr op_max_t op_max{};
static constexpr op_min_t op_min{};
static constexpr op_and_op_t op_and_op{};
static constexpr op_or_op_t op_or_op{};
static constexpr op_xor_op_t op_xor_op{};
static constexpr op_cas_t op_cas{};
static constexpr op_exch_t op_exch{};
template <dot_cta_group __cta_group>
using cta_group_t = _CUDA_VSTD::integral_constant<dot_cta_group, __cta_group>;
using cta_group_1_t = cta_group_t<dot_cta_group::cta_group_1>;
using cta_group_2_t = cta_group_t<dot_cta_group::cta_group_2>;
static constexpr cta_group_1_t cta_group_1{};
static constexpr cta_group_2_t cta_group_2{};
template <dot_kind __kind>
using kind_t = _CUDA_VSTD::integral_constant<dot_kind, __kind>;
using kind_f16_t = kind_t<dot_kind::f16>;
using kind_f8f6f4_t = kind_t<dot_kind::f8f6f4>;
using kind_i8_t = kind_t<dot_kind::i8>;
using kind_mxf4_t = kind_t<dot_kind::mxf4>;
using kind_mxf4nvf4_t = kind_t<dot_kind::mxf4nvf4>;
using kind_mxf8f6f4_t = kind_t<dot_kind::mxf8f6f4>;
using kind_tf32_t = kind_t<dot_kind::tf32>;
static constexpr kind_f16_t kind_f16{};
static constexpr kind_f8f6f4_t kind_f8f6f4{};
static constexpr kind_i8_t kind_i8{};
static constexpr kind_mxf4_t kind_mxf4{};
static constexpr kind_mxf4nvf4_t kind_mxf4nvf4{};
static constexpr kind_mxf8f6f4_t kind_mxf8f6f4{};
static constexpr kind_tf32_t kind_tf32{};
template <int n>
using n32_t = _CUDA_VSTD::integral_constant<int, n>;
_LIBCUDACXX_END_NAMESPACE_CUDA_PTX
#endif // _CUDA_PTX_DOT_VARIANTS_H_