GithubHelp home page GithubHelp logo

neuronsimulator / ringtest Goto Github PK

View Code? Open in Web Editor NEW
12.0 13.0 6.0 159 KB

Ring network model test to demonstrate the use of CoreNEURON

Shell 1.95% Python 65.12% AMPL 0.55% Jupyter Notebook 32.38%
neuron coreneuron hpc neuroscience

ringtest's Introduction

Using CoreNEURON with NEURON

Introduction

This tutorial shows how to build a simple network model using NEURON and simulating it using CoreNEURON.

Installation

For up to date NEURON installation instructions with CoreNEURON, see documentation here. As CoreNEURON rely on auto-vectorisation compiler, make sure to use vendor compilers like Intel, Cray, AMD, NVIDIA HPC SDK.

Once NEURON is installed, and you set PATH and PYTHONPATH environmental variables then you should be able to do:

python -c "from neuron import h; from neuron import coreneuron"

If you get ImportError then make sure PYTHONPATH is set up correctly and python version is same as the one used for NEURON installation.

Compile MOD files

Now we will start building the ringtest model. Clone the GitHub repository as:

git clone https://github.com/nrnhines/ringtest.git
cd ringtest

This repository contains a mod sub-directory which has MOD files (for the gap-junction related test). Using the standard NEURON workflow, we can build a special executable using nrnivmodl and -coreneuron option. Make sure to load necessary compiler and MPI modules:

nrnivmodl -coreneuron mod

This will create x86_64/special executable in the ringtest directory (where x86_64 is platform architecture).

Make Model CoreNEURON Compatible

As described in the documentation here, one may have to make minor modifications to make a model compatible with CoreNEURON. In ringtest.py, the relevant changes have already been made:

h.cvode.cache_efficient(1)
if use_coreneuron:
    from neuron import coreneuron
    coreneuron.enable = True
    coreneuron.gpu = coreneuron_gpu

so the -coreneuron (use_coreneuron) and -gpu (coreneuron_gpu) arguments can be used to enable CoreNEURON.

By using coreneuron module, one can enable CoreNEURON as shown above. Note that CoreNEURON requires NEURON's internal data structures to be in cache efficient form and hence the cvode.cache_efficient(1) method must be executed prior to initialization of the model i.e. h.stdinit().

Running Simulation

We are ready to run this model using NEURON or CoreNEURON. To run with NEURON, you can do:

mpiexec -n 2 ./x86_64/special -mpi -python ringtest.py -tstop 100

This will run NEURON for 100 milliseconds using 2 MPI processes and writes spike output to the spk2.std file. These are standard steps for running simulations with NEURON (which you are already familiar with).

Note that ringtest.py has a prun method which internally calls pc.psolve(tstop). If coreneuron.enable is set to True then NEURON will internally use CoreNEURON to simulate the model. We can now use -coreneuron CLI parameter to run the model using CoreNEURON as:

mpiexec -n 2 ./x86_64/special -mpi -python ringtest.py -tstop 100 -coreneuron

This will run simulation using CoreNEURON for 100 milliseconds and writes spike output to the spk2.std file. If you compare the spikes generated by NEURON run and CoreNEURON run then should be identical. Make sure to sort spikes using sortspike command provided by NEURON:

sortspike spk2.std spk2.coreneuron.std

Running on GPUs

If you have compiled NEURON+CoreNEURON with GPU support, you can run the model on GPU using -gpu CLI option:

mpiexec -n 2 ./x86_64/special -mpi -python ringtest.py -tstop 100 -coreneuron -gpu

We typically use the number of MPI ranks per node equal to the number of GPUs per node. So, if you have X number of nodes where each node has Y GPUs then the total number of MPI ranks are X x Y.

Using Threads

NEURON uses PThread to support threading whereas CoreNEURON uses OpenMP. In order to enable thread usage you have to set appropriate number of threads using ParallelContext.nthread(). With this, if you run simulation using CoreNEURON, for each thread on NEURON side CoreNEURON will create an equivalent OpenMP thread. With this ring test we have CLI option -nt that you can use to enable threads:

mpiexec -n 2 ./x86_64/special -mpi -python ringtest.py -tstop 100 -coreneuron -nt 2

With -nt 2, each MPI process will start 2 OpenMP threads on CoreNEURON side for simulation.

Performance Benchmarking

Here are some additional points if you want to compare performance between NEURON and CoreNEURON :

  • Make sure to use optimization flags depending upon your compiler suite (see CoreNEURON page)
  • Prefer Intel/Cray/PGI compilers over GCC and Clang (specifically for CoreNEURON to enable vectorisation)
  • In order to compare performance, your model should be sufficiently large (and not a trivial test). For example, in the above tutorial, we built a small network with 16 rings each with 8 cells. You can build a larger network using additional command line arguments as:
mpirun -n 4 ./x86_64/special -mpi -python ringtest.py -tstop 100 -nring 1024 -ncell 128 -branch 32 64

See command line arguments for more information about arguments:

→ python ringtest.py -h
usage: ringtest.py [-h] [-nring N] [-ncell N] [-npt N] [-branch N N]
                   [-compart N N] [-tstop float] [-gran N] [-rparm]
                   [-filemode] [-gpu] [-show] [-gap] [-coreneuron] [-nt N]
                   [-multisplit]

optional arguments:
  -h, --help    show this help message and exit
  -nring N      number of rings (default 16)
  -ncell N      number of cells per ring (default 8)
  -npt N        number of cells per type (default 8)
  -branch N N   range of branches per cell (default 10 20)
  -compart N N  range of compartments per branch (default [1,1])
  -tstop float  stop time (ms) (default 100.0)
  -gran N       global Random123 index (default 0)
  -rparm        randomize parameters
  -filemode     Run CoreNEURON with file mode
  -gpu          Run CoreNEURON on GPU
  -show         show type topologies
  -gap          use gap junctions
  -coreneuron   run coreneuron
  -nt N         nthread
  -multisplit   intra-rank thread balance. All pieces of cell on same rank.
Sample Performance Test

In order to compare the performance of NEURON and CoreNEURON, we compiled both simulators using Intel compilers. Note that the ringtest is not ideal for benchmarking due to low comutational complexity of each cell (cell.hoc uses HH channel in soma compartment).

NOTE : When you run simulation using NEURON and call pc.psolve(tstop), it will directly start execution of timesteps. But in case of CoreNEURON, when you call pc.psolve(tstop), NEURON will internally do the following steps:

  1. Copy in-memory model to CoreNEURON
  2. CoreNEURON will copy data to GPU if GPU is enabled
  3. CoreNEURON will run timesteps
  4. CoreNEURON will copy back results from CPU to GPU if GPU is enabled
  5. NEURON will copy results back from CoreNEURON

These steps are typically fast but if you are running a very small model for short duration then you might see an overhead. So make sure to check timing stats printed by CoreNEURON. For example, CoreNEURON prints simulation time (i.e. Step 3) in the form of Solver Time : X Seconds.

For comparison of NEURON and CoreNEURON performance, here are some executions with NEURON and CoreNEURON running on single core:

# NEURON CPU Run
$ mpiexec -n 1 ./x86_64/special -mpi -python ringtest.py -tstop 10 -nring 128 -ncell 128 -branch 32 64
.........
runtime=20.86  load_balance=100.0%  avg_comp_time=20.8548
.......

# CoreNEURON CPU Run
$ mpiexec -n 1 ./x86_64/special -mpi -python ringtest.py -tstop 10 -nring 128 -ncell 128 -branch 32 64 -coreneuron
.........
Solver Time : 15.846
.........

# CoreNEURON GPU Run
$ mpiexec -n 1 ./x86_64/special -mpi -python ringtest.py -tstop 10 -nring 128 -ncell 128 -branch 32 64 -coreneuron -gpu
..........
Solver Time : 0.431226
..........

