Files
LTX-2/packages/ltx-kernels/csrc/all2all/cuda/api.cuh
T
2026-07-07 16:57:50 +00:00

100 lines
4.5 KiB
Plaintext

/**
* @file api.cuh
* @brief CUDA kernel launch function declarations for All2All operations.
*
* This header provides the host-callable interface for launching the All2All
* CUDA kernels. These functions handle template instantiation and kernel
* configuration based on the tensor data type.
*/
#pragma once
#include <ATen/cuda/CUDADataType.h>
#include <vector>
namespace ltx_kernels {
namespace all2all {
namespace all2all_cuda {
/**
* @brief Launches the All2All head redistribution kernel.
*
* Redistributes attention heads across GPUs:
* Input: [batch, num_tokens, num_heads, head_size] per GPU
* Output: [batch, total_tokens, num_heads/world_size, head_size] per GPU
*
* @param buffer_ptrs Device array of pointers to each rank's data buffer
* @param barrier_signal_ptrs Device array of pointers to barrier signals
* @param x Source tensor data pointer
* @param prefix_rank_tokens Cumulative token counts per rank (device memory)
* @param rank This GPU's rank (0 to world_size-1)
* @param world_size Total number of GPUs
* @param batch_size Batch dimension size
* @param total_tokens Sum of tokens across all ranks
* @param num_tokens Number of tokens on this rank
* @param num_heads Total number of attention heads
* @param head_size Size of each attention head
* @param stream CUDA stream for async execution
* @param num_sms Number of SMs to use for the kernel
* @param tensor_dtype Data type (BFloat16 or Float8_e4m3fn)
*/
void all2all_head_launch(void **buffer_ptrs, int **barrier_signal_ptrs, void *x, int *prefix_rank_tokens, int rank,
int world_size, int batch_size, int total_tokens, int num_tokens, int num_heads, int head_size,
cudaStream_t stream, int num_sms, at::ScalarType tensor_dtype, uint64_t timeout_cycles);
/**
* @brief Launches the gather heads kernel (inverse of all2all_head_launch).
*
* Redistributes tokens back to original head distribution:
* Input: [batch, total_tokens, heads_per_rank, head_size] per GPU
* Output: [batch, rank_tokens[rank], num_heads, head_size] per GPU
*
* @param buffer_ptrs Device array of pointers to each rank's data buffer
* @param barrier_signal_ptrs Device array of pointers to barrier signals
* @param x Source tensor data pointer
* @param rank_tokens Token count for each rank (device memory)
* @param prefix_rank_tokens Cumulative token counts (device memory)
* @param rank This GPU's rank
* @param world_size Total number of GPUs
* @param batch_size Batch dimension size
* @param total_tokens Sum of tokens across all ranks
* @param num_heads Total number of attention heads (reconstructed)
* @param head_size Size of each attention head
* @param stream CUDA stream for async execution
* @param num_sms Number of SMs to use for the kernel
* @param tensor_dtype Data type (BFloat16 or Float8_e4m3fn)
*/
void all2all_head_gather_launch(void **buffer_ptrs, int **barrier_signal_ptrs, void *x, const int *rank_tokens,
int *prefix_rank_tokens, int rank, int world_size, int batch_size, int total_tokens,
int num_heads, int head_size, cudaStream_t stream, int num_sms,
at::ScalarType tensor_dtype, uint64_t timeout_cycles);
/**
* @brief Launches the AllGather kernel for sequence tokens.
*
* Gathers sequence tokens from all ranks:
* Input: [batch, seqlen, hidden_dim] per GPU
* Output: [batch, total_tokens, hidden_dim] per GPU (identical on all)
*
* @param buffer_ptrs Device array of pointers to each rank's data buffer
* @param barrier_signal_ptrs Device array of pointers to barrier signals
* @param x Source tensor data pointer
* @param prefix_rank_tokens Cumulative token counts (device memory)
* @param rank This GPU's rank
* @param world_size Total number of GPUs
* @param batch_size Batch dimension size
* @param seqlen Number of tokens on this rank
* @param hidden_dim Hidden dimension size (num_heads * head_size)
* @param total_tokens Sum of tokens across all ranks
* @param stream CUDA stream for async execution
* @param num_sms Number of SMs to use for the kernel
* @param tensor_dtype Data type (BFloat16 or Float8_e4m3fn)
*/
void allgather_launch(void **buffer_ptrs, int **barrier_signal_ptrs, void *x, int *prefix_rank_tokens, int rank,
int world_size, int batch_size, int seqlen, int hidden_dim, int total_tokens, cudaStream_t stream,
int num_sms, at::ScalarType tensor_dtype, uint64_t timeout_cycles);
} // namespace all2all_cuda
} // namespace all2all
} // namespace ltx_kernels