jacobian

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit b89d6ff25dc72dc9b1092e9ada64d2688da10953
parent 1a8160e23035713197f4e350e49bf567519b7ca7
Author: David Freifeld <freifeld.david@gmail.com>
Date:   Mon,  3 Aug 2020 13:13:08 -0700

Messing with OpenMP, MKL, BLAS and LAPACK

Diffstat:
MMakefile | 10+++++++---
Mexample.cpp | 18++----------------
Msrc/bpnn.cpp | 3++-
3 files changed, 11 insertions(+), 20 deletions(-)

diff --git a/Makefile b/Makefile @@ -11,19 +11,23 @@ GEN_FLAGS = -fpic +CXX = /usr/local/opt/llvm/bin/clang CXXFLAGS = -shared -std=c++17 -undefined dynamic_lookup `python3 -m pybind11 --includes` ./src/mr_bpnn_2.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -o mrbpnn`python3-config --extension-suffix` +LDFLAGS = -L/usr/local/opt/llvm/lib -lc++ all: compile debug: $(GEN_FLAGS) = -Wall -U NDEBUG -test: CXXFLAGS = -std=c++17 example.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -o bpnnexec -lpthread -lm -ldl -O3 -mavx -mfma -march=native -mfpmath=sse -fno-pic -DMKL_ILP64 -D NDEBUG +test: CXXFLAGS = -std=c++17 example.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -o bpnnexec -O3 -mavx -mfma -march=native -mfpmath=sse -fno-pic -DMKL_ILP64 -D NDEBUG +test: LDFLAGS = -lpthread -lm -ldl test: compile fast: CXXFLAGS += $(GEN_FLAGS) -O3 fast: compile -faster: CXXFLAGS = -shared -std=c++17 -undefined dynamic_lookup `python3 -m pybind11 --includes` ./src/mr_bpnn_2.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -lpthread -lm -ldl -o mrbpnn`python3-config --extension-suffix` -O3 -mavx -msse2 -msse3 -march=native -mfpmath=sse -fno-pic -DMKL_ILP64 -D NDEBUG +faster: CXXFLAGS = -shared -std=c++17 -undefined dynamic_lookup `python3 -m pybind11 --includes` ./src/mr_bpnn_2.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -o mrbpnn`python3-config --extension-suffix` -O3 -mavx -msse2 -msse3 -fopenmp -march=native -mfpmath=sse -fno-pic -DMKL_ILP64 -D NDEBUG -D EIGEN_USE_BLAS ${MKLROOT}/lib/libmkl_intel_ilp64.a -m64 -I${MKLROOT}/include ${MKLROOT}/lib/libmkl_intel_thread.a ${MKLROOT}/lib/libmkl_core.a -liomp5 -lpthread -lm -ldl +faster: LDFLAGS = -lpthread -lm -ldl -lblas faster: compile tradeoffs: CXXFLAGS = -shared -std=c++17 -undefined dynamic_lookup `python3 -m pybind11 --includes` ./src/mr_bpnn_2.cpp ./src/bpnn.cpp ./src/utils.cpp mapreduce.a -o mrbpnn`python3-config --extension-suffix` -O3 -mavx -msse2 -msse3 -march=native -mfpmath=sse -DMKL_ILP64 -fno-pic -ffast-math -D NDEBUG #-qopt-report=5 -qopt-report-file=report @@ -34,4 +38,4 @@ reckless: CXXFLAGS = -O3 reckless: compile compile: - g++ $(CXXFLAGS) && rm ./mrbpnn/mrbpnn.cpython-37m-darwin.so ; cp ./mrbpnn.cpython-37m-darwin.so ./mrbpnn/mrbpnn.cpython-37m-darwin.s ; rm ./scripts/mrbpnn.cpython-37m-darwin.so ; cp ./mrbpnn.cpython-37m-darwin.so ./scripts/mrbpnn.cpython-37m-darwin.so + $(CXX) $(CXXFLAGS) $(LDFLAGS) && rm ./mrbpnn/mrbpnn.cpython-37m-darwin.so ; cp ./mrbpnn.cpython-37m-darwin.so ./mrbpnn/mrbpnn.cpython-37m-darwin.s ; rm ./scripts/mrbpnn.cpython-37m-darwin.so ; cp ./mrbpnn.cpython-37m-darwin.so ./scripts/mrbpnn.cpython-37m-darwin.so diff --git a/example.cpp b/example.cpp @@ -17,30 +17,16 @@ double bench(int batch_sz) net.add_layer(4, "linear"); net.add_layer(5, "relu"); net.add_layer(2, "linear"); - net.init_optimizer("demon", 0.9, 50); - net.init_decay("step", 1, 2); net.initialize(); - //net.grad_check(); - std::vector<float> vals; for (int i = 0; i < 50; i++) { net.train(); - vals.push_back(net.get_val_acc()); } - std::cout << "["; - for (int i = 0; i < vals.size(); i++) { - if (i == 49) std::cout << vals[i]; - else std::cout << vals[i] << ", "; - } - std::cout << "]"; auto end = std::chrono::high_resolution_clock::now(); return std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count() / pow(10,9); } int main() { - std::cout << bench(16) << "\n"; - // bench(50); - // bench(50); - // bench(50); - // bench(50); + sleep(40); + bench(16); } diff --git a/src/bpnn.cpp b/src/bpnn.cpp @@ -216,6 +216,7 @@ void Network::feedforward() } for (int j = 0; j < layers[length-1].contents->rows(); j++) { if (strcmp(layers[length-1].activation_str, "linear") == 0) break; + #pragma omp simd for (int k = 0; k < layers[length-1].contents->cols(); k++) { (*layers[length-1].dZ)(j,k) = layers[length-1].activation_deriv((*layers[length-1].contents)(j,k)); (*layers[length-1].contents)(j,k) = layers[length-1].activation((*layers[length-1].contents)(j,k)); @@ -545,7 +546,7 @@ void Network::train() epoch_acc = 1.0/((float) instances/batch_size) * acc_sum; epoch_cost = 1.0/((float) instances/batch_size) * cost_sum; validate(VAL_PATH); - printf("Epoch %i complete - cost %f - acc %f - val_cost %f - val_acc %f\n", epochs, epoch_cost, epoch_acc, val_cost, val_acc); + // printf("Epoch %i complete - cost %f - acc %f - val_cost %f - val_acc %f\n", epochs, epoch_cost, epoch_acc, val_cost, val_acc); batches=1; rewind(data); decay();