For above test the execution time is reduced from 174sec to 78sec for CPU and to 22.7sec for GPU. This speedup is still less than expected due to lower computational complexity of the model. But also note that we are running CPU execution with single core. Make sure to use all CPU resources for actual comparison. Try with your model and if you see any performance issues, please open an issue on NEURON GitHub repository.

ringtest's People

Contributors

alkino avatar ikitayama avatar jorblancoa avatar nrnhines avatar olupton avatar pramodk avatar pramodskumbhar avatar weinaji avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ringtest's Issues

NEURON: NetCon and NetCon source with no gid are not in the same thread

When I run this python ringtest.py -nt=2 on JURECA-DC login, I get this message:

$ python ringtest.py -nt=2
[10, 20] [1, 1]
nring=16
cell per ring=8
ncell_per_type=8
ntype=16
created coredat/
0.02s created rings
2224 non-zero area compartments
0s initialized
NEURON: NetCon and NetCon source with no gid are not in the same thread
 near line 0
 ^
        ParallelContext[1].nrnbbcore_write("coredat/")
Traceback (most recent call last):
  File "ringtest.py", line 201, in <module>
    pc.nrnbbcore_write(bbcorewrite_folder)
RuntimeError: hoc error

The code is basically at d3b40f9

Cannot build coreneuron executable

after

cd $SOURCE_DIR/ringtest
mkdir -p coreneuron_x86 && cd coreneuron_x86
cmake $BASE_DIR/sources/CoreNeuron -DADDITIONAL_MECHPATH=$SOURCE_DIR/ringtest/mod
make -j

I cannot find coreneuron_core in ./coreneuron_x86/bin. There are only mod2c_core, nrnivmodl_core and a folder called x86_64. Below is the make -j output:

(test)tony@Aurora-R11:~/coreneuron_tutorial/sources/ringtest/coreneuron_x86$ make -j
make[1]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[  2%] [FLEX][lex] Building scanner with flex 2.6.4
[  2%] [BISON][diffeq] Building parser with bison 3.7
Scanning dependencies of target kin_deriv_header
Scanning dependencies of target scopmath
[  3%] [BISON][parse1] Building parser with bison 3.7
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
diffeq.y: warning: 5 shift/reduce conflicts [-Wconflicts-sr]
diffeq.y: note: rerun with option '-Wcounterexamples' to generate conflict counterexamples
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[  4%] Generating kinderiv.h by inspecting MOD files
[  5%] Building CXX object coreneuron/CMakeFiles/scopmath.dir/sim/scopmath/abort.cpp.o
[  6%] Building CXX object coreneuron/CMakeFiles/scopmath.dir/sim/scopmath/newton_thread.cpp.o
[  7%] Building CXX object coreneuron/CMakeFiles/scopmath.dir/sim/scopmath/crout_thread.cpp.o
[  8%] Building CXX object coreneuron/CMakeFiles/scopmath.dir/sim/scopmath/sparse_thread.cpp.o
[  9%] Building CXX object coreneuron/CMakeFiles/scopmath.dir/sim/scopmath/ssimplic_thread.cpp.o
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[  9%] Built target kin_deriv_header
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
Scanning dependencies of target coreneuron
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[ 10%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/mem_layout_util.cpp.o
[ 11%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/apps/corenrn_parameters.cpp.o
[ 13%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/gpu/nrn_acc_manager.cpp.o
[ 13%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/apps/main1.cpp.o
[ 14%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/core2nrn_data_return.cpp.o
[ 15%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/global_vars.cpp.o
[ 16%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/file_utils.cpp.o
[ 17%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/mk_mech.cpp.o
[ 18%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/nrn_checkpoint.cpp.o
[ 21%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/output_spikes.cpp.o
[ 21%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/nrn_filehandler.cpp.o
[ 22%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/nrn_setup.cpp.o
[ 23%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/phase2.cpp.o
[ 24%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/phase1.cpp.o
[ 25%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/prcellstate.cpp.o
[ 26%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/reports/nrnreport.cpp.o
[ 28%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/reports/binary_report_handler.cpp.o
[ 28%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/reports/report_configuration_parser.cpp.o
[ 29%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/reports/report_event.cpp.o
[ 30%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/reports/report_handler.cpp.o
[ 31%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/reports/sonata_report_handler.cpp.o
[ 32%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/io/setup_fornetcon.cpp.o
[ 33%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/permute/balance.cpp.o
[ 34%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/mechanism/patternstim.cpp.o
[ 35%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/partrans_setup.cpp.o
[ 36%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/mpi/mpispike.cpp.o
[ 37%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/mechanism/eion.cpp.o
[ 42%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/netpar.cpp.o
[ 38%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/multisend.cpp.o
[ 40%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/mechanism/capac.cpp.o
[ 41%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/partrans.cpp.o
[ 43%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/cvodestb.cpp.o
[ 45%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/multisend_setup.cpp.o
[ 46%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/mechanism/register_mech.cpp.o
[ 46%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/tqueue.cpp.o
[ 47%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/network/netcvode.cpp.o
[ 48%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/mechanism/mech_mapping.cpp.o
[ 49%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/mpi/nrnmpi.cpp.o
[ 50%] Linking CXX static library ../lib/libscopmath.a
Scanning dependencies of target mod2c_core
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[ 51%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/permute/cellorder.cpp.o
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[ 52%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/permute/data_layout.cpp.o
[ 53%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/permute/cellorder1.cpp.o
[ 55%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/permute/cellorder2.cpp.o
[ 56%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/permute/node_permute.cpp.o
[ 57%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/sim/fadvance_core.cpp.o
[ 58%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/sim/fast_imem.cpp.o
[ 60%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/io.c.o
[ 54%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/consist.c.o
[ 60%] Built target scopmath
[ 61%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/list.c.o
/home/tony/coreneuron_tutorial/sources/coreNeuron/coreneuron/io/reports/report_configuration_parser.cpp: In function ‘std::vector<coreneuron::ReportConfiguration> coreneuron::create_report_configurations(const char*, const char*, std::string&)’:
/home/tony/coreneuron_tutorial/sources/coreNeuron/coreneuron/io/reports/report_configuration_parser.cpp:104:48: warning: format ‘%d’ expects argument of type ‘int*’, but argument 9 has type ‘coreneuron::TargetType*’ [-Wformat=]
  104 |         sscanf(raw_line, "\n%s %s %s %s %s %s %d %lf %lf %lf %d %d %s\n", report.name,
      |                                               ~^
      |                                                |
      |                                                int*
  105 |                report.target_name, report.type_str, report_on, report.unit, report.format, &target_type,
      |                                                                                            ~~~~~~~~~~~~
      |                                                                                            |
      |                                                                                            coreneuron::TargetType*
[ 62%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/nocpout.c.o
[ 63%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/sim/finitialize.cpp.o
[ 64%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/partial.c.o
[ 66%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/sim/multicore.cpp.o
[ 65%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/solve.c.o
[ 70%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/ivocvect.cpp.o
[ 69%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/ispc/globals.cpp.o
[ 71%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/discrete.c.o
[ 67%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/sim/solve_core.cpp.o
[ 68%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/version.c.o
[ 72%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/sim/treeset_core.cpp.o
[ 73%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/lpt.cpp.o
[ 74%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/kinetic.c.o
[ 75%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/modl.c.o
/home/tony/coreneuron_tutorial/sources/coreNeuron/coreneuron/io/reports/report_configuration_parser.cpp:95:10: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
   95 |     fgets(raw_line, REPORT_MAX_FILEPATH_LEN, fp);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/coreneuron/io/reports/report_configuration_parser.cpp:103:14: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
  103 |         fgets(raw_line, REPORT_MAX_FILEPATH_LEN, fp);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/coreneuron/io/reports/report_configuration_parser.cpp:171:18: warning: ignoring return value of ‘size_t fread(void*, size_t, size_t, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
  171 |             fread(gids, sizeof(int), report.num_gids, fp);
      |             ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/coreneuron/io/reports/report_configuration_parser.cpp:173:18: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
  173 |             fgets(raw_line, REPORT_MAX_FILEPATH_LEN, fp);
      |             ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/coreneuron/io/reports/report_configuration_parser.cpp:180:10: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’, declared with attribute warn_unused_result [-Wunused-result]
  180 |     fgets(raw_line, REPORT_MAX_NAME_LEN, fp);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 76%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/parsact.c.o
[ 77%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/sens.c.o
[ 78%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/memory_utils.cpp.o
[ 80%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/symbol.c.o
[ 81%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/nrn_stats.cpp.o
[ 82%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/nrnoc_aux.cpp.o
[ 83%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/nrntimeout.cpp.o
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/sens.c: In function ‘sensmassage’:
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/sens.c:150:6: warning: type of ‘fn’ defaults to ‘int’ [-Wimplicit-int]
  150 | void sensmassage(type, qfun, fn)
      |      ^~~~~~~~~~~
[ 84%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/deriv.c.o
[ 85%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/simultan.c.o
[ 88%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/units.c.o
[ 86%] Building C object coreneuron/CMakeFiles/coreneuron.dir/utils/progressbar/progressbar.c.o
[ 87%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/noccout.c.o
[ 89%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/init.c.o
[ 90%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/randoms/nrnran123.cpp.o
[ 91%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/diffeq.c.o
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/sens.c:257:19: warning: ‘__builtin___sprintf_chk’ may write a terminating nul past the end of the destination [-Wformat-overflow=]
  257 |    Sprintf(dname, "D%s", sname);
      |                   ^~~~~
In file included from /usr/include/stdio.h:866,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/modl.h:2,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/sens.c:118:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10: note: ‘__builtin___sprintf_chk’ output between 2 and 101 bytes into a destination of size 100
   38 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   39 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 93%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/parse1.c.o
[ 92%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/string_utils.cpp.o
[ 96%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/config/config.cpp.o
[ 94%] Building CXX object coreneuron/CMakeFiles/coreneuron.dir/utils/vrecord.cpp.o
[ 95%] Building C object external/mod2c/src/mod2c_core/CMakeFiles/mod2c_core.dir/lex.c.o
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/units.c: In function ‘pu’:
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/units.c:615:12: warning: type of ‘u’ defaults to ‘int’ [-Wimplicit-int]
  615 | static int pu(u, i, f)
      |            ^~
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/units.c:615:12: warning: type of ‘i’ defaults to ‘int’ [-Wimplicit-int]
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/units.c:615:12: warning: type of ‘f’ defaults to ‘int’ [-Wimplicit-int]
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/units.c: In function ‘lookup’:
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/units.c:689:12: warning: type of ‘den’ defaults to ‘int’ [-Wimplicit-int]
  689 | static int lookup(name, up, den, c)
      |            ^~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/units.c:689:12: warning: type of ‘c’ defaults to ‘int’ [-Wimplicit-int]
/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86/external/mod2c/src/mod2c_core/lex.c: In function ‘yy_init_buffer’:
/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86/external/mod2c/src/mod2c_core/lex.c:1612:40: warning: implicit declaration of function ‘isatty’ [-Wimplicit-function-declaration]
 1612 |         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
      |                                        ^~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c: In function ‘next_forderiv’:
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c:392:16: warning: ‘^’ directive writing 1 byte into a region of size between 0 and 49 [-Wformat-overflow=]
  392 | Sprintf(units, "%s/%s^%d", base_units, STR(indeplist->prev), indx);
      |                ^~~~~~~~~~
In file included from /usr/include/stdio.h:866,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/modl.h:2,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c:30:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10: note: ‘__builtin___sprintf_chk’ output 4 or more bytes (assuming 53) into a destination of size 50
   38 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   39 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c:400:16: warning: ‘^’ directive writing 1 byte into a region of size between 0 and 49 [-Wformat-overflow=]
  400 | Sprintf(units, "%s/%s^%d", base_units, STR(indeplist->prev), indx);
      |                ^~~~~~~~~~
In file included from /usr/include/stdio.h:866,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/modl.h:2,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c:30:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10: note: ‘__builtin___sprintf_chk’ output 4 or more bytes (assuming 53) into a destination of size 50
   38 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   39 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c: In function ‘massagederiv’:
/home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c:580:16: warning: ‘^’ directive writing 1 byte into a region of size between 0 and 49 [-Wformat-overflow=]
  580 | Sprintf(units, "%s/%s^%d", base_units, STR(indeplist->prev), maxindx);
      |                ^~~~~~~~~~
In file included from /usr/include/stdio.h:866,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/modl.h:2,
                 from /home/tony/coreneuron_tutorial/sources/coreNeuron/external/mod2c/src/mod2c_core/deriv.c:30:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:38:10: note: ‘__builtin___sprintf_chk’ output 4 or more bytes (assuming 53) into a destination of size 50
   38 |   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   39 |       __bos (__s), __fmt, __va_arg_pack ());
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 97%] Linking C executable ../../../../bin/mod2c_core
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[ 97%] Built target mod2c_core
[ 98%] Linking CXX shared library ../lib/libcoreneuron.so
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[ 98%] Built target coreneuron
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
Scanning dependencies of target nrniv-core
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
make[2]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[100%] Running nrnivmodl-core with halfgap.mod
[INFO] Running: make -j4 -f /home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86/share/coreneuron/nrnivmodl_core_makefile ROOT=/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86 MOD2CPP_BINARY=/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86/bin/mod2c_core MODS_PATH=x86_64/core/mods BUILD_TYPE=STATIC
make[3]: Entering directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86/bin'
Default nmodl flags: 
Translating x86_64/core/mods/exp2syn.mod into x86_64/corenrn/mod2c//exp2syn.cpp
Translating x86_64/core/mods/expsyn.mod into x86_64/corenrn/mod2c//expsyn.cpp
cvode_emit=0 cvode_not_allowed=0
cvode_emit=0 cvode_not_allowed=0
Thread Safe
Thread Safe
Translating x86_64/core/mods/halfgap.mod into x86_64/corenrn/mod2c//halfgap.cpp
Translating x86_64/core/mods/hh.mod into x86_64/corenrn/mod2c//hh.cpp
cvode_emit=0 cvode_not_allowed=0
Thread Safe
diff: x86_64/corenrn/mod2c/_mod_func.cpp: No such file or directory
cvode_emit=0 cvode_not_allowed=0
Thread Safe
Translating x86_64/core/mods/netstim.mod into x86_64/corenrn/mod2c//netstim.cpp
cvode_emit=0 cvode_not_allowed=0
Notice: ARTIFICIAL_CELL is a synonym for POINT_PROCESS which hints that it
only affects and is affected by discrete events. As such it is not
located in a section and is not associated with an integrator
Translating x86_64/core/mods/passive.mod into x86_64/corenrn/mod2c//passive.cpp
Thread Safe
cvode_emit=0 cvode_not_allowed=0
Translating x86_64/core/mods/pattern.mod into x86_64/corenrn/mod2c//pattern.cpp
Thread Safe
cvode_emit=0 cvode_not_allowed=0
Notice: ARTIFICIAL_CELL is a synonym for POINT_PROCESS which hints that it
only affects and is affected by discrete events. As such it is not
located in a section and is not associated with an integrator
Thread Safe
Translating x86_64/core/mods/stim.mod into x86_64/corenrn/mod2c//stim.cpp
cvode_emit=0 cvode_not_allowed=0
Translating x86_64/core/mods/svclmp.mod into x86_64/corenrn/mod2c//svclmp.cpp
Thread Safe
cvode_emit=0 cvode_not_allowed=0
Thread Safe
/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86/bin
 => Binary creating x86_64/special-core
make[3]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86/bin'
[INFO] MOD files built successfully for CoreNEURON
make[2]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'
[100%] Built target nrniv-core
make[1]: Leaving directory '/home/tony/coreneuron_tutorial/sources/ringtest/coreneuron_x86'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.