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:
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();