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++ - это движок для ~путешествия в Мордор~ создания нейронных сетей написанный на С++
|
> Neural Network++ - это движок для ~путешествия в Мордор~ создания нейронных сетей
|
||||||
|
|
||||||
## Стек:
|
## Стек:
|
||||||
|
|
||||||
- [C++ 23](https://ru.wikipedia.org/wiki/C%2B%2B23)
|
- [C++ 23](https://ru.wikipedia.org/wiki/C%2B%2B23)
|
||||||
- [OpenCL](https://ru.wikipedia.org/wiki/OpenCL)
|
- [OpenCL](https://ru.wikipedia.org/wiki/OpenCL) - библиотека GPGPU (вычисления на видеокарте)
|
||||||
- [pybind11](https://github.com/pybind/pybind11)
|
- [pybind11](https://github.com/pybind/pybind11) - создание С++ библиотеки для Python
|
||||||
- **Всё!** :wink:
|
- **Всё!** :wink:
|
||||||
|
|
||||||
## О проекте:
|
## О проекте:
|
||||||
|
|
||||||
- Движок для создания нейронных сетей
|
- Движок для создания нейронных сетей
|
||||||
- Поддерка вычислений на CPU или на GPU
|
- Поддержка вычислений [на CPU](./src/tensor/cpu/) или [на GPU с использованием OpenCL](./src/tensor/opencl/)
|
||||||
- [Алгоритмы с массовым параллелизмом на GPU](./src/tensor/opencl/kernels) для ускорения
|
- [Алгоритмы массового параллелизма на GPU](./src/tensor/opencl/kernels) для быстрых вычислений
|
||||||
- Классические алгоритмы на CPU для проверки вычислений
|
- Классические алгоритмы на CPU для возможности проверки
|
||||||
- [Класс Tensor](./src/tensor/tensor.hpp) для работы с тензорами произвольной размерности
|
- [Класс Tensor](./src/tensor/tensor.hpp) для работы с тензорами произвольной размерности
|
||||||
|
|
||||||
## Forward & Back propogation - это путешествие в Мордор и обратно!
|
## Forward & Back propogation - это путешествие в Мордор и обратно!
|
||||||
|
|||||||
50
src/run.py
50
src/run.py
@@ -1,10 +1,54 @@
|
|||||||
from tensor.tensor import *
|
from tensor.tensor import *
|
||||||
|
import numpy as np
|
||||||
|
import time
|
||||||
|
|
||||||
if (MODE == PLATFORM.OPENCL):
|
if (MODE == PLATFORM.OPENCL):
|
||||||
init("./tensor/")
|
init("./tensor/")
|
||||||
|
|
||||||
a = Matrix([1024, 1024], 1)
|
a = Matrix([1024, 1024], 1)
|
||||||
a += 1
|
|
||||||
b = Matrix([1024, 1024], 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