From 0455d9bd5bbc1c82cb7b5da7e9bb0a64032c2f3a Mon Sep 17 00:00:00 2001 From: StepanovPlaton Date: Thu, 20 Nov 2025 13:42:49 +0400 Subject: [PATCH] Update readme --- README.md | 12 ++++++------ src/run.py | 50 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index dfb7b19..06f320a 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,20 @@ # Neural Network ++ -> Neural Network++ - это движок для ~путешествия в Мордор~ создания нейронных сетей написанный на С++ +> Neural Network++ - это движок для ~путешествия в Мордор~ создания нейронных сетей ## Стек: - [C++ 23](https://ru.wikipedia.org/wiki/C%2B%2B23) -- [OpenCL](https://ru.wikipedia.org/wiki/OpenCL) -- [pybind11](https://github.com/pybind/pybind11) +- [OpenCL](https://ru.wikipedia.org/wiki/OpenCL) - библиотека GPGPU (вычисления на видеокарте) +- [pybind11](https://github.com/pybind/pybind11) - создание С++ библиотеки для Python - **Всё!** :wink: ## О проекте: - Движок для создания нейронных сетей -- Поддерка вычислений на CPU или на GPU - - [Алгоритмы с массовым параллелизмом на GPU](./src/tensor/opencl/kernels) для ускорения - - Классические алгоритмы на CPU для проверки вычислений +- Поддержка вычислений [на CPU](./src/tensor/cpu/) или [на GPU с использованием OpenCL](./src/tensor/opencl/) + - [Алгоритмы массового параллелизма на GPU](./src/tensor/opencl/kernels) для быстрых вычислений + - Классические алгоритмы на CPU для возможности проверки - [Класс Tensor](./src/tensor/tensor.hpp) для работы с тензорами произвольной размерности ## Forward & Back propogation - это путешествие в Мордор и обратно! diff --git a/src/run.py b/src/run.py index 8352381..abf48d1 100644 --- a/src/run.py +++ b/src/run.py @@ -1,10 +1,54 @@ from tensor.tensor import * +import numpy as np +import time if (MODE == PLATFORM.OPENCL): init("./tensor/") a = Matrix([1024, 1024], 1) -a += 1 b = Matrix([1024, 1024], 1) -c = a @ b -print(c) + + +def benchmark_tensor(): + c = ((a @ b) @ (a @ b)) @ ((a @ b) @ (a @ b)) + return c + + +a_np = np.ones([1024, 1024], dtype=np.float32) +b_np = np.ones([1024, 1024], dtype=np.float32) + + +def benchmark_numpy(): + c = ((a_np @ b_np) @ (a_np @ b_np)) @ ((a_np @ b_np) @ (a_np @ b_np)) + return c + + +# Многократное выполнение для более точного измерения +iterations = 5 + +print("Бенчмарк Tensor:") +tensor_times = [] +for i in range(iterations): + start = time.time() + result_tensor = benchmark_tensor() + print(result_tensor) + tensor_times.append(time.time() - start) + +print("Бенчмарк NumPy:") +numpy_times = [] +for i in range(iterations): + start = time.time() + result_numpy = benchmark_numpy() + print(result_numpy) + numpy_times.append(time.time() - start) + +print( + f"\nСреднее время Tensor: {np.mean(tensor_times):.4f} ± {np.std(tensor_times):.4f} сек") +print( + f"Среднее время NumPy: {np.mean(numpy_times):.4f} ± {np.std(numpy_times):.4f} сек") + +ratio = np.mean(numpy_times) / np.mean(tensor_times) +if ratio > 1: + print(f"Tensor быстрее в {ratio:.2f} раз") +else: + print(f"NumPy быстрее в {1/ratio:.2f} раз")