ad543054fc
Architectural review (2026-05-15) указал что cudaStreamSynchronize-only на producer-side не достаточен для cross-process visibility — NVIDIA Programming Guide §3.2.8 требует cudaIpcEventHandle_t. Phase 0 PoC v1 не проверял этот случай из-за cudaMemcpy который имеет implicit barriers. spike-v2 воспроизводит правильный сценарий: consumer запускает verify_kernel на ОТДЕЛЬНОМ stream'е (real-world use case — PyTorch / OpenCV CUDA), pattern включает row-based component для отлова partial-frame torn. Запуск 4 scenarios × 1500/600 frames: A-fhd60 (stream sync, FHD@60): 0 torn, p99=267µs, max=14.7ms B-fhd60 (event sync, FHD@60): 0 torn, p99=344µs, max=5.2ms A-4k30 (stream sync, 4K@30): 0 torn, p99=606µs, max=4.4ms B-4k30 (event sync, 4K@30): 0 torn, p99=437µs, max=3.7ms Все 4 показали 0 torn frames. R1 на single-host single-GPU фактически не воспроизводится — но NVIDIA contractually не гарантирует это. Decision: events as default (R1/R2 resolved). Architecture.md §6.6 закрыт. Tradeoff: mean latency +20µs, max latency в 3× ниже (predictable tail) + future-proof для multi-GPU. Также Dockerfile.dev — апдейт CUDA до 13.0.3 (12.4 не существует с devel-ubuntu24.04). Связано с PR review: R1, R2, R3 (R3, R4 — в следующих коммитах).
74 lines
2.4 KiB
Docker
74 lines
2.4 KiB
Docker
# Dev-окружение для cuframes — содержит CUDA toolkit (с nvcc), build tools,
|
||
# линкеры/анализаторы. GPU прокидывается через `--gpus all` на runtime.
|
||
#
|
||
# Base: nvidia/cuda devel-image c CUDA 13.0 + cuDNN на Ubuntu 24.04.
|
||
# devel-вариант (не runtime) — нужен для компиляции CUDA-кода (nvcc, headers).
|
||
# CUDA 13.x — текущая stable линейка с поддержкой sm_120 (Blackwell, RTX 5090).
|
||
|
||
FROM nvidia/cuda:13.0.3-cudnn-devel-ubuntu24.04
|
||
|
||
# Не запрашивать tzdata interactive при apt
|
||
ENV DEBIAN_FRONTEND=noninteractive
|
||
|
||
# Build tools
|
||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||
build-essential \
|
||
ca-certificates \
|
||
clang \
|
||
clang-format \
|
||
clang-tidy \
|
||
cmake \
|
||
ninja-build \
|
||
pkg-config \
|
||
gcc-12 g++-12 \
|
||
gdb \
|
||
git \
|
||
nasm \
|
||
yasm \
|
||
libtool \
|
||
autoconf \
|
||
automake \
|
||
# Системные libs (для FFmpeg build в Phase 2 и для examples)
|
||
libavcodec-dev \
|
||
libavformat-dev \
|
||
libavutil-dev \
|
||
libavfilter-dev \
|
||
libswscale-dev \
|
||
libssl-dev \
|
||
# Python для bindings (Phase 3)
|
||
python3 \
|
||
python3-dev \
|
||
python3-pip \
|
||
# Profiling / debug tools
|
||
valgrind \
|
||
strace \
|
||
ltrace \
|
||
linux-tools-common \
|
||
# Просмотр и работа в контейнере
|
||
vim \
|
||
curl \
|
||
wget \
|
||
less \
|
||
htop \
|
||
sudo \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# Симлинки для удобства (CUDA устанавливает специфичные пути)
|
||
ENV CUDA_HOME=/usr/local/cuda
|
||
ENV PATH=${CUDA_HOME}/bin:${PATH}
|
||
ENV LD_LIBRARY_PATH=${CUDA_HOME}/lib64:${LD_LIBRARY_PATH}
|
||
|
||
# Поднятие лимита открытых файлов для Unix sockets + eventfd (cuframes producer
|
||
# может держать N consumers × M eventfds)
|
||
RUN echo '* soft nofile 65536' >> /etc/security/limits.conf && \
|
||
echo '* hard nofile 65536' >> /etc/security/limits.conf
|
||
|
||
# Working directory совпадает с bind-mount из docker-compose
|
||
WORKDIR /workspace
|
||
|
||
# Default shell — bash с history-file под /workspace/.bash_history (persistent)
|
||
ENV HISTFILE=/workspace/.bash_history
|
||
SHELL ["/bin/bash", "-c"]
|
||
|
||
CMD ["/bin/bash"]
|