You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Mar 20, 2023. It is now read-only.
* Update and cleanup documentation
* remove unnecessary info from README
* remove .gitreview from gerrit
* CREDIT.txt is no longer required
* added .gitignore
* update mod2c to master
* address review - do not add editor specific files
> Optimised simulator engine for [NEURON](https://www.neuron.yale.edu/neuron/)
4
+
> Optimised simulator engine for [NEURON](https://github.com/neuronsimulator/nrn)
5
5
6
6
CoreNEURON is a compute engine for the [NEURON](https://www.neuron.yale.edu/neuron/) simulator optimised for both memory usage and computational speed. Its goal is to simulate large cell networks with small memory footprint and optimal performance.
7
7
8
-
## Features / Compatibility
8
+
## NEURON Models Compatibility
9
9
10
10
CoreNEURON is designed as a library within the NEURON simulator and can transparently handle all spiking network simulations including gap junction coupling with the **fixed time step method**. In order to run a NEURON model with CoreNEURON:
11
11
12
12
* MOD files should be THREADSAFE
13
13
* If random number generator is used then Random123 should be used instead of MCellRan4
14
-
* POINTER variables need to be converted to BBCOREPOINTER ([details here](http://bluebrain.github.io/CoreNeuron/index.html))
14
+
* POINTER variables need to be converted to BBCOREPOINTER ([details here](docs/userdoc/MemoryManagement/bbcorepointer.md))
15
15
16
16
## Dependencies
17
17
*[CMake 3.7+](https://cmake.org)
@@ -41,7 +41,8 @@ CoreNEURON is now integrated into the development version of the NEURON simulato
41
41
42
42
3. Load software dependencies
43
43
44
-
Currently CoreNEURON relies on compiler auto-vectorisation and hence we advise to use one of Intel, Cray, or PGI compilers to ensure vectorized code is generated. This constraint will be removed in the near future with the integration of the [NMODL](https://github.com/BlueBrain/nmodl) project.
44
+
Currently CoreNEURON relies on compiler auto-vectorisation and hence we advise to use one of Intel, Cray, or PGI compilers to ensure vectorized code is generated. These compilers are able to vectorize the code better than **GCC** or **Clang**, achieving the best possible performance gains. Note that Intel compiler can be installed by downloading [oneAPI HPC Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/hpc-toolkit.html). CoreNEURON supports GPU execution using **OpenACC** programming model. Currently the best supported compiler for the **OpenACC** backend is **PGI** (available via [NVIDIA-HPC-SDK](https://developer.nvidia.com/hpc-sdk)) and this is the recommended one for compilation.
45
+
45
46
46
47
HPC systems often use a module system to select software. For example, you can load the compiler, cmake, and python dependencies using module as follows:
47
48
@@ -63,6 +64,8 @@ Note that if you are building on Cray system with the GNU toolchain, you have to
63
64
-DNRN_ENABLE_INTERVIEWS=OFF \
64
65
-DNRN_ENABLE_RX3D=OFF \
65
66
-DCMAKE_INSTALL_PREFIX=$HOME/install
67
+
-DCMAKE_C_COMPILER=icc \
68
+
-DCMAKE_CXX_COMPILER=icpc
66
69
```
67
70
68
71
4. If you would like to enable GPU support with OpenACC, make sure to use `-DCORENRN_ENABLE_GPU=ON` option and use the PGI/NVIDIA HPC SDK compilers with CUDA. For example,
By default, OpenMP threading is enabled. You can disable it with `-DCORENRN_ENABLE_OPENMP=OFF`
229
232
230
-
#### GPU enabled build is failing with inlining related errors, what to do?
231
-
232
-
If there are large functions / procedures in the MOD file that are not inlined by the compiler, you may need to pass additional C++ flags to PGI compiler. You can try following CXX flags:
For other errors, please [open an issue](https://github.com/BlueBrain/CoreNeuron/issues).
239
234
240
-
241
235
## Developer Build
242
236
243
-
#####Building standalone CoreNEURON
237
+
#### Building standalone CoreNEURON without NEURON
244
238
245
239
If you want to build the standalone CoreNEURON version, first download the repository as:
246
240
@@ -263,7 +257,7 @@ If you don't have MPI, you can disable the MPI dependency using the CMake option
263
257
make test
264
258
```
265
259
266
-
#####Compiling MOD files
260
+
#### Compiling MOD files
267
261
268
262
In order to compile mod files, one can use **nrnivmodl-core** as:
269
263
@@ -273,7 +267,7 @@ In order to compile mod files, one can use **nrnivmodl-core** as:
273
267
274
268
This will create a `special-core` executable under `<arch>` directory.
275
269
276
-
#####Building with GPU support
270
+
#### Building with GPU support
277
271
278
272
CoreNEURON has support for GPUs using the OpenACC programming model when enabled with `-DCORENRN_ENABLE_GPU=ON`. Below are the steps to compile with PGI compiler:
Note that the CUDA Toolkit version should be compatible with the PGI compiler installed on your system. Otherwise, you have to add extra C/C++ flags. For example, if we are using CUDA Toolkit 9.0 installation but PGI default target is CUDA 8.0 then we have to add :
You have to run GPU executable with the `--gpu` flag. Make sure to enable cell re-ordering mechanism to improve GPU performance using `--cell_permute` option (permutation types : 2 or 1):
Note: If your model is using Random123 random number generator, you cannot use the same executable for CPU and GPU runs. We suggest to install separate NEURON with CoreNEURON for CPU and GPU simulations. This will be fixed in future releases.
300
288
301
289
302
-
#####Running tests with SLURM
290
+
#### Running tests with SLURM
303
291
304
292
If you have a different mpi launcher (than `mpirun`), you can specify it during cmake configuration as:
305
293
@@ -316,11 +304,11 @@ You can disable tests using with options:
316
304
cmake .. -CORENRN_ENABLE_UNIT_TESTS=OFF
317
305
```
318
306
319
-
#####CLI Options
307
+
#### CLI Options
320
308
321
309
To see all CLI options for CoreNEURON, see `./bin/nrniv-core -h`.
322
310
323
-
#####Formatting CMake and C++ Code
311
+
#### Formatting CMake and C++ Code
324
312
325
313
In order to format code with `cmake-format` and `clang-format` tools, before creating a PR, enable below CMake options:
326
314
@@ -336,14 +324,14 @@ make cmake-format
336
324
make clang-format
337
325
```
338
326
339
-
###Citation
327
+
## Citation
340
328
341
329
If you would like to know more about CoreNEURON or would like to cite it, then use the following paper:
342
330
343
331
* Pramod Kumbhar, Michael Hines, Jeremy Fouriaux, Aleksandr Ovcharenko, James King, Fabien Delalondre and Felix Schürmann. CoreNEURON : An Optimized Compute Engine for the NEURON Simulator ([doi.org/10.3389/fninf.2019.00063](https://doi.org/10.3389/fninf.2019.00063))
344
332
345
333
346
-
###Support / Contribuition
334
+
## Support / Contribuition
347
335
348
336
If you see any issue, feel free to [raise a ticket](https://github.com/BlueBrain/CoreNeuron/issues/new). If you would like to improve this library, see [open issues](https://github.com/BlueBrain/CoreNeuron/issues).
349
337
@@ -352,7 +340,7 @@ You can see current [contributors here](https://github.com/BlueBrain/CoreNeuron/
352
340
353
341
## License
354
342
* See LICENSE.txt
355
-
* See [NEURON](https://www.neuron.yale.edu/neuron/)
343
+
* See [NEURON](https://github.com/neuronsimulator/nrn)
0 commit comments