604cffb5e5
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).
28 lines
1013 B
CMake
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()
|