From 0a39c1cd0218e5a7ffe8f581e1b7a35af1df8039 Mon Sep 17 00:00:00 2001 From: Simon Oehrl <oehrl@vr.rwth-aachen.de> Date: Mon, 29 Jun 2020 16:57:07 +0200 Subject: [PATCH] Adapted container for use with external scripts --- Dockerfile | 12 +-- {examples => example}/brunel_simulation.py | 4 +- examples/run_brunel_simulation.sh.in | 5 -- insite-nest-module.tar | 0 CMakeLists.txt => src/CMakeLists.txt | 4 +- data_storage.cpp => src/data_storage.cpp | 0 data_storage.hpp => src/data_storage.hpp | 0 http_server.cpp => src/http_server.cpp | 0 http_server.hpp => src/http_server.hpp | 0 insitemodule.cpp => src/insitemodule.cpp | 0 insitemodule.h => src/insitemodule.h | 0 neuron_info.hpp => src/neuron_info.hpp | 0 .../recording_backend_insite.cpp | 80 +++++++++++++++++++ .../recording_backend_insite.h | 0 src/scripts/run_simulation.sh.in | 24 ++++++ {sli => src/sli}/example.sli | 0 {sli => src/sli}/insitemodule-init.sli | 0 .../sli}/test_recording_backend_socket.sli | 0 18 files changed, 115 insertions(+), 14 deletions(-) rename {examples => example}/brunel_simulation.py (98%) delete mode 100755 examples/run_brunel_simulation.sh.in delete mode 100644 insite-nest-module.tar rename CMakeLists.txt => src/CMakeLists.txt (99%) rename data_storage.cpp => src/data_storage.cpp (100%) rename data_storage.hpp => src/data_storage.hpp (100%) rename http_server.cpp => src/http_server.cpp (100%) rename http_server.hpp => src/http_server.hpp (100%) rename insitemodule.cpp => src/insitemodule.cpp (100%) rename insitemodule.h => src/insitemodule.h (100%) rename neuron_info.hpp => src/neuron_info.hpp (100%) rename recording_backend_insite.cpp => src/recording_backend_insite.cpp (81%) rename recording_backend_insite.h => src/recording_backend_insite.h (100%) create mode 100755 src/scripts/run_simulation.sh.in rename {sli => src/sli}/example.sli (100%) rename {sli => src/sli}/insitemodule-init.sli (100%) rename {sli => src/sli}/test_recording_backend_socket.sli (100%) diff --git a/Dockerfile b/Dockerfile index 9359d20..c945045 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,16 +40,18 @@ RUN cmake \ /libpqxx RUN ninja && ninja install -COPY . /insite -WORKDIR /insite-build +COPY src /insite-module +WORKDIR /insite-module-build RUN cmake \ -G Ninja \ -Dwith-nest=/nest-install/bin/nest-config \ -DCMAKE_BUILD_TYPE=Release \ - /insite + /insite-module RUN ninja && ninja install ENV PGPASSWORD=postgres +COPY example /example + EXPOSE 8000 -ENTRYPOINT "/insite-build/run_brunel_simulation.sh" -CMD 1000 2500 2 \ No newline at end of file +ENTRYPOINT ["/insite-module-build/run_simulation.sh"] +CMD ["/example/brunel_simulation.py"] \ No newline at end of file diff --git a/examples/brunel_simulation.py b/example/brunel_simulation.py similarity index 98% rename from examples/brunel_simulation.py rename to example/brunel_simulation.py index 6dc936c..c37d0c9 100644 --- a/examples/brunel_simulation.py +++ b/example/brunel_simulation.py @@ -74,7 +74,7 @@ startbuild = time.time() dt = 0.1 # the resolution in ms simtime = float(sys.argv[1]) if len( - sys.argv) > 1 else 10000.0 # Simulation time in ms + sys.argv) > 1 else 100.0 # Simulation time in ms delay = 1.5 # synaptic delay in ms @@ -91,7 +91,7 @@ epsilon = 0.1 # connection probability # recorded from order = int(sys.argv[2]) if len( - sys.argv) > 2 else 2500 # Should be square, otherwise the position grid becomes invalid + sys.argv) > 2 else 25 # Should be square, otherwise the position grid becomes invalid NE = 4 * order # number of excitatory neurons NI = 1 * order # number of inhibitory neurons N_neurons = NE + NI # number of neurons in total diff --git a/examples/run_brunel_simulation.sh.in b/examples/run_brunel_simulation.sh.in deleted file mode 100755 index be009df..0000000 --- a/examples/run_brunel_simulation.sh.in +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -source @NEST_INSTALL_PREFIX@/bin/nest_vars.sh -export LD_LIBRARY_PATH=$NEST_MODULE_PATH:/usr/local/lib/:$LD_LIBRARY_PATH -# python3 @CMAKE_SOURCE_DIR@/examples/brunel_simulation.py $1 $2 # Uncomment this to run normally -time mpirun -n $3 --mca btl_vader_single_copy_mechanism none --allow-run-as-root -x PYTHONPATH python3 @CMAKE_SOURCE_DIR@/examples/brunel_simulation.py $1 $2 \ No newline at end of file diff --git a/insite-nest-module.tar b/insite-nest-module.tar deleted file mode 100644 index e69de29..0000000 diff --git a/CMakeLists.txt b/src/CMakeLists.txt similarity index 99% rename from CMakeLists.txt rename to src/CMakeLists.txt index 3ee9ac4..9b1cccc 100644 --- a/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -343,8 +343,8 @@ if ( ( NOT CMAKE_CROSSCOMPILING ) endif () configure_file( - ${CMAKE_SOURCE_DIR}/examples/run_brunel_simulation.sh.in - ${CMAKE_BINARY_DIR}/run_brunel_simulation.sh + ${CMAKE_SOURCE_DIR}/scripts/run_simulation.sh.in + ${CMAKE_BINARY_DIR}/run_simulation.sh @ONLY ) diff --git a/data_storage.cpp b/src/data_storage.cpp similarity index 100% rename from data_storage.cpp rename to src/data_storage.cpp diff --git a/data_storage.hpp b/src/data_storage.hpp similarity index 100% rename from data_storage.hpp rename to src/data_storage.hpp diff --git a/http_server.cpp b/src/http_server.cpp similarity index 100% rename from http_server.cpp rename to src/http_server.cpp diff --git a/http_server.hpp b/src/http_server.hpp similarity index 100% rename from http_server.hpp rename to src/http_server.hpp diff --git a/insitemodule.cpp b/src/insitemodule.cpp similarity index 100% rename from insitemodule.cpp rename to src/insitemodule.cpp diff --git a/insitemodule.h b/src/insitemodule.h similarity index 100% rename from insitemodule.h rename to src/insitemodule.h diff --git a/neuron_info.hpp b/src/neuron_info.hpp similarity index 100% rename from neuron_info.hpp rename to src/neuron_info.hpp diff --git a/recording_backend_insite.cpp b/src/recording_backend_insite.cpp similarity index 81% rename from recording_backend_insite.cpp rename to src/recording_backend_insite.cpp index 63a5992..68ac4a5 100644 --- a/recording_backend_insite.cpp +++ b/src/recording_backend_insite.cpp @@ -37,6 +37,86 @@ RecordingBackendInsite::RecordingBackendInsite() : data_storage_("tgest"), database_connection_("postgresql://postgres@" + ReadDatabaseHost()), http_server_("http://0.0.0.0:" + get_port_string(), &data_storage_, "postgresql://postgres@" + ReadDatabaseHost()) { + + if (nest::kernel().mpi_manager.get_rank() == 0) { + pqxx::work txn(database_connection_); + + txn.exec(R"db_query( +DROP TABLE IF EXISTS nest_simulation_node CASCADE; +DROP TABLE IF EXISTS nest_multimeter CASCADE; +DROP TABLE IF EXISTS nest_neuron CASCADE; +DROP TABLE IF EXISTS nest_neuron_multimeter CASCADE; + +CREATE TABLE nest_simulation_node ( + id SERIAL PRIMARY KEY NOT NULL UNIQUE, + address VARCHAR(50), + current_simulation_time FLOAT +); + +CREATE TABLE nest_multimeter ( + id INT PRIMARY KEY NOT NULL UNIQUE, + attributes VARCHAR(50) ARRAY +); + +CREATE TABLE nest_neuron ( + id INT PRIMARY KEY NOT NULL UNIQUE, + simulation_node_id INT, + population_id INT, + position FLOAT[], + FOREIGN KEY (simulation_node_id) REFERENCES nest_simulation_node (id) +); + +CREATE TABLE nest_neuron_multimeter ( + neuron_id INT NOT NULL, + multimeter_id INT NOT NULL, + PRIMARY KEY (neuron_id,multimeter_id), + FOREIGN KEY (neuron_id) REFERENCES nest_neuron (id), + FOREIGN KEY (multimeter_id) REFERENCES nest_multimeter (id) +); + +DROP TABLE IF EXISTS arbor_simulation_node CASCADE; +DROP TABLE IF EXISTS arbor_cell CASCADE; +DROP TABLE IF EXISTS arbor_cell_property CASCADE; +DROP TABLE IF EXISTS arbor_attribute CASCADE; +DROP TABLE IF EXISTS arbor_probe CASCADE; + +CREATE TABLE arbor_simulation_node ( + id INT PRIMARY KEY NOT NULL UNIQUE, + address VARCHAR(50), + current_simulation_time FLOAT +); + +CREATE TABLE arbor_cell ( + id INT PRIMARY KEY NOT NULL UNIQUE +); + +CREATE TABLE arbor_cell_property ( + cell_id INT NOT NULL, + property VARCHAR(50) NOT NULL, + PRIMARY KEY (cell_id, property), + FOREIGN KEY (cell_id) REFERENCES arbor_cell (id) +); + +CREATE TABLE arbor_attribute ( + id INT PRIMARY KEY NOT NULL UNIQUE, + name VARCHAR(50) NOT NULL +); + +CREATE TABLE arbor_probe ( + id INT PRIMARY KEY NOT NULL UNIQUE, + cell_id INT NOT NULL, + segment_id INT NOT NULL, + position FLOAT, + attribute_id INT NOT NULL, + simulation_node_id INT, + FOREIGN KEY (simulation_node_id) REFERENCES arbor_simulation_node (id), + FOREIGN KEY (cell_id) REFERENCES arbor_cell (id), + FOREIGN KEY (attribute_id) REFERENCES arbor_attribute (id) +); + )db_query"); + txn.commit(); + } + pqxx::work txn(database_connection_); simulation_node_id_ = txn.exec1( "INSERT INTO nest_simulation_node (address) " diff --git a/recording_backend_insite.h b/src/recording_backend_insite.h similarity index 100% rename from recording_backend_insite.h rename to src/recording_backend_insite.h diff --git a/src/scripts/run_simulation.sh.in b/src/scripts/run_simulation.sh.in new file mode 100755 index 0000000..2acb1db --- /dev/null +++ b/src/scripts/run_simulation.sh.in @@ -0,0 +1,24 @@ +#!/bin/bash +# Usage: run_simulation.sh file_path mpi_nodes + +source @NEST_INSTALL_PREFIX@/bin/nest_vars.sh +export LD_LIBRARY_PATH=$NEST_MODULE_PATH:/usr/local/lib/:$LD_LIBRARY_PATH + +if [ "$#" -eq 1 ]; then + python3 $1 +elif [ "$#" -eq 2 ]; then + mpirun -n $2 --mca btl_vader_single_copy_mechanism none --allow-run-as-root -x PYTHONPATH python3 $1 +else + echo "$0 $*" + echo "Usage: $0 file_path [mpi_nodes]" +fi + +# ls /nest-simulation +# if [ -f "/nest-simulation/simulation.py" ]; then +# echo "/nest-simulation/simulation.py exists" +# else +# echo "/nest-simulation/simulation.py does not exist" +# fi + +# # Uncomment this to run normally +# time @CMAKE_SOURCE_DIR@/examples/brunel_simulation.py $1 $2 \ No newline at end of file diff --git a/sli/example.sli b/src/sli/example.sli similarity index 100% rename from sli/example.sli rename to src/sli/example.sli diff --git a/sli/insitemodule-init.sli b/src/sli/insitemodule-init.sli similarity index 100% rename from sli/insitemodule-init.sli rename to src/sli/insitemodule-init.sli diff --git a/sli/test_recording_backend_socket.sli b/src/sli/test_recording_backend_socket.sli similarity index 100% rename from sli/test_recording_backend_socket.sli rename to src/sli/test_recording_backend_socket.sli -- GitLab