Files
gx 604cffb5e5 spike(phase0): minimal CUDA IPC ping-pong producer/consumer
PoC для validation концепта перед инвестированием в Phase 1.

Структура:
- tools/spike/common.h          — типы SharedHeader / SlotDescriptor / NV12 meta
- tools/spike/pingpong_producer.cu — аллоцирует CUDA pool, экспортирует IPC handles
  в /dev/shm/cuframes-spike-<key>, имитирует publish frames с monotonic pattern
- tools/spike/pingpong_consumer.cu — открывает handles, читает frames,
  verify содержимого (no torn frames), измеряет latency, печатает summary
- tools/spike/CMakeLists.txt    — sm_75/86/89/90/120 для RTX 5090
- tools/spike/bench.sh          — basic / multi-consumer / stress scenarios
- tools/spike/README.md         — what / how / acceptance

Намеренные упрощения PoC (не идём в Phase 1 пока без validation):
- 2-slot ring (Phase 1 будет N)
- POSIX shared memory + atomic seq (без Unix socket handshake)
- cudaStreamSynchronize sync (Phase 0 spike проверит будет ли достаточно;
  альтернатива cudaIpcEventHandle_t — отложена)
- NV12 hardcoded (других форматов в Phase 1)
- Drop-oldest backpressure (без ACK protocol)

Acceptance Phase 0:
- p99 latency на RTX 5090 для FullHD < 5 ms
- throughput ≥ 1 GB/s
- multi-consumer (3) с сопоставимой latency
- cross-container работает
- 1-hour stress без VRAM/RAM leak

Если acceptance fail → дизайн пересмотр (sync через CUDA IPC events).
2026-05-14 21:20:39 +01:00

28 lines
1013 B
CMake

# Phase 0 spike — минимальный CMake для двух binaries.
# Цель: max простота, без зависимостей кроме CUDA toolkit.
cmake_minimum_required(VERSION 3.20)
project(cuframes_spike LANGUAGES CXX CUDA)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CUDA_STANDARD 17)
# Compute capability autodetect, fallback на 5.0+ (старые GPU) до 12.0
# (Blackwell). RTX 5090 = sm_120 — наш target.
if(NOT DEFINED CMAKE_CUDA_ARCHITECTURES)
set(CMAKE_CUDA_ARCHITECTURES "75;86;89;90;120")
endif()
add_executable(pingpong_producer pingpong_producer.cu)
add_executable(pingpong_consumer pingpong_consumer.cu)
# Compile flags — debug-friendly для PoC stage
foreach(target pingpong_producer pingpong_consumer)
target_compile_options(${target} PRIVATE
$<$<COMPILE_LANGUAGE:CXX>:-Wall -Wextra -O2 -g>
$<$<COMPILE_LANGUAGE:CUDA>:-O2 -g -lineinfo>
)
target_link_libraries(${target} PRIVATE cuda)
endforeach()