Небольшой учебный проект по CUDA: kNN-регрессия для оценки аренды по табличным признакам.
В проекте есть три режима:
cpu— последовательный baseline на C++naive— CUDA kernel с расчётом попарных расстояний из global memoryoptimized— CUDA kernel с tiled shared memory
cuda-rentsense-knn/
├─ CMakeLists.txt
├─ include/
├─ src/
├─ data/
└─ scripts/
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -jЕсли CUDA_ARCHITECTURES native не подходит для вашей карты, задайте архитектуру вручную в CMakeLists.txt.
На синтетических данных:
./build/cuda_rentsense_knn --mode all --data synthetic --N 10000 --Q 512 --D 32 --k 5С записью результатов в CSV:
./build/cuda_rentsense_knn \
--mode all \
--data synthetic \
--N 20000 \
--Q 1024 \
--D 32 \
--k 5 \
--csv results/benchmark.csvСкрипт data/prepare_dataset.py читает CSV, оставляет числовые признаки, делает split train/query, нормализацию и сохраняет бинарные файлы.
Пример:
python3 data/prepare_dataset.py \
--csv your_data.csv \
--target price \
--out_dir data/processedПосле этого можно запускать бинарный режим:
./build/cuda_rentsense_knn \
--mode all \
--data binary \
--train_features data/processed/X_train.bin \
--train_labels data/processed/y_train.bin \
--query_features data/processed/X_query.bin \
--query_labels data/processed/y_query.binNsight Compute:
bash scripts/profile_ncu.shNsight Systems:
bash scripts/profile_nsys.shtotal_msh2d_mskernel_msd2h_mspost_msrmse
Основная вычислительная часть — матрица попарных расстояний между query и train объектами. Эта операция естественно распараллеливается. В optimized-версии часть признаков подгружается в shared memory, чтобы уменьшить число чтений из global memory.