mirror of
https://github.com/StepanovPlaton/NeuralNetwork.git
synced 2026-04-03 20:30:39 +04:00
Update readme
This commit is contained in:
12
README.md
12
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 - это путешествие в Мордор и обратно!
|
||||
|
||||
50
src/run.py
50
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} раз")
|
||||
|
||||
Reference in New Issue
Block a user