Ive changed few things, now I preffere to do firstyly something in zig and later on I will look for options to make bindings to python.
mm.zig is main file with matrix multiplication function. the main problem is that i dont know how to build this, to make it work as a independent library in python, I lost an idea to make "faster pytorch", now im focused to something that can be used with or without pytorch.
As a man who is trying to understand zig and write usefull code in other language than python (or try to write something usefull), I get an idea of creating something what is using zig to optize pytorch, make is faster, more reliable. I don't know if it's going to work, but I need to do it my own as a motivation do study.
PyTorch is written in C++ and gives API in this language, BUT ZIG GIVES US built in tools to compile code in C/C++. I can define functions from C++ in zig and use it in my code. 000_example.zig. As you see, something works, and the plan is rewrite/build from scrach pytorch functions in zig and do something with it.
- Write pytorch functions in zig.
- Check it everything work on python
This function takes two tensors 2d (matrix).
- Plan: Define the functionality you want to implement
- Test-Driven Development: Write tests in Zig first
- Implement: Create the Zig implementation
- Benchmark: Compare performance with PyTorch
- C API: Expose functionality through C API
- Python Bindings: Create Python wrappers
- Document: Update documentation
# Build the Zig library
zig build
# Run Zig tests
zig build test
# Build in release mode for better performance
zig build -Drelease-fastzig build command
zig build-obj -OReleaseFast -fPIC mm.zigzig build-obj -fcompiler-rt mm.zig -fPIC -lpthread
important to create module
pip install -e .//python setup.py install
Building the Python Package
# Install in development mode
pip install -e .
# Build and install
python setup.py installex: Creating a New Operation
- create a new file in src/ (e.g., src/add.zig) example add.zig
- Implement your function
- Create a test file in tests/ (e.g., tests/testadd.zig)
- Update build.zig to include your new files
- Expose through C API in src/native.zig
# Basic build
zig build
zig build -Doptimize=ReleaseSafe
zig build test
# Clean build artifacts
rm -rf zig-out/I've changed my mind, now everytime i will update project to the newest version.
Important
with torch
Size M×K × K×N Torch (ms) NumPy (ms) Zig (ms) Zig vs Torch Zig vs NumPy Correct
---------------------------------------------------------------------------------------------------
32×32 × 32×32 0.003 0.003 0.017 0.21x 0.18x True
64×64 × 64×64 0.008 0.016 0.085 0.09x 0.19x True
128×128 × 128×128 6.511 0.627 0.462 14.09x 1.36x True
256×256 × 256×256 7.226 0.111 2.773 2.61x 0.04x True
512×512 × 512×512 1.516 0.630 22.216 0.07x 0.03x True
1024×1024 × 1024×1024 7.648 4.324 187.883 0.04x 0.02x False
1024×512 × 512×256 1.249 0.549 21.713 0.06x 0.03x TrueImportant
without TORCH, ONLY NUMPY
python tests/benchmark.py
Size M×K × K×N Torch (ms) NumPy (ms) Zig (ms) Zig vs Torch Zig vs NumPy Correct
---------------------------------------------------------------------------------------------------
32×32 × 32×32 n/a 0.019 0.018 n/a 1.04x True
64×64 × 64×64 n/a 0.143 0.055 n/a 2.62x True
128×128 × 128×128 n/a 1.178 0.358 n/a 3.29x True
256×256 × 256×256 n/a 9.086 2.778 n/a 3.27x True
512×512 × 512×512 n/a 69.996 23.019 n/a 3.04x True
1024×1024 × 1024×1024 n/a 553.027 196.582 n/a 2.81x True
1024×512 × 512×256 n/a 72.071 22.113 n/a 3.26x True
Inspirational Links & References:
Notes: I aint gonna rewrite 4k lines just to make that project faster but maybe I can there something interesting.
But this eigen block logic is very good documented.
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes:
Inspirational Links & References:
Notes: