Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
CoreNEURON GPU Installation and ringtest example
#!/bin/bash
# stop if error
set -e
# load required modiles on your cluster
module purge
module load mvapich2/2.0.1-nocuda cmake
export BASE_DIR=`pwd`/coreneuron_tutorial
export INSTALL_DIR=$BASE_DIR/install
export SOURCE_DIR=$BASE_DIR/sources
# create directories
mkdir -p $INSTALL_DIR $SOURCE_DIR
# clone repositories
cd $SOURCE_DIR
git clone https://github.com/BlueBrain/CoreNeuron.git
git clone https://github.com/BlueBrain/mod2c.git
git clone https://github.com/nrnhines/nrn.git
# install neuron
cd $SOURCE_DIR/nrn
sed -i -e 's/GLOBAL minf/RANGE minf/g' src/nrnoc/hh.mod
sed -i -e 's/TABLE minf/:TABLE minf/g' src/nrnoc/hh.mod
./build.sh
./configure --prefix=$INSTALL_DIR --without-iv --with-paranrn --with-nrnpython=`which python`
make
make install
# install mod2c
cd $SOURCE_DIR/mod2c
mkdir -p build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR
make && make install
# set path
export PATH=$INSTALL_DIR/x86_64/bin:$INSTALL_DIR/bin:$PATH
export MODLUNIT=$INSTALL_DIR/share/nrnunits.lib
# clone ring test
cd $SOURCE_DIR
git clone https://github.com/pramodk/ringtest.git
cd ringtest && git checkout tutorial
# build special executable with neuron
cd $SOURCE_DIR/ringtest
nrnivmodl mod
# build coreneuron executable
module purge
module load pgi/pgi64/16.5 pgi/mpich/16.5
module load cuda/7.0
export CC=mpicc
export CXX=mpicxx
cd $SOURCE_DIR/ringtest
mkdir -p coreneuron_x86 && cd coreneuron_x86
cmake $BASE_DIR/sources/CoreNeuron -DADDITIONAL_MECHPATH=`pwd`/mod -DCMAKE_C_FLAGS:STRING="-O2" -DCMAKE_CXX_FLAGS:STRING="-O2" -DCOMPILE_LIBRARY_TYPE=STATIC -DCUDA_HOST_COMPILER=`which gcc` -DCUDA_PROPAGATE_HOST_FLAGS=OFF -DENABLE_SELECTIVE_GPU_PROFILING=ON -DENABLE_OPENACC=ON
make VERBOSE=1
# run simulation using neuron
cd $SOURCE_DIR/ringtest
./x86_64/special -python ringtest.py -tstop 100 -coredat coreneuron_data
# run simulation using coreneuron
cd $SOURCE_DIR/ringtest
./coreneuron_x86/bin/coreneuron_exec -e 100 -d coreneuron_data --gpu --cell_permute=1
# sort compare spike output between neuron and coreneuron
sortspike coreneuron_data/spk1.std out.neuron.spk
sortspike out0.dat out.coreneuron.spk
diff -w out.neuron.spk out.coreneuron.spk
# check which version of CUDA being used by PGI compiler
$ pgcc -show
.........
USECUDAROOT =/gpfs/bbp.cscs.ch/apps/viz/tools/pgi/16.5/linux86-64/2016/cuda/7.0
.........
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.