diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 89333bf49..000000000 --- a/INSTALL +++ /dev/null @@ -1,372 +0,0 @@ -The following are generic instructions for installing from the source. -For installation instructions specific to this package, see: -https://github.com/golosio/NESTGPU/wiki/Installation-instructions - -Installation Instructions -************************* - - Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software -Foundation, Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell command './configure && make && make install' -should configure, build, and install this package. The following -more-detailed instructions are generic; see the 'README' file for -instructions specific to this package. Some packages provide this -'INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The 'configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a 'Makefile' in each directory of the package. -It may also create one or more '.h' files containing system-dependent -definitions. Finally, it creates a shell script 'config.status' that -you can run in the future to recreate the current configuration, and a -file 'config.log' containing compiler output (useful mainly for -debugging 'configure'). - - It can also use an optional file (typically called 'config.cache' and -enabled with '--cache-file=config.cache' or simply '-C') that saves the -results of its tests to speed up reconfiguring. Caching is disabled by -default to prevent problems with accidental use of stale cache files. - - If you need to do unusual things to compile the package, please try -to figure out how 'configure' could check whether to do them, and mail -diffs or instructions to the address given in the 'README' so they can -be considered for the next release. If you are using the cache, and at -some point 'config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file 'configure.ac' (or 'configure.in') is used to create -'configure' by a program called 'autoconf'. You need 'configure.ac' if -you want to change it or regenerate 'configure' using a newer version of -'autoconf'. - - The simplest way to compile this package is: - - 1. 'cd' to the directory containing the package's source code and type - './configure' to configure the package for your system. - - Running 'configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type 'make' to compile the package. - - 3. Optionally, type 'make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type 'make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the 'make install' phase executed with root - privileges. - - 5. Optionally, type 'make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior 'make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing 'make clean'. To also remove the - files that 'configure' created (so you can compile the package for - a different kind of computer), type 'make distclean'. There is - also a 'make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type 'make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide 'make - distcheck', which can by used by developers to test that all other - targets like 'make install' and 'make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the 'configure' script does not know about. Run './configure --help' -for details on some of the pertinent environment variables. - - You can give 'configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here is -an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU 'make'. 'cd' to the -directory where you want the object files and executables to go and run -the 'configure' script. 'configure' automatically checks for the source -code in the directory that 'configure' is in and in '..'. This is known -as a "VPATH" build. - - With a non-GNU 'make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use 'make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple '-arch' options to the -compiler but only a single '-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the 'lipo' tool if you have problems. - -Installation Names -================== - - By default, 'make install' installs the package's commands under -'/usr/local/bin', include files under '/usr/local/include', etc. You -can specify an installation prefix other than '/usr/local' by giving -'configure' the option '--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option '--exec-prefix=PREFIX' to 'configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like '--bindir=DIR' to specify different values for particular -kinds of files. Run 'configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the default -for these options is expressed in terms of '${prefix}', so that -specifying just '--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to 'configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -'make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, 'make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -'${prefix}'. Any directories that were specified during 'configure', -but not in terms of '${prefix}', must each be overridden at install time -for the entire installation to be relocated. The approach of makefile -variable overrides for each directory variable is required by the GNU -Coding Standards, and ideally causes no recompilation. However, some -platforms have known limitations with the semantics of shared libraries -that end up requiring recompilation when using this method, particularly -noticeable in packages that use GNU Libtool. - - The second method involves providing the 'DESTDIR' variable. For -example, 'make install DESTDIR=/alternate/directory' will prepend -'/alternate/directory' before all installation names. The approach of -'DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of '${prefix}' -at 'configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving 'configure' the -option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. - - Some packages pay attention to '--enable-FEATURE' options to -'configure', where FEATURE indicates an optional part of the package. -They may also pay attention to '--with-PACKAGE' options, where PACKAGE -is something like 'gnu-as' or 'x' (for the X Window System). The -'README' should mention any '--enable-' and '--with-' options that the -package recognizes. - - For packages that use the X Window System, 'configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the 'configure' options '--x-includes=DIR' and -'--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of 'make' will be. For these packages, running './configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with 'make V=1'; while running './configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with 'make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC -is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - HP-UX 'make' updates targets which have the same time stamps as their -prerequisites, which makes it generally unusable when shipped generated -files such as 'configure' are involved. Use GNU 'make' instead. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its '' header file. The option '-nodtk' can be used as a -workaround. If GNU CC is not installed, it is therefore recommended to -try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put '/usr/ucb' early in your 'PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in '/usr/bin'. So, if you need '/usr/ucb' -in your 'PATH', put it _after_ '/usr/bin'. - - On Haiku, software installed for all users goes in '/boot/common', -not '/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features 'configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, 'configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -'--build=TYPE' option. TYPE can either be a short name for the system -type, such as 'sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file 'config.sub' for the possible values of each field. If -'config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option '--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with '--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for 'configure' scripts to share, -you can create a site shell script called 'config.site' that gives -default values for variables like 'CC', 'cache_file', and 'prefix'. -'configure' looks for 'PREFIX/share/config.site' if it exists, then -'PREFIX/etc/config.site' if it exists. Or, you can set the -'CONFIG_SITE' environment variable to the location of the site script. -A warning: not all 'configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to 'configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the 'configure' command line, using 'VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified 'gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an -Autoconf limitation. Until the limitation is lifted, you can use this -workaround: - - CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash - -'configure' Invocation -====================== - - 'configure' recognizes the following options to control how it -operates. - -'--help' -'-h' - Print a summary of all of the options to 'configure', and exit. - -'--help=short' -'--help=recursive' - Print a summary of the options unique to this package's - 'configure', and exit. The 'short' variant lists options used only - in the top level, while the 'recursive' variant lists options also - present in any nested packages. - -'--version' -'-V' - Print the version of Autoconf used to generate the 'configure' - script, and exit. - -'--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally 'config.cache'. FILE defaults to '/dev/null' to - disable caching. - -'--config-cache' -'-C' - Alias for '--cache-file=config.cache'. - -'--quiet' -'--silent' -'-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to '/dev/null' (any error - messages will still be shown). - -'--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - 'configure' can determine that directory automatically. - -'--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: for - more details, including other options available for fine-tuning the - installation locations. - -'--no-create' -'-n' - Run the configure checks, but stop before creating any output - files. - -'configure' also accepts some other, not widely useful, options. Run -'configure --help' for more details. diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 5cf0608c6..000000000 --- a/Makefile.am +++ /dev/null @@ -1,199 +0,0 @@ -AUTOMAKE_OPTIONS = 1.4 no-dependencies foreign - -## ------------------- ## -# -## ------------------- ## -ACLOCAL_AMFLAGS = -I m4 - -#SUBDIRS=pythonlib -python_PYTHON = $(top_srcdir)/pythonlib/nestgpu.py -#dist_data_DATA=autogen.sh -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ - -HCUSRC=\ -connect.h \ -conn12b.h \ -conn16b.h \ -remote_connect.h \ -connect_rules.h \ -connect_spec.h \ -nestgpu.h \ -get_spike.h \ -send_spike.h \ -rev_spike.h \ -spike_buffer.h \ -remote_spike.h \ -mpi_comm.h \ -base_neuron.h \ -node_group.h \ -neuron_models.h \ -poiss_gen.h \ -poiss_gen_variables.h \ -cuda_error.h \ -ngpu_exception.h \ -getRealTime.h \ -random.h \ -utilities.h \ -distribution.h \ -scan.h \ -prefix_scan.h \ -nested_loop.h \ -copass_kernels.h \ -copass_sort.h \ -rk5_const.h \ -rk5.h \ -rk5_interface.h \ -propagate_error.h \ -propagator_stability.h \ -stdp.h \ -syn_model.h \ -test_syn_model.h \ -spike_detector.h \ -spike_generator.h \ -parrot_neuron.h \ -multimeter.h \ -ext_neuron.h \ -user_m1.h \ -user_m1_kernel.h \ -user_m1_rk5.h \ -user_m2.h \ -user_m2_kernel.h \ -user_m2_rk5.h \ -aeif_cond_alpha.h \ -aeif_cond_alpha_kernel.h \ -aeif_cond_alpha_multisynapse.h \ -aeif_cond_alpha_multisynapse_kernel.h \ -aeif_cond_alpha_multisynapse_rk5.h \ -aeif_cond_beta.h \ -aeif_cond_beta_kernel.h \ -aeif_cond_beta_multisynapse.h \ -aeif_cond_beta_multisynapse_kernel.h \ -aeif_cond_beta_multisynapse_rk5.h \ -aeif_psc_alpha.h \ -aeif_psc_alpha_kernel.h \ -aeif_psc_alpha_multisynapse.h \ -aeif_psc_alpha_multisynapse_kernel.h \ -aeif_psc_alpha_multisynapse_rk5.h \ -aeif_psc_delta.h \ -aeif_psc_delta_kernel.h \ -aeif_psc_delta_rk5.h \ -aeif_psc_exp.h \ -aeif_psc_exp_kernel.h \ -aeif_psc_exp_multisynapse.h \ -aeif_psc_exp_multisynapse_kernel.h \ -aeif_psc_exp_multisynapse_rk5.h \ -iaf_psc_exp_g.h \ -iaf_psc_exp.h \ -iaf_psc_exp_hc.h \ -iaf_psc_exp_hc_params.h \ -iaf_psc_alpha.h \ -izhikevich_cond_beta.h \ -izhikevich_cond_beta_kernel.h \ -izhikevich_cond_beta_rk5.h \ -izhikevich.h \ -izhikevich_psc_exp_2s.h \ -izhikevich_psc_exp_5s.h \ -izhikevich_psc_exp.h - -CUSRC=\ -connect.cu \ -conn12b.cu \ -conn16b.cu \ -remote_connect.cu \ -connect_rules.cu \ -nestgpu.cu \ -get_spike.cu \ -send_spike.cu \ -rev_spike.cu \ -spike_buffer.cu \ -remote_spike.cu \ -mpi_comm.cu \ -base_neuron.cu \ -node_group.cu \ -neuron_models.cu \ -poiss_gen.cu \ -getRealTime.cu \ -random.cu \ -utilities.cu \ -distribution.cu \ -scan.cu \ -prefix_scan.cu \ -nested_loop.cu \ -copass_kernels.cu \ -copass_sort.cu \ -rk5.cu \ -propagator_stability.cu \ -stdp.cu \ -syn_model.cu \ -test_syn_model.cu \ -spike_detector.cu \ -spike_generator.cu \ -parrot_neuron.cu \ -multimeter.cu \ -ext_neuron.cu \ -user_m1.cu \ -user_m2.cu \ -aeif_cond_alpha.cu \ -aeif_cond_alpha_multisynapse.cu \ -aeif_cond_beta.cu \ -aeif_cond_beta_multisynapse.cu \ -aeif_psc_alpha.cu \ -aeif_psc_alpha_multisynapse.cu \ -aeif_psc_delta.cu \ -aeif_psc_exp.cu \ -aeif_psc_exp_multisynapse.cu \ -iaf_psc_exp.cu \ -iaf_psc_exp_g.cu \ -iaf_psc_exp_hc.cu \ -iaf_psc_alpha.cu \ -izhikevich_cond_beta.cu \ -izhikevich.cu \ -izhikevich_psc_exp_2s.cu \ -izhikevich_psc_exp_5s.cu \ -izhikevich_psc_exp.cu - - -HCPPSRC=\ -nestgpu_C.h - -CPPSRC=\ -nestgpu_C.cpp - -COMPILER_FLAGS= -O3 -Wall -fPIC -if OSX - COMPILER_FLAGS += -Xpreprocessor $(OPENMP_CFLAGS) -# -fopenmp -else - COMPILER_FLAGS += $(OPENMP_CFLAGS) -endif - -CUDA_FLAGS= -arch $(GPU_ARCH) --ptxas-options=-v --maxrregcount=55 --relocatable-device-code true -CUDA_LIBS= -lm -lcurand -lcuda -lcudart -#-lomp - -CUOBJ=$(CUSRC:.cu=.cu.o) -CPPOBJ=$(CPPSRC:.cpp=.cpp.o) -OBJDIR=obj -OBJS=$(addprefix $(OBJDIR)/, $(CUOBJ)) $(addprefix $(OBJDIR)/, $(CPPOBJ)) -$(OBJDIR)/%.cu.o: $(top_srcdir)/src/%.cu $(top_srcdir)/src/%.h - @mkdir -p obj - $(NVCC) -ccbin=$(MPICXX) --compiler-options "$(COMPILER_FLAGS)" -I . $(CUDA_FLAGS) $< -c -o $@ -$(OBJDIR)/%.cpp.o: $(top_srcdir)/src/%.cpp $(top_srcdir)/src/%.h - @mkdir -p obj - $(MPICXX) $(COMPILER_FLAGS) -I . $< -c -o $@ - -libnestgpu.la: $(OBJS) - $(NVCC) -ccbin=$(MPICXX) --compiler-options "$(COMPILER_FLAGS)" -I . $(CUDA_FLAGS) --shared -o $@ $^ $(CUDA_LIBS) - -lib_LTLIBRARIES = libnestgpu.la - -%.cu: - -clean-local: - rm -f *.so obj/*.o - -install-exec-hook: -if OSX - $(top_srcdir)/postinstall.sh -endif diff --git a/VERSION b/VERSION index ab88d5d8b..359a5b952 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ - 1.08 +2.0.0 \ No newline at end of file diff --git a/autoinst b/autoinst deleted file mode 100755 index 128f45f07..000000000 --- a/autoinst +++ /dev/null @@ -1,162 +0,0 @@ -#!/bin/bash - -# Test for arguments -if [ $# -gt 3 ]; then - cat << EOT -Given too many arguments -Usage: autoinst [--gpu-arch] [source] [destination] -Example: autoinst --gpu-arch=80 my_repo/ my_build/ -Try autoinst -h or --help for additional information. -EOT - exit 1 -fi - -# Initialize arguments -src_arg= -dest_arg= -arch_arg= -option_pattern="^-+.*" -help_pattern="-h|--help" -arch_any_pattern="--gpu-arch=.*" -arch_int_pattern="--gpu-arch=[0-9]+" -arch_sed_pattern="--gpu-arch=\([0-9]\+\)" - -# Parse arguments -for arg in $*; do - if [[ $arg =~ $option_pattern ]]; then - if [[ $arg =~ $arch_int_pattern ]]; then - arch=$( echo $arg | sed "s/$arch_sed_pattern/\1/" ) - else - if [[ $arg =~ $arch_any_pattern ]]; then - cat << EOT -Incorrect value for gpu arch: $arg -Usage: autoinst [--gpu-arch] [source] [destination] -Example: autoinst --gpu-arch=80 my_repo/ my_build/ -Try autoinst -h or --help for additional information. -EOT - else - if [[ $arg =~ $help_pattern ]]; then - cat << EOT -Usage: autoinst [--gpu-arch=] [source] [destination] -Install NEST GPU from a source repository in a destination directory using a given GPU architecture. -Example: autoinst --gpu-arch=80 my_repo/ my_build/ - -Arguments: - -h, --help: Print this message. - --gpu-arch= [Optional]: Specify the GPU compute architecture. Value must be an integer [default=70]. - source [Optional]: Path to NEST GPU repository. Can be relative, [default='.']. - destination [Optional]: Path to installation directory. Can be relative, [default='.']. -EOT - exit 0 - else - cat << EOT -Unknown option: $arg -Usage: autoinst [--gpu-arch] [source] [destination] -Example: autoinst --gpu-arch=80 my_repo/ my_build/ -Try autoinst -h or --help for additional information. -EOT - fi - fi - exit 1 - fi - else - if [ -z $src_arg ]; then - src_arg=$arg - elif [ -z $dest_arg ]; then - dest_arg=$arg - else - cat << EOT -Given extra argument: $arg -Usage: autoinst [--gpu-arch] [source] [destination] -Example: autoinst --gpu-arch=80 my_repo/ my_build/ -Try autoinst -h or --help for additional information. -EOT - exit 1 - fi - fi -done - -# Set default values -if [ -z $arch ]; then - arch=70 -fi - -if [ -z $src_arg ]; then - src_arg=. -fi - -if [ -z $dest_arg ]; then - dest_arg=. -fi - -# Get absolute path of source i.e where autotools files are found -SRC=$( readlink -f $src_arg ) -if [ ! -d $SRC ]; then - echo "Given source path is not a directory" - exit 1 -fi -if [ ! -f $SRC/configure.ac ]; then - echo "Cannot find Autotools configuration file in source directory" - exit 1 -fi - -# Get absolute path of current path or given target path -DST=$( readlink -f $dest_arg ) -if [ -z $( readlink -e $DST ) ]; then - mkdir -p $DST -fi -if [ ! -d $DST ]; then - echo "Could not create destination directory" - exit 1 -fi - -# Move to source and execute autoreconf in source -cd $SRC -autoreconf -i - -# Create (if needed) and move to compile dir -cd $DST -if [ -z $( readlink -e $DST/compile ) ]; then - mkdir $DST/compile -fi -if [ ! -d $DST/compile ]; then - echo "Could not create compile directory" - exit 1 -fi -cd compile - -# Execute configure from source in compile dir -$SRC/configure --prefix=$DST --exec-prefix=$DST --with-gpu-arch=sm_$arch &> config.out -cat config.out - -# Run makefile in compile dir -make -j &> make.out -cat make.out - -make install -j &> make_install.out -cat make_install.out - -# Move to destination dir and get path to python package directory -cd $DST -py_pack=$( find lib -name "site-packages" -type d ) - -# Create (if needed) install dir and create empty nestgpu vars bash file -if [ -z $( readlink -e $DST/install/bin ) ]; then - mkdir -p $DST/install/bin -fi -if [ ! -d $DST/install/bin ]; then - echo "Could not create install directory" - exit 1 -fi -:>$DST/install/bin/nestgpu_vars.sh - -# Populate nestgpu vars file -cat > $DST/install/bin/nestgpu_vars.sh << EOT -#!/bin/sh - -# Make Python interface available by prepending its path to PYTHONPATH in a safe way. -export PYTHONPATH="$DST/$py_pack\${PYTHONPATH:+:\$PYTHONPATH}" - -# Make NEST GPU library available by creating an environment variable. -export NESTGPU_LIB=$DST/lib/libnestgpu.so -EOT diff --git a/c++/examples/bin/brunel_mpi.sh b/c++/examples/bin/brunel_mpi.sh deleted file mode 100644 index 13bc05cb8..000000000 --- a/c++/examples/bin/brunel_mpi.sh +++ /dev/null @@ -1 +0,0 @@ -mpirun -np 2 brunel_mpi 5000 diff --git a/c++/examples/bin/clean.sh b/c++/examples/bin/clean.sh deleted file mode 100755 index 67d89694a..000000000 --- a/c++/examples/bin/clean.sh +++ /dev/null @@ -1,20 +0,0 @@ -rm -f test_aeif_cond_beta.dat -rm -f test_brunel_mpi_0.dat -rm -f test_brunel_mpi_1.dat -rm -f test_brunel_net.dat -rm -f test_brunel_outdegree.dat -rm -f test_brunel_outdegree_mpi_0.dat -rm -f test_brunel_outdegree_mpi_1.dat -rm -f test_brunel_vect.dat -rm -f test_constcurr.dat -rm -f brunel_mpi -rm -f brunel_net -rm -f brunel_outdegree -rm -f brunel_outdegree_mpi -rm -f brunel_vect -rm -f test_aeif_cond_beta -rm -f test_connect -rm -f test_constcurr -rm -f test_error -rm -f test_setvar -rm -f *~ diff --git a/c++/examples/bin/log_setvar.txt b/c++/examples/bin/log_setvar.txt deleted file mode 100644 index dab1e9263..000000000 --- a/c++/examples/bin/log_setvar.txt +++ /dev/null @@ -1,135 +0,0 @@ -Building ... -Neuron n. 0 - V_m: -80.000000 - V_th: -50.400002 - g1: 0.000000 - tau_rise: 40.000000 - tau_decay: 60.000000 - g1: 0.000000 - tau_rise: 5.000000 - tau_decay: 10.000000 - -Neuron n. 1 - V_m: -70.599998 - V_th: -50.400002 - g1: 0.000000 - tau_rise: 40.000000 - tau_decay: 60.000000 - g1: 0.100000 - tau_rise: 5.000000 - tau_decay: 10.000000 - -Neuron n. 2 - V_m: -70.599998 - V_th: -50.400002 - g1: 0.100000 - tau_rise: 40.000000 - tau_decay: 60.000000 - g1: 0.000000 - tau_rise: 5.000000 - tau_decay: 10.000000 - -Calibrating ... -Simulating ... -Neural activity simulation time: 1000.000 -0.000 -10.000 -20.000 -30.000 -40.000 -50.000 -60.000 -70.000 -80.000 -90.000 -100.000 -110.000 -120.000 -130.000 -140.000 -150.000 -160.000 -170.000 -180.000 -190.000 -200.000 -210.000 -220.000 -230.000 -240.000 -250.000 -260.000 -270.000 -280.000 -290.000 -300.000 -310.000 -320.000 -330.000 -340.000 -350.000 -360.000 -370.000 -380.000 -390.000 -400.000 -410.000 -420.000 -430.000 -440.000 -450.000 -460.000 -470.000 -480.000 -490.000 -500.000 -510.000 -520.000 -530.000 -540.000 -550.000 -560.000 -570.000 -580.000 -590.000 -600.000 -610.000 -620.000 -630.000 -640.000 -650.000 -660.000 -670.000 -680.000 -690.000 -700.000 -710.000 -720.000 -730.000 -740.000 -750.000 -760.000 -770.000 -780.000 -790.000 -800.000 -810.000 -820.000 -830.000 -840.000 -850.000 -860.000 -870.000 -880.000 -890.000 -900.000 -910.000 -920.000 -930.000 -940.000 -950.000 -960.000 -970.000 -980.000 -990.000 -1000.000 diff --git a/c++/examples/bin/log_test_connect.txt b/c++/examples/bin/log_test_connect.txt deleted file mode 100644 index b9b1445b2..000000000 --- a/c++/examples/bin/log_test_connect.txt +++ /dev/null @@ -1,502 +0,0 @@ -######################################## -Even to all - i_source 0 - i_target 1 - port 0 - syn_group 0 - weight 100 - delay 1 - - i_source 0 - i_target 3 - port 0 - syn_group 0 - weight 300 - delay 3 - - i_source 0 - i_target 5 - port 0 - syn_group 0 - weight 500 - delay 5 - - i_source 0 - i_target 7 - port 0 - syn_group 0 - weight 700 - delay 7 - - i_source 0 - i_target 9 - port 0 - syn_group 0 - weight 900 - delay 9 - - i_source 2 - i_target 1 - port 0 - syn_group 0 - weight 2100 - delay 21 - - i_source 2 - i_target 3 - port 0 - syn_group 0 - weight 2300 - delay 23 - - i_source 2 - i_target 5 - port 0 - syn_group 0 - weight 2500 - delay 25 - - i_source 2 - i_target 7 - port 0 - syn_group 0 - weight 2700 - delay 27 - - i_source 2 - i_target 9 - port 0 - syn_group 0 - weight 2900 - delay 29 - - i_source 4 - i_target 1 - port 0 - syn_group 0 - weight 4100 - delay 41 - - i_source 4 - i_target 3 - port 0 - syn_group 0 - weight 4300 - delay 43 - - i_source 4 - i_target 5 - port 0 - syn_group 0 - weight 4500 - delay 45 - - i_source 4 - i_target 7 - port 0 - syn_group 0 - weight 4700 - delay 47 - - i_source 4 - i_target 9 - port 0 - syn_group 0 - weight 4900 - delay 49 - - i_source 6 - i_target 1 - port 0 - syn_group 0 - weight 6100 - delay 61 - - i_source 6 - i_target 3 - port 0 - syn_group 0 - weight 6300 - delay 63 - - i_source 6 - i_target 5 - port 0 - syn_group 0 - weight 6500 - delay 65 - - i_source 6 - i_target 7 - port 0 - syn_group 0 - weight 6700 - delay 67 - - i_source 6 - i_target 9 - port 0 - syn_group 0 - weight 6900 - delay 69 - - i_source 8 - i_target 1 - port 0 - syn_group 0 - weight 8100 - delay 81 - - i_source 8 - i_target 3 - port 0 - syn_group 0 - weight 8300 - delay 83 - - i_source 8 - i_target 5 - port 0 - syn_group 0 - weight 8500 - delay 85 - - i_source 8 - i_target 7 - port 0 - syn_group 0 - weight 8700 - delay 87 - - i_source 8 - i_target 9 - port 0 - syn_group 0 - weight 8900 - delay 89 - -######################################## -######################################## -All to odd - i_source 0 - i_target 1 - port 0 - syn_group 0 - weight 100 - delay 1 - - i_source 0 - i_target 3 - port 0 - syn_group 0 - weight 300 - delay 3 - - i_source 0 - i_target 5 - port 0 - syn_group 0 - weight 500 - delay 5 - - i_source 0 - i_target 7 - port 0 - syn_group 0 - weight 700 - delay 7 - - i_source 0 - i_target 9 - port 0 - syn_group 0 - weight 900 - delay 9 - - i_source 2 - i_target 1 - port 0 - syn_group 0 - weight 2100 - delay 21 - - i_source 2 - i_target 3 - port 0 - syn_group 0 - weight 2300 - delay 23 - - i_source 2 - i_target 5 - port 0 - syn_group 0 - weight 2500 - delay 25 - - i_source 2 - i_target 7 - port 0 - syn_group 0 - weight 2700 - delay 27 - - i_source 2 - i_target 9 - port 0 - syn_group 0 - weight 2900 - delay 29 - - i_source 4 - i_target 1 - port 0 - syn_group 0 - weight 4100 - delay 41 - - i_source 4 - i_target 3 - port 0 - syn_group 0 - weight 4300 - delay 43 - - i_source 4 - i_target 5 - port 0 - syn_group 0 - weight 4500 - delay 45 - - i_source 4 - i_target 7 - port 0 - syn_group 0 - weight 4700 - delay 47 - - i_source 4 - i_target 9 - port 0 - syn_group 0 - weight 4900 - delay 49 - - i_source 6 - i_target 1 - port 0 - syn_group 0 - weight 6100 - delay 61 - - i_source 6 - i_target 3 - port 0 - syn_group 0 - weight 6300 - delay 63 - - i_source 6 - i_target 5 - port 0 - syn_group 0 - weight 6500 - delay 65 - - i_source 6 - i_target 7 - port 0 - syn_group 0 - weight 6700 - delay 67 - - i_source 6 - i_target 9 - port 0 - syn_group 0 - weight 6900 - delay 69 - - i_source 8 - i_target 1 - port 0 - syn_group 0 - weight 8100 - delay 81 - - i_source 8 - i_target 3 - port 0 - syn_group 0 - weight 8300 - delay 83 - - i_source 8 - i_target 5 - port 0 - syn_group 0 - weight 8500 - delay 85 - - i_source 8 - i_target 7 - port 0 - syn_group 0 - weight 8700 - delay 87 - - i_source 8 - i_target 9 - port 0 - syn_group 0 - weight 8900 - delay 89 - -######################################## -######################################## -Even to 3,4,5,6 - i_source 0 - i_target 3 - port 0 - syn_group 0 - weight 300 - delay 3 - - i_source 0 - i_target 5 - port 0 - syn_group 0 - weight 500 - delay 5 - - i_source 2 - i_target 3 - port 0 - syn_group 0 - weight 2300 - delay 23 - - i_source 2 - i_target 5 - port 0 - syn_group 0 - weight 2500 - delay 25 - - i_source 4 - i_target 3 - port 0 - syn_group 0 - weight 4300 - delay 43 - - i_source 4 - i_target 5 - port 0 - syn_group 0 - weight 4500 - delay 45 - - i_source 6 - i_target 3 - port 0 - syn_group 0 - weight 6300 - delay 63 - - i_source 6 - i_target 5 - port 0 - syn_group 0 - weight 6500 - delay 65 - - i_source 8 - i_target 3 - port 0 - syn_group 0 - weight 8300 - delay 83 - - i_source 8 - i_target 5 - port 0 - syn_group 0 - weight 8500 - delay 85 - -######################################## -######################################## -3,4,5,6 to odd - i_source 4 - i_target 1 - port 0 - syn_group 0 - weight 4100 - delay 41 - - i_source 4 - i_target 3 - port 0 - syn_group 0 - weight 4300 - delay 43 - - i_source 4 - i_target 5 - port 0 - syn_group 0 - weight 4500 - delay 45 - - i_source 4 - i_target 7 - port 0 - syn_group 0 - weight 4700 - delay 47 - - i_source 4 - i_target 9 - port 0 - syn_group 0 - weight 4900 - delay 49 - - i_source 6 - i_target 1 - port 0 - syn_group 0 - weight 6100 - delay 61 - - i_source 6 - i_target 3 - port 0 - syn_group 0 - weight 6300 - delay 63 - - i_source 6 - i_target 5 - port 0 - syn_group 0 - weight 6500 - delay 65 - - i_source 6 - i_target 7 - port 0 - syn_group 0 - weight 6700 - delay 67 - - i_source 6 - i_target 9 - port 0 - syn_group 0 - weight 6900 - delay 69 - -######################################## diff --git a/c++/examples/bin/plot_all.m b/c++/examples/bin/plot_all.m deleted file mode 100644 index 5804e383d..000000000 --- a/c++/examples/bin/plot_all.m +++ /dev/null @@ -1,21 +0,0 @@ -plot_brunel_mpi -waitforbuttonpress () -close all -plot_brunel_net -waitforbuttonpress () -close all -plot_brunel_outdegree -waitforbuttonpress () -close all -plot_brunel_outdegree_mpi -waitforbuttonpress () -close all -test_aeif_cond_beta -waitforbuttonpress () -close all -test_constcurr -waitforbuttonpress () -close all -test_setvar -waitforbuttonpress () -close all diff --git a/c++/examples/bin/plot_brunel_mpi.m b/c++/examples/bin/plot_brunel_mpi.m deleted file mode 100644 index 9f10b5293..000000000 --- a/c++/examples/bin/plot_brunel_mpi.m +++ /dev/null @@ -1,23 +0,0 @@ -data=load('test_brunel_mpi_0.dat'); -t=data(:,1); -V1=data(:,2); -V2=data(:,3); -V3=data(:,4); -figure(1); -plot(t,V1); -figure(2); -plot(t,V2); -figure(3); -plot(t,V3); - -data1=load('test_brunel_mpi_1.dat'); -t1=data1(:,1); -V11=data1(:,2); -V12=data1(:,3); -V13=data1(:,4); -figure(4); -plot(t1,V11); -figure(5); -plot(t1,V12); -figure(6); -plot(t1,V13); diff --git a/c++/examples/bin/plot_brunel_net.m b/c++/examples/bin/plot_brunel_net.m deleted file mode 100644 index 9bcfddbb6..000000000 --- a/c++/examples/bin/plot_brunel_net.m +++ /dev/null @@ -1,11 +0,0 @@ -data=load('test_brunel_net.dat'); -t=data(:,1); -V1=data(:,2); -V2=data(:,3); -V3=data(:,4); -figure(1); -plot(t,V1); -figure(2); -plot(t,V2); -figure(3); -plot(t,V3); diff --git a/c++/examples/bin/plot_brunel_outdegree.m b/c++/examples/bin/plot_brunel_outdegree.m deleted file mode 100644 index f1ba58c0a..000000000 --- a/c++/examples/bin/plot_brunel_outdegree.m +++ /dev/null @@ -1,32 +0,0 @@ -data=load('test_brunel_outdegree.dat'); -t=data(:,1); -V1=data(:,2); -V2=data(:,3); -V3=data(:,4); -V4=data(:,5); -V5=data(:,6); -V6=data(:,7); -V7=data(:,8); -V8=data(:,9); -V9=data(:,10); -V10=data(:,11); -figure(1); -plot(t,V1); -figure(2); -plot(t,V2); -figure(3); -plot(t,V3); -figure(4); -plot(t,V4); -figure(5); -plot(t,V5); -figure(6); -plot(t,V6); -figure(7); -plot(t,V7); -figure(8); -plot(t,V8); -figure(9); -plot(t,V9); -figure(10); -plot(t,V10); diff --git a/c++/examples/bin/plot_brunel_outdegree_mpi.m b/c++/examples/bin/plot_brunel_outdegree_mpi.m deleted file mode 100644 index 4e4de4b60..000000000 --- a/c++/examples/bin/plot_brunel_outdegree_mpi.m +++ /dev/null @@ -1,35 +0,0 @@ -data=load('test_brunel_outdegree_mpi_0.dat'); -t=data(:,1); -V1=data(:,2); -V2=data(:,3); -V3=data(:,4); -V4=data(:,5); -V5=data(:,6); -figure(1); -plot(t,V1); -figure(2); -plot(t,V2); -figure(3); -plot(t,V3); -figure(4); -plot(t,V4); -figure(5); -plot(t,V5); - -data1=load('test_brunel_outdegree_mpi_1.dat'); -t1=data1(:,1); -V11=data1(:,2); -V12=data1(:,3); -V13=data1(:,4); -V14=data1(:,5); -V15=data1(:,6); -figure(6); -plot(t1,V11); -figure(7); -plot(t1,V12); -figure(8); -plot(t1,V13); -figure(9); -plot(t1,V14); -figure(10); -plot(t1,V15); diff --git a/c++/examples/bin/run_all.sh b/c++/examples/bin/run_all.sh deleted file mode 100755 index acf4e9a5b..000000000 --- a/c++/examples/bin/run_all.sh +++ /dev/null @@ -1,7 +0,0 @@ -mpirun -np 2 brunel_mpi 2000 -./brunel_net 2000 -./brunel_vect 2000 -./brunel_outdegree 2000 -mpirun -np 2 ./brunel_outdegree_mpi 2000 -./test_aeif_cond_beta -./test_constcurr diff --git a/c++/examples/bin/test_aeif_cond_beta.m b/c++/examples/bin/test_aeif_cond_beta.m deleted file mode 100644 index 41f4a7a33..000000000 --- a/c++/examples/bin/test_aeif_cond_beta.m +++ /dev/null @@ -1,4 +0,0 @@ -data=load('test_aeif_cond_beta.dat'); -t=data(:,1); -V=data(:,2); -plot(t,V) diff --git a/c++/examples/bin/test_brunel_vect.sh b/c++/examples/bin/test_brunel_vect.sh deleted file mode 100755 index 73afb3f62..000000000 --- a/c++/examples/bin/test_brunel_vect.sh +++ /dev/null @@ -1,5 +0,0 @@ -export OMP_NUM_THREADS=1 -./brunel_net 1000 -./brunel_vect 1000 -diff test_brunel_vect.dat test_brunel_net.dat -unset OMP_NUM_THREADS diff --git a/c++/examples/bin/test_constcurr.m b/c++/examples/bin/test_constcurr.m deleted file mode 100644 index 767b0ce1c..000000000 --- a/c++/examples/bin/test_constcurr.m +++ /dev/null @@ -1,4 +0,0 @@ -data=load('test_constcurr.dat'); -t=data(:,1); -V=data(:,2); -plot(t,V) diff --git a/c++/examples/bin/test_setvar.m b/c++/examples/bin/test_setvar.m deleted file mode 100644 index c63ac45e5..000000000 --- a/c++/examples/bin/test_setvar.m +++ /dev/null @@ -1,11 +0,0 @@ -data=load('test_setvar.dat'); -t=data(:,1); -V0=data(:,2); -V1=data(:,3); -V2=data(:,4); -figure(1); -plot(t,V0); -figure(2); -plot(t,V1); -figure(3); -plot(t,V2); diff --git a/c++/examples/brunel_mpi.cpp b/c++/examples/brunel_mpi.cpp deleted file mode 100644 index d7f185e06..000000000 --- a/c++/examples/brunel_mpi.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/* - * brunel_mpi.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - NESTGPU ngpu; - ngpu.ConnectMpiInit( argc, argv ); - int mpi_np = ngpu.MpiNp(); - if ( argc != 2 || mpi_np != 2 ) - { - cout << "Usage: mpirun -np 2 " << argv[ 0 ] << " n_neurons\n"; - ngpu.MpiFinalize(); - return 0; - } - int arg1; - sscanf( argv[ 1 ], "%d", &arg1 ); - - int mpi_id = ngpu.MpiId(); - cout << "Building on host " << mpi_id << " ..." << endl; - - ngpu.SetRandomSeed( 1234ULL + mpi_id ); // seed for GPU random numbers - - ////////////////////////////////////////////////////////////////////// - // WRITE HERE COMMANDS THAT ARE EXECUTED ON ALL HOSTS - ////////////////////////////////////////////////////////////////////// - int n_receptors = 2; - - float delay = 1.0; // synaptic delay in ms - - int order = arg1 / 5; - int NE = 4 * order; // number of excitatory neurons - int NI = 1 * order; // number of inhibitory neurons - int n_neurons = NE + NI; // number of neurons in total - - int CE = 800; // number of excitatory synapses per neuron - int CI = CE / 4; // number of inhibitory synapses per neuron - - float Wex = 0.05; - float Win = 0.35; - - // each host has a poisson generator - float poiss_rate = 20000.0; // poisson signal rate in Hz - float poiss_weight = 0.37; - float poiss_delay = 0.2; // poisson signal delay in ms - - // create poisson generator - NodeSeq pg = ngpu.Create( "poisson_generator" ); - ngpu.SetNeuronParam( pg, "rate", poiss_rate ); - - // each host has n_neurons neurons with n_receptor receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, n_receptors ); - NodeSeq exc_neuron = neuron.Subseq( 0, NE - 1 ); // excitatory neuron group - NodeSeq inh_neuron = neuron.Subseq( NE, n_neurons - 1 ); // inhibitory neuron group - - // the following parameters are set to the same values on all hosts - float E_rev[] = { 0.0, -85.0 }; - float tau_decay[] = { 1.0, 1.0 }; - float tau_rise[] = { 1.0, 1.0 }; - ngpu.SetNeuronParam( neuron, "E_rev", E_rev, 2 ); - ngpu.SetNeuronParam( neuron, "tau_decay", tau_decay, 2 ); - ngpu.SetNeuronParam( neuron, "tau_rise", tau_rise, 2 ); - - // Excitatory local connections, defined on all hosts - // connect excitatory neurons to port 0 of all neurons - // weight Wex and fixed indegree CE*3/4 - ConnSpec conn_spec1( FIXED_INDEGREE, CE * 3 / 4 ); - SynSpec syn_spec1; - syn_spec1.SetParam( "receptor", 0 ); - syn_spec1.SetParam( "weight", Wex ); - syn_spec1.SetParam( "delay", delay ); - ngpu.Connect( exc_neuron, neuron, conn_spec1, syn_spec1 ); - - // Inhibitory local connections, defined on all hosts - // connect inhibitory neurons to port 1 of all neurons - // weight Win and fixed indegree CI*3/4 - ConnSpec conn_spec2( FIXED_INDEGREE, CI * 3 / 4 ); - SynSpec syn_spec2; - syn_spec2.SetParam( "receptor", 1 ); - syn_spec2.SetParam( "weight", Win ); - syn_spec2.SetParam( "delay", delay ); - ngpu.Connect( inh_neuron, neuron, conn_spec2, syn_spec2 ); - - ConnSpec conn_spec3( ALL_TO_ALL ); - SynSpec syn_spec3( STANDARD_SYNAPSE, poiss_weight, poiss_delay, 0 ); - // connect poisson generator to port 0 of all neurons - ngpu.Connect( pg, neuron, conn_spec3, syn_spec3 ); - - char filename[ 100 ]; - sprintf( filename, "test_brunel_mpi_%d.dat", mpi_id ); - - int i_neuron_arr[] = { - neuron[ 0 ], neuron[ rand() % n_neurons ], neuron[ n_neurons - 1 ] - }; // any set of neuron indexes - // create multimeter record of V_m - std::string var_name_arr[] = { "V_m", "V_m", "V_m" }; - ngpu.CreateRecord( string( filename ), var_name_arr, i_neuron_arr, 3 ); - - ////////////////////////////////////////////////////////////////////// - // WRITE HERE REMOTE CONNECTIONS - ////////////////////////////////////////////////////////////////////// - - // Excitatory remote connections - // connect excitatory neurons to port 0 of all neurons - // weight Wex and fixed indegree CE/4 - // host 0 to host 1 - ConnSpec conn_spec4( FIXED_INDEGREE, CE / 4 ); - SynSpec syn_spec4; - syn_spec4.SetParam( "receptor", 0 ); - syn_spec4.SetParam( "weight", Wex ); - syn_spec4.SetParam( "delay", delay ); - // host 0 to host 1 - ngpu.RemoteConnect( 0, exc_neuron, 1, neuron, conn_spec4, syn_spec4 ); - // host 1 to host 0 - ngpu.RemoteConnect( 1, exc_neuron, 0, neuron, conn_spec4, syn_spec4 ); - - // Inhibitory remote connections - // connect inhibitory neurons to port 1 of all neurons - // weight Win and fixed indegree CI/4 - // host 0 to host 1 - ConnSpec conn_spec5( FIXED_INDEGREE, CI / 4 ); - SynSpec syn_spec5; - syn_spec5.SetParam( "receptor", 1 ); - syn_spec5.SetParam( "weight", Win ); - syn_spec5.SetParam( "delay", delay ); - // host 0 to host 1 - ngpu.RemoteConnect( 0, inh_neuron, 1, neuron, conn_spec5, syn_spec5 ); - // host 1 to host 0 - ngpu.RemoteConnect( 1, inh_neuron, 0, neuron, conn_spec5, syn_spec5 ); - - ngpu.Simulate(); - - ngpu.MpiFinalize(); - - return 0; -} diff --git a/c++/examples/brunel_mpi_nx.cpp.old b/c++/examples/brunel_mpi_nx.cpp.old deleted file mode 100644 index 0824c23e5..000000000 --- a/c++/examples/brunel_mpi_nx.cpp.old +++ /dev/null @@ -1,145 +0,0 @@ -/* -Copyright (C) 2016 Bruno Golosio -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program. If not, see . -*/ - -#include -#include -#include -#include -#include "nestgpu.h" - -using namespace std; - -int main(int argc, char *argv[]) -{ - NESTGPU neural_gpu; - neural_gpu.ConnectMpiInit(argc, argv); - int mpi_np = neural_gpu.MpiNp(); - if (mpi_np < 2) { - cerr << "Usage: mpirun -np brunel_mpi_nx\n"; - return -1; - } - - int mpi_id = neural_gpu.MpiId(); - cout << "Building on host " << mpi_id << " ..." < 0) ? ith-1 : mpi_np - 1; // previous host on a ring - int ish2 = (ith < mpi_np -1) ? ith+1 : 0; // next host on a ring - // previous host to target host - neural_gpu.RemoteConnectFixedIndegree(ish1, exc_neuron+NE-NEext/2, - NEext/2, ith, neuron, n_neurons, - 0, Wex, delay, CE/4); - // next host to target host - neural_gpu.RemoteConnectFixedIndegree(ish2, exc_neuron+NE-NEext/2, - NEext/2, ith, neuron, n_neurons, - 0, Wex, delay, CE/4); - - - // Inhibitory remote connections - // connect inhibitory neurons to port 1 of all neurons - // weight Win and fixed indegree CI-CI*3/4 - // previous host to target host - neural_gpu.RemoteConnectFixedIndegree(ish1, inh_neuron+NI-NIext/2, - NIext/2, ith, neuron, n_neurons, - 1, Win, delay, CI/4); - // next host to target host - neural_gpu.RemoteConnectFixedIndegree(ish2, inh_neuron+NI-NIext/2, - NIext/2, ith, neuron, n_neurons, - 1, Win, delay, CI/4); - - } - - neural_gpu.SetRandomSeed(1234ULL); // just to have same results in different simulations - neural_gpu.Simulate(); - - neural_gpu.MpiFinalize(); - - return 0; -} diff --git a/c++/examples/brunel_net.cpp b/c++/examples/brunel_net.cpp deleted file mode 100644 index d18e1042f..000000000 --- a/c++/examples/brunel_net.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/* - * brunel_net.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - if ( argc != 2 ) - { - cout << "Usage: " << argv[ 0 ] << " n_neurons\n"; - return 0; - } - int arg1; - sscanf( argv[ 1 ], "%d", &arg1 ); - NESTGPU ngpu; - cout << "Building ...\n"; - - ngpu.SetRandomSeed( 1234ULL ); // seed for GPU random numbers - - int n_receptors = 2; - - int order = arg1 / 5; - int NE = 4 * order; // number of excitatory neurons - int NI = 1 * order; // number of inhibitory neurons - int n_neurons = NE + NI; // number of neurons in total - - int CE = 800; // number of excitatory synapses per neuron - int CI = CE / 4; // number of inhibitory synapses per neuron - - float Wex = 0.05; - float Win = 0.35; - - // poisson generator parameters - float poiss_rate = 20000.0; // poisson signal rate in Hz - float poiss_weight = 0.37; - float poiss_delay = 0.2; // poisson signal delay in ms - - // create poisson generator - NodeSeq pg = ngpu.Create( "poisson_generator" ); - ngpu.SetNeuronParam( pg, "rate", poiss_rate ); - - // create n_neurons neurons with n_receptor receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, n_receptors ); - NodeSeq exc_neuron = neuron.Subseq( 0, NE - 1 ); // excitatory neuron group - NodeSeq inh_neuron = neuron.Subseq( NE, n_neurons - 1 ); // inhibitory neuron group - - // neuron parameters - float E_rev[] = { 0.0, -85.0 }; - float tau_decay[] = { 1.0, 1.0 }; - float tau_rise[] = { 1.0, 1.0 }; - ngpu.SetNeuronParam( neuron, "E_rev", E_rev, 2 ); - ngpu.SetNeuronParam( neuron, "tau_decay", tau_decay, 2 ); - ngpu.SetNeuronParam( neuron, "tau_rise", tau_rise, 2 ); - - float mean_delay = 0.5; - float std_delay = 0.25; - float min_delay = 0.1; - // Excitatory connections - // connect excitatory neurons to port 0 of all neurons - // normally distributed delays, weight Wex and CE connections per neuron - float* exc_delays = - ngpu.RandomNormalClipped( CE * n_neurons, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec1( FIXED_INDEGREE, CE ); - SynSpec syn_spec1; - syn_spec1.SetParam( "receptor", 0 ); - syn_spec1.SetParam( "weight", Wex ); - syn_spec1.SetParam( "delay_array", exc_delays ); - ngpu.Connect( exc_neuron, neuron, conn_spec1, syn_spec1 ); - delete[] exc_delays; - - // Inhibitory connections - // connect inhibitory neurons to port 1 of all neurons - // normally distributed delays, weight Win and CI connections per neuron - float* inh_delays = - ngpu.RandomNormalClipped( CI * n_neurons, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec2( FIXED_INDEGREE, CI ); - SynSpec syn_spec2; - syn_spec2.SetParam( "receptor", 1 ); - syn_spec2.SetParam( "weight", Win ); - syn_spec2.SetParam( "delay_array", inh_delays ); - ngpu.Connect( inh_neuron, neuron, conn_spec2, syn_spec2 ); - - delete[] inh_delays; - - ConnSpec conn_spec3( ALL_TO_ALL ); - SynSpec syn_spec3( STANDARD_SYNAPSE, poiss_weight, poiss_delay, 0 ); - // connect poisson generator to port 0 of all neurons - ngpu.Connect( pg, neuron, conn_spec3, syn_spec3 ); - - char filename[] = "test_brunel_net.dat"; - int i_neuron_arr[] = { - neuron[ 0 ], neuron[ rand() % n_neurons ], neuron[ n_neurons - 1 ] - }; // any set of neuron indexes - // create multimeter record of V_m - std::string var_name_arr[] = { "V_m", "V_m", "V_m" }; - ngpu.CreateRecord( string( filename ), var_name_arr, i_neuron_arr, 3 ); - - ngpu.Simulate(); - - return 0; -} diff --git a/c++/examples/brunel_outdegree.cpp b/c++/examples/brunel_outdegree.cpp deleted file mode 100644 index 843ab73ba..000000000 --- a/c++/examples/brunel_outdegree.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - * brunel_outdegree.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - if ( argc != 2 ) - { - cout << "Usage: " << argv[ 0 ] << " n_neurons\n"; - return 0; - } - int arg1; - sscanf( argv[ 1 ], "%d", &arg1 ); - NESTGPU ngpu; - cout << "Building ...\n"; - - ngpu.SetRandomSeed( 12345ULL ); // seed for GPU random numbers - - int n_receptors = 2; - - int order = arg1 / 5; - int NE = 4 * order; // number of excitatory neurons - int NI = 1 * order; // number of inhibitory neurons - int n_neurons = NE + NI; // number of neurons in total - - int CPN = 1000; // number of output connections per neuron - - float Wex = 0.05; - float Win = 0.35; - - // poisson generator parameters - float poiss_rate = 20000.0; // poisson signal rate in Hz - float poiss_weight = 0.37; - float poiss_delay = 0.2; // poisson signal delay in ms - - // create poisson generator - NodeSeq pg = ngpu.Create( "poisson_generator" ); - ngpu.SetNeuronParam( pg, "rate", poiss_rate ); - - // create n_neurons neurons with n_receptor receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, n_receptors ); - NodeSeq exc_neuron = neuron.Subseq( 0, NE - 1 ); // excitatory neuron group - NodeSeq inh_neuron = neuron.Subseq( NE, n_neurons - 1 ); // inhibitory neuron group - - // neuron parameters - float E_rev[] = { 0.0, -85.0 }; - float tau_decay[] = { 1.0, 1.0 }; - float tau_rise[] = { 1.0, 1.0 }; - ngpu.SetNeuronParam( neuron, "E_rev", E_rev, 2 ); - ngpu.SetNeuronParam( neuron, "tau_decay", tau_decay, 2 ); - ngpu.SetNeuronParam( neuron, "tau_rise", tau_rise, 2 ); - - float mean_delay = 0.5; - float std_delay = 0.25; - float min_delay = 0.1; - // Excitatory connections - // connect excitatory neurons to port 0 of all neurons - // normally distributed delays, weight Wex and CPN connections per neuron - float* exc_delays = - ngpu.RandomNormalClipped( CPN * NE, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec1( FIXED_OUTDEGREE, CPN ); - SynSpec syn_spec1; - syn_spec1.SetParam( "receptor", 0 ); - syn_spec1.SetParam( "weight", Wex ); - syn_spec1.SetParam( "delay_array", exc_delays ); - ngpu.Connect( exc_neuron, neuron, conn_spec1, syn_spec1 ); - delete[] exc_delays; - - // Inhibitory connections - // connect inhibitory neurons to port 1 of all neurons - // normally distributed delays, weight Win and CPN connections per neuron - float* inh_delays = - ngpu.RandomNormalClipped( CPN * NI, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec2( FIXED_OUTDEGREE, CPN ); - SynSpec syn_spec2; - syn_spec2.SetParam( "receptor", 1 ); - syn_spec2.SetParam( "weight", Win ); - syn_spec2.SetParam( "delay_array", inh_delays ); - ngpu.Connect( inh_neuron, neuron, conn_spec2, syn_spec2 ); - - delete[] inh_delays; - - ConnSpec conn_spec3( ALL_TO_ALL ); - SynSpec syn_spec3( STANDARD_SYNAPSE, poiss_weight, poiss_delay, 0 ); - // connect poisson generator to port 0 of all neurons - ngpu.Connect( pg, neuron, conn_spec3, syn_spec3 ); - - char filename[] = "test_brunel_outdegree.dat"; - // any set of neuron indexes - int i_neuron_arr[] = { neuron[ 0 ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ n_neurons - 1 ] }; - // create multimeter record of V_m - std::string var_name_arr[] = { "V_m", "V_m", "V_m", "V_m", "V_m", "V_m", "V_m", "V_m", "V_m", "V_m" }; - ngpu.CreateRecord( string( filename ), var_name_arr, i_neuron_arr, 10 ); - - ngpu.Simulate(); - - return 0; -} diff --git a/c++/examples/brunel_outdegree_mpi.cpp b/c++/examples/brunel_outdegree_mpi.cpp deleted file mode 100644 index ca13bf222..000000000 --- a/c++/examples/brunel_outdegree_mpi.cpp +++ /dev/null @@ -1,153 +0,0 @@ -/* - * brunel_outdegree_mpi.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - NESTGPU ngpu; - ngpu.ConnectMpiInit( argc, argv ); - int mpi_np = ngpu.MpiNp(); - if ( argc != 2 || mpi_np != 2 ) - { - cout << "Usage: mpirun -np 2 " << argv[ 0 ] << " n_neurons\n"; - ngpu.MpiFinalize(); - return 0; - } - int arg1; - sscanf( argv[ 1 ], "%d", &arg1 ); - - int mpi_id = ngpu.MpiId(); - cout << "Building on host " << mpi_id << " ..." << endl; - - ngpu.SetRandomSeed( 12345ULL + mpi_id ); // seed for GPU random numbers - - ////////////////////////////////////////////////////////////////////// - // WRITE HERE COMMANDS THAT ARE EXECUTED ON ALL HOSTS - ////////////////////////////////////////////////////////////////////// - int n_receptors = 2; - - float delay = 1.0; // synaptic delay in ms - - int order = arg1 / 5; - int NE = 4 * order; // number of excitatory neurons - int NI = 1 * order; // number of inhibitory neurons - int n_neurons = NE + NI; // number of neurons in total - - int CPN = 1000; // number of output connections per neuron - - float fext = 0.25; // fraction of the excitatory neurons that - // send their output to neurons of another mpi host - int NEext = ( int ) ( fext * NE ); - int NEint = NE - NEext; - - float Wex = 0.05; - float Win = 0.35; - - // poisson generator parameters - float poiss_rate = 20000.0; // poisson signal rate in Hz - float poiss_weight = 0.37; - float poiss_delay = 0.2; // poisson signal delay in ms - - // create poisson generator - NodeSeq pg = ngpu.Create( "poisson_generator" ); - ngpu.SetNeuronParam( pg, "rate", poiss_rate ); - - // each host has n_neurons neurons with n_receptor receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, n_receptors ); - NodeSeq excint_neuron = neuron.Subseq( 0, NEint - 1 ); // excitatory group - // of neurons that project internally - NodeSeq excext_neuron = neuron.Subseq( NEint, NE - 1 ); // excitatory group - // of neurons that project externally - - NodeSeq inh_neuron = neuron.Subseq( NE, n_neurons - 1 ); // inhibitory neuron group - - // the following parameters are set to the same values on all hosts - float E_rev[] = { 0.0, -85.0 }; - float tau_decay[] = { 1.0, 1.0 }; - float tau_rise[] = { 1.0, 1.0 }; - ngpu.SetNeuronParam( neuron, "E_rev", E_rev, 2 ); - ngpu.SetNeuronParam( neuron, "tau_decay", tau_decay, 2 ); - ngpu.SetNeuronParam( neuron, "tau_rise", tau_rise, 2 ); - - // Excitatory local connections, defined on all hosts - // connect excitatory neurons to port 0 of all neurons - // weight Wex and fixed indegree CE*3/4 - ConnSpec conn_spec1( FIXED_OUTDEGREE, CPN ); - SynSpec syn_spec1; - syn_spec1.SetParam( "receptor", 0 ); - syn_spec1.SetParam( "weight", Wex ); - syn_spec1.SetParam( "delay", delay ); - ngpu.Connect( excint_neuron, neuron, conn_spec1, syn_spec1 ); - - // Inhibitory local connections, defined on all hosts - // connect inhibitory neurons to port 1 of all neurons - // weight Win and fixed indegree CI*3/4 - ConnSpec conn_spec2( FIXED_OUTDEGREE, CPN ); - SynSpec syn_spec2; - syn_spec2.SetParam( "receptor", 1 ); - syn_spec2.SetParam( "weight", Win ); - syn_spec2.SetParam( "delay", delay ); - ngpu.Connect( inh_neuron, neuron, conn_spec2, syn_spec2 ); - - ConnSpec conn_spec3( ALL_TO_ALL ); - SynSpec syn_spec3( STANDARD_SYNAPSE, poiss_weight, poiss_delay, 0 ); - // connect poisson generator to port 0 of all neurons - ngpu.Connect( pg, neuron, conn_spec3, syn_spec3 ); - - char filename[ 100 ]; - sprintf( filename, "test_brunel_outdegree_mpi_%d.dat", mpi_id ); - - int i_neuron_arr[] = { neuron[ 0 ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ rand() % n_neurons ], - neuron[ n_neurons - 1 ] }; // any set of neuron indexes - // create multimeter record of V_m - std::string var_name_arr[] = { "V_m", "V_m", "V_m", "V_m", "V_m" }; - ngpu.CreateRecord( string( filename ), var_name_arr, i_neuron_arr, 5 ); - - ////////////////////////////////////////////////////////////////////// - // WRITE HERE REMOTE CONNECTIONS - ////////////////////////////////////////////////////////////////////// - - // Excitatory remote connections - // connect excitatory neurons to port 0 of all neurons - // weight Wex and fixed outdegree CPN - // host 0 to host 1 - ngpu.RemoteConnect( 0, excext_neuron, 1, neuron, conn_spec1, syn_spec1 ); - // host 1 to host 0 - ngpu.RemoteConnect( 1, excext_neuron, 0, neuron, conn_spec1, syn_spec1 ); - - ngpu.Simulate(); - - ngpu.MpiFinalize(); - - return 0; -} diff --git a/c++/examples/brunel_vect.cpp b/c++/examples/brunel_vect.cpp deleted file mode 100644 index 2d3a3f585..000000000 --- a/c++/examples/brunel_vect.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - * brunel_vect.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - if ( argc != 2 ) - { - cout << "Usage: " << argv[ 0 ] << " n_neurons\n"; - return 0; - } - int arg1; - sscanf( argv[ 1 ], "%d", &arg1 ); - NESTGPU ngpu; - cout << "Building ...\n"; - - ngpu.SetRandomSeed( 1234ULL ); // seed for GPU random numbers - - int n_receptors = 2; - - int order = arg1 / 5; - int NE = 4 * order; // number of excitatory neurons - int NI = 1 * order; // number of inhibitory neurons - int n_neurons = NE + NI; // number of neurons in total - - int CE = 800; // number of excitatory synapses per neuron - int CI = CE / 4; // number of inhibitory synapses per neuron - - float Wex = 0.05; - float Win = 0.35; - - // poisson generator parameters - float poiss_rate = 20000.0; // poisson signal rate in Hz - float poiss_weight = 0.37; - float poiss_delay = 0.2; // poisson signal delay in ms - - // create poisson generator - NodeSeq pg = ngpu.Create( "poisson_generator" ); - ngpu.SetNeuronParam( pg, "rate", poiss_rate ); - std::vector< int > pg_vect = pg.ToVector(); - - // create n_neurons neurons with n_receptor receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, n_receptors ); - std::vector< int > neuron_vect = neuron.ToVector(); - NodeSeq exc_neuron = neuron.Subseq( 0, NE - 1 ); // excitatory neuron group - std::vector< int > exc_neuron_vect = exc_neuron.ToVector(); - NodeSeq inh_neuron = neuron.Subseq( NE, n_neurons - 1 ); // inhibitory neuron group - std::vector< int > inh_neuron_vect = inh_neuron.ToVector(); - - // neuron parameters - float E_rev[] = { 0.0, -85.0 }; - float tau_decay[] = { 1.0, 1.0 }; - float tau_rise[] = { 1.0, 1.0 }; - ngpu.SetNeuronParam( neuron_vect, "E_rev", E_rev, 2 ); - ngpu.SetNeuronParam( neuron_vect, "tau_decay", tau_decay, 2 ); - ngpu.SetNeuronParam( neuron_vect, "tau_rise", tau_rise, 2 ); - - float mean_delay = 0.5; - float std_delay = 0.25; - float min_delay = 0.1; - // Excitatory connections - // connect excitatory neurons to port 0 of all neurons - // normally distributed delays, weight Wex and CE connections per neuron - float* exc_delays = - ngpu.RandomNormalClipped( CE * n_neurons, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec1( FIXED_INDEGREE, CE ); - SynSpec syn_spec1; - syn_spec1.SetParam( "receptor", 0 ); - syn_spec1.SetParam( "weight", Wex ); - syn_spec1.SetParam( "delay_array", exc_delays ); - ngpu.Connect( exc_neuron_vect, neuron, conn_spec1, syn_spec1 ); - delete[] exc_delays; - - // Inhibitory connections - // connect inhibitory neurons to port 1 of all neurons - // normally distributed delays, weight Win and CI connections per neuron - float* inh_delays = - ngpu.RandomNormalClipped( CI * n_neurons, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec2( FIXED_INDEGREE, CI ); - SynSpec syn_spec2; - syn_spec2.SetParam( "receptor", 1 ); - syn_spec2.SetParam( "weight", Win ); - syn_spec2.SetParam( "delay_array", inh_delays ); - ngpu.Connect( inh_neuron, neuron_vect, conn_spec2, syn_spec2 ); - - delete[] inh_delays; - - ConnSpec conn_spec3( ALL_TO_ALL ); - SynSpec syn_spec3( STANDARD_SYNAPSE, poiss_weight, poiss_delay, 0 ); - // connect poisson generator to port 0 of all neurons - ngpu.Connect( pg_vect, neuron_vect, conn_spec3, syn_spec3 ); - char filename[] = "test_brunel_vect.dat"; - - int i_neuron_arr[] = { - neuron[ 0 ], neuron[ rand() % n_neurons ], neuron[ n_neurons - 1 ] - }; // any set of neuron indexes - // create multimeter record of V_m - std::string var_name_arr[] = { "V_m", "V_m", "V_m" }; - ngpu.CreateRecord( string( filename ), var_name_arr, i_neuron_arr, 3 ); - - ngpu.Simulate(); - - return 0; -} diff --git a/c++/examples/make_all.sh b/c++/examples/make_all.sh deleted file mode 100755 index c9d2adf2b..000000000 --- a/c++/examples/make_all.sh +++ /dev/null @@ -1,10 +0,0 @@ -./make_brunel_mpi.sh -./make_brunel_net.sh -./make_brunel_outdegree_mpi.sh -./make_brunel_outdegree.sh -./make_brunel_vect.sh -./make_constcurr.sh -./make_setvar.sh -./make_test_aeif_cond_beta.sh -./make_test_connect.sh -./make_test_error.sh diff --git a/c++/examples/make_brunel_mpi.sh b/c++/examples/make_brunel_mpi.sh deleted file mode 100644 index c72a64e1e..000000000 --- a/c++/examples/make_brunel_mpi.sh +++ /dev/null @@ -1 +0,0 @@ -g++ -Wall -I ../../src -o bin/brunel_mpi brunel_mpi.cpp -lm -lnestgpu diff --git a/c++/examples/make_brunel_net.sh b/c++/examples/make_brunel_net.sh deleted file mode 100644 index bf7e61ddb..000000000 --- a/c++/examples/make_brunel_net.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/brunel_net brunel_net.cpp -lm -lnestgpu - diff --git a/c++/examples/make_brunel_outdegree.sh b/c++/examples/make_brunel_outdegree.sh deleted file mode 100644 index dc0945e53..000000000 --- a/c++/examples/make_brunel_outdegree.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/brunel_outdegree brunel_outdegree.cpp -lm -lnestgpu - diff --git a/c++/examples/make_brunel_outdegree_mpi.sh b/c++/examples/make_brunel_outdegree_mpi.sh deleted file mode 100644 index 6ea3de7bb..000000000 --- a/c++/examples/make_brunel_outdegree_mpi.sh +++ /dev/null @@ -1 +0,0 @@ -g++ -Wall -I ../../src -o bin/brunel_outdegree_mpi brunel_outdegree_mpi.cpp -lm -lnestgpu diff --git a/c++/examples/make_brunel_vect.sh b/c++/examples/make_brunel_vect.sh deleted file mode 100644 index 2ea6e7fc6..000000000 --- a/c++/examples/make_brunel_vect.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/brunel_vect brunel_vect.cpp -lm -lnestgpu - diff --git a/c++/examples/make_constcurr.sh b/c++/examples/make_constcurr.sh deleted file mode 100644 index b05992438..000000000 --- a/c++/examples/make_constcurr.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/test_constcurr test_constcurr.cpp -lm -lnestgpu - diff --git a/c++/examples/make_setvar.sh b/c++/examples/make_setvar.sh deleted file mode 100644 index 740342e4a..000000000 --- a/c++/examples/make_setvar.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/test_setvar test_setvar.cpp -lm -lnestgpu - diff --git a/c++/examples/make_test_aeif_cond_beta.sh b/c++/examples/make_test_aeif_cond_beta.sh deleted file mode 100644 index f0803652b..000000000 --- a/c++/examples/make_test_aeif_cond_beta.sh +++ /dev/null @@ -1 +0,0 @@ -g++ -Wall -I ../../src -o bin/test_aeif_cond_beta test_aeif_cond_beta.cpp -lm -lnestgpu diff --git a/c++/examples/make_test_connect.sh b/c++/examples/make_test_connect.sh deleted file mode 100644 index 66bd66ec2..000000000 --- a/c++/examples/make_test_connect.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/test_connect test_connect.cpp -lm -lnestgpu - diff --git a/c++/examples/make_test_error.sh b/c++/examples/make_test_error.sh deleted file mode 100644 index d614703d1..000000000 --- a/c++/examples/make_test_error.sh +++ /dev/null @@ -1 +0,0 @@ -g++ -Wall -I ../../src -o bin/test_error test_error.cpp -lm -lnestgpu diff --git a/c++/examples/test_aeif_cond_beta.cpp b/c++/examples/test_aeif_cond_beta.cpp deleted file mode 100644 index 3fdf77779..000000000 --- a/c++/examples/test_aeif_cond_beta.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * test_aeif_cond_beta.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - NESTGPU ngpu; - cout << "Building ...\n"; - - srand( 12345 ); - int n_neurons = 10000; - - // create n_neurons neurons with 3 receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, 3 ); - - // neuron parameters - float E_rev[] = { 20.0, 0.0, -85.0 }; - float tau_decay[] = { 40.0, 20.0, 30.0 }; - float tau_rise[] = { 20.0, 10.0, 5.0 }; - ngpu.SetNeuronParam( neuron, "E_rev", E_rev, 3 ); - ngpu.SetNeuronParam( neuron, "tau_decay", tau_decay, 3 ); - ngpu.SetNeuronParam( neuron, "tau_rise", tau_rise, 3 ); - ngpu.SetNeuronParam( neuron, "a", 4.0 ); - ngpu.SetNeuronParam( neuron, "b", 80.5 ); - ngpu.SetNeuronParam( neuron, "E_L", -70.6 ); - ngpu.SetNeuronParam( neuron, "g_L", 300.0 ); - - NodeSeq sg = ngpu.Create( "spike_generator" ); // create spike generator - - float spike_times[] = { 10.0, 400.0 }; - float spike_heights[] = { 1.0, 0.5 }; - int n_spikes = 2; - // set spike times and height - ngpu.SetNeuronParam( sg, "spike_times", spike_times, n_spikes ); - ngpu.SetNeuronParam( sg, "spike_heights", spike_heights, n_spikes ); - - float delay[] = { 1.0, 100.0, 130.0 }; - float weight[] = { 0.1, 0.2, 0.5 }; - - for ( int i_port = 0; i_port < 3; i_port++ ) - { - ConnSpec conn_spec( ALL_TO_ALL ); - SynSpec syn_spec( STANDARD_SYNAPSE, weight[ i_port ], delay[ i_port ], i_port ); - ngpu.Connect( sg, neuron, conn_spec, syn_spec ); - } - string filename = "test_aeif_cond_beta.dat"; - int i_neuron[] = { neuron[ rand() % n_neurons ] }; // any set of neuron indexes - string var_name[] = { "V_m" }; - // create multimeter record of V_m - ngpu.CreateRecord( filename, var_name, i_neuron, 1 ); - - ngpu.Simulate( 800.0 ); - - return 0; -} diff --git a/c++/examples/test_connect.cpp b/c++/examples/test_connect.cpp deleted file mode 100644 index 359789e83..000000000 --- a/c++/examples/test_connect.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * test_connect.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include -#include -#include - -#include "nestgpu.h" - -int -main( int argc, char* argv[] ) -{ - const int N = 5; - - NESTGPU ngpu; - - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", 2 * N ); - std::vector< int > neuron_even; - std::vector< int > neuron_odd; - for ( int i = 0; i < N; i++ ) - { - neuron_even.push_back( neuron[ 2 * i ] ); - neuron_odd.push_back( neuron[ 2 * i + 1 ] ); - } - float even_to_odd_delay[ N * N ]; - float even_to_odd_weight[ N * N ]; - float odd_to_even_delay[ N * N ]; - float odd_to_even_weight[ N * N ]; - for ( int is = 0; is < N; is++ ) - { - int ise = 2 * is; - int iso = 2 * is + 1; - for ( int it = 0; it < N; it++ ) - { - int ite = 2 * it; - int ito = 2 * it + 1; - even_to_odd_delay[ it * N + is ] = 2.0 * N * ise + ito; - even_to_odd_weight[ it * N + is ] = 100.0 * ( 2.0 * N * ise + ito ); - odd_to_even_delay[ it * N + is ] = 2.0 * N * iso + ite; - odd_to_even_weight[ it * N + is ] = 100.0 * ( 2.0 * N * iso + ite ); - } - } - - ConnSpec conn_spec( ALL_TO_ALL ); - SynSpec even_to_odd_syn_spec; - even_to_odd_syn_spec.SetParam( "weight_array", even_to_odd_weight ); - even_to_odd_syn_spec.SetParam( "delay_array", even_to_odd_delay ); - SynSpec odd_to_even_syn_spec; - odd_to_even_syn_spec.SetParam( "weight_array", odd_to_even_weight ); - odd_to_even_syn_spec.SetParam( "delay_array", odd_to_even_delay ); - - ngpu.Connect( neuron_even, neuron_odd, conn_spec, even_to_odd_syn_spec ); - ngpu.Connect( neuron_odd, neuron_even, conn_spec, odd_to_even_syn_spec ); - - // Even to all - std::vector< ConnectionId > conn_id = ngpu.GetConnections( neuron_even, neuron ); - std::vector< ConnectionStatus > conn_stat_vect = ngpu.GetConnectionStatus( conn_id ); - std::cout << "########################################\n"; - std::cout << "Even to all\n"; - for ( unsigned int i = 0; i < conn_stat_vect.size(); i++ ) - { - int i_source = conn_stat_vect[ i ].i_source; - int i_target = conn_stat_vect[ i ].i_target; - int port = conn_stat_vect[ i ].port; - int syn_group = conn_stat_vect[ i ].syn_group; - float weight = conn_stat_vect[ i ].weight; - float delay = conn_stat_vect[ i ].delay; - std::cout << " i_source " << i_source << "\n"; - std::cout << " i_target " << i_target << "\n"; - std::cout << " port " << port << "\n"; - std::cout << " syn_group " << syn_group << "\n"; - std::cout << " weight " << weight << "\n"; - std::cout << " delay " << delay << "\n"; - std::cout << "\n"; - } - std::cout << "########################################\n"; - - // All to odd - conn_id = ngpu.GetConnections( neuron, neuron_odd ); - conn_stat_vect = ngpu.GetConnectionStatus( conn_id ); - std::cout << "########################################\n"; - std::cout << "All to odd\n"; - for ( unsigned int i = 0; i < conn_stat_vect.size(); i++ ) - { - int i_source = conn_stat_vect[ i ].i_source; - int i_target = conn_stat_vect[ i ].i_target; - int port = conn_stat_vect[ i ].port; - int syn_group = conn_stat_vect[ i ].syn_group; - float weight = conn_stat_vect[ i ].weight; - float delay = conn_stat_vect[ i ].delay; - std::cout << " i_source " << i_source << "\n"; - std::cout << " i_target " << i_target << "\n"; - std::cout << " port " << port << "\n"; - std::cout << " syn_group " << syn_group << "\n"; - std::cout << " weight " << weight << "\n"; - std::cout << " delay " << delay << "\n"; - std::cout << "\n"; - } - std::cout << "########################################\n"; - - // Even to 3,4,5,6 - NodeSeq neuron_3_6 = neuron.Subseq( 3, 6 ); - conn_id = ngpu.GetConnections( neuron_even, neuron_3_6 ); - conn_stat_vect = ngpu.GetConnectionStatus( conn_id ); - std::cout << "########################################\n"; - std::cout << "Even to 3,4,5,6\n"; - for ( unsigned int i = 0; i < conn_stat_vect.size(); i++ ) - { - int i_source = conn_stat_vect[ i ].i_source; - int i_target = conn_stat_vect[ i ].i_target; - int port = conn_stat_vect[ i ].port; - int syn_group = conn_stat_vect[ i ].syn_group; - float weight = conn_stat_vect[ i ].weight; - float delay = conn_stat_vect[ i ].delay; - std::cout << " i_source " << i_source << "\n"; - std::cout << " i_target " << i_target << "\n"; - std::cout << " port " << port << "\n"; - std::cout << " syn_group " << syn_group << "\n"; - std::cout << " weight " << weight << "\n"; - std::cout << " delay " << delay << "\n"; - std::cout << "\n"; - } - std::cout << "########################################\n"; - - // 3,4,5,6 to odd - conn_id = ngpu.GetConnections( neuron_3_6, neuron_odd ); - conn_stat_vect = ngpu.GetConnectionStatus( conn_id ); - std::cout << "########################################\n"; - std::cout << "3,4,5,6 to odd\n"; - for ( unsigned int i = 0; i < conn_stat_vect.size(); i++ ) - { - int i_source = conn_stat_vect[ i ].i_source; - int i_target = conn_stat_vect[ i ].i_target; - int port = conn_stat_vect[ i ].port; - int syn_group = conn_stat_vect[ i ].syn_group; - float weight = conn_stat_vect[ i ].weight; - float delay = conn_stat_vect[ i ].delay; - std::cout << " i_source " << i_source << "\n"; - std::cout << " i_target " << i_target << "\n"; - std::cout << " port " << port << "\n"; - std::cout << " syn_group " << syn_group << "\n"; - std::cout << " weight " << weight << "\n"; - std::cout << " delay " << delay << "\n"; - std::cout << "\n"; - } - std::cout << "########################################\n"; - - return 0; -} diff --git a/c++/examples/test_constcurr.cpp b/c++/examples/test_constcurr.cpp deleted file mode 100644 index 1fdbef51f..000000000 --- a/c++/examples/test_constcurr.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/* - * test_constcurr.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - NESTGPU ngpu; - cout << "Building ...\n"; - - srand( 12345 ); - int n_neurons = 10000; - - // create n_neurons neurons with 1 receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, 1 ); - - // neuron parameters - ngpu.SetNeuronParam( neuron, "a", 4.0 ); - ngpu.SetNeuronParam( neuron, "b", 80.5 ); - ngpu.SetNeuronParam( neuron, "E_L", -70.6 ); - ngpu.SetNeuronParam( neuron, "I_e", 800.0 ); - - string filename = "test_constcurr.dat"; - int i_neurons[] = { neuron[ rand() % n_neurons ] }; // any set of neuron indexes - string var_name[] = { "V_m" }; - - // create multimeter record of V_m - ngpu.CreateRecord( filename, var_name, i_neurons, 1 ); - - ngpu.Simulate(); - - return 0; -} diff --git a/c++/examples/test_error.cpp b/c++/examples/test_error.cpp deleted file mode 100644 index 29ff5ba58..000000000 --- a/c++/examples/test_error.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* - * test_error.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include "ngpu_exception.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - BEGIN_TRY - { - if ( argc != 2 ) - { - cout << "Usage: " << argv[ 0 ] << " n_neurons\n"; - return 0; - } - int arg1; - sscanf( argv[ 1 ], "%d", &arg1 ); - NESTGPU ngpu; - cout << "Building ...\n"; - - ngpu.SetRandomSeed( 1234ULL ); // seed for GPU random numbers - - int n_receptors = 2; - - int order = arg1 / 5; - int NE = 4 * order; // number of excitatory neurons - int NI = 1 * order; // number of inhibitory neurons - int n_neurons = NE + NI; // number of neurons in total - - int CE = 800; // number of excitatory synapses per neuron - int CI = CE / 4; // number of inhibitory synapses per neuron - - float Wex = 0.05; - float Win = 0.35; - - // poisson generator parameters - float poiss_rate = 20000.0; // poisson signal rate in Hz - float poiss_weight = 0.37; - float poiss_delay = 0.2; // poisson signal delay in ms - int n_pg = n_neurons; // number of poisson generators - // create poisson generator - NodeSeq pg = ngpu.CreatePoissonGenerator( n_pg, poiss_rate ); - - // create n_neurons neurons with n_receptor receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, n_receptors ); - - NodeSeq exc_neuron = neuron.Subseq( 0, NE - 1 ); // excitatory neuron group - NodeSeq inh_neuron = neuron.Subseq( NE, n_neurons - 1 ); // inhibitory neuron group - - // neuron parameters - float E_rev[] = { 0.0, -85.0 }; - float tau_decay[] = { 1.0, 1.0 }; - float tau_rise[] = { 1.0, 1.0 }; - - ngpu.SetNeuronParam( neuron, "Non-existent", E_rev, 2 ); - ngpu.SetNeuronParam( neuron, "tau_decay", tau_decay, 2 ); - ngpu.SetNeuronParam( neuron, "tau_rise", tau_rise, 2 ); - - float mean_delay = 0.5; - float std_delay = 0.25; - float min_delay = 0.1; - // Excitatory connections - // connect excitatory neurons to port 0 of all neurons - // normally distributed delays, weight Wex and CE connections per neuron - float* exc_delays = - ngpu.RandomNormalClipped( CE * n_neurons, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec1( FIXED_INDEGREE, CE ); - SynSpec syn_spec1; - syn_spec1.SetParam( "receptor", 0 ); - syn_spec1.SetParam( "weight", Wex ); - syn_spec1.SetParam( "delay_array", exc_delays ); - ngpu.Connect( exc_neuron, neuron, conn_spec1, syn_spec1 ); - delete[] exc_delays; - - // Inhibitory connections - // connect inhibitory neurons to port 1 of all neurons - // normally distributed delays, weight Win and CI connections per neuron - float* inh_delays = - ngpu.RandomNormalClipped( CI * n_neurons, mean_delay, std_delay, min_delay, mean_delay + 3 * std_delay ); - - ConnSpec conn_spec2( FIXED_INDEGREE, CI ); - SynSpec syn_spec2; - syn_spec2.SetParam( "receptor", 1 ); - syn_spec2.SetParam( "weight", Win ); - syn_spec2.SetParam( "delay_array", inh_delays ); - ngpu.Connect( inh_neuron, neuron, conn_spec2, syn_spec2 ); - - delete[] inh_delays; - - ConnSpec conn_spec3( ONE_TO_ONE ); - SynSpec syn_spec3( STANDARD_SYNAPSE, poiss_weight, poiss_delay, 0 ); - // connect poisson generator to port 0 of all neurons - ngpu.Connect( pg, neuron, conn_spec3, syn_spec3 ); - - char filename[] = "test_brunel_net.dat"; - int i_neuron_arr[] = { - neuron[ 0 ], neuron[ rand() % n_neurons ], neuron[ n_neurons - 1 ] - }; // any set of neuron indexes - // create multimeter record of V_m - std::string var_name_arr[] = { "V_m", "V_m", "V_m" }; - ngpu.CreateRecord( string( filename ), var_name_arr, i_neuron_arr, 3 ); - - ngpu.Simulate(); - - return 0; - } - END_TRY - return -1; -} diff --git a/c++/examples/test_setvar.cpp b/c++/examples/test_setvar.cpp deleted file mode 100644 index 18a808c99..000000000 --- a/c++/examples/test_setvar.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/* - * test_setvar.cpp - * - * This file is part of NEST GPU. - * - * Copyright (C) 2021 The NEST Initiative - * - * NEST GPU is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * NEST GPU is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with NEST GPU. If not, see . - * - */ - -#include "nestgpu.h" -#include -#include -#include -#include - -using namespace std; - -int -main( int argc, char* argv[] ) -{ - NESTGPU ngpu; - cout << "Building ...\n"; - - srand( 12345 ); - int n_neurons = 3; - - // create n_neurons neurons with 2 receptor ports - NodeSeq neuron = ngpu.Create( "aeif_cond_beta", n_neurons, 2 ); - float tau_decay[] = { 60.0, 10.0 }; - float tau_rise[] = { 40.0, 5.0 }; - ngpu.SetNeuronParam( neuron, "tau_decay", tau_decay, 2 ); - ngpu.SetNeuronParam( neuron, "tau_rise", tau_rise, 2 ); - - NodeSeq neuron0 = neuron.Subseq( 0, 0 ); - NodeSeq neuron1 = neuron.Subseq( 1, 1 ); - NodeSeq neuron2 = neuron.Subseq( 2, 2 ); - float g11[] = { 0.0, 0.1 }; - float g12[] = { 0.1, 0.0 }; - - // neuron variables - ngpu.SetNeuronVar( neuron0, "V_m", -80.0 ); - ngpu.SetNeuronVar( neuron1, "g1", g11, 2 ); - ngpu.SetNeuronVar( neuron2, "g1", g12, 2 ); - - // reading parameters and variables test - float* read_td = ngpu.GetNeuronParam( neuron, "tau_decay" ); - float* read_tr = ngpu.GetNeuronParam( neuron, "tau_rise" ); - float* read_Vm = ngpu.GetNeuronVar( neuron, "V_m" ); - float* read_Vth = ngpu.GetNeuronParam( neuron, "V_th" ); - float* read_g1 = ngpu.GetNeuronVar( neuron, "g1" ); - - for ( int in = 0; in < 3; in++ ) - { - printf( "Neuron n. %d\n", in ); - printf( "\tV_m: %f\n", read_Vm[ in ] ); - printf( "\tV_th: %f\n", read_Vth[ in ] ); - for ( int ip = 0; ip < 2; ip++ ) - { - printf( "\tg1: %f\n", read_g1[ in * 2 + ip ] ); - printf( "\ttau_rise: %f\n", read_tr[ in * 2 + ip ] ); - printf( "\ttau_decay: %f\n", read_td[ in * 2 + ip ] ); - } - printf( "\n" ); - } - - string filename = "test_setvar.dat"; - int i_neurons[] = { neuron[ 0 ], neuron[ 1 ], neuron[ 2 ] }; - string var_name[] = { "V_m", "V_m", "V_m" }; - - // create multimeter record of V_m - ngpu.CreateRecord( filename, var_name, i_neurons, 3 ); - - ngpu.Simulate(); - - return 0; -} diff --git a/c++/tests/bin/clean.sh b/c++/tests/bin/clean.sh deleted file mode 100755 index a5866ba4d..000000000 --- a/c++/tests/bin/clean.sh +++ /dev/null @@ -1,9 +0,0 @@ -rm -f test_connections_g1.dat -rm -f test_connections_spikes.dat -rm -f test_connections_voltage.dat -rm -f test_neuron_group_record.dat -rm -f test_neuron_groups_g1.dat -rm -f test_neuron_groups_spikes.dat -rm -f test_neuron_groups_voltage.dat -rm -f test_connections -rm -f test_neuron_groups diff --git a/c++/tests/bin/plot_test_connections.m b/c++/tests/bin/plot_test_connections.m deleted file mode 100644 index 980d03965..000000000 --- a/c++/tests/bin/plot_test_connections.m +++ /dev/null @@ -1,92 +0,0 @@ -clear all; close all; -data=load('test_connections_voltage.dat'); -t=data(:,1); -n1=data(:,2); -n2=data(:,3); -n3=data(:,4); -n4=data(:,5); -n5=data(:,6); -n6=data(:,7); -n7=data(:,8); -% -y1=data(:,9); -y2=data(:,10); -y3=data(:,11); -% -data=load('test_connections_g1.dat'); -z1=data(:,2); -z2=data(:,3); -z3=data(:,4); -z4=data(:,5); -z5=data(:,6); -z6=data(:,7); -% -% -data=load('test_connections_spikes.dat'); -sp1=data(:,2); -sp2=data(:,3); -sp3=data(:,4); -sp4=data(:,5); -sp5=data(:,6); -sp6=data(:,7); -sp7=data(:,8); - -figure(1); -plot(t,n1); -figure(2); -plot(t,n7) -% -figure(3); -plot(t,y1) -% -figure(4); -plot(t,y2) -% -figure(5); -plot(t,y3) -% -figure(6) -plot(t,sp1+sp2+sp3+sp4) -hold on -plot(t,(y1+70.6)*70,'r') -% -figure(7) -plot(t,sp5) -hold on -plot(t,(y2+70.6)*70,'r') -% -figure(8) -plot(t,sp6 + sp7) -hold on -plot(t,(y3+70.6)*70,'r') -% -figure(9) -plot(t,sp1) -hold on -plot(t,z1*50,'r') -% -figure(10) -plot(t,sp2+sp3) -hold on -plot(t,z2*50,'r') -% -figure(11) -plot(t,sp4) -hold on -plot(t,z3*50,'r') -% -figure(12) -plot(t,sp5) -hold on -plot(t,z4*50,'r') -% -figure(13) -plot(t,sp6) -hold on -plot(t,z5*50,'r') -% -figure(14) -plot(t,sp7) -hold on -plot(t,z6*50,'r'); -% diff --git a/c++/tests/bin/plot_test_neuron_groups.m b/c++/tests/bin/plot_test_neuron_groups.m deleted file mode 100644 index 56f7b9337..000000000 --- a/c++/tests/bin/plot_test_neuron_groups.m +++ /dev/null @@ -1,92 +0,0 @@ -clear all; close all; -data=load('test_neuron_groups_voltage.dat'); -t=data(:,1); -n1=data(:,2); -n2=data(:,3); -n3=data(:,4); -n4=data(:,5); -n5=data(:,6); -n6=data(:,7); -n7=data(:,8); -% -y1=data(:,9); -y2=data(:,10); -y3=data(:,11); -% -data=load('test_neuron_groups_g1.dat'); -z1=data(:,2); -z2=data(:,3); -z3=data(:,4); -z4=data(:,5); -z5=data(:,6); -z6=data(:,7); -% -% -data=load('test_neuron_groups_spikes.dat'); -sp1=data(:,2); -sp2=data(:,3); -sp3=data(:,4); -sp4=data(:,5); -sp5=data(:,6); -sp6=data(:,7); -sp7=data(:,8); - -figure(1); -plot(t,n1); -figure(2); -plot(t,n7) -% -figure(3); -plot(t,y1) -% -figure(4); -plot(t,y2) -% -figure(5); -plot(t,y3) -% -figure(6) -plot(t,sp1+sp2+sp3+sp4) -hold on -plot(t,(y1+70.6)*70,'r') -% -figure(7) -plot(t,sp5) -hold on -plot(t,(y2+70.6)*70,'r') -% -figure(8) -plot(t,sp6 + sp7) -hold on -plot(t,(y3+70.6)*70,'r') -% -figure(9) -plot(t,sp1) -hold on -plot(t,z1*50,'r') -% -figure(10) -plot(t,sp2+sp3) -hold on -plot(t,z2*50,'r') -% -figure(11) -plot(t,sp4) -hold on -plot(t,z3*50,'r') -% -figure(12) -plot(t,sp5) -hold on -plot(t,z4*50,'r') -% -figure(13) -plot(t,sp6) -hold on -plot(t,z5*50,'r') -% -figure(14) -plot(t,sp7) -hold on -plot(t,z6*50,'r'); -% diff --git a/c++/tests/bin/plot_test_record.m b/c++/tests/bin/plot_test_record.m deleted file mode 100644 index d9ddd2e29..000000000 --- a/c++/tests/bin/plot_test_record.m +++ /dev/null @@ -1,57 +0,0 @@ -clear all; close all; -data=load('test_neuron_groups_voltage.dat'); -t=data(:,1); -n1=data(:,2); -n2=data(:,3); -n3=data(:,4); -n4=data(:,5); -n5=data(:,6); -n6=data(:,7); -n7=data(:,8); -% -data1=load('test_neuron_group_record.dat'); -t1=data1(:,1); -v1=data1(:,2); -v2=data1(:,3); -v3=data1(:,4); -v4=data1(:,5); -v5=data1(:,6); -v6=data1(:,7); -v7=data1(:,8); -% - -figure(1); -plot(t,n1); -hold on; -plot(t1,v1); - -figure(2); -plot(t,n2); -hold on; -plot(t1,v2); - -figure(3); -plot(t,n3); -hold on; -plot(t1,v3); - -figure(4); -plot(t,n4); -hold on; -plot(t1,v4); - -figure(5); -plot(t,n5); -hold on; -plot(t1,v5); - -figure(6); -plot(t,n6); -hold on; -plot(t1,v6); - -figure(7); -plot(t,n7); -hold on; -plot(t1,v7); - diff --git a/c++/tests/make_test_connections.sh b/c++/tests/make_test_connections.sh deleted file mode 100644 index 0351751d2..000000000 --- a/c++/tests/make_test_connections.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/test_connections test_connections.cpp -lm -lnestgpu - diff --git a/c++/tests/make_test_neuron_groups.sh b/c++/tests/make_test_neuron_groups.sh deleted file mode 100644 index 88a9ee731..000000000 --- a/c++/tests/make_test_neuron_groups.sh +++ /dev/null @@ -1,2 +0,0 @@ -g++ -Wall -I ../../src -o bin/test_neuron_groups test_neuron_groups.cpp -lm -lnestgpu - diff --git a/c++/tests/test_connections.cpp b/c++/tests/test_connections.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/c++/tests/test_neuron_groups.cpp b/c++/tests/test_neuron_groups.cpp deleted file mode 100644 index e69de29bb..000000000 diff --git a/config.h.in b/config.h.in deleted file mode 100644 index 5bfc15b24..000000000 --- a/config.h.in +++ /dev/null @@ -1,78 +0,0 @@ -/* config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the `m' library (-lm). */ -#undef HAVE_LIBM - -/* Define to 1 if you have the header file. */ -#undef HAVE_LIMITS_H - -/* Define if you have the MPI library. */ -#undef HAVE_MPI - -/* Define to 1 if you have the `pow' function. */ -#undef HAVE_POW - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDIO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to the sub-directory where libtool stores uninstalled libraries. */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if all of the C90 standard headers exist (not just the ones - required in a freestanding environment). This macro is provided for - backward compatibility; new code need not use it. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION - -/* Define to `unsigned int' if does not define. */ -#undef size_t diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 2532fa844..000000000 --- a/configure.ac +++ /dev/null @@ -1,130 +0,0 @@ -AC_PREREQ([2.65]) -AC_INIT([nestgpu], [1.8.2], []) - -# Config initialization -AC_CONFIG_SRCDIR([m4/ct_check_cuda.m4]) -AC_CONFIG_SRCDIR([m4/pypath.m4]) -#, [m4/ct_check_cuda_sdk.m4]) -AC_CONFIG_AUX_DIR(m4) -AC_CONFIG_HEADER(config.h) -AC_CONFIG_MACRO_DIRS([m4]) - -AC_ENABLE_SHARED -AC_DISABLE_STATIC -LT_INIT - -# automake initialization -AM_INIT_AUTOMAKE - -# Checks for programs. -AC_PROG_CC -AC_PROG_CXX -AM_PROG_CC_C_O - -# AC_CANONICAL_HOST is needed to access the 'host_os' variable -AC_CANONICAL_HOST - -build_linux=no -build_windows=no -build_mac=no - -# Detect the target system -case "${host_os}" in - linux*) - build_linux=yes - ;; - cygwin*|mingw*) - build_windows=yes - ;; - darwin*) - build_mac=yes - ;; - *) - AC_MSG_ERROR(["OS $host_os is not supported"]) - ;; -esac - -# Pass the conditionals to automake -AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) -AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) -AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) - -# Search nvcc compiler -AC_PATH_PROG(NVCC, nvcc, "no") -AS_IF([test "x$NVCC" = "xno"],[AC_MSG_ERROR([NVCC compiler not found!])]) -# Make variable $NVCC available in Makefile.am -AC_SUBST(NVCC) - -# check for OpenMP -AC_OPENMP - -#check for Python -AM_PATH_PYTHON([3.8]) -#adl_CHECK_PYTHON -#AC_MSG_ERROR([$PYTHONINC]) - - -# Checks for libraries. -AC_CHECK_LIB([m], [pow]) -#AC_CHECK_LIB([just_a_test], [pow], [], [AC_MSG_ERROR([pow was not found in libjust_a_test])]) - -# Checks for header files. -AC_CHECK_HEADERS([limits.h stdlib.h string.h]) - -# check for CUDA -#CT_CHECK_CUDA_API - -# check for CUDA SDK -#CT_CHECK_CUDA_SDK - -GPU_ARCH=sm_70 -AC_ARG_WITH(gpu-arch, [AC_HELP_STRING([--with-gpu-arch=GPU architecture], -[Specify the GPU compute capability [default=sm_70]])], -[GPU_ARCH=$withval]) -AC_SUBST(GPU_ARCH) -AC_MSG_NOTICE(GPU architecture: ${GPU_ARCH}) - -dnl Check for MPI -dnl This check will set the MPICC and MPICXX variables to the MPI compiler ones -dnl if the library is found, or to the regular compilers if not. -AC_ARG_WITH(mpi, [AC_HELP_STRING([--with-mpi], -[enable MPI support [default=yes]])], -[case "${withval}" in -yes|no) with_mpi=$withval;; -*) -AC_MSG_ERROR(bad value ${withval} for --with-mpi);; -esac], -[with_mpi=yes]) -if test "x$with_mpi" = "xyes"; then -ACX_MPI([], [AC_MSG_ERROR(m4_normalize([ -could not find MPI library. You should either install it, -or use the option --with-mpi=no -to build without MPI-related functions]))]) -AC_DEFINE(HAVE_MPI) -MPICC="mpicc" -MPICXX="mpicxx" -MPI_CXXLIBS=`mpicxx --showme:link` -MPI_CXXFLAGS=`mpicxx --showme:compile` -AC_SUBST(MPI_CXXLIBS) -AC_SUBST(MPI_CXXFLAGS) -else -MPICC="$CC" -MPICXX="$CXX" -AC_SUBST(MPICC) -AC_SUBST(MPICXX) -fi -AM_CONDITIONAL([WE_HAVE_MPI],[test "x$with_mpi" = "xyes"]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_TYPE_SIZE_T - -# Checks for library functions. -AC_CHECK_FUNCS([pow]) - -AC_CONFIG_FILES([Makefile]) - - -AC_OUTPUT -_AC_SRCDIRS(["."]) -export ac_top_srcdir -$ac_top_srcdir/patch.sh diff --git a/deb/add_to_repo.sh b/deb/add_to_repo.sh deleted file mode 100755 index 3b0adfd8a..000000000 --- a/deb/add_to_repo.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -if [ $# -ne 3 ]; then - echo "Usage: $0 folder distro package-name" - echo "where folder is /srv/dev/ubuntu or /srv/deb/debian and distro is bionic, eoan, ..." - exit -fi -reprepro -b $1 includedeb $2 $3 diff --git a/deb/build_package.sh b/deb/build_package.sh deleted file mode 100644 index b71694d89..000000000 --- a/deb/build_package.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -if [ $# -ne 1 ]; then - echo "Usage: $0 distro" - echo "where distro is ubuntu1 for bionic(18.04), ubuntu2 for eoan(19.10), debian1, ..." - exit -fi - -version=1.4.6~$1 - -#define source and target directories -srcdir=.. -tgdir=nestgpu_$version - -# create installation directory if it doesn't exist and clean it -mkdir -p $tgdir/usr/local/nestgpu -rm -fr $tgdir/usr/local/nestgpu/* -mkdir -p $tgdir/usr/local/lib - -# copy subdirectories -cp -r $srcdir/src $tgdir/usr/local/nestgpu -cp -r $srcdir/python $tgdir/usr/local/nestgpu -cp -r $srcdir/c++ $tgdir/usr/local/nestgpu -cp -r $srcdir/deb/lib $tgdir/usr/local/nestgpu - -#create include directory and copy header file -mkdir $tgdir/usr/local/nestgpu/include -cp $srcdir/src/nestgpu.h $tgdir/usr/local/nestgpu/include/ - -# create python package directory -mkdir -p $tgdir/usr/lib/python2.7/dist-packages/ -mkdir -p $tgdir/usr/lib/python3/dist-packages/ - -# copy the nestgpu python module -cp $srcdir/pythonlib/nestgpu.py $tgdir/usr/lib/python2.7/dist-packages/ -cp $srcdir/pythonlib/nestgpu.py $tgdir/usr/lib/python3/dist-packages/ - -# create a symbolic link in /usr/local/lib to the dynamic-link library -ln -s /usr/local/nestgpu/lib/libnestgpu.so $tgdir/usr/local/lib/libnestgpu.so - -# create dependency list -depends=$(./depends.sh) - -# create metadata file and control file -mkdir $tgdir/DEBIAN -cat control.templ | sed "s/__version__/$version/;s/__depends__/$depends/" > $tgdir/DEBIAN/control -dpkg-deb --build $tgdir diff --git a/deb/control.templ b/deb/control.templ deleted file mode 100644 index 377fbf672..000000000 --- a/deb/control.templ +++ /dev/null @@ -1,12 +0,0 @@ -Package: nestgpu -Version: __version__ -Section: base -Priority: optional -Architecture: amd64 -Depends: libomp-dev (>= 5.0.1-1), libopenmpi-dev (>= 2.1.1-8), nvidia-cuda-toolkit (>= 9.1.85-3ubuntu1), openmpi-bin (>= 2.1.1-8), python (>= 2.7.15~rc1-1), python-matplotlib (>= 2.1.1-2ubuntu3), python-mpi4py (>= 2.0.0-3) -Maintainer: Bruno Golosio -Homepage: https://github.com/golosio/NESTGPU -Description: NESTGPU - A GPU-MPI library for simulation of large-scale networks of spiking neurons. - Can be used in Python, in C++ and in C. - https://github.com/golosio/NESTGPU diff --git a/deb/depends.sh b/deb/depends.sh deleted file mode 100755 index 745961156..000000000 --- a/deb/depends.sh +++ /dev/null @@ -1,2 +0,0 @@ -pkg_list="nvidia-cuda-toolkit openmpi-bin libopenmpi-dev libomp-dev python python-matplotlib python-mpi4py" -apt list $pkg_list 2>/dev/null | tr '/' ' ' | grep -v Listing | while read a b c d; do echo -n "$a (>= $c), "; done | sed 's/, $//'; echo diff --git a/deb/info.txt b/deb/info.txt deleted file mode 100644 index 01f0955dc..000000000 --- a/deb/info.txt +++ /dev/null @@ -1 +0,0 @@ -debian/ubuntu distribution folder diff --git a/deb/remove_package.sh b/deb/remove_package.sh deleted file mode 100644 index 6b6899772..000000000 --- a/deb/remove_package.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if [ $# -ne 1 ]; then - echo "Usage: $0 distro" - exit -fi -sudo reprepro -Vb /srv/deb/ubuntu remove $1 nestgpu diff --git a/deb/sign.sh b/deb/sign.sh deleted file mode 100755 index 49c0eef0f..000000000 --- a/deb/sign.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -if [ $# -ne 1 ]; then - echo "Usage: $0 package-name" - exit -fi - -dpkg-sig --sign builder $1 diff --git a/lib/info.txt b/lib/info.txt deleted file mode 100644 index beed339e4..000000000 --- a/lib/info.txt +++ /dev/null @@ -1 +0,0 @@ -Dinamic library libnestgpu should be produced in this directory. diff --git a/lib1/libnestgpu.so.bk b/lib1/libnestgpu.so.bk deleted file mode 100755 index 15c4d53d6..000000000 Binary files a/lib1/libnestgpu.so.bk and /dev/null differ diff --git a/m4/acx_mpi.m4 b/m4/acx_mpi.m4 deleted file mode 100644 index 77f433d82..000000000 --- a/m4/acx_mpi.m4 +++ /dev/null @@ -1,146 +0,0 @@ -dnl @synopsis ACX_MPI([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -dnl -dnl @summary figure out how to compile/link code with MPI -dnl -dnl This macro tries to find out how to compile programs that use MPI -dnl (Message Passing Interface), a standard API for parallel process -dnl communication (see http://www-unix.mcs.anl.gov/mpi/) -dnl -dnl On success, it sets the MPICC, MPICXX, or MPIF77 output variable to -dnl the name of the MPI compiler, depending upon the current language. -dnl (This may just be $CC/$CXX/$F77, but is more often something like -dnl mpicc/mpiCC/mpif77.) It also sets MPILIBS to any libraries that are -dnl needed for linking MPI (e.g. -lmpi, if a special -dnl MPICC/MPICXX/MPIF77 was not found). -dnl -dnl If you want to compile everything with MPI, you should set: -dnl -dnl CC="$MPICC" #OR# CXX="$MPICXX" #OR# F77="$MPIF77" -dnl LIBS="$MPILIBS $LIBS" -dnl -dnl NOTE: The above assumes that you will use $CC (or whatever) for -dnl linking as well as for compiling. (This is the default for automake -dnl and most Makefiles.) -dnl -dnl The user can force a particular library/compiler by setting the -dnl MPICC/MPICXX/MPIF77 and/or MPILIBS environment variables. -dnl -dnl ACTION-IF-FOUND is a list of shell commands to run if an MPI -dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to -dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the -dnl default action will define HAVE_MPI. -dnl -dnl @category InstalledPackages -dnl @author Steven G. Johnson -dnl @author Julian Cummings -dnl @version 2006-10-13 -dnl @license GPLWithACException - -AC_DEFUN([ACX_MPI], [ -AC_PREREQ(2.50) dnl for AC_LANG_CASE - -AC_LANG_CASE([C], [ - AC_REQUIRE([AC_PROG_CC]) - AC_ARG_VAR(MPICC,[MPI C compiler command]) - AC_CHECK_PROGS(MPICC, mpicc hcc mpxlc_r mpxlc mpcc cmpicc, $CC) - acx_mpi_save_CC="$CC" - CC="$MPICC" - AC_SUBST(MPICC) -], -[C++], [ - AC_REQUIRE([AC_PROG_CXX]) - AC_ARG_VAR(MPICXX,[MPI C++ compiler command]) - AC_CHECK_PROGS(MPICXX, mpic++ mpicxx mpiCC hcp mpxlC_r mpxlC mpCC cmpic++, $CXX) - acx_mpi_save_CXX="$CXX" - CXX="$MPICXX" - AC_SUBST(MPICXX) -], -[Fortran 77], [ - AC_REQUIRE([AC_PROG_F77]) - AC_ARG_VAR(MPIF77,[MPI Fortran 77 compiler command]) - AC_CHECK_PROGS(MPIF77, mpif77 hf77 mpxlf mpf77 mpif90 mpf90 mpxlf90 mpxlf95 mpxlf_r cmpifc cmpif90c, $F77) - acx_mpi_save_F77="$F77" - F77="$MPIF77" - AC_SUBST(MPIF77) -], -[Fortran], [ - AC_REQUIRE([AC_PROG_FC]) - AC_ARG_VAR(MPIFC,[MPI Fortran compiler command]) - AC_CHECK_PROGS(MPIFC, mpif90 hf90 mpxlf90 mpxlf95 mpf90 cmpifc cmpif90c, $FC) - acx_mpi_save_FC="$FC" - FC="$MPIFC" - AC_SUBST(MPIFC) -]) - -if test x = x"$MPILIBS"; then - AC_LANG_CASE([C], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], - [C++], [AC_CHECK_FUNC(MPI_Init, [MPILIBS=" "])], - [Fortran 77], [AC_MSG_CHECKING([for MPI_Init]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " - AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])], - [Fortran], [AC_MSG_CHECKING([for MPI_Init]) - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[ call MPI_Init])],[MPILIBS=" " - AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)])]) -fi -AC_LANG_CASE([Fortran 77], [ - if test x = x"$MPILIBS"; then - AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) - fi - if test x = x"$MPILIBS"; then - AC_CHECK_LIB(fmpich, MPI_Init, [MPILIBS="-lfmpich"]) - fi -], -[Fortran], [ - if test x = x"$MPILIBS"; then - AC_CHECK_LIB(fmpi, MPI_Init, [MPILIBS="-lfmpi"]) - fi - if test x = x"$MPILIBS"; then - AC_CHECK_LIB(mpichf90, MPI_Init, [MPILIBS="-lmpichf90"]) - fi -]) -if test x = x"$MPILIBS"; then - AC_CHECK_LIB(mpi, MPI_Init, [MPILIBS="-lmpi"]) -fi -if test x = x"$MPILIBS"; then - AC_CHECK_LIB(mpich, MPI_Init, [MPILIBS="-lmpich"]) -fi - -dnl We have to use AC_TRY_COMPILE and not AC_CHECK_HEADER because the -dnl latter uses $CPP, not $CC (which may be mpicc). -AC_LANG_CASE([C], [if test x != x"$MPILIBS"; then - AC_MSG_CHECKING([for mpi.h]) - AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" - AC_MSG_RESULT(no)]) -fi], -[C++], [if test x != x"$MPILIBS"; then - AC_MSG_CHECKING([for mpi.h]) - AC_TRY_COMPILE([#include ],[],[AC_MSG_RESULT(yes)], [MPILIBS="" - AC_MSG_RESULT(no)]) -fi], -[Fortran 77], [if test x != x"$MPILIBS"; then - AC_MSG_CHECKING([for mpif.h]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" - AC_MSG_RESULT(no)]) -fi], -[Fortran], [if test x != x"$MPILIBS"; then - AC_MSG_CHECKING([for mpif.h]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[ include 'mpif.h'])],[AC_MSG_RESULT(yes)], [MPILIBS="" - AC_MSG_RESULT(no)]) -fi]) - -AC_LANG_CASE([C], [CC="$acx_mpi_save_CC"], - [C++], [CXX="$acx_mpi_save_CXX"], - [Fortran 77], [F77="$acx_mpi_save_F77"], - [Fortran], [FC="$acx_mpi_save_FC"]) - -AC_SUBST(MPILIBS) - -# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -if test x = x"$MPILIBS"; then - $2 - : -else - ifelse([$1],,[AC_DEFINE(HAVE_MPI,1,[Define if you have the MPI library.])],[$1]) - : -fi -])dnl ACX_MPI diff --git a/m4/compile b/m4/compile deleted file mode 100755 index 99e50524b..000000000 --- a/m4/compile +++ /dev/null @@ -1,348 +0,0 @@ -#! /bin/sh -# Wrapper for compilers which do not understand '-c -o'. - -scriptversion=2018-03-07.03; # UTC - -# Copyright (C) 1999-2018 Free Software Foundation, Inc. -# Written by Tom Tromey . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -nl=' -' - -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent tools from complaining about whitespace usage. -IFS=" "" $nl" - -file_conv= - -# func_file_conv build_file lazy -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. If the determined conversion -# type is listed in (the comma separated) LAZY, no conversion will -# take place. -func_file_conv () -{ - file=$1 - case $file in - / | /[!/]*) # absolute file, and not a UNC file - if test -z "$file_conv"; then - # lazily determine how to convert abs files - case `uname -s` in - MINGW*) - file_conv=mingw - ;; - CYGWIN*) - file_conv=cygwin - ;; - *) - file_conv=wine - ;; - esac - fi - case $file_conv/,$2, in - *,$file_conv,*) - ;; - mingw/*) - file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` - ;; - cygwin/*) - file=`cygpath -m "$file" || echo "$file"` - ;; - wine/*) - file=`winepath -w "$file" || echo "$file"` - ;; - esac - ;; - esac -} - -# func_cl_dashL linkdir -# Make cl look for libraries in LINKDIR -func_cl_dashL () -{ - func_file_conv "$1" - if test -z "$lib_path"; then - lib_path=$file - else - lib_path="$lib_path;$file" - fi - linker_opts="$linker_opts -LIBPATH:$file" -} - -# func_cl_dashl library -# Do a library search-path lookup for cl -func_cl_dashl () -{ - lib=$1 - found=no - save_IFS=$IFS - IFS=';' - for dir in $lib_path $LIB - do - IFS=$save_IFS - if $shared && test -f "$dir/$lib.dll.lib"; then - found=yes - lib=$dir/$lib.dll.lib - break - fi - if test -f "$dir/$lib.lib"; then - found=yes - lib=$dir/$lib.lib - break - fi - if test -f "$dir/lib$lib.a"; then - found=yes - lib=$dir/lib$lib.a - break - fi - done - IFS=$save_IFS - - if test "$found" != yes; then - lib=$lib.lib - fi -} - -# func_cl_wrapper cl arg... -# Adjust compile command to suit cl -func_cl_wrapper () -{ - # Assume a capable shell - lib_path= - shared=: - linker_opts= - for arg - do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - eat=1 - case $2 in - *.o | *.[oO][bB][jJ]) - func_file_conv "$2" - set x "$@" -Fo"$file" - shift - ;; - *) - func_file_conv "$2" - set x "$@" -Fe"$file" - shift - ;; - esac - ;; - -I) - eat=1 - func_file_conv "$2" mingw - set x "$@" -I"$file" - shift - ;; - -I*) - func_file_conv "${1#-I}" mingw - set x "$@" -I"$file" - shift - ;; - -l) - eat=1 - func_cl_dashl "$2" - set x "$@" "$lib" - shift - ;; - -l*) - func_cl_dashl "${1#-l}" - set x "$@" "$lib" - shift - ;; - -L) - eat=1 - func_cl_dashL "$2" - ;; - -L*) - func_cl_dashL "${1#-L}" - ;; - -static) - shared=false - ;; - -Wl,*) - arg=${1#-Wl,} - save_ifs="$IFS"; IFS=',' - for flag in $arg; do - IFS="$save_ifs" - linker_opts="$linker_opts $flag" - done - IFS="$save_ifs" - ;; - -Xlinker) - eat=1 - linker_opts="$linker_opts $2" - ;; - -*) - set x "$@" "$1" - shift - ;; - *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) - func_file_conv "$1" - set x "$@" -Tp"$file" - shift - ;; - *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) - func_file_conv "$1" mingw - set x "$@" "$file" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift - done - if test -n "$linker_opts"; then - linker_opts="-link$linker_opts" - fi - exec "$@" $linker_opts - exit 1 -} - -eat= - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: compile [--help] [--version] PROGRAM [ARGS] - -Wrapper for compilers which do not understand '-c -o'. -Remove '-o dest.o' from ARGS, run PROGRAM with the remaining -arguments, and rename the output as expected. - -If you are trying to build a whole package this is not the -right script to run: please start by reading the file 'INSTALL'. - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "compile $scriptversion" - exit $? - ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ - icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) - func_cl_wrapper "$@" # Doesn't return... - ;; -esac - -ofile= -cfile= - -for arg -do - if test -n "$eat"; then - eat= - else - case $1 in - -o) - # configure might choose to run compile as 'compile cc -o foo foo.c'. - # So we strip '-o arg' only if arg is an object. - eat=1 - case $2 in - *.o | *.obj) - ofile=$2 - ;; - *) - set x "$@" -o "$2" - shift - ;; - esac - ;; - *.c) - cfile=$1 - set x "$@" "$1" - shift - ;; - *) - set x "$@" "$1" - shift - ;; - esac - fi - shift -done - -if test -z "$ofile" || test -z "$cfile"; then - # If no '-o' option was seen then we might have been invoked from a - # pattern rule where we don't need one. That is ok -- this is a - # normal compilation that the losing compiler can handle. If no - # '.c' file was seen then we are probably linking. That is also - # ok. - exec "$@" -fi - -# Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` - -# Create the lock directory. -# Note: use '[/\\:.-]' here to ensure that we don't use the same name -# that we are using for the .o file. Also, base the name on the expected -# object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d -while true; do - if mkdir "$lockdir" >/dev/null 2>&1; then - break - fi - sleep 1 -done -# FIXME: race condition here if user kills between mkdir and trap. -trap "rmdir '$lockdir'; exit 1" 1 2 15 - -# Run the compile. -"$@" -ret=$? - -if test -f "$cofile"; then - test "$cofile" = "$ofile" || mv "$cofile" "$ofile" -elif test -f "${cofile}bj"; then - test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" -fi - -rmdir "$lockdir" -exit $ret - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/m4/config.guess b/m4/config.guess deleted file mode 100755 index f50dcdb6d..000000000 --- a/m4/config.guess +++ /dev/null @@ -1,1480 +0,0 @@ -#! /bin/sh -# Attempt to guess a canonical system name. -# Copyright 1992-2018 Free Software Foundation, Inc. - -timestamp='2018-02-24' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). -# -# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. -# -# You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess -# -# Please send patches to . - - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] - -Output the configuration name of the system \`$me' is run on. - -Options: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.guess ($timestamp) - -Originally written by Per Bothner. -Copyright 1992-2018 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" >&2 - exit 1 ;; - * ) - break ;; - esac -done - -if test $# != 0; then - echo "$me: too many arguments$help" >&2 - exit 1 -fi - -trap 'exit 1' 1 2 15 - -# CC_FOR_BUILD -- compiler used by this script. Note that the use of a -# compiler to aid in system detection is discouraged as it requires -# temporary files to be created and, as you can see below, it is a -# headache to deal with in a portable fashion. - -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. - -# Portable tmp directory creation inspired by the Autoconf team. - -set_cc_for_build=' -trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; -trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; -: ${TMPDIR=/tmp} ; - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || - { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || - { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || - { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; -dummy=$tmp/dummy ; -tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; -case $CC_FOR_BUILD,$HOST_CC,$CC in - ,,) echo "int x;" > "$dummy.c" ; - for c in cc gcc c89 c99 ; do - if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then - CC_FOR_BUILD="$c"; break ; - fi ; - done ; - if test x"$CC_FOR_BUILD" = x ; then - CC_FOR_BUILD=no_compiler_found ; - fi - ;; - ,,*) CC_FOR_BUILD=$CC ;; - ,*,*) CC_FOR_BUILD=$HOST_CC ;; -esac ; set_cc_for_build= ;' - -# This is needed to find uname on a Pyramid OSx when run in the BSD universe. -# (ghazi@noc.rutgers.edu 1994-08-24) -if (test -f /.attbin/uname) >/dev/null 2>&1 ; then - PATH=$PATH:/.attbin ; export PATH -fi - -UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown -UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown -UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown -UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown - -case "$UNAME_SYSTEM" in -Linux|GNU|GNU/*) - # If the system lacks a compiler, then just pick glibc. - # We could probably try harder. - LIBC=gnu - - eval "$set_cc_for_build" - cat <<-EOF > "$dummy.c" - #include - #if defined(__UCLIBC__) - LIBC=uclibc - #elif defined(__dietlibc__) - LIBC=dietlibc - #else - LIBC=gnu - #endif - EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" - - # If ldd exists, use it to detect musl libc. - if command -v ldd >/dev/null && \ - ldd --version 2>&1 | grep -q ^musl - then - LIBC=musl - fi - ;; -esac - -# Note: order is significant - the case branches are not exclusive. - -case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in - *:NetBSD:*:*) - # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, - # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently - # switched to ELF, *-*-netbsd* would select the old - # object file format. This provides both forward - # compatibility and a consistent mechanism for selecting the - # object file format. - # - # Note: NetBSD doesn't particularly care about the vendor - # portion of the name. We always set it to "unknown". - sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ - "/sbin/$sysctl" 2>/dev/null || \ - "/usr/sbin/$sysctl" 2>/dev/null || \ - echo unknown)` - case "$UNAME_MACHINE_ARCH" in - armeb) machine=armeb-unknown ;; - arm*) machine=arm-unknown ;; - sh3el) machine=shl-unknown ;; - sh3eb) machine=sh-unknown ;; - sh5el) machine=sh5le-unknown ;; - earmv*) - arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` - endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` - machine="${arch}${endian}"-unknown - ;; - *) machine="$UNAME_MACHINE_ARCH"-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently (or will in the future) and ABI. - case "$UNAME_MACHINE_ARCH" in - earm*) - os=netbsdelf - ;; - arm*|i386|m68k|ns32k|sh3*|sparc|vax) - eval "$set_cc_for_build" - if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ELF__ - then - # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). - # Return netbsd for either. FIX? - os=netbsd - else - os=netbsdelf - fi - ;; - *) - os=netbsd - ;; - esac - # Determine ABI tags. - case "$UNAME_MACHINE_ARCH" in - earm*) - expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` - ;; - esac - # The OS release - # Debian GNU/NetBSD machines have a different userland, and - # thus, need a distinct triplet. However, they do not need - # kernel version information, so it can be replaced with a - # suitable tag, in the style of linux-gnu. - case "$UNAME_VERSION" in - Debian*) - release='-gnu' - ;; - *) - release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` - ;; - esac - # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: - # contains redundant information, the shorter form: - # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "$machine-${os}${release}${abi}" - exit ;; - *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" - exit ;; - *:LibertyBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` - echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" - exit ;; - *:MidnightBSD:*:*) - echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" - exit ;; - *:ekkoBSD:*:*) - echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" - exit ;; - *:SolidBSD:*:*) - echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" - exit ;; - macppc:MirBSD:*:*) - echo powerpc-unknown-mirbsd"$UNAME_RELEASE" - exit ;; - *:MirBSD:*:*) - echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" - exit ;; - *:Sortix:*:*) - echo "$UNAME_MACHINE"-unknown-sortix - exit ;; - *:Redox:*:*) - echo "$UNAME_MACHINE"-unknown-redox - exit ;; - mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; - alpha:OSF1:*:*) - case $UNAME_RELEASE in - *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - ;; - *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` - ;; - esac - # According to Compaq, /usr/sbin/psrinfo has been available on - # OSF/1 and Tru64 systems produced since 1995. I hope that - # covers most systems running today. This code pipes the CPU - # types through head -n 1, so we only detect the type of CPU 0. - ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` - case "$ALPHA_CPU_TYPE" in - "EV4 (21064)") - UNAME_MACHINE=alpha ;; - "EV4.5 (21064)") - UNAME_MACHINE=alpha ;; - "LCA4 (21066/21068)") - UNAME_MACHINE=alpha ;; - "EV5 (21164)") - UNAME_MACHINE=alphaev5 ;; - "EV5.6 (21164A)") - UNAME_MACHINE=alphaev56 ;; - "EV5.6 (21164PC)") - UNAME_MACHINE=alphapca56 ;; - "EV5.7 (21164PC)") - UNAME_MACHINE=alphapca57 ;; - "EV6 (21264)") - UNAME_MACHINE=alphaev6 ;; - "EV6.7 (21264A)") - UNAME_MACHINE=alphaev67 ;; - "EV6.8CB (21264C)") - UNAME_MACHINE=alphaev68 ;; - "EV6.8AL (21264B)") - UNAME_MACHINE=alphaev68 ;; - "EV6.8CX (21264D)") - UNAME_MACHINE=alphaev68 ;; - "EV6.9A (21264/EV69A)") - UNAME_MACHINE=alphaev69 ;; - "EV7 (21364)") - UNAME_MACHINE=alphaev7 ;; - "EV7.9 (21364A)") - UNAME_MACHINE=alphaev79 ;; - esac - # A Pn.n version is a patched version. - # A Vn.n version is a released version. - # A Tn.n version is a released field test version. - # A Xn.n version is an unreleased experimental baselevel. - # 1.2 uses "1.2" for uname -r. - echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" - # Reset EXIT trap before exiting to avoid spurious non-zero exit code. - exitcode=$? - trap '' 0 - exit $exitcode ;; - Amiga*:UNIX_System_V:4.0:*) - echo m68k-unknown-sysv4 - exit ;; - *:[Aa]miga[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-amigaos - exit ;; - *:[Mm]orph[Oo][Ss]:*:*) - echo "$UNAME_MACHINE"-unknown-morphos - exit ;; - *:OS/390:*:*) - echo i370-ibm-openedition - exit ;; - *:z/VM:*:*) - echo s390-ibm-zvmoe - exit ;; - *:OS400:*:*) - echo powerpc-ibm-os400 - exit ;; - arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) - echo arm-acorn-riscix"$UNAME_RELEASE" - exit ;; - arm*:riscos:*:*|arm*:RISCOS:*:*) - echo arm-unknown-riscos - exit ;; - SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) - echo hppa1.1-hitachi-hiuxmpp - exit ;; - Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) - # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. - if test "`(/bin/universe) 2>/dev/null`" = att ; then - echo pyramid-pyramid-sysv3 - else - echo pyramid-pyramid-bsd - fi - exit ;; - NILE*:*:*:dcosx) - echo pyramid-pyramid-svr4 - exit ;; - DRS?6000:unix:4.0:6*) - echo sparc-icl-nx6 - exit ;; - DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in - sparc) echo sparc-icl-nx7; exit ;; - esac ;; - s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; - sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" - exit ;; - i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) - echo i386-pc-auroraux"$UNAME_RELEASE" - exit ;; - i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) - eval "$set_cc_for_build" - SUN_ARCH=i386 - # If there is a compiler, see if it is configured for 64-bit objects. - # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. - # This test works for both compilers. - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - SUN_ARCH=x86_64 - fi - fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - sun4*:SunOS:6*:*) - # According to config.sub, this is the proper way to canonicalize - # SunOS6. Hard to guess exactly what SunOS6 will be like, but - # it's likely to be more like Solaris than SunOS4. - echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in - Series*|S4*) - UNAME_RELEASE=`uname -v` - ;; - esac - # Japanese Language versions have a version number like `4.1.3-JL'. - echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" - exit ;; - sun3*:SunOS:*:*) - echo m68k-sun-sunos"$UNAME_RELEASE" - exit ;; - sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 - case "`/bin/arch`" in - sun3) - echo m68k-sun-sunos"$UNAME_RELEASE" - ;; - sun4) - echo sparc-sun-sunos"$UNAME_RELEASE" - ;; - esac - exit ;; - aushp:SunOS:*:*) - echo sparc-auspex-sunos"$UNAME_RELEASE" - exit ;; - # The situation for MiNT is a little confusing. The machine name - # can be virtually everything (everything which is not - # "atarist" or "atariste" at least should have a processor - # > m68000). The system name ranges from "MiNT" over "FreeMiNT" - # to the lowercase version "mint" (or "freemint"). Finally - # the system name "TOS" denotes a system which is actually not - # MiNT. But MiNT is downward compatible to TOS, so this should - # be no problem. - atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; - atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; - *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint"$UNAME_RELEASE" - exit ;; - milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint"$UNAME_RELEASE" - exit ;; - hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint"$UNAME_RELEASE" - exit ;; - *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint"$UNAME_RELEASE" - exit ;; - m68k:machten:*:*) - echo m68k-apple-machten"$UNAME_RELEASE" - exit ;; - powerpc:machten:*:*) - echo powerpc-apple-machten"$UNAME_RELEASE" - exit ;; - RISC*:Mach:*:*) - echo mips-dec-mach_bsd4.3 - exit ;; - RISC*:ULTRIX:*:*) - echo mips-dec-ultrix"$UNAME_RELEASE" - exit ;; - VAX*:ULTRIX*:*:*) - echo vax-dec-ultrix"$UNAME_RELEASE" - exit ;; - 2020:CLIX:*:* | 2430:CLIX:*:*) - echo clipper-intergraph-clix"$UNAME_RELEASE" - exit ;; - mips:*:*:UMIPS | mips:*:*:RISCos) - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" -#ifdef __cplusplus -#include /* for printf() prototype */ - int main (int argc, char *argv[]) { -#else - int main (argc, argv) int argc; char *argv[]; { -#endif - #if defined (host_mips) && defined (MIPSEB) - #if defined (SYSTYPE_SYSV) - printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_SVR4) - printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); - #endif - #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) - printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); - #endif - #endif - exit (-1); - } -EOF - $CC_FOR_BUILD -o "$dummy" "$dummy.c" && - dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`"$dummy" "$dummyarg"` && - { echo "$SYSTEM_NAME"; exit; } - echo mips-mips-riscos"$UNAME_RELEASE" - exit ;; - Motorola:PowerMAX_OS:*:*) - echo powerpc-motorola-powermax - exit ;; - Motorola:*:4.3:PL8-*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) - echo powerpc-harris-powermax - exit ;; - Night_Hawk:Power_UNIX:*:*) - echo powerpc-harris-powerunix - exit ;; - m88k:CX/UX:7*:*) - echo m88k-harris-cxux7 - exit ;; - m88k:*:4*:R4*) - echo m88k-motorola-sysv4 - exit ;; - m88k:*:3*:R3*) - echo m88k-motorola-sysv3 - exit ;; - AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] - then - if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ - [ "$TARGET_BINARY_INTERFACE"x = x ] - then - echo m88k-dg-dgux"$UNAME_RELEASE" - else - echo m88k-dg-dguxbcs"$UNAME_RELEASE" - fi - else - echo i586-dg-dgux"$UNAME_RELEASE" - fi - exit ;; - M88*:DolphinOS:*:*) # DolphinOS (SVR3) - echo m88k-dolphin-sysv3 - exit ;; - M88*:*:R3*:*) - # Delta 88k system running SVR3 - echo m88k-motorola-sysv3 - exit ;; - XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) - echo m88k-tektronix-sysv3 - exit ;; - Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) - echo m68k-tektronix-bsd - exit ;; - *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" - exit ;; - ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. - echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id - exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' - i*86:AIX:*:*) - echo i386-ibm-aix - exit ;; - ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" - fi - echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" - exit ;; - *:AIX:2:3) - if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - #include - - main() - { - if (!__power_pc()) - exit(1); - puts("powerpc-ibm-aix3.2.5"); - exit(0); - } -EOF - if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` - then - echo "$SYSTEM_NAME" - else - echo rs6000-ibm-aix3.2.5 - fi - elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then - echo rs6000-ibm-aix3.2.4 - else - echo rs6000-ibm-aix3.2 - fi - exit ;; - *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` - if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then - IBM_ARCH=rs6000 - else - IBM_ARCH=powerpc - fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` - else - IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" - fi - echo "$IBM_ARCH"-ibm-aix"$IBM_REV" - exit ;; - *:AIX:*:*) - echo rs6000-ibm-aix - exit ;; - ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) - echo romp-ibm-bsd4.4 - exit ;; - ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and - echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to - exit ;; # report: romp-ibm BSD 4.3 - *:BOSX:*:*) - echo rs6000-bull-bosx - exit ;; - DPX/2?00:B.O.S.:*:*) - echo m68k-bull-sysv3 - exit ;; - 9000/[34]??:4.3bsd:1.*:*) - echo m68k-hp-bsd - exit ;; - hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) - echo m68k-hp-bsd4.4 - exit ;; - 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - case "$UNAME_MACHINE" in - 9000/31?) HP_ARCH=m68000 ;; - 9000/[34]??) HP_ARCH=m68k ;; - 9000/[678][0-9][0-9]) - if [ -x /usr/bin/getconf ]; then - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "$sc_cpu_version" in - 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 - 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "$sc_kernel_bits" in - 32) HP_ARCH=hppa2.0n ;; - 64) HP_ARCH=hppa2.0w ;; - '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 - esac ;; - esac - fi - if [ "$HP_ARCH" = "" ]; then - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } -EOF - (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` - test -z "$HP_ARCH" && HP_ARCH=hppa - fi ;; - esac - if [ "$HP_ARCH" = hppa2.0w ] - then - eval "$set_cc_for_build" - - # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating - # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler - # generating 64-bit code. GNU and HP use different nomenclature: - # - # $ CC_FOR_BUILD=cc ./config.guess - # => hppa2.0w-hp-hpux11.23 - # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess - # => hppa64-hp-hpux11.23 - - if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | - grep -q __LP64__ - then - HP_ARCH=hppa2.0w - else - HP_ARCH=hppa64 - fi - fi - echo "$HP_ARCH"-hp-hpux"$HPUX_REV" - exit ;; - ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` - echo ia64-hp-hpux"$HPUX_REV" - exit ;; - 3050*:HI-UX:*:*) - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - #include - int - main () - { - long cpu = sysconf (_SC_CPU_VERSION); - /* The order matters, because CPU_IS_HP_MC68K erroneously returns - true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct - results, however. */ - if (CPU_IS_PA_RISC (cpu)) - { - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; - case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; - default: puts ("hppa-hitachi-hiuxwe2"); break; - } - } - else if (CPU_IS_HP_MC68K (cpu)) - puts ("m68k-hitachi-hiuxwe2"); - else puts ("unknown-hitachi-hiuxwe2"); - exit (0); - } -EOF - $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && - { echo "$SYSTEM_NAME"; exit; } - echo unknown-hitachi-hiuxwe2 - exit ;; - 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) - echo hppa1.1-hp-bsd - exit ;; - 9000/8??:4.3bsd:*:*) - echo hppa1.0-hp-bsd - exit ;; - *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) - echo hppa1.0-hp-mpeix - exit ;; - hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) - echo hppa1.1-hp-osf - exit ;; - hp8??:OSF1:*:*) - echo hppa1.0-hp-osf - exit ;; - i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then - echo "$UNAME_MACHINE"-unknown-osf1mk - else - echo "$UNAME_MACHINE"-unknown-osf1 - fi - exit ;; - parisc*:Lites*:*:*) - echo hppa1.1-hp-lites - exit ;; - C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) - echo c1-convex-bsd - exit ;; - C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) - echo c34-convex-bsd - exit ;; - C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) - echo c38-convex-bsd - exit ;; - C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) - echo c4-convex-bsd - exit ;; - CRAY*Y-MP:*:*:*) - echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*[A-Z]90:*:*:*) - echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ - | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ - -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ - -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*TS:*:*:*) - echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*T3E:*:*:*) - echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - CRAY*SV1:*:*:*) - echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - *:UNICOS/mp:*:*) - echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' - exit ;; - F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` - FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; - i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) - echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" - exit ;; - sparc*:BSD/OS:*:*) - echo sparc-unknown-bsdi"$UNAME_RELEASE" - exit ;; - *:BSD/OS:*:*) - echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" - exit ;; - *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` - case "$UNAME_PROCESSOR" in - amd64) - UNAME_PROCESSOR=x86_64 ;; - i386) - UNAME_PROCESSOR=i586 ;; - esac - echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; - i*:CYGWIN*:*) - echo "$UNAME_MACHINE"-pc-cygwin - exit ;; - *:MINGW64*:*) - echo "$UNAME_MACHINE"-pc-mingw64 - exit ;; - *:MINGW*:*) - echo "$UNAME_MACHINE"-pc-mingw32 - exit ;; - *:MSYS*:*) - echo "$UNAME_MACHINE"-pc-msys - exit ;; - i*:PW*:*) - echo "$UNAME_MACHINE"-pc-pw32 - exit ;; - *:Interix*:*) - case "$UNAME_MACHINE" in - x86) - echo i586-pc-interix"$UNAME_RELEASE" - exit ;; - authenticamd | genuineintel | EM64T) - echo x86_64-unknown-interix"$UNAME_RELEASE" - exit ;; - IA64) - echo ia64-unknown-interix"$UNAME_RELEASE" - exit ;; - esac ;; - i*:UWIN*:*) - echo "$UNAME_MACHINE"-pc-uwin - exit ;; - amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) - echo x86_64-unknown-cygwin - exit ;; - prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" - exit ;; - *:GNU:*:*) - # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" - exit ;; - *:GNU/*:*:*) - # other systems with GNU libc and userland - echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" - exit ;; - i*86:Minix:*:*) - echo "$UNAME_MACHINE"-pc-minix - exit ;; - aarch64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC=gnulibc1 ; fi - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - arc:Linux:*:* | arceb:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - arm*:Linux:*:*) - eval "$set_cc_for_build" - if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_EABI__ - then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi - else - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - cris:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; - crisv32:Linux:*:*) - echo "$UNAME_MACHINE"-axis-linux-"$LIBC" - exit ;; - e2k:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - frv:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - hexagon:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - i*86:Linux:*:*) - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - exit ;; - ia64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - k1om:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - m32r*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - m68*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - mips:Linux:*:* | mips64:Linux:*:*) - eval "$set_cc_for_build" - sed 's/^ //' << EOF > "$dummy.c" - #undef CPU - #undef ${UNAME_MACHINE} - #undef ${UNAME_MACHINE}el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=${UNAME_MACHINE}el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=${UNAME_MACHINE} - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" - test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } - ;; - mips64el:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - openrisc*:Linux:*:*) - echo or1k-unknown-linux-"$LIBC" - exit ;; - or32:Linux:*:* | or1k*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-"$LIBC" - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-"$LIBC" - exit ;; - parisc:Linux:*:* | hppa:Linux:*:*) - # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in - PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; - PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; - *) echo hppa-unknown-linux-"$LIBC" ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-"$LIBC" - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-"$LIBC" - exit ;; - ppc64le:Linux:*:*) - echo powerpc64le-unknown-linux-"$LIBC" - exit ;; - ppcle:Linux:*:*) - echo powerpcle-unknown-linux-"$LIBC" - exit ;; - riscv32:Linux:*:* | riscv64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" - exit ;; - sh64*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - sh*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - tile*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - vax:Linux:*:*) - echo "$UNAME_MACHINE"-dec-linux-"$LIBC" - exit ;; - x86_64:Linux:*:*) - if objdump -f /bin/sh | grep -q elf32-x86-64; then - echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 - else - echo "$UNAME_MACHINE"-pc-linux-"$LIBC" - fi - exit ;; - xtensa*:Linux:*:*) - echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" - exit ;; - i*86:DYNIX/ptx:4*:*) - # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. - # earlier versions are messed up and put the nodename in both - # sysname and nodename. - echo i386-sequent-sysv4 - exit ;; - i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, - # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. - echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" - exit ;; - i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility - # is probably installed. - echo "$UNAME_MACHINE"-pc-os2-emx - exit ;; - i*86:XTS-300:*:STOP) - echo "$UNAME_MACHINE"-unknown-stop - exit ;; - i*86:atheos:*:*) - echo "$UNAME_MACHINE"-unknown-atheos - exit ;; - i*86:syllable:*:*) - echo "$UNAME_MACHINE"-pc-syllable - exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) - echo i386-unknown-lynxos"$UNAME_RELEASE" - exit ;; - i*86:*DOS:*:*) - echo "$UNAME_MACHINE"-pc-msdosdjgpp - exit ;; - i*86:*:4.*:*) - UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` - if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then - echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" - else - echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" - fi - exit ;; - i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in - *486*) UNAME_MACHINE=i486 ;; - *Pentium) UNAME_MACHINE=i586 ;; - *Pent*|*Celeron) UNAME_MACHINE=i686 ;; - esac - echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" - exit ;; - i*86:*:3.2:*) - if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then - UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` - (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 - (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ - && UNAME_MACHINE=i586 - (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ - && UNAME_MACHINE=i686 - (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ - && UNAME_MACHINE=i686 - echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" - else - echo "$UNAME_MACHINE"-pc-sysv32 - fi - exit ;; - pc:*:*:*) - # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. - # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configure will decide that - # this is a cross-build. - echo i586-pc-msdosdjgpp - exit ;; - Intel:Mach:3*:*) - echo i386-pc-mach3 - exit ;; - paragon:*:*:*) - echo i860-intel-osf1 - exit ;; - i860:*:4.*:*) # i860-SVR4 - if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then - echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 - else # Add other i860-SVR4 vendors below as they are discovered. - echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 - fi - exit ;; - mini*:CTIX:SYS*5:*) - # "miniframe" - echo m68010-convergent-sysv - exit ;; - mc68k:UNIX:SYSTEM5:3.51m) - echo m68k-convergent-sysv - exit ;; - M680?0:D-NIX:5.3:*) - echo m68k-diab-dnix - exit ;; - M68*:*:R3V[5678]*:*) - test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; - 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) - OS_REL='' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; - 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; - NCR*:*:4.2:* | MPRAS*:*:4.2:*) - OS_REL='.3' - test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } - /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ - && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } - /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ - && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; - m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) - echo m68k-unknown-lynxos"$UNAME_RELEASE" - exit ;; - mc68030:UNIX_System_V:4.*:*) - echo m68k-atari-sysv4 - exit ;; - TSUNAMI:LynxOS:2.*:*) - echo sparc-unknown-lynxos"$UNAME_RELEASE" - exit ;; - rs6000:LynxOS:2.*:*) - echo rs6000-unknown-lynxos"$UNAME_RELEASE" - exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) - echo powerpc-unknown-lynxos"$UNAME_RELEASE" - exit ;; - SM[BE]S:UNIX_SV:*:*) - echo mips-dde-sysv"$UNAME_RELEASE" - exit ;; - RM*:ReliantUNIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - RM*:SINIX-*:*:*) - echo mips-sni-sysv4 - exit ;; - *:SINIX-*:*:*) - if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` - echo "$UNAME_MACHINE"-sni-sysv4 - else - echo ns32k-sni-sysv - fi - exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; - *:UNIX_System_V:4*:FTX*) - # From Gerald Hewes . - # How about differentiating between stratus architectures? -djm - echo hppa1.1-stratus-sysv4 - exit ;; - *:*:*:FTX*) - # From seanf@swdc.stratus.com. - echo i860-stratus-sysv4 - exit ;; - i*86:VOS:*:*) - # From Paul.Green@stratus.com. - echo "$UNAME_MACHINE"-stratus-vos - exit ;; - *:VOS:*:*) - # From Paul.Green@stratus.com. - echo hppa1.1-stratus-vos - exit ;; - mc68*:A/UX:*:*) - echo m68k-apple-aux"$UNAME_RELEASE" - exit ;; - news*:NEWS-OS:6*:*) - echo mips-sony-newsos6 - exit ;; - R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then - echo mips-nec-sysv"$UNAME_RELEASE" - else - echo mips-unknown-sysv"$UNAME_RELEASE" - fi - exit ;; - BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. - echo powerpc-be-beos - exit ;; - BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. - echo powerpc-apple-beos - exit ;; - BePC:BeOS:*:*) # BeOS running on Intel PC compatible. - echo i586-pc-beos - exit ;; - BePC:Haiku:*:*) # Haiku running on Intel PC compatible. - echo i586-pc-haiku - exit ;; - x86_64:Haiku:*:*) - echo x86_64-unknown-haiku - exit ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux"$UNAME_RELEASE" - exit ;; - SX-5:SUPER-UX:*:*) - echo sx5-nec-superux"$UNAME_RELEASE" - exit ;; - SX-6:SUPER-UX:*:*) - echo sx6-nec-superux"$UNAME_RELEASE" - exit ;; - SX-7:SUPER-UX:*:*) - echo sx7-nec-superux"$UNAME_RELEASE" - exit ;; - SX-8:SUPER-UX:*:*) - echo sx8-nec-superux"$UNAME_RELEASE" - exit ;; - SX-8R:SUPER-UX:*:*) - echo sx8r-nec-superux"$UNAME_RELEASE" - exit ;; - SX-ACE:SUPER-UX:*:*) - echo sxace-nec-superux"$UNAME_RELEASE" - exit ;; - Power*:Rhapsody:*:*) - echo powerpc-apple-rhapsody"$UNAME_RELEASE" - exit ;; - *:Rhapsody:*:*) - echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" - exit ;; - *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - eval "$set_cc_for_build" - if test "$UNAME_PROCESSOR" = unknown ; then - UNAME_PROCESSOR=powerpc - fi - if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then - if [ "$CC_FOR_BUILD" != no_compiler_found ]; then - if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null - then - case $UNAME_PROCESSOR in - i386) UNAME_PROCESSOR=x86_64 ;; - powerpc) UNAME_PROCESSOR=powerpc64 ;; - esac - fi - # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc - if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ - (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_PPC >/dev/null - then - UNAME_PROCESSOR=powerpc - fi - fi - elif test "$UNAME_PROCESSOR" = i386 ; then - # Avoid executing cc on OS X 10.9, as it ships with a stub - # that puts up a graphical alert prompting to install - # developer tools. Any system running Mac OS X 10.7 or - # later (Darwin 11 and later) is required to have a 64-bit - # processor. This is not true of the ARM version of Darwin - # that Apple uses in portable devices. - UNAME_PROCESSOR=x86_64 - fi - echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" - exit ;; - *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = x86; then - UNAME_PROCESSOR=i386 - UNAME_MACHINE=pc - fi - echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" - exit ;; - *:QNX:*:4*) - echo i386-pc-qnx - exit ;; - NEO-*:NONSTOP_KERNEL:*:*) - echo neo-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSE-*:NONSTOP_KERNEL:*:*) - echo nse-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSR-*:NONSTOP_KERNEL:*:*) - echo nsr-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSV-*:NONSTOP_KERNEL:*:*) - echo nsv-tandem-nsk"$UNAME_RELEASE" - exit ;; - NSX-*:NONSTOP_KERNEL:*:*) - echo nsx-tandem-nsk"$UNAME_RELEASE" - exit ;; - *:NonStop-UX:*:*) - echo mips-compaq-nonstopux - exit ;; - BS2000:POSIX*:*:*) - echo bs2000-siemens-sysv - exit ;; - DS/*:UNIX_System_V:*:*) - echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" - exit ;; - *:Plan9:*:*) - # "uname -m" is not consistent, so use $cputype instead. 386 - # is converted to i386 for consistency with other x86 - # operating systems. - if test "$cputype" = 386; then - UNAME_MACHINE=i386 - else - UNAME_MACHINE="$cputype" - fi - echo "$UNAME_MACHINE"-unknown-plan9 - exit ;; - *:TOPS-10:*:*) - echo pdp10-unknown-tops10 - exit ;; - *:TENEX:*:*) - echo pdp10-unknown-tenex - exit ;; - KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) - echo pdp10-dec-tops20 - exit ;; - XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) - echo pdp10-xkl-tops20 - exit ;; - *:TOPS-20:*:*) - echo pdp10-unknown-tops20 - exit ;; - *:ITS:*:*) - echo pdp10-unknown-its - exit ;; - SEI:*:*:SEIUX) - echo mips-sei-seiux"$UNAME_RELEASE" - exit ;; - *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" - exit ;; - *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` - case "$UNAME_MACHINE" in - A*) echo alpha-dec-vms ; exit ;; - I*) echo ia64-dec-vms ; exit ;; - V*) echo vax-dec-vms ; exit ;; - esac ;; - *:XENIX:*:SysV) - echo i386-pc-xenix - exit ;; - i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" - exit ;; - i*86:rdos:*:*) - echo "$UNAME_MACHINE"-pc-rdos - exit ;; - i*86:AROS:*:*) - echo "$UNAME_MACHINE"-pc-aros - exit ;; - x86_64:VMkernel:*:*) - echo "$UNAME_MACHINE"-unknown-esx - exit ;; - amd64:Isilon\ OneFS:*:*) - echo x86_64-unknown-onefs - exit ;; -esac - -echo "$0: unable to guess system type" >&2 - -case "$UNAME_MACHINE:$UNAME_SYSTEM" in - mips:Linux | mips64:Linux) - # If we got here on MIPS GNU/Linux, output extra information. - cat >&2 <&2 </dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` - -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` - -UNAME_MACHINE = "$UNAME_MACHINE" -UNAME_RELEASE = "$UNAME_RELEASE" -UNAME_SYSTEM = "$UNAME_SYSTEM" -UNAME_VERSION = "$UNAME_VERSION" -EOF - -exit 1 - -# Local variables: -# eval: (add-hook 'write-file-functions 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/m4/config.sub b/m4/config.sub deleted file mode 100755 index 1d8e98bce..000000000 --- a/m4/config.sub +++ /dev/null @@ -1,1801 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright 1992-2018 Free Software Foundation, Inc. - -timestamp='2018-02-22' - -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, see . -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that -# program. This Exception is an additional permission under section 7 -# of the GNU General Public License, version 3 ("GPLv3"). - - -# Please send patches to . -# -# Configuration subroutine to validate and canonicalize a configuration type. -# Supply the specified configuration type as an argument. -# If it is invalid, we print an error message on stderr and exit with code 1. -# Otherwise, we print the canonical config type on stdout and succeed. - -# You can get the latest version of this script from: -# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub - -# This file is supposed to be the same for all GNU packages -# and recognize all the CPU types, system types and aliases -# that are meaningful with *any* GNU software. -# Each package is responsible for reporting which valid configurations -# it does not support. The user should be able to distinguish -# a failure to support a valid configuration from a meaningless -# configuration. - -# The goal of this file is to map all the various variations of a given -# machine specification into a single specification in the form: -# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM -# or in some cases, the newer four-part form: -# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM -# It is wrong to echo any other type of specification. - -me=`echo "$0" | sed -e 's,.*/,,'` - -usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS - -Canonicalize a configuration name. - -Options: - -h, --help print this help, then exit - -t, --time-stamp print date of last modification, then exit - -v, --version print version number, then exit - -Report bugs and patches to ." - -version="\ -GNU config.sub ($timestamp) - -Copyright 1992-2018 Free Software Foundation, Inc. - -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." - -help=" -Try \`$me --help' for more information." - -# Parse command line -while test $# -gt 0 ; do - case $1 in - --time-stamp | --time* | -t ) - echo "$timestamp" ; exit ;; - --version | -v ) - echo "$version" ; exit ;; - --help | --h* | -h ) - echo "$usage"; exit ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "$me: invalid option $1$help" - exit 1 ;; - - *local*) - # First pass through any local machine types. - echo "$1" - exit ;; - - * ) - break ;; - esac -done - -case $# in - 0) echo "$me: missing argument$help" >&2 - exit 1;; - 1) ;; - *) echo "$me: too many arguments$help" >&2 - exit 1;; -esac - -# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). -# Here we must recognize all the valid KERNEL-OS combinations. -maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` -case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ - linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ - kopensolaris*-gnu* | cloudabi*-eabi* | \ - storm-chaos* | os2-emx* | rtmk-nova*) - os=-$maybe_os - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` - ;; - android-linux) - os=-linux-android - basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown - ;; - *) - basic_machine=`echo "$1" | sed 's/-[^-]*$//'` - if [ "$basic_machine" != "$1" ] - then os=`echo "$1" | sed 's/.*-/-/'` - else os=; fi - ;; -esac - -### Let's recognize common machines as not being operating systems so -### that things like config.sub decstation-3100 work. We also -### recognize some manufacturers as not being operating systems, so we -### can provide default operating systems below. -case $os in - -sun*os*) - # Prevent following clause from handling this invalid input. - ;; - -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ - -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ - -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ - -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ - -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ - -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray | -microblaze*) - os= - basic_machine=$1 - ;; - -bluegene*) - os=-cnk - ;; - -sim | -cisco | -oki | -wec | -winbond) - os= - basic_machine=$1 - ;; - -scout) - ;; - -wrs) - os=-vxworks - basic_machine=$1 - ;; - -chorusos*) - os=-chorusos - basic_machine=$1 - ;; - -chorusrdb) - os=-chorusrdb - basic_machine=$1 - ;; - -hiux*) - os=-hiuxwe2 - ;; - -sco6) - os=-sco5v6 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5) - os=-sco3.2v5 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco4) - os=-sco3.2v4 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco3.2v[4-9]*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -sco*) - os=-sco3.2v2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -udk*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -isc) - os=-isc2.2 - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -clix*) - basic_machine=clipper-intergraph - ;; - -isc*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` - ;; - -lynx*178) - os=-lynxos178 - ;; - -lynx*5) - os=-lynxos5 - ;; - -lynx*) - os=-lynxos - ;; - -ptx*) - basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` - ;; - -psos*) - os=-psos - ;; - -mint | -mint[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; -esac - -# Decode aliases for certain CPU-COMPANY combinations. -case $basic_machine in - # Recognize the basic CPU types without company name. - # Some are omitted here because they have special meanings below. - 1750a | 580 \ - | a29k \ - | aarch64 | aarch64_be \ - | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ - | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ - | am33_2.0 \ - | arc | arceb \ - | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ - | avr | avr32 \ - | ba \ - | be32 | be64 \ - | bfin \ - | c4x | c8051 | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | e2k | epiphany \ - | fido | fr30 | frv | ft32 \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia16 | ia64 \ - | ip2k | iq2000 \ - | k1om \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 | nios2eb | nios2el \ - | ns16k | ns32k \ - | open8 | or1k | or1knd | or32 \ - | pdp10 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pru \ - | pyramid \ - | riscv32 | riscv64 \ - | rl78 | rx \ - | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ - | sh64 | sh64le \ - | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ - | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | visium \ - | wasm32 \ - | x86 | xc16x | xstormy16 | xtensa \ - | z8k | z80) - basic_machine=$basic_machine-unknown - ;; - c54x) - basic_machine=tic54x-unknown - ;; - c55x) - basic_machine=tic55x-unknown - ;; - c6x) - basic_machine=tic6x-unknown - ;; - leon|leon[3-9]) - basic_machine=sparc-$basic_machine - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) - basic_machine=$basic_machine-unknown - os=-none - ;; - m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) - ;; - ms1) - basic_machine=mt-unknown - ;; - - strongarm | thumb | xscale) - basic_machine=arm-unknown - ;; - xgate) - basic_machine=$basic_machine-unknown - os=-none - ;; - xscaleeb) - basic_machine=armeb-unknown - ;; - - xscaleel) - basic_machine=armel-unknown - ;; - - # We use `pc' rather than `unknown' - # because (1) that's what they normally are, and - # (2) the word "unknown" tends to confuse beginning users. - i*86 | x86_64) - basic_machine=$basic_machine-pc - ;; - # Object if more than one company name word. - *-*-*) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; - # Recognize the basic CPU types with company name. - 580-* \ - | a29k-* \ - | aarch64-* | aarch64_be-* \ - | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ - | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ - | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | ba-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | c8051-* | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | e2k-* | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ - | ip2k-* | iq2000-* \ - | k1om-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ - | microblaze-* | microblazeel-* \ - | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ - | mips16-* \ - | mips64-* | mips64el-* \ - | mips64octeon-* | mips64octeonel-* \ - | mips64orion-* | mips64orionel-* \ - | mips64r5900-* | mips64r5900el-* \ - | mips64vr-* | mips64vrel-* \ - | mips64vr4100-* | mips64vr4100el-* \ - | mips64vr4300-* | mips64vr4300el-* \ - | mips64vr5000-* | mips64vr5000el-* \ - | mips64vr5900-* | mips64vr5900el-* \ - | mipsisa32-* | mipsisa32el-* \ - | mipsisa32r2-* | mipsisa32r2el-* \ - | mipsisa32r6-* | mipsisa32r6el-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64r6-* | mipsisa64r6el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipsr5900-* | mipsr5900el-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* | nios2eb-* | nios2el-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | or1k*-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pru-* \ - | pyramid-* \ - | riscv32-* | riscv64-* \ - | rl78-* | romp-* | rs6000-* | rx-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ - | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ - | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ - | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ - | tahoe-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ - | tile*-* \ - | tron-* \ - | ubicom32-* \ - | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ - | vax-* \ - | visium-* \ - | wasm32-* \ - | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* \ - | xstormy16-* | xtensa*-* \ - | ymp-* \ - | z8k-* | z80-*) - ;; - # Recognize the basic CPU types without company name, with glob match. - xtensa*) - basic_machine=$basic_machine-unknown - ;; - # Recognize the various machine names and aliases which stand - # for a CPU type and a company and sometimes even an OS. - 386bsd) - basic_machine=i386-pc - os=-bsd - ;; - 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) - basic_machine=m68000-att - ;; - 3b*) - basic_machine=we32k-att - ;; - a29khif) - basic_machine=a29k-amd - os=-udi - ;; - abacus) - basic_machine=abacus-unknown - ;; - adobe68k) - basic_machine=m68010-adobe - os=-scout - ;; - alliant | fx80) - basic_machine=fx80-alliant - ;; - altos | altos3068) - basic_machine=m68k-altos - ;; - am29k) - basic_machine=a29k-none - os=-bsd - ;; - amd64) - basic_machine=x86_64-pc - ;; - amd64-*) - basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - amdahl) - basic_machine=580-amdahl - os=-sysv - ;; - amiga | amiga-*) - basic_machine=m68k-unknown - ;; - amigaos | amigados) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigaunix | amix) - basic_machine=m68k-unknown - os=-sysv4 - ;; - apollo68) - basic_machine=m68k-apollo - os=-sysv - ;; - apollo68bsd) - basic_machine=m68k-apollo - os=-bsd - ;; - aros) - basic_machine=i386-pc - os=-aros - ;; - asmjs) - basic_machine=asmjs-unknown - ;; - aux) - basic_machine=m68k-apple - os=-aux - ;; - balance) - basic_machine=ns32k-sequent - os=-dynix - ;; - blackfin) - basic_machine=bfin-unknown - os=-linux - ;; - blackfin-*) - basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - bluegene*) - basic_machine=powerpc-ibm - os=-cnk - ;; - c54x-*) - basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c55x-*) - basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c6x-*) - basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - c90) - basic_machine=c90-cray - os=-unicos - ;; - cegcc) - basic_machine=arm-unknown - os=-cegcc - ;; - convex-c1) - basic_machine=c1-convex - os=-bsd - ;; - convex-c2) - basic_machine=c2-convex - os=-bsd - ;; - convex-c32) - basic_machine=c32-convex - os=-bsd - ;; - convex-c34) - basic_machine=c34-convex - os=-bsd - ;; - convex-c38) - basic_machine=c38-convex - os=-bsd - ;; - cray | j90) - basic_machine=j90-cray - os=-unicos - ;; - craynv) - basic_machine=craynv-cray - os=-unicosmp - ;; - cr16 | cr16-*) - basic_machine=cr16-unknown - os=-elf - ;; - crds | unos) - basic_machine=m68k-crds - ;; - crisv32 | crisv32-* | etraxfs*) - basic_machine=crisv32-axis - ;; - cris | cris-* | etrax*) - basic_machine=cris-axis - ;; - crx) - basic_machine=crx-unknown - os=-elf - ;; - da30 | da30-*) - basic_machine=m68k-da30 - ;; - decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) - basic_machine=mips-dec - ;; - decsystem10* | dec10*) - basic_machine=pdp10-dec - os=-tops10 - ;; - decsystem20* | dec20*) - basic_machine=pdp10-dec - os=-tops20 - ;; - delta | 3300 | motorola-3300 | motorola-delta \ - | 3300-motorola | delta-motorola) - basic_machine=m68k-motorola - ;; - delta88) - basic_machine=m88k-motorola - os=-sysv3 - ;; - dicos) - basic_machine=i686-pc - os=-dicos - ;; - djgpp) - basic_machine=i586-pc - os=-msdosdjgpp - ;; - dpx20 | dpx20-*) - basic_machine=rs6000-bull - os=-bosx - ;; - dpx2*) - basic_machine=m68k-bull - os=-sysv3 - ;; - e500v[12]) - basic_machine=powerpc-unknown - os=$os"spe" - ;; - e500v[12]-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=$os"spe" - ;; - ebmon29k) - basic_machine=a29k-amd - os=-ebmon - ;; - elxsi) - basic_machine=elxsi-elxsi - os=-bsd - ;; - encore | umax | mmax) - basic_machine=ns32k-encore - ;; - es1800 | OSE68k | ose68k | ose | OSE) - basic_machine=m68k-ericsson - os=-ose - ;; - fx2800) - basic_machine=i860-alliant - ;; - genix) - basic_machine=ns32k-ns - ;; - gmicro) - basic_machine=tron-gmicro - os=-sysv - ;; - go32) - basic_machine=i386-pc - os=-go32 - ;; - h3050r* | hiux*) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - h8300hms) - basic_machine=h8300-hitachi - os=-hms - ;; - h8300xray) - basic_machine=h8300-hitachi - os=-xray - ;; - h8500hms) - basic_machine=h8500-hitachi - os=-hms - ;; - harris) - basic_machine=m88k-harris - os=-sysv3 - ;; - hp300-*) - basic_machine=m68k-hp - ;; - hp300bsd) - basic_machine=m68k-hp - os=-bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=-hpux - ;; - hp3k9[0-9][0-9] | hp9[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k2[0-9][0-9] | hp9k31[0-9]) - basic_machine=m68000-hp - ;; - hp9k3[2-9][0-9]) - basic_machine=m68k-hp - ;; - hp9k6[0-9][0-9] | hp6[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hp9k7[0-79][0-9] | hp7[0-79][0-9]) - basic_machine=hppa1.1-hp - ;; - hp9k78[0-9] | hp78[0-9]) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) - # FIXME: really hppa2.0-hp - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][13679] | hp8[0-9][13679]) - basic_machine=hppa1.1-hp - ;; - hp9k8[0-9][0-9] | hp8[0-9][0-9]) - basic_machine=hppa1.0-hp - ;; - hppaosf) - basic_machine=hppa1.1-hp - os=-osf - ;; - hppro) - basic_machine=hppa1.1-hp - os=-proelf - ;; - i370-ibm* | ibm*) - basic_machine=i370-ibm - ;; - i*86v32) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv32 - ;; - i*86v4*) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv4 - ;; - i*86v) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-sysv - ;; - i*86sol2) - basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` - os=-solaris2 - ;; - i386mach) - basic_machine=i386-mach - os=-mach - ;; - vsta) - basic_machine=i386-unknown - os=-vsta - ;; - iris | iris4d) - basic_machine=mips-sgi - case $os in - -irix*) - ;; - *) - os=-irix4 - ;; - esac - ;; - isi68 | isi) - basic_machine=m68k-isi - os=-sysv - ;; - leon-*|leon[3-9]-*) - basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` - ;; - m68knommu) - basic_machine=m68k-unknown - os=-linux - ;; - m68knommu-*) - basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - magnum | m3230) - basic_machine=mips-mips - os=-sysv - ;; - merlin) - basic_machine=ns32k-utek - os=-sysv - ;; - microblaze*) - basic_machine=microblaze-xilinx - ;; - mingw64) - basic_machine=x86_64-pc - os=-mingw64 - ;; - mingw32) - basic_machine=i686-pc - os=-mingw32 - ;; - mingw32ce) - basic_machine=arm-unknown - os=-mingw32ce - ;; - miniframe) - basic_machine=m68000-convergent - ;; - *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) - basic_machine=m68k-atari - os=-mint - ;; - mips3*-*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` - ;; - mips3*) - basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown - ;; - monitor) - basic_machine=m68k-rom68k - os=-coff - ;; - morphos) - basic_machine=powerpc-unknown - os=-morphos - ;; - moxiebox) - basic_machine=moxie-unknown - os=-moxiebox - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i686-pc - os=-msys - ;; - mvs) - basic_machine=i370-ibm - os=-mvs - ;; - nacl) - basic_machine=le32-unknown - os=-nacl - ;; - ncr3000) - basic_machine=i486-ncr - os=-sysv4 - ;; - netbsd386) - basic_machine=i386-unknown - os=-netbsd - ;; - netwinder) - basic_machine=armv4l-rebel - os=-linux - ;; - news | news700 | news800 | news900) - basic_machine=m68k-sony - os=-newsos - ;; - news1000) - basic_machine=m68030-sony - os=-newsos - ;; - news-3600 | risc-news) - basic_machine=mips-sony - os=-newsos - ;; - necv70) - basic_machine=v70-nec - os=-sysv - ;; - next | m*-next) - basic_machine=m68k-next - case $os in - -nextstep* ) - ;; - -ns2*) - os=-nextstep2 - ;; - *) - os=-nextstep3 - ;; - esac - ;; - nh3000) - basic_machine=m68k-harris - os=-cxux - ;; - nh[45]000) - basic_machine=m88k-harris - os=-cxux - ;; - nindy960) - basic_machine=i960-intel - os=-nindy - ;; - mon960) - basic_machine=i960-intel - os=-mon960 - ;; - nonstopux) - basic_machine=mips-compaq - os=-nonstopux - ;; - np1) - basic_machine=np1-gould - ;; - neo-tandem) - basic_machine=neo-tandem - ;; - nse-tandem) - basic_machine=nse-tandem - ;; - nsr-tandem) - basic_machine=nsr-tandem - ;; - nsv-tandem) - basic_machine=nsv-tandem - ;; - nsx-tandem) - basic_machine=nsx-tandem - ;; - op50n-* | op60c-*) - basic_machine=hppa1.1-oki - os=-proelf - ;; - openrisc | openrisc-*) - basic_machine=or32-unknown - ;; - os400) - basic_machine=powerpc-ibm - os=-os400 - ;; - OSE68000 | ose68000) - basic_machine=m68000-ericsson - os=-ose - ;; - os68k) - basic_machine=m68k-none - os=-os68k - ;; - pa-hitachi) - basic_machine=hppa1.1-hitachi - os=-hiuxwe2 - ;; - paragon) - basic_machine=i860-intel - os=-osf - ;; - parisc) - basic_machine=hppa-unknown - os=-linux - ;; - parisc-*) - basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` - os=-linux - ;; - pbd) - basic_machine=sparc-tti - ;; - pbb) - basic_machine=m68k-tti - ;; - pc532 | pc532-*) - basic_machine=ns32k-pc532 - ;; - pc98) - basic_machine=i386-pc - ;; - pc98-*) - basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium | p5 | k5 | k6 | nexgen | viac3) - basic_machine=i586-pc - ;; - pentiumpro | p6 | 6x86 | athlon | athlon_*) - basic_machine=i686-pc - ;; - pentiumii | pentium2 | pentiumiii | pentium3) - basic_machine=i686-pc - ;; - pentium4) - basic_machine=i786-pc - ;; - pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) - basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumpro-* | p6-* | 6x86-* | athlon-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) - basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pentium4-*) - basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - pn) - basic_machine=pn-gould - ;; - power) basic_machine=power-ibm - ;; - ppc | ppcbe) basic_machine=powerpc-unknown - ;; - ppc-* | ppcbe-*) - basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppcle | powerpclittle) - basic_machine=powerpcle-unknown - ;; - ppcle-* | powerpclittle-*) - basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppc64) basic_machine=powerpc64-unknown - ;; - ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ppc64le | powerpc64little) - basic_machine=powerpc64le-unknown - ;; - ppc64le-* | powerpc64little-*) - basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - ps2) - basic_machine=i386-ibm - ;; - pw32) - basic_machine=i586-unknown - os=-pw32 - ;; - rdos | rdos64) - basic_machine=x86_64-pc - os=-rdos - ;; - rdos32) - basic_machine=i386-pc - os=-rdos - ;; - rom68k) - basic_machine=m68k-rom68k - os=-coff - ;; - rm[46]00) - basic_machine=mips-siemens - ;; - rtpc | rtpc-*) - basic_machine=romp-ibm - ;; - s390 | s390-*) - basic_machine=s390-ibm - ;; - s390x | s390x-*) - basic_machine=s390x-ibm - ;; - sa29200) - basic_machine=a29k-amd - os=-udi - ;; - sb1) - basic_machine=mipsisa64sb1-unknown - ;; - sb1el) - basic_machine=mipsisa64sb1el-unknown - ;; - sde) - basic_machine=mipsisa32-sde - os=-elf - ;; - sei) - basic_machine=mips-sei - os=-seiux - ;; - sequent) - basic_machine=i386-sequent - ;; - sh5el) - basic_machine=sh5le-unknown - ;; - simso-wrs) - basic_machine=sparclite-wrs - os=-vxworks - ;; - sps7) - basic_machine=m68k-bull - os=-sysv2 - ;; - spur) - basic_machine=spur-unknown - ;; - st2000) - basic_machine=m68k-tandem - ;; - stratus) - basic_machine=i860-stratus - os=-sysv4 - ;; - strongarm-* | thumb-*) - basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` - ;; - sun2) - basic_machine=m68000-sun - ;; - sun2os3) - basic_machine=m68000-sun - os=-sunos3 - ;; - sun2os4) - basic_machine=m68000-sun - os=-sunos4 - ;; - sun3os3) - basic_machine=m68k-sun - os=-sunos3 - ;; - sun3os4) - basic_machine=m68k-sun - os=-sunos4 - ;; - sun4os3) - basic_machine=sparc-sun - os=-sunos3 - ;; - sun4os4) - basic_machine=sparc-sun - os=-sunos4 - ;; - sun4sol2) - basic_machine=sparc-sun - os=-solaris2 - ;; - sun3 | sun3-*) - basic_machine=m68k-sun - ;; - sun4) - basic_machine=sparc-sun - ;; - sun386 | sun386i | roadrunner) - basic_machine=i386-sun - ;; - sv1) - basic_machine=sv1-cray - os=-unicos - ;; - symmetry) - basic_machine=i386-sequent - os=-dynix - ;; - t3e) - basic_machine=alphaev5-cray - os=-unicos - ;; - t90) - basic_machine=t90-cray - os=-unicos - ;; - tile*) - basic_machine=$basic_machine-unknown - os=-linux-gnu - ;; - tx39) - basic_machine=mipstx39-unknown - ;; - tx39el) - basic_machine=mipstx39el-unknown - ;; - toad1) - basic_machine=pdp10-xkl - os=-tops20 - ;; - tower | tower-32) - basic_machine=m68k-ncr - ;; - tpf) - basic_machine=s390x-ibm - os=-tpf - ;; - udi29k) - basic_machine=a29k-amd - os=-udi - ;; - ultra3) - basic_machine=a29k-nyu - os=-sym1 - ;; - v810 | necv810) - basic_machine=v810-nec - os=-none - ;; - vaxv) - basic_machine=vax-dec - os=-sysv - ;; - vms) - basic_machine=vax-dec - os=-vms - ;; - vpp*|vx|vx-*) - basic_machine=f301-fujitsu - ;; - vxworks960) - basic_machine=i960-wrs - os=-vxworks - ;; - vxworks68) - basic_machine=m68k-wrs - os=-vxworks - ;; - vxworks29k) - basic_machine=a29k-wrs - os=-vxworks - ;; - w65*) - basic_machine=w65-wdc - os=-none - ;; - w89k-*) - basic_machine=hppa1.1-winbond - os=-proelf - ;; - x64) - basic_machine=x86_64-pc - ;; - xbox) - basic_machine=i686-pc - os=-mingw32 - ;; - xps | xps100) - basic_machine=xps100-honeywell - ;; - xscale-* | xscalee[bl]-*) - basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` - ;; - ymp) - basic_machine=ymp-cray - os=-unicos - ;; - none) - basic_machine=none-none - os=-none - ;; - -# Here we handle the default manufacturer of certain CPU types. It is in -# some cases the only manufacturer, in others, it is the most popular. - w89k) - basic_machine=hppa1.1-winbond - ;; - op50n) - basic_machine=hppa1.1-oki - ;; - op60c) - basic_machine=hppa1.1-oki - ;; - romp) - basic_machine=romp-ibm - ;; - mmix) - basic_machine=mmix-knuth - ;; - rs6000) - basic_machine=rs6000-ibm - ;; - vax) - basic_machine=vax-dec - ;; - pdp11) - basic_machine=pdp11-dec - ;; - we32k) - basic_machine=we32k-att - ;; - sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) - basic_machine=sh-unknown - ;; - cydra) - basic_machine=cydra-cydrome - ;; - orion) - basic_machine=orion-highlevel - ;; - orion105) - basic_machine=clipper-highlevel - ;; - mac | mpw | mac-mpw) - basic_machine=m68k-apple - ;; - pmac | pmac-mpw) - basic_machine=powerpc-apple - ;; - *-unknown) - # Make sure to match an already-canonicalized machine name. - ;; - *) - echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 - exit 1 - ;; -esac - -# Here we canonicalize certain aliases for manufacturers. -case $basic_machine in - *-digital*) - basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` - ;; - *-commodore*) - basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` - ;; - *) - ;; -esac - -# Decode manufacturer-specific aliases for certain operating systems. - -if [ x"$os" != x"" ] -then -case $os in - # First match some system type aliases that might get confused - # with valid system types. - # -solaris* is a basic system type, with this one exception. - -auroraux) - os=-auroraux - ;; - -solaris1 | -solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` - ;; - -solaris) - os=-solaris2 - ;; - -unixware*) - os=-sysv4.2uw - ;; - -gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; - # es1800 is here to avoid being matched by es* (a different OS) - -es1800*) - os=-ose - ;; - # Now accept the basic system types. - # The portable systems comes first. - # Each alternative MUST end in a * to match a version number. - # -sysv* is not here because it comes later, after sysvr4. - -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ - | -sym* | -kopensolaris* | -plan9* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* | -cloudabi* | -sortix* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ - | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ - | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ - | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ - | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-musl* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ - | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ - | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ - | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ - | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ - | -morphos* | -superux* | -rtmk* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ - | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ - | -midnightbsd*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; - -qnx*) - case $basic_machine in - x86-* | i*86-*) - ;; - *) - os=-nto$os - ;; - esac - ;; - -nto-qnx*) - ;; - -nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - -sim | -xray | -os68k* | -v88r* \ - | -windows* | -osx | -abug | -netware* | -os9* \ - | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) - ;; - -mac*) - os=`echo "$os" | sed -e 's|mac|macos|'` - ;; - -linux-dietlibc) - os=-linux-dietlibc - ;; - -linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; - -sunos5*) - os=`echo "$os" | sed -e 's|sunos5|solaris2|'` - ;; - -sunos6*) - os=`echo "$os" | sed -e 's|sunos6|solaris3|'` - ;; - -opened*) - os=-openedition - ;; - -os400*) - os=-os400 - ;; - -wince*) - os=-wince - ;; - -utek*) - os=-bsd - ;; - -dynix*) - os=-bsd - ;; - -acis*) - os=-aos - ;; - -atheos*) - os=-atheos - ;; - -syllable*) - os=-syllable - ;; - -386bsd) - os=-bsd - ;; - -ctix* | -uts*) - os=-sysv - ;; - -nova*) - os=-rtmk-nova - ;; - -ns2) - os=-nextstep2 - ;; - -nsk*) - os=-nsk - ;; - # Preserve the version number of sinix5. - -sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` - ;; - -sinix*) - os=-sysv4 - ;; - -tpf*) - os=-tpf - ;; - -triton*) - os=-sysv3 - ;; - -oss*) - os=-sysv3 - ;; - -svr4*) - os=-sysv4 - ;; - -svr3) - os=-sysv3 - ;; - -sysvr4) - os=-sysv4 - ;; - # This must come after -sysvr4. - -sysv*) - ;; - -ose*) - os=-ose - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - os=-mint - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -pikeos*) - # Until real need of OS specific support for - # particular features comes up, bare metal - # configurations are quite functional. - case $basic_machine in - arm*) - os=-eabi - ;; - *) - os=-elf - ;; - esac - ;; - -nacl*) - ;; - -ios) - ;; - -none) - ;; - *) - # Get rid of the `-' at the beginning of $os. - os=`echo $os | sed 's/[^-]*-//'` - echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 - exit 1 - ;; -esac -else - -# Here we handle the default operating systems that come with various machines. -# The value should be what the vendor currently ships out the door with their -# machine or put another way, the most popular os provided with the machine. - -# Note that if you're going to try to match "-MANUFACTURER" here (say, -# "-sun"), then you have to tell the case statement up towards the top -# that MANUFACTURER isn't an operating system. Otherwise, code above -# will signal an error saying that MANUFACTURER isn't an operating -# system, and we'll never get to this point. - -case $basic_machine in - score-*) - os=-elf - ;; - spu-*) - os=-elf - ;; - *-acorn) - os=-riscix1.2 - ;; - arm*-rebel) - os=-linux - ;; - arm*-semi) - os=-aout - ;; - c4x-* | tic4x-*) - os=-coff - ;; - c8051-*) - os=-elf - ;; - hexagon-*) - os=-elf - ;; - tic54x-*) - os=-coff - ;; - tic55x-*) - os=-coff - ;; - tic6x-*) - os=-coff - ;; - # This must come before the *-dec entry. - pdp10-*) - os=-tops20 - ;; - pdp11-*) - os=-none - ;; - *-dec | vax-*) - os=-ultrix4.2 - ;; - m68*-apollo) - os=-domain - ;; - i386-sun) - os=-sunos4.0.2 - ;; - m68000-sun) - os=-sunos3 - ;; - m68*-cisco) - os=-aout - ;; - mep-*) - os=-elf - ;; - mips*-cisco) - os=-elf - ;; - mips*-*) - os=-elf - ;; - or32-*) - os=-coff - ;; - *-tti) # must be before sparc entry or we get the wrong os. - os=-sysv3 - ;; - sparc-* | *-sun) - os=-sunos4.1.1 - ;; - pru-*) - os=-elf - ;; - *-be) - os=-beos - ;; - *-ibm) - os=-aix - ;; - *-knuth) - os=-mmixware - ;; - *-wec) - os=-proelf - ;; - *-winbond) - os=-proelf - ;; - *-oki) - os=-proelf - ;; - *-hp) - os=-hpux - ;; - *-hitachi) - os=-hiux - ;; - i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) - os=-sysv - ;; - *-cbm) - os=-amigaos - ;; - *-dg) - os=-dgux - ;; - *-dolphin) - os=-sysv3 - ;; - m68k-ccur) - os=-rtu - ;; - m88k-omron*) - os=-luna - ;; - *-next) - os=-nextstep - ;; - *-sequent) - os=-ptx - ;; - *-crds) - os=-unos - ;; - *-ns) - os=-genix - ;; - i370-*) - os=-mvs - ;; - *-gould) - os=-sysv - ;; - *-highlevel) - os=-bsd - ;; - *-encore) - os=-bsd - ;; - *-sgi) - os=-irix - ;; - *-siemens) - os=-sysv4 - ;; - *-masscomp) - os=-rtu - ;; - f30[01]-fujitsu | f700-fujitsu) - os=-uxpv - ;; - *-rom68k) - os=-coff - ;; - *-*bug) - os=-coff - ;; - *-apple) - os=-macos - ;; - *-atari*) - os=-mint - ;; - *) - os=-none - ;; -esac -fi - -# Here we handle the case where we know the os, and the CPU type, but not the -# manufacturer. We pick the logical manufacturer. -vendor=unknown -case $basic_machine in - *-unknown) - case $os in - -riscix*) - vendor=acorn - ;; - -sunos*) - vendor=sun - ;; - -cnk*|-aix*) - vendor=ibm - ;; - -beos*) - vendor=be - ;; - -hpux*) - vendor=hp - ;; - -mpeix*) - vendor=hp - ;; - -hiux*) - vendor=hitachi - ;; - -unos*) - vendor=crds - ;; - -dgux*) - vendor=dg - ;; - -luna*) - vendor=omron - ;; - -genix*) - vendor=ns - ;; - -mvs* | -opened*) - vendor=ibm - ;; - -os400*) - vendor=ibm - ;; - -ptx*) - vendor=sequent - ;; - -tpf*) - vendor=ibm - ;; - -vxsim* | -vxworks* | -windiss*) - vendor=wrs - ;; - -aux*) - vendor=apple - ;; - -hms*) - vendor=hitachi - ;; - -mpw* | -macos*) - vendor=apple - ;; - -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) - vendor=atari - ;; - -vos*) - vendor=stratus - ;; - esac - basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` - ;; -esac - -echo "$basic_machine$os" -exit - -# Local variables: -# eval: (add-hook 'write-file-functions 'time-stamp) -# time-stamp-start: "timestamp='" -# time-stamp-format: "%:y-%02m-%02d" -# time-stamp-end: "'" -# End: diff --git a/m4/ct_check_cuda.m4 b/m4/ct_check_cuda.m4 deleted file mode 100644 index 92e934b52..000000000 --- a/m4/ct_check_cuda.m4 +++ /dev/null @@ -1,112 +0,0 @@ -##### -# -# SYNOPSIS -# -# CT_CHECK_CUDA_API -# -# DESCRIPTION -# -# This macro tries to find the headers and libraries for the -# CUDA API to build client applications. -# -# If includes are found, the variable CDINCPATH will be set. If -# libraries are found, the variable CDLIBPATH will be set. if no check -# was successful, the script exits with a error message. -# -# LAST MODIFICATION -# -# 2011-01-04 -# -# COPYLEFT -# -# Copyright © 2011 -# -# Copying and distribution of this file, with or without -# modification, are permitted in any medium without royalty provided -# the copyright notice and this notice are preserved. - -AC_DEFUN([CT_CHECK_CUDA_API], [ - -AC_ARG_WITH(cuda, -[ --with-cuda=PREFIX Prefix of your CUDA installation], -[cd_prefix=$withval], [cd_prefix="/usr/local/cuda"]) - - -AC_SUBST(CDINCPATH) -AC_SUBST(CDLIBPATH) -AC_SUBST(NVCC) - -AC_CANONICAL_HOST - -#find out what version we are running -ARCH=`uname -m` -if [[ $ARCH == "x86_64" ]]; -then -SUFFIX="64" -else -SUFFIX="" -fi - - -# AC_MSG_NOTICE([$cd_prefix, $withval]) - -# cd_prefix will be set to "yes" if --with-cuda is passed in with no value -if test "$cd_prefix" == "yes"; then -if test "$withval" == "yes"; then -cd_prefix="/usr/local/cuda" -fi -fi - -if test "$cd_prefix" != ""; then - -AC_MSG_CHECKING([for CUDA compiler in $cd_prefix/bin]) -if test -f "$cd_prefix/bin/nvcc" ; then -NVCC="$cd_prefix/bin/nvcc" -AC_MSG_RESULT([yes]) -else -AC_MSG_ERROR(nvcc not found) -fi - -AC_MSG_CHECKING([for CUDA includes in $cd_prefix/include]) -if test -f "$cd_prefix/include/cuda.h" ; then -CDINCPATH="-I$cd_prefix/include" -AC_MSG_RESULT([yes]) -else -AC_MSG_ERROR(cuda.h not found) -fi - -AC_MSG_CHECKING([for CUDA libraries in $cd_prefix/lib$SUFFIX]) -case $host_os in -darwin*) -if test -f "$cd_prefix/lib$SUFFIX/libcudart.dylib" ; then -CDLIBPATH="-L$cd_prefix/lib$SUFFIX" -AC_MSG_RESULT([yes]) -elif test -f "$cd_prefix/lib/libcudart.dylib" ; then -CDLIBPATH="-L$cd_prefix/lib" -else -AC_MSG_ERROR(libcublas.dylib not found) -fi -;; -linux*) -if test -f "$cd_prefix/lib$SUFFIX/libcudart.so" ; then -CDLIBPATH="-L$cd_prefix/lib$SUFFIX" -AC_MSG_RESULT([yes]) -else -AC_MSG_ERROR(libcudart.so not found) -fi -;; -*) -#Default Case -AC_MSG_ERROR([Your platform is not currently supported]) ;; -esac -fi - -if test "$CDINCPATH" = "" ; then -AC_CHECK_HEADER([cuda.h], [], AC_MSG_ERROR(cuda.h not found)) -fi -if test "$CDLIBPATH" = "" ; then -# AC_CHECK_LIB(cublas, cudaSetDevice, [], AC_MSG_ERROR(libcublas.so not found)) -AC_CHECK_LIB([cudart], [cudaMalloc]) -fi - -]) diff --git a/m4/depcomp b/m4/depcomp deleted file mode 100755 index 65cbf7093..000000000 --- a/m4/depcomp +++ /dev/null @@ -1,791 +0,0 @@ -#! /bin/sh -# depcomp - compile a program generating dependencies as side-effects - -scriptversion=2018-03-07.03; # UTC - -# Copyright (C) 1999-2018 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# Originally written by Alexandre Oliva . - -case $1 in - '') - echo "$0: No command. Try '$0 --help' for more information." 1>&2 - exit 1; - ;; - -h | --h*) - cat <<\EOF -Usage: depcomp [--help] [--version] PROGRAM [ARGS] - -Run PROGRAMS ARGS to compile a file, generating dependencies -as side-effects. - -Environment variables: - depmode Dependency tracking mode. - source Source file read by 'PROGRAMS ARGS'. - object Object file output by 'PROGRAMS ARGS'. - DEPDIR directory where to store dependencies. - depfile Dependency file to output. - tmpdepfile Temporary file to use when outputting dependencies. - libtool Whether libtool is used (yes/no). - -Report bugs to . -EOF - exit $? - ;; - -v | --v*) - echo "depcomp $scriptversion" - exit $? - ;; -esac - -# Get the directory component of the given path, and save it in the -# global variables '$dir'. Note that this directory component will -# be either empty or ending with a '/' character. This is deliberate. -set_dir_from () -{ - case $1 in - */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; - *) dir=;; - esac -} - -# Get the suffix-stripped basename of the given path, and save it the -# global variable '$base'. -set_base_from () -{ - base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` -} - -# If no dependency file was actually created by the compiler invocation, -# we still have to create a dummy depfile, to avoid errors with the -# Makefile "include basename.Plo" scheme. -make_dummy_depfile () -{ - echo "#dummy" > "$depfile" -} - -# Factor out some common post-processing of the generated depfile. -# Requires the auxiliary global variable '$tmpdepfile' to be set. -aix_post_process_depfile () -{ - # If the compiler actually managed to produce a dependency file, - # post-process it. - if test -f "$tmpdepfile"; then - # Each line is of the form 'foo.o: dependency.h'. - # Do two passes, one to just change these to - # $object: dependency.h - # and one to simply output - # dependency.h: - # which is needed to avoid the deleted-header problem. - { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" - sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" - } > "$depfile" - rm -f "$tmpdepfile" - else - make_dummy_depfile - fi -} - -# A tabulation character. -tab=' ' -# A newline character. -nl=' -' -# Character ranges might be problematic outside the C locale. -# These definitions help. -upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ -lower=abcdefghijklmnopqrstuvwxyz -digits=0123456789 -alpha=${upper}${lower} - -if test -z "$depmode" || test -z "$source" || test -z "$object"; then - echo "depcomp: Variables source, object and depmode must be set" 1>&2 - exit 1 -fi - -# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. -depfile=${depfile-`echo "$object" | - sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} -tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} - -rm -f "$tmpdepfile" - -# Avoid interferences from the environment. -gccflag= dashmflag= - -# Some modes work just like other modes, but use different flags. We -# parameterize here, but still list the modes in the big case below, -# to make depend.m4 easier to write. Note that we *cannot* use a case -# here, because this file can only contain one case statement. -if test "$depmode" = hp; then - # HP compiler uses -M and no extra arg. - gccflag=-M - depmode=gcc -fi - -if test "$depmode" = dashXmstdout; then - # This is just like dashmstdout with a different argument. - dashmflag=-xM - depmode=dashmstdout -fi - -cygpath_u="cygpath -u -f -" -if test "$depmode" = msvcmsys; then - # This is just like msvisualcpp but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvisualcpp -fi - -if test "$depmode" = msvc7msys; then - # This is just like msvc7 but w/o cygpath translation. - # Just convert the backslash-escaped backslashes to single forward - # slashes to satisfy depend.m4 - cygpath_u='sed s,\\\\,/,g' - depmode=msvc7 -fi - -if test "$depmode" = xlc; then - # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. - gccflag=-qmakedep=gcc,-MF - depmode=gcc -fi - -case "$depmode" in -gcc3) -## gcc 3 implements dependency tracking that does exactly what -## we want. Yay! Note: for some reason libtool 1.4 doesn't like -## it if -MD -MP comes after the -MF stuff. Hmm. -## Unfortunately, FreeBSD c89 acceptance of flags depends upon -## the command line argument order; so add the flags where they -## appear in depend2.am. Note that the slowdown incurred here -## affects only configure: in makefiles, %FASTDEP% shortcuts this. - for arg - do - case $arg in - -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; - *) set fnord "$@" "$arg" ;; - esac - shift # fnord - shift # $arg - done - "$@" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - mv "$tmpdepfile" "$depfile" - ;; - -gcc) -## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. -## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. -## (see the conditional assignment to $gccflag above). -## There are various ways to get dependency output from gcc. Here's -## why we pick this rather obscure method: -## - Don't want to use -MD because we'd like the dependencies to end -## up in a subdir. Having to rename by hand is ugly. -## (We might end up doing this anyway to support other compilers.) -## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like -## -MM, not -M (despite what the docs say). Also, it might not be -## supported by the other compilers which use the 'gcc' depmode. -## - Using -M directly means running the compiler twice (even worse -## than renaming). - if test -z "$gccflag"; then - gccflag=-MD, - fi - "$@" -Wp,"$gccflag$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The second -e expression handles DOS-style file names with drive - # letters. - sed -e 's/^[^:]*: / /' \ - -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" -## This next piece of magic avoids the "deleted header file" problem. -## The problem is that when a header file which appears in a .P file -## is deleted, the dependency causes make to die (because there is -## typically no way to rebuild the header). We avoid this by adding -## dummy dependencies for each header file. Too bad gcc doesn't do -## this for us directly. -## Some versions of gcc put a space before the ':'. On the theory -## that the space means something, we add a space to the output as -## well. hp depmode also adds that space, but also prefixes the VPATH -## to the object. Take care to not repeat it in the output. -## Some versions of the HPUX 10.20 sed can't process this invocation -## correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -sgi) - if test "$libtool" = yes; then - "$@" "-Wp,-MDupdate,$tmpdepfile" - else - "$@" -MDupdate "$tmpdepfile" - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - - if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files - echo "$object : \\" > "$depfile" - # Clip off the initial element (the dependent). Don't try to be - # clever and replace this with sed code, as IRIX sed won't handle - # lines with more than a fixed number of characters (4096 in - # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; - # the IRIX cc adds comments like '#:fec' to the end of the - # dependency line. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ - | tr "$nl" ' ' >> "$depfile" - echo >> "$depfile" - # The second pass generates a dummy entry for each header file. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" - ;; - -xlc) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -aix) - # The C for AIX Compiler uses -M and outputs the dependencies - # in a .u file. In older versions, this file always lives in the - # current directory. Also, the AIX compiler puts '$object:' at the - # start of each line; $object doesn't have directory information. - # Version 6 uses the directory in both cases. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.u - tmpdepfile2=$base.u - tmpdepfile3=$dir.libs/$base.u - "$@" -Wc,-M - else - tmpdepfile1=$dir$base.u - tmpdepfile2=$dir$base.u - tmpdepfile3=$dir$base.u - "$@" -M - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - aix_post_process_depfile - ;; - -tcc) - # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 - # FIXME: That version still under development at the moment of writing. - # Make that this statement remains true also for stable, released - # versions. - # It will wrap lines (doesn't matter whether long or short) with a - # trailing '\', as in: - # - # foo.o : \ - # foo.c \ - # foo.h \ - # - # It will put a trailing '\' even on the last line, and will use leading - # spaces rather than leading tabs (at least since its commit 0394caf7 - # "Emit spaces for -MD"). - "$@" -MD -MF "$tmpdepfile" - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. - # We have to change lines of the first kind to '$object: \'. - sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" - # And for each line of the second kind, we have to emit a 'dep.h:' - # dummy dependency, to avoid the deleted-header problem. - sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" - ;; - -## The order of this option in the case statement is important, since the -## shell code in configure will try each of these formats in the order -## listed in this file. A plain '-MD' option would be understood by many -## compilers, so we must ensure this comes after the gcc and icc options. -pgcc) - # Portland's C compiler understands '-MD'. - # Will always output deps to 'file.d' where file is the root name of the - # source file under compilation, even if file resides in a subdirectory. - # The object file name does not affect the name of the '.d' file. - # pgcc 10.2 will output - # foo.o: sub/foo.c sub/foo.h - # and will wrap long lines using '\' : - # foo.o: sub/foo.c ... \ - # sub/foo.h ... \ - # ... - set_dir_from "$object" - # Use the source, not the object, to determine the base name, since - # that's sadly what pgcc will do too. - set_base_from "$source" - tmpdepfile=$base.d - - # For projects that build the same source file twice into different object - # files, the pgcc approach of using the *source* file root name can cause - # problems in parallel builds. Use a locking strategy to avoid stomping on - # the same $tmpdepfile. - lockdir=$base.d-lock - trap " - echo '$0: caught signal, cleaning up...' >&2 - rmdir '$lockdir' - exit 1 - " 1 2 13 15 - numtries=100 - i=$numtries - while test $i -gt 0; do - # mkdir is a portable test-and-set. - if mkdir "$lockdir" 2>/dev/null; then - # This process acquired the lock. - "$@" -MD - stat=$? - # Release the lock. - rmdir "$lockdir" - break - else - # If the lock is being held by a different process, wait - # until the winning process is done or we timeout. - while test -d "$lockdir" && test $i -gt 0; do - sleep 1 - i=`expr $i - 1` - done - fi - i=`expr $i - 1` - done - trap - 1 2 13 15 - if test $i -le 0; then - echo "$0: failed to acquire lock after $numtries attempts" >&2 - echo "$0: check lockdir '$lockdir'" >&2 - exit 1 - fi - - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - # Each line is of the form `foo.o: dependent.h', - # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. - # Do two passes, one to just change these to - # `$object: dependent.h' and one to simply `dependent.h:'. - sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -hp2) - # The "hp" stanza above does not work with aCC (C++) and HP's ia64 - # compilers, which have integrated preprocessors. The correct option - # to use with these is +Maked; it writes dependencies to a file named - # 'foo.d', which lands next to the object file, wherever that - # happens to be. - # Much of this is similar to the tru64 case; see comments there. - set_dir_from "$object" - set_base_from "$object" - if test "$libtool" = yes; then - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir.libs/$base.d - "$@" -Wc,+Maked - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - "$@" +Maked - fi - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" - do - test -f "$tmpdepfile" && break - done - if test -f "$tmpdepfile"; then - sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" - # Add 'dependent.h:' lines. - sed -ne '2,${ - s/^ *// - s/ \\*$// - s/$/:/ - p - }' "$tmpdepfile" >> "$depfile" - else - make_dummy_depfile - fi - rm -f "$tmpdepfile" "$tmpdepfile2" - ;; - -tru64) - # The Tru64 compiler uses -MD to generate dependencies as a side - # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. - # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put - # dependencies in 'foo.d' instead, so we check for that too. - # Subdirectories are respected. - set_dir_from "$object" - set_base_from "$object" - - if test "$libtool" = yes; then - # Libtool generates 2 separate objects for the 2 libraries. These - # two compilations output dependencies in $dir.libs/$base.o.d and - # in $dir$base.o.d. We have to check for both files, because - # one of the two compilations can be disabled. We should prefer - # $dir$base.o.d over $dir.libs/$base.o.d because the latter is - # automatically cleaned when .libs/ is deleted, while ignoring - # the former would cause a distcleancheck panic. - tmpdepfile1=$dir$base.o.d # libtool 1.5 - tmpdepfile2=$dir.libs/$base.o.d # Likewise. - tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 - "$@" -Wc,-MD - else - tmpdepfile1=$dir$base.d - tmpdepfile2=$dir$base.d - tmpdepfile3=$dir$base.d - "$@" -MD - fi - - stat=$? - if test $stat -ne 0; then - rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - exit $stat - fi - - for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" - do - test -f "$tmpdepfile" && break - done - # Same post-processing that is required for AIX mode. - aix_post_process_depfile - ;; - -msvc7) - if test "$libtool" = yes; then - showIncludes=-Wc,-showIncludes - else - showIncludes=-showIncludes - fi - "$@" $showIncludes > "$tmpdepfile" - stat=$? - grep -v '^Note: including file: ' "$tmpdepfile" - if test $stat -ne 0; then - rm -f "$tmpdepfile" - exit $stat - fi - rm -f "$depfile" - echo "$object : \\" > "$depfile" - # The first sed program below extracts the file names and escapes - # backslashes for cygpath. The second sed program outputs the file - # name when reading, but also accumulates all include files in the - # hold buffer in order to output them again at the end. This only - # works with sed implementations that can handle large buffers. - sed < "$tmpdepfile" -n ' -/^Note: including file: *\(.*\)/ { - s//\1/ - s/\\/\\\\/g - p -}' | $cygpath_u | sort -u | sed -n ' -s/ /\\ /g -s/\(.*\)/'"$tab"'\1 \\/p -s/.\(.*\) \\/\1:/ -H -$ { - s/.*/'"$tab"'/ - G - p -}' >> "$depfile" - echo >> "$depfile" # make sure the fragment doesn't end with a backslash - rm -f "$tmpdepfile" - ;; - -msvc7msys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -#nosideeffect) - # This comment above is used by automake to tell side-effect - # dependency tracking mechanisms from slower ones. - -dashmstdout) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - test -z "$dashmflag" && dashmflag=-M - # Require at least two characters before searching for ':' - # in the target name. This is to cope with DOS-style filenames: - # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. - "$@" $dashmflag | - sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" - rm -f "$depfile" - cat < "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process this sed invocation - # correctly. Breaking it into two sed invocations is a workaround. - tr ' ' "$nl" < "$tmpdepfile" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -dashXmstdout) - # This case only exists to satisfy depend.m4. It is never actually - # run, as this mode is specially recognized in the preamble. - exit 1 - ;; - -makedepend) - "$@" || exit $? - # Remove any Libtool call - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - # X makedepend - shift - cleared=no eat=no - for arg - do - case $cleared in - no) - set ""; shift - cleared=yes ;; - esac - if test $eat = yes; then - eat=no - continue - fi - case "$arg" in - -D*|-I*) - set fnord "$@" "$arg"; shift ;; - # Strip any option that makedepend may not understand. Remove - # the object too, otherwise makedepend will parse it as a source file. - -arch) - eat=yes ;; - -*|$object) - ;; - *) - set fnord "$@" "$arg"; shift ;; - esac - done - obj_suffix=`echo "$object" | sed 's/^.*\././'` - touch "$tmpdepfile" - ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" - rm -f "$depfile" - # makedepend may prepend the VPATH from the source file name to the object. - # No need to regex-escape $object, excess matching of '.' is harmless. - sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" - # Some versions of the HPUX 10.20 sed can't process the last invocation - # correctly. Breaking it into two sed invocations is a workaround. - sed '1,2d' "$tmpdepfile" \ - | tr ' ' "$nl" \ - | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ - | sed -e 's/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" "$tmpdepfile".bak - ;; - -cpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - # Remove '-o $object'. - IFS=" " - for arg - do - case $arg in - -o) - shift - ;; - $object) - shift - ;; - *) - set fnord "$@" "$arg" - shift # fnord - shift # $arg - ;; - esac - done - - "$@" -E \ - | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ - | sed '$ s: \\$::' > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - cat < "$tmpdepfile" >> "$depfile" - sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvisualcpp) - # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout. - "$@" || exit $? - - # Remove the call to Libtool. - if test "$libtool" = yes; then - while test "X$1" != 'X--mode=compile'; do - shift - done - shift - fi - - IFS=" " - for arg - do - case "$arg" in - -o) - shift - ;; - $object) - shift - ;; - "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") - set fnord "$@" - shift - shift - ;; - *) - set fnord "$@" "$arg" - shift - shift - ;; - esac - done - "$@" -E 2>/dev/null | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" - rm -f "$depfile" - echo "$object : \\" > "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" - echo "$tab" >> "$depfile" - sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" - rm -f "$tmpdepfile" - ;; - -msvcmsys) - # This case exists only to let depend.m4 do its work. It works by - # looking at the text of this script. This case will never be run, - # since it is checked for above. - exit 1 - ;; - -none) - exec "$@" - ;; - -*) - echo "Unknown depmode $depmode" 1>&2 - exit 1 - ;; -esac - -exit 0 - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/m4/install-sh b/m4/install-sh deleted file mode 100755 index 8175c640f..000000000 --- a/m4/install-sh +++ /dev/null @@ -1,518 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2018-03-11.20; # UTC - -# This originates from X11R5 (mit/util/scripts/install.sh), which was -# later released in X11R6 (xc/config/util/install.sh) with the -# following copyright and license. -# -# Copyright (C) 1994 X Consortium -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- -# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -# Except as contained in this notice, the name of the X Consortium shall not -# be used in advertising or otherwise to promote the sale, use or other deal- -# ings in this Software without prior written authorization from the X Consor- -# tium. -# -# -# FSF changes to this file are in the public domain. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# 'make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. - -tab=' ' -nl=' -' -IFS=" $tab$nl" - -# Set DOITPROG to "echo" to test this script. - -doit=${DOITPROG-} -doit_exec=${doit:-exec} - -# Put in absolute file names if you don't have them in your path; -# or use environment vars. - -chgrpprog=${CHGRPPROG-chgrp} -chmodprog=${CHMODPROG-chmod} -chownprog=${CHOWNPROG-chown} -cmpprog=${CMPPROG-cmp} -cpprog=${CPPROG-cp} -mkdirprog=${MKDIRPROG-mkdir} -mvprog=${MVPROG-mv} -rmprog=${RMPROG-rm} -stripprog=${STRIPPROG-strip} - -posix_mkdir= - -# Desired mode of installed file. -mode=0755 - -chgrpcmd= -chmodcmd=$chmodprog -chowncmd= -mvcmd=$mvprog -rmcmd="$rmprog -f" -stripcmd= - -src= -dst= -dir_arg= -dst_arg= - -copy_on_change=false -is_target_a_directory=possibly - -usage="\ -Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE - or: $0 [OPTION]... SRCFILES... DIRECTORY - or: $0 [OPTION]... -t DIRECTORY SRCFILES... - or: $0 [OPTION]... -d DIRECTORIES... - -In the 1st form, copy SRCFILE to DSTFILE. -In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. -In the 4th, create DIRECTORIES. - -Options: - --help display this help and exit. - --version display version info and exit. - - -c (ignored) - -C install only if different (preserve the last data modification time) - -d create directories instead of installing files. - -g GROUP $chgrpprog installed files to GROUP. - -m MODE $chmodprog installed files to MODE. - -o USER $chownprog installed files to USER. - -s $stripprog installed files. - -t DIRECTORY install into DIRECTORY. - -T report an error if DSTFILE is a directory. - -Environment variables override the default commands: - CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG - RMPROG STRIPPROG -" - -while test $# -ne 0; do - case $1 in - -c) ;; - - -C) copy_on_change=true;; - - -d) dir_arg=true;; - - -g) chgrpcmd="$chgrpprog $2" - shift;; - - --help) echo "$usage"; exit $?;; - - -m) mode=$2 - case $mode in - *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) - is_target_a_directory=always - dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) is_target_a_directory=never;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -# We allow the use of options -d and -T together, by making -d -# take the precedence; this is for compatibility with GNU install. - -if test -n "$dir_arg"; then - if test -n "$dst_arg"; then - echo "$0: target directory not allowed when installing a directory." >&2 - exit 1 - fi -fi - -if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then - # When -d is used, all remaining arguments are directories to create. - # When -t is used, the destination is already specified. - # Otherwise, the last argument is the destination. Remove it from $@. - for arg - do - if test -n "$dst_arg"; then - # $@ is not empty: it contains at least $arg. - set fnord "$@" "$dst_arg" - shift # fnord - fi - shift # arg - dst_arg=$arg - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - done -fi - -if test $# -eq 0; then - if test -z "$dir_arg"; then - echo "$0: no input file specified." >&2 - exit 1 - fi - # It's OK to call 'install-sh -d' without argument. - # This can happen when creating conditional directories. - exit 0 -fi - -if test -z "$dir_arg"; then - if test $# -gt 1 || test "$is_target_a_directory" = always; then - if test ! -d "$dst_arg"; then - echo "$0: $dst_arg: Is not a directory." >&2 - exit 1 - fi - fi -fi - -if test -z "$dir_arg"; then - do_exit='(exit $ret); exit $ret' - trap "ret=129; $do_exit" 1 - trap "ret=130; $do_exit" 2 - trap "ret=141; $do_exit" 13 - trap "ret=143; $do_exit" 15 - - # Set umask so as not to create temps with too-generous modes. - # However, 'strip' requires both read and write access to temps. - case $mode in - # Optimize common cases. - *644) cp_umask=133;; - *755) cp_umask=22;; - - *[0-7]) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw='% 200' - fi - cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; - *) - if test -z "$stripcmd"; then - u_plus_rw= - else - u_plus_rw=,u+rw - fi - cp_umask=$mode$u_plus_rw;; - esac -fi - -for src -do - # Protect names problematic for 'test' and other utilities. - case $src in - -* | [=\(\)!]) src=./$src;; - esac - - if test -n "$dir_arg"; then - dst=$src - dstdir=$dst - test -d "$dstdir" - dstdir_status=$? - else - - # Waiting for this to be detected by the "$cpprog $src $dsttmp" command - # might cause directories to be created, which would be especially bad - # if $src (and thus $dsttmp) contains '*'. - if test ! -f "$src" && test ! -d "$src"; then - echo "$0: $src does not exist." >&2 - exit 1 - fi - - if test -z "$dst_arg"; then - echo "$0: no destination specified." >&2 - exit 1 - fi - dst=$dst_arg - - # If destination is a directory, append the input filename. - if test -d "$dst"; then - if test "$is_target_a_directory" = never; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dstbase=`basename "$src"` - case $dst in - */) dst=$dst$dstbase;; - *) dst=$dst/$dstbase;; - esac - dstdir_status=0 - else - dstdir=`dirname "$dst"` - test -d "$dstdir" - dstdir_status=$? - fi - fi - - case $dstdir in - */) dstdirslash=$dstdir;; - *) dstdirslash=$dstdir/;; - esac - - obsolete_mkdir_used=false - - if test $dstdir_status != 0; then - case $posix_mkdir in - '') - # Create intermediate dirs using mode 755 as modified by the umask. - # This is like FreeBSD 'install' as of 1997-10-28. - umask=`umask` - case $stripcmd.$umask in - # Optimize common cases. - *[2367][2367]) mkdir_umask=$umask;; - .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; - - *[0-7]) - mkdir_umask=`expr $umask + 22 \ - - $umask % 100 % 40 + $umask % 20 \ - - $umask % 10 % 4 + $umask % 2 - `;; - *) mkdir_umask=$umask,go-w;; - esac - - # With -d, create the new directory with the user-specified mode. - # Otherwise, rely on $mkdir_umask. - if test -n "$dir_arg"; then - mkdir_mode=-m$mode - else - mkdir_mode= - fi - - posix_mkdir=false - case $umask in - *[123567][0-7][0-7]) - # POSIX mkdir -p sets u+wx bits regardless of umask, which - # is incompatible with FreeBSD 'install' when (umask & 300) != 0. - ;; - *) - # Note that $RANDOM variable is not portable (e.g. dash); Use it - # here however when possible just to lower collision chance. - tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ - - trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 - - # Because "mkdir -p" follows existing symlinks and we likely work - # directly in world-writeable /tmp, make sure that the '$tmpdir' - # directory is successfully created first before we actually test - # 'mkdir -p' feature. - if (umask $mkdir_umask && - $mkdirprog $mkdir_mode "$tmpdir" && - exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 - then - if test -z "$dir_arg" || { - # Check for POSIX incompatibilities with -m. - # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or - # other-writable bit of parent directory when it shouldn't. - # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. - test_tmpdir="$tmpdir/a" - ls_ld_tmpdir=`ls -ld "$test_tmpdir"` - case $ls_ld_tmpdir in - d????-?r-*) different_mode=700;; - d????-?--*) different_mode=755;; - *) false;; - esac && - $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { - ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` - test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" - } - } - then posix_mkdir=: - fi - rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" - else - # Remove any dirs left behind by ancient mkdir implementations. - rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null - fi - trap '' 0;; - esac;; - esac - - if - $posix_mkdir && ( - umask $mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" - ) - then : - else - - # The umask is ridiculous, or mkdir does not conform to POSIX, - # or it failed possibly due to a race condition. Create the - # directory the slow way, step by step, checking for races as we go. - - case $dstdir in - /*) prefix='/';; - [-=\(\)!]*) prefix='./';; - *) prefix='';; - esac - - oIFS=$IFS - IFS=/ - set -f - set fnord $dstdir - shift - set +f - IFS=$oIFS - - prefixes= - - for d - do - test X"$d" = X && continue - - prefix=$prefix$d - if test -d "$prefix"; then - prefixes= - else - if $posix_mkdir; then - (umask=$mkdir_umask && - $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break - # Don't fail if two instances are running concurrently. - test -d "$prefix" || exit 1 - else - case $prefix in - *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; - *) qprefix=$prefix;; - esac - prefixes="$prefixes '$qprefix'" - fi - fi - prefix=$prefix/ - done - - if test -n "$prefixes"; then - # Don't fail if two instances are running concurrently. - (umask $mkdir_umask && - eval "\$doit_exec \$mkdirprog $prefixes") || - test -d "$dstdir" || exit 1 - obsolete_mkdir_used=true - fi - fi - fi - - if test -n "$dir_arg"; then - { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && - { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || - test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 - else - - # Make a couple of temp file names in the proper directory. - dsttmp=${dstdirslash}_inst.$$_ - rmtmp=${dstdirslash}_rm.$$_ - - # Trap to clean up those temp files at exit. - trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 - - # Copy the file name to the temp name. - (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && - - # and set any options; do chmod last to preserve setuid bits. - # - # If any of these fail, we abort the whole thing. If we want to - # ignore errors from any of these, just make sure not to ignore - # errors from the above "$doit $cpprog $src $dsttmp" command. - # - { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && - { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && - { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && - { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && - - # If -C, don't bother to copy if it wouldn't change the file. - if $copy_on_change && - old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && - new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && - set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - set +f && - test "$old" = "$new" && - $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 - then - rm -f "$dsttmp" - else - # Rename the file to the real destination. - $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || - - # The rename failed, perhaps because mv can't rename something else - # to itself, or perhaps because mv is so ancient that it does not - # support -f. - { - # Now remove or move aside any old file at destination location. - # We try this two ways since rm can't unlink itself on some - # systems and the destination file might be busy for other - # reasons. In this case, the final cleanup might fail but the new - # file should still install successfully. - { - test ! -f "$dst" || - $doit $rmcmd -f "$dst" 2>/dev/null || - { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && - { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } - } || - { echo "$0: cannot unlink or rename $dst" >&2 - (exit 1); exit 1 - } - } && - - # Now rename the file to the real destination. - $doit $mvcmd "$dsttmp" "$dst" - } - fi || exit 1 - - trap '' 0 - fi -done - -# Local variables: -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/m4/ltmain.sh b/m4/ltmain.sh deleted file mode 100644 index a736cf994..000000000 --- a/m4/ltmain.sh +++ /dev/null @@ -1,11156 +0,0 @@ -#! /bin/sh -## DO NOT EDIT - This file generated from ./build-aux/ltmain.in -## by inline-source v2014-01-03.01 - -# libtool (GNU libtool) 2.4.6 -# Provide generalized library-building support services. -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# GNU Libtool is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - - -PROGRAM=libtool -PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-2" -package_revision=2.4.6 - - -## ------ ## -## Usage. ## -## ------ ## - -# Run './libtool --help' for help with using this script from the -# command line. - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# After configure completes, it has a better idea of some of the -# shell tools we need than the defaults used by the functions shared -# with bootstrap, so set those here where they can still be over- -# ridden by the user, but otherwise take precedence. - -: ${AUTOCONF="autoconf"} -: ${AUTOMAKE="automake"} - - -## -------------------------- ## -## Source external libraries. ## -## -------------------------- ## - -# Much of our low-level functionality needs to be sourced from external -# libraries, which are installed to $pkgauxdir. - -# Set a version string for this script. -scriptversion=2015-01-20.17; # UTC - -# General shell script boiler plate, and helper functions. -# Written by Gary V. Vaughan, 2004 - -# Copyright (C) 2004-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. - -# As a special exception to the GNU General Public License, if you distribute -# this file as part of a program or library that is built using GNU Libtool, -# you may include this file under the same distribution terms that you use -# for the rest of that program. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# Evaluate this file near the top of your script to gain access to -# the functions and variables defined here: -# -# . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh -# -# If you need to override any of the default environment variable -# settings, do that before evaluating this file. - - -## -------------------- ## -## Shell normalisation. ## -## -------------------- ## - -# Some shells need a little help to be as Bourne compatible as possible. -# Before doing anything else, make sure all that help has been provided! - -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac -fi - -# NLS nuisances: We save the old values in case they are required later. -_G_user_locale= -_G_safe_locale= -for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test set = \"\${$_G_var+set}\"; then - save_$_G_var=\$$_G_var - $_G_var=C - export $_G_var - _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" - _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" - fi" -done - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Make sure IFS has a sensible default -sp=' ' -nl=' -' -IFS="$sp $nl" - -# There are apparently some retarded systems that use ';' as a PATH separator! -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - - -## ------------------------- ## -## Locate command utilities. ## -## ------------------------- ## - - -# func_executable_p FILE -# ---------------------- -# Check that FILE is an executable regular file. -func_executable_p () -{ - test -f "$1" && test -x "$1" -} - - -# func_path_progs PROGS_LIST CHECK_FUNC [PATH] -# -------------------------------------------- -# Search for either a program that responds to --version with output -# containing "GNU", or else returned by CHECK_FUNC otherwise, by -# trying all the directories in PATH with each of the elements of -# PROGS_LIST. -# -# CHECK_FUNC should accept the path to a candidate program, and -# set $func_check_prog_result if it truncates its output less than -# $_G_path_prog_max characters. -func_path_progs () -{ - _G_progs_list=$1 - _G_check_func=$2 - _G_PATH=${3-"$PATH"} - - _G_path_prog_max=0 - _G_path_prog_found=false - _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} - for _G_dir in $_G_PATH; do - IFS=$_G_save_IFS - test -z "$_G_dir" && _G_dir=. - for _G_prog_name in $_G_progs_list; do - for _exeext in '' .EXE; do - _G_path_prog=$_G_dir/$_G_prog_name$_exeext - func_executable_p "$_G_path_prog" || continue - case `"$_G_path_prog" --version 2>&1` in - *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; - *) $_G_check_func $_G_path_prog - func_path_progs_result=$func_check_prog_result - ;; - esac - $_G_path_prog_found && break 3 - done - done - done - IFS=$_G_save_IFS - test -z "$func_path_progs_result" && { - echo "no acceptable sed could be found in \$PATH" >&2 - exit 1 - } -} - - -# We want to be able to use the functions in this file before configure -# has figured out where the best binaries are kept, which means we have -# to search for them ourselves - except when the results are already set -# where we skip the searches. - -# Unless the user overrides by setting SED, search the path for either GNU -# sed, or the sed that truncates its output the least. -test -z "$SED" && { - _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for _G_i in 1 2 3 4 5 6 7; do - _G_sed_script=$_G_sed_script$nl$_G_sed_script - done - echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed - _G_sed_script= - - func_check_prog_sed () - { - _G_path_prog=$1 - - _G_count=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo '' >> conftest.nl - "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin - rm -f conftest.sed - SED=$func_path_progs_result -} - - -# Unless the user overrides by setting GREP, search the path for either GNU -# grep, or the grep that truncates its output the least. -test -z "$GREP" && { - func_check_prog_grep () - { - _G_path_prog=$1 - - _G_count=0 - _G_path_prog_max=0 - printf 0123456789 >conftest.in - while : - do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo 'GREP' >> conftest.nl - "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break - diff conftest.out conftest.nl >/dev/null 2>&1 || break - _G_count=`expr $_G_count + 1` - if test "$_G_count" -gt "$_G_path_prog_max"; then - # Best one so far, save it but keep looking for a better one - func_check_prog_result=$_G_path_prog - _G_path_prog_max=$_G_count - fi - # 10*(2^10) chars as input seems more than enough - test 10 -lt "$_G_count" && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out - } - - func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin - GREP=$func_path_progs_result -} - - -## ------------------------------- ## -## User overridable command paths. ## -## ------------------------------- ## - -# All uppercase variable names are used for environment variables. These -# variables can be overridden by the user before calling a script that -# uses them if a suitable command of that name is not already available -# in the command search PATH. - -: ${CP="cp -f"} -: ${ECHO="printf %s\n"} -: ${EGREP="$GREP -E"} -: ${FGREP="$GREP -F"} -: ${LN_S="ln -s"} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} - - -## -------------------- ## -## Useful sed snippets. ## -## -------------------- ## - -sed_dirname='s|/[^/]*$||' -sed_basename='s|^.*/||' - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='s|\([`"$\\]\)|\\\1|g' - -# Same as above, but do not quote variable references. -sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' - -# Sed substitution that converts a w32 file name or path -# that contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-'\' parameter expansions in output of sed_double_quote_subst that -# were '\'-ed in input to the same. If an odd number of '\' preceded a -# '$' in input to sed_double_quote_subst, that '$' was protected from -# expansion. Since each input '\' is now two '\'s, look for any number -# of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. -_G_bs='\\' -_G_bs2='\\\\' -_G_bs4='\\\\\\\\' -_G_dollar='\$' -sed_double_backslash="\ - s/$_G_bs4/&\\ -/g - s/^$_G_bs2$_G_dollar/$_G_bs&/ - s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g - s/\n//g" - - -## ----------------- ## -## Global variables. ## -## ----------------- ## - -# Except for the global variables explicitly listed below, the following -# functions in the '^func_' namespace, and the '^require_' namespace -# variables initialised in the 'Resource management' section, sourcing -# this file will not pollute your global namespace with anything -# else. There's no portable way to scope variables in Bourne shell -# though, so actually running these functions will sometimes place -# results into a variable named after the function, and often use -# temporary variables in the '^_G_' namespace. If you are careful to -# avoid using those namespaces casually in your sourcing script, things -# should continue to work as you expect. And, of course, you can freely -# overwrite any of the functions or variables defined here before -# calling anything to customize them. - -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -# Allow overriding, eg assuming that you follow the convention of -# putting '$debug_cmd' at the start of all your functions, you can get -# bash to show function call trace with: -# -# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name -debug_cmd=${debug_cmd-":"} -exit_cmd=: - -# By convention, finish your script with: -# -# exit $exit_status -# -# so that you can set exit_status to non-zero if you want to indicate -# something went wrong during execution without actually bailing out at -# the point of failure. -exit_status=$EXIT_SUCCESS - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath=$0 - -# The name of this program. -progname=`$ECHO "$progpath" |$SED "$sed_basename"` - -# Make sure we have an absolute progpath for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` - progdir=`cd "$progdir" && pwd` - progpath=$progdir/$progname - ;; - *) - _G_IFS=$IFS - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS=$_G_IFS - test -x "$progdir/$progname" && break - done - IFS=$_G_IFS - test -n "$progdir" || progdir=`pwd` - progpath=$progdir/$progname - ;; -esac - - -## ----------------- ## -## Standard options. ## -## ----------------- ## - -# The following options affect the operation of the functions defined -# below, and should be set appropriately depending on run-time para- -# meters passed on the command line. - -opt_dry_run=false -opt_quiet=false -opt_verbose=false - -# Categories 'all' and 'none' are always available. Append any others -# you will pass as the first argument to func_warning from your own -# code. -warning_categories= - -# By default, display warnings according to 'opt_warning_types'. Set -# 'warning_func' to ':' to elide all warnings, or func_fatal_error to -# treat the next displayed warning as a fatal error. -warning_func=func_warn_and_continue - -# Set to 'all' to display all warnings, 'none' to suppress all -# warnings, or a space delimited list of some subset of -# 'warning_categories' to display only the listed warnings. -opt_warning_types=all - - -## -------------------- ## -## Resource management. ## -## -------------------- ## - -# This section contains definitions for functions that each ensure a -# particular resource (a file, or a non-empty configuration variable for -# example) is available, and if appropriate to extract default values -# from pertinent package files. Call them using their associated -# 'require_*' variable to ensure that they are executed, at most, once. -# -# It's entirely deliberate that calling these functions can set -# variables that don't obey the namespace limitations obeyed by the rest -# of this file, in order that that they be as useful as possible to -# callers. - - -# require_term_colors -# ------------------- -# Allow display of bold text on terminals that support it. -require_term_colors=func_require_term_colors -func_require_term_colors () -{ - $debug_cmd - - test -t 1 && { - # COLORTERM and USE_ANSI_COLORS environment variables take - # precedence, because most terminfo databases neglect to describe - # whether color sequences are supported. - test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} - - if test 1 = "$USE_ANSI_COLORS"; then - # Standard ANSI escape sequences - tc_reset='' - tc_bold=''; tc_standout='' - tc_red=''; tc_green='' - tc_blue=''; tc_cyan='' - else - # Otherwise trust the terminfo database after all. - test -n "`tput sgr0 2>/dev/null`" && { - tc_reset=`tput sgr0` - test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` - tc_standout=$tc_bold - test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` - test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` - test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` - test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` - test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` - } - fi - } - - require_term_colors=: -} - - -## ----------------- ## -## Function library. ## -## ----------------- ## - -# This section contains a variety of useful functions to call in your -# scripts. Take note of the portable wrappers for features provided by -# some modern shells, which will fall back to slower equivalents on -# less featureful shells. - - -# func_append VAR VALUE -# --------------------- -# Append VALUE onto the existing contents of VAR. - - # We should try to minimise forks, especially on Windows where they are - # unreasonably slow, so skip the feature probes when bash or zsh are - # being used: - if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then - : ${_G_HAVE_ARITH_OP="yes"} - : ${_G_HAVE_XSI_OPS="yes"} - # The += operator was introduced in bash 3.1 - case $BASH_VERSION in - [12].* | 3.0 | 3.0*) ;; - *) - : ${_G_HAVE_PLUSEQ_OP="yes"} - ;; - esac - fi - - # _G_HAVE_PLUSEQ_OP - # Can be empty, in which case the shell is probed, "yes" if += is - # useable or anything else if it does not work. - test -z "$_G_HAVE_PLUSEQ_OP" \ - && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ - && _G_HAVE_PLUSEQ_OP=yes - -if test yes = "$_G_HAVE_PLUSEQ_OP" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_append () - { - $debug_cmd - - eval "$1+=\$2" - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_append () - { - $debug_cmd - - eval "$1=\$$1\$2" - } -fi - - -# func_append_quoted VAR VALUE -# ---------------------------- -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -if test yes = "$_G_HAVE_PLUSEQ_OP"; then - eval 'func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1+=\\ \$func_quote_for_eval_result" - }' -else - func_append_quoted () - { - $debug_cmd - - func_quote_for_eval "$2" - eval "$1=\$$1\\ \$func_quote_for_eval_result" - } -fi - - -# func_append_uniq VAR VALUE -# -------------------------- -# Append unique VALUE onto the existing contents of VAR, assuming -# entries are delimited by the first character of VALUE. For example: -# -# func_append_uniq options " --another-option option-argument" -# -# will only append to $options if " --another-option option-argument " -# is not already present somewhere in $options already (note spaces at -# each end implied by leading space in second argument). -func_append_uniq () -{ - $debug_cmd - - eval _G_current_value='`$ECHO $'$1'`' - _G_delim=`expr "$2" : '\(.\)'` - - case $_G_delim$_G_current_value$_G_delim in - *"$2$_G_delim"*) ;; - *) func_append "$@" ;; - esac -} - - -# func_arith TERM... -# ------------------ -# Set func_arith_result to the result of evaluating TERMs. - test -z "$_G_HAVE_ARITH_OP" \ - && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ - && _G_HAVE_ARITH_OP=yes - -if test yes = "$_G_HAVE_ARITH_OP"; then - eval 'func_arith () - { - $debug_cmd - - func_arith_result=$(( $* )) - }' -else - func_arith () - { - $debug_cmd - - func_arith_result=`expr "$@"` - } -fi - - -# func_basename FILE -# ------------------ -# Set func_basename_result to FILE with everything up to and including -# the last / stripped. -if test yes = "$_G_HAVE_XSI_OPS"; then - # If this shell supports suffix pattern removal, then use it to avoid - # forking. Hide the definitions single quotes in case the shell chokes - # on unsupported syntax... - _b='func_basename_result=${1##*/}' - _d='case $1 in - */*) func_dirname_result=${1%/*}$2 ;; - * ) func_dirname_result=$3 ;; - esac' - -else - # ...otherwise fall back to using sed. - _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' - _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` - if test "X$func_dirname_result" = "X$1"; then - func_dirname_result=$3 - else - func_append func_dirname_result "$2" - fi' -fi - -eval 'func_basename () -{ - $debug_cmd - - '"$_b"' -}' - - -# func_dirname FILE APPEND NONDIR_REPLACEMENT -# ------------------------------------------- -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -eval 'func_dirname () -{ - $debug_cmd - - '"$_d"' -}' - - -# func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT -# -------------------------------------------------------- -# Perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# For efficiency, we do not delegate to the functions above but instead -# duplicate the functionality here. -eval 'func_dirname_and_basename () -{ - $debug_cmd - - '"$_b"' - '"$_d"' -}' - - -# func_echo ARG... -# ---------------- -# Echo program name prefixed message. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_echo_all ARG... -# -------------------- -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - - -# func_echo_infix_1 INFIX ARG... -# ------------------------------ -# Echo program name, followed by INFIX on the first line, with any -# additional lines not showing INFIX. -func_echo_infix_1 () -{ - $debug_cmd - - $require_term_colors - - _G_infix=$1; shift - _G_indent=$_G_infix - _G_prefix="$progname: $_G_infix: " - _G_message=$* - - # Strip color escape sequences before counting printable length - for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" - do - test -n "$_G_tc" && { - _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` - _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` - } - done - _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes - - func_echo_infix_1_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_infix_1_IFS - $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 - _G_prefix=$_G_indent - done - IFS=$func_echo_infix_1_IFS -} - - -# func_error ARG... -# ----------------- -# Echo program name prefixed message to standard error. -func_error () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 -} - - -# func_fatal_error ARG... -# ----------------------- -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - $debug_cmd - - func_error "$*" - exit $EXIT_FAILURE -} - - -# func_grep EXPRESSION FILENAME -# ----------------------------- -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $debug_cmd - - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_len STRING -# --------------- -# Set func_len_result to the length of STRING. STRING may not -# start with a hyphen. - test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_len () - { - $debug_cmd - - func_len_result=${#1} - }' -else - func_len () - { - $debug_cmd - - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` - } -fi - - -# func_mkdir_p DIRECTORY-PATH -# --------------------------- -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - $debug_cmd - - _G_directory_path=$1 - _G_dir_list= - - if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then - - # Protect directory names starting with '-' - case $_G_directory_path in - -*) _G_directory_path=./$_G_directory_path ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$_G_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - _G_dir_list=$_G_directory_path:$_G_dir_list - - # If the last portion added has no slash in it, the list is done - case $_G_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` - done - _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` - - func_mkdir_p_IFS=$IFS; IFS=: - for _G_dir in $_G_dir_list; do - IFS=$func_mkdir_p_IFS - # mkdir can fail with a 'File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$_G_dir" 2>/dev/null || : - done - IFS=$func_mkdir_p_IFS - - # Bail out if we (or some other process) failed to create a directory. - test -d "$_G_directory_path" || \ - func_fatal_error "Failed to create '$1'" - fi -} - - -# func_mktempdir [BASENAME] -# ------------------------- -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, BASENAME is the basename for that directory. -func_mktempdir () -{ - $debug_cmd - - _G_template=${TMPDIR-/tmp}/${1-$progname} - - if test : = "$opt_dry_run"; then - # Return a directory name, but don't create it in dry-run mode - _G_tmpdir=$_G_template-$$ - else - - # If mktemp works, use that first and foremost - _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` - - if test ! -d "$_G_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - _G_tmpdir=$_G_template-${RANDOM-0}$$ - - func_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$_G_tmpdir" - umask $func_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$_G_tmpdir" || \ - func_fatal_error "cannot create temporary directory '$_G_tmpdir'" - fi - - $ECHO "$_G_tmpdir" -} - - -# func_normal_abspath PATH -# ------------------------ -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -func_normal_abspath () -{ - $debug_cmd - - # These SED scripts presuppose an absolute path with a trailing slash. - _G_pathcar='s|^/\([^/]*\).*$|\1|' - _G_pathcdr='s|^/[^/]*||' - _G_removedotparts=':dotsl - s|/\./|/|g - t dotsl - s|/\.$|/|' - _G_collapseslashes='s|/\{1,\}|/|g' - _G_finalslash='s|/*$|/|' - - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` - while :; do - # Processed it all yet? - if test / = "$func_normal_abspath_tpath"; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result"; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$_G_pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - - -# func_notquiet ARG... -# -------------------- -# Echo program name prefixed message only when not in quiet mode. -func_notquiet () -{ - $debug_cmd - - $opt_quiet || func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - - -# func_relative_path SRCDIR DSTDIR -# -------------------------------- -# Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. -func_relative_path () -{ - $debug_cmd - - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=$func_dirname_result - if test -z "$func_relative_path_tlibdir"; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test -n "$func_stripname_result"; then - func_append func_relative_path_result "/$func_stripname_result" - fi - - # Normalisation. If bindir is libdir, return '.' else relative path. - if test -n "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - fi - - test -n "$func_relative_path_result" || func_relative_path_result=. - - : -} - - -# func_quote_for_eval ARG... -# -------------------------- -# Aesthetically quote ARGs to be evaled later. -# This function returns two values: -# i) func_quote_for_eval_result -# double-quoted, suitable for a subsequent eval -# ii) func_quote_for_eval_unquoted_result -# has all characters that are still active within double -# quotes backslashified. -func_quote_for_eval () -{ - $debug_cmd - - func_quote_for_eval_unquoted_result= - func_quote_for_eval_result= - while test 0 -lt $#; do - case $1 in - *[\\\`\"\$]*) - _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; - *) - _G_unquoted_arg=$1 ;; - esac - if test -n "$func_quote_for_eval_unquoted_result"; then - func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" - else - func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" - fi - - case $_G_unquoted_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and variable expansion - # for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_quoted_arg=\"$_G_unquoted_arg\" - ;; - *) - _G_quoted_arg=$_G_unquoted_arg - ;; - esac - - if test -n "$func_quote_for_eval_result"; then - func_append func_quote_for_eval_result " $_G_quoted_arg" - else - func_append func_quote_for_eval_result "$_G_quoted_arg" - fi - shift - done -} - - -# func_quote_for_expand ARG -# ------------------------- -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - $debug_cmd - - case $1 in - *[\\\`\"]*) - _G_arg=`$ECHO "$1" | $SED \ - -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; - *) - _G_arg=$1 ;; - esac - - case $_G_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - _G_arg=\"$_G_arg\" - ;; - esac - - func_quote_for_expand_result=$_G_arg -} - - -# func_stripname PREFIX SUFFIX NAME -# --------------------------------- -# strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_stripname () - { - $debug_cmd - - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary variable first. - func_stripname_result=$3 - func_stripname_result=${func_stripname_result#"$1"} - func_stripname_result=${func_stripname_result%"$2"} - }' -else - func_stripname () - { - $debug_cmd - - case $2 in - .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; - *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; - esac - } -fi - - -# func_show_eval CMD [FAIL_EXP] -# ----------------------------- -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - func_quote_for_expand "$_G_cmd" - eval "func_notquiet $func_quote_for_expand_result" - - $opt_dry_run || { - eval "$_G_cmd" - _G_status=$? - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_show_eval_locale CMD [FAIL_EXP] -# ------------------------------------ -# Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - $debug_cmd - - _G_cmd=$1 - _G_fail_exp=${2-':'} - - $opt_quiet || { - func_quote_for_expand "$_G_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - $opt_dry_run || { - eval "$_G_user_locale - $_G_cmd" - _G_status=$? - eval "$_G_safe_locale" - if test 0 -ne "$_G_status"; then - eval "(exit $_G_status); $_G_fail_exp" - fi - } -} - - -# func_tr_sh -# ---------- -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - $debug_cmd - - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_verbose ARG... -# ------------------- -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $debug_cmd - - $opt_verbose && func_echo "$*" - - : -} - - -# func_warn_and_continue ARG... -# ----------------------------- -# Echo program name prefixed warning message to standard error. -func_warn_and_continue () -{ - $debug_cmd - - $require_term_colors - - func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 -} - - -# func_warning CATEGORY ARG... -# ---------------------------- -# Echo program name prefixed warning message to standard error. Warning -# messages can be filtered according to CATEGORY, where this function -# elides messages where CATEGORY is not listed in the global variable -# 'opt_warning_types'. -func_warning () -{ - $debug_cmd - - # CATEGORY must be in the warning_categories list! - case " $warning_categories " in - *" $1 "*) ;; - *) func_internal_error "invalid warning category '$1'" ;; - esac - - _G_category=$1 - shift - - case " $opt_warning_types " in - *" $_G_category "*) $warning_func ${1+"$@"} ;; - esac -} - - -# func_sort_ver VER1 VER2 -# ----------------------- -# 'sort -V' is not generally available. -# Note this deviates from the version comparison in automake -# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a -# but this should suffice as we won't be specifying old -# version formats or redundant trailing .0 in bootstrap.conf. -# If we did want full compatibility then we should probably -# use m4_version_compare from autoconf. -func_sort_ver () -{ - $debug_cmd - - printf '%s\n%s\n' "$1" "$2" \ - | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n -} - -# func_lt_ver PREV CURR -# --------------------- -# Return true if PREV and CURR are in the correct order according to -# func_sort_ver, otherwise false. Use it like this: -# -# func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." -func_lt_ver () -{ - $debug_cmd - - test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: -#! /bin/sh - -# Set a version string for this script. -scriptversion=2014-01-07.03; # UTC - -# A portable, pluggable option parser for Bourne shell. -# Written by Gary V. Vaughan, 2010 - -# Copyright (C) 2010-2015 Free Software Foundation, Inc. -# This is free software; see the source for copying conditions. There is NO -# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# Please report bugs or propose patches to gary@gnu.org. - - -## ------ ## -## Usage. ## -## ------ ## - -# This file is a library for parsing options in your shell scripts along -# with assorted other useful supporting features that you can make use -# of too. -# -# For the simplest scripts you might need only: -# -# #!/bin/sh -# . relative/path/to/funclib.sh -# . relative/path/to/options-parser -# scriptversion=1.0 -# func_options ${1+"$@"} -# eval set dummy "$func_options_result"; shift -# ...rest of your script... -# -# In order for the '--version' option to work, you will need to have a -# suitably formatted comment like the one at the top of this file -# starting with '# Written by ' and ending with '# warranty; '. -# -# For '-h' and '--help' to work, you will also need a one line -# description of your script's purpose in a comment directly above the -# '# Written by ' line, like the one at the top of this file. -# -# The default options also support '--debug', which will turn on shell -# execution tracing (see the comment above debug_cmd below for another -# use), and '--verbose' and the func_verbose function to allow your script -# to display verbose messages only when your user has specified -# '--verbose'. -# -# After sourcing this file, you can plug processing for additional -# options by amending the variables from the 'Configuration' section -# below, and following the instructions in the 'Option parsing' -# section further down. - -## -------------- ## -## Configuration. ## -## -------------- ## - -# You should override these variables in your script after sourcing this -# file so that they reflect the customisations you have added to the -# option parser. - -# The usage line for option parsing errors and the start of '-h' and -# '--help' output messages. You can embed shell variables for delayed -# expansion at the time the message is displayed, but you will need to -# quote other shell meta-characters carefully to prevent them being -# expanded when the contents are evaled. -usage='$progpath [OPTION]...' - -# Short help message in response to '-h' and '--help'. Add to this or -# override it after sourcing this library to reflect the full set of -# options your script accepts. -usage_message="\ - --debug enable verbose shell tracing - -W, --warnings=CATEGORY - report the warnings falling in CATEGORY [all] - -v, --verbose verbosely report processing - --version print version information and exit - -h, --help print short or long help message and exit -" - -# Additional text appended to 'usage_message' in response to '--help'. -long_help_message=" -Warning categories include: - 'all' show all warnings - 'none' turn off all the warnings - 'error' warnings are treated as fatal errors" - -# Help message printed before fatal option parsing errors. -fatal_help="Try '\$progname --help' for more information." - - - -## ------------------------- ## -## Hook function management. ## -## ------------------------- ## - -# This section contains functions for adding, removing, and running hooks -# to the main code. A hook is just a named list of of function, that can -# be run in order later on. - -# func_hookable FUNC_NAME -# ----------------------- -# Declare that FUNC_NAME will run hooks added with -# 'func_add_hook FUNC_NAME ...'. -func_hookable () -{ - $debug_cmd - - func_append hookable_fns " $1" -} - - -# func_add_hook FUNC_NAME HOOK_FUNC -# --------------------------------- -# Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must -# first have been declared "hookable" by a call to 'func_hookable'. -func_add_hook () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not accept hook functions." ;; - esac - - eval func_append ${1}_hooks '" $2"' -} - - -# func_remove_hook FUNC_NAME HOOK_FUNC -# ------------------------------------ -# Remove HOOK_FUNC from the list of functions called by FUNC_NAME. -func_remove_hook () -{ - $debug_cmd - - eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' -} - - -# func_run_hooks FUNC_NAME [ARG]... -# --------------------------------- -# Run all hook functions registered to FUNC_NAME. -# It is assumed that the list of hook functions contains nothing more -# than a whitespace-delimited list of legal shell function names, and -# no effort is wasted trying to catch shell meta-characters or preserve -# whitespace. -func_run_hooks () -{ - $debug_cmd - - case " $hookable_fns " in - *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; - esac - - eval _G_hook_fns=\$$1_hooks; shift - - for _G_hook in $_G_hook_fns; do - eval $_G_hook '"$@"' - - # store returned options list back into positional - # parameters for next 'cmd' execution. - eval _G_hook_result=\$${_G_hook}_result - eval set dummy "$_G_hook_result"; shift - done - - func_quote_for_eval ${1+"$@"} - func_run_hooks_result=$func_quote_for_eval_result -} - - - -## --------------- ## -## Option parsing. ## -## --------------- ## - -# In order to add your own option parsing hooks, you must accept the -# full positional parameter list in your hook function, remove any -# options that you action, and then pass back the remaining unprocessed -# options in '_result', escaped suitably for -# 'eval'. Like this: -# -# my_options_prep () -# { -# $debug_cmd -# -# # Extend the existing usage message. -# usage_message=$usage_message' -# -s, --silent don'\''t print informational messages -# ' -# -# func_quote_for_eval ${1+"$@"} -# my_options_prep_result=$func_quote_for_eval_result -# } -# func_add_hook func_options_prep my_options_prep -# -# -# my_silent_option () -# { -# $debug_cmd -# -# # Note that for efficiency, we parse as many options as we can -# # recognise in a loop before passing the remainder back to the -# # caller on the first unrecognised argument we encounter. -# while test $# -gt 0; do -# opt=$1; shift -# case $opt in -# --silent|-s) opt_silent=: ;; -# # Separate non-argument short options: -# -s*) func_split_short_opt "$_G_opt" -# set dummy "$func_split_short_opt_name" \ -# "-$func_split_short_opt_arg" ${1+"$@"} -# shift -# ;; -# *) set dummy "$_G_opt" "$*"; shift; break ;; -# esac -# done -# -# func_quote_for_eval ${1+"$@"} -# my_silent_option_result=$func_quote_for_eval_result -# } -# func_add_hook func_parse_options my_silent_option -# -# -# my_option_validation () -# { -# $debug_cmd -# -# $opt_silent && $opt_verbose && func_fatal_help "\ -# '--silent' and '--verbose' options are mutually exclusive." -# -# func_quote_for_eval ${1+"$@"} -# my_option_validation_result=$func_quote_for_eval_result -# } -# func_add_hook func_validate_options my_option_validation -# -# You'll alse need to manually amend $usage_message to reflect the extra -# options you parse. It's preferable to append if you can, so that -# multiple option parsing hooks can be added safely. - - -# func_options [ARG]... -# --------------------- -# All the functions called inside func_options are hookable. See the -# individual implementations for details. -func_hookable func_options -func_options () -{ - $debug_cmd - - func_options_prep ${1+"$@"} - eval func_parse_options \ - ${func_options_prep_result+"$func_options_prep_result"} - eval func_validate_options \ - ${func_parse_options_result+"$func_parse_options_result"} - - eval func_run_hooks func_options \ - ${func_validate_options_result+"$func_validate_options_result"} - - # save modified positional parameters for caller - func_options_result=$func_run_hooks_result -} - - -# func_options_prep [ARG]... -# -------------------------- -# All initialisations required before starting the option parse loop. -# Note that when calling hook functions, we pass through the list of -# positional parameters. If a hook function modifies that list, and -# needs to propogate that back to rest of this script, then the complete -# modified list must be put in 'func_run_hooks_result' before -# returning. -func_hookable func_options_prep -func_options_prep () -{ - $debug_cmd - - # Option defaults: - opt_verbose=false - opt_warning_types= - - func_run_hooks func_options_prep ${1+"$@"} - - # save modified positional parameters for caller - func_options_prep_result=$func_run_hooks_result -} - - -# func_parse_options [ARG]... -# --------------------------- -# The main option parsing loop. -func_hookable func_parse_options -func_parse_options () -{ - $debug_cmd - - func_parse_options_result= - - # this just eases exit handling - while test $# -gt 0; do - # Defer to hook functions for initial option parsing, so they - # get priority in the event of reusing an option name. - func_run_hooks func_parse_options ${1+"$@"} - - # Adjust func_parse_options positional parameters to match - eval set dummy "$func_run_hooks_result"; shift - - # Break out of the loop if we already parsed every option. - test $# -gt 0 || break - - _G_opt=$1 - shift - case $_G_opt in - --debug|-x) debug_cmd='set -x' - func_echo "enabling shell trace mode" - $debug_cmd - ;; - - --no-warnings|--no-warning|--no-warn) - set dummy --warnings none ${1+"$@"} - shift - ;; - - --warnings|--warning|-W) - test $# = 0 && func_missing_arg $_G_opt && break - case " $warning_categories $1" in - *" $1 "*) - # trailing space prevents matching last $1 above - func_append_uniq opt_warning_types " $1" - ;; - *all) - opt_warning_types=$warning_categories - ;; - *none) - opt_warning_types=none - warning_func=: - ;; - *error) - opt_warning_types=$warning_categories - warning_func=func_fatal_error - ;; - *) - func_fatal_error \ - "unsupported warning category: '$1'" - ;; - esac - shift - ;; - - --verbose|-v) opt_verbose=: ;; - --version) func_version ;; - -\?|-h) func_usage ;; - --help) func_help ;; - - # Separate optargs to long options (plugins may need this): - --*=*) func_split_equals "$_G_opt" - set dummy "$func_split_equals_lhs" \ - "$func_split_equals_rhs" ${1+"$@"} - shift - ;; - - # Separate optargs to short options: - -W*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-v*|-x*) - func_split_short_opt "$_G_opt" - set dummy "$func_split_short_opt_name" \ - "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; - esac - done - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - func_parse_options_result=$func_quote_for_eval_result -} - - -# func_validate_options [ARG]... -# ------------------------------ -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -func_hookable func_validate_options -func_validate_options () -{ - $debug_cmd - - # Display all warnings if -W was not given. - test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" - - func_run_hooks func_validate_options ${1+"$@"} - - # Bail if the options were screwed! - $exit_cmd $EXIT_FAILURE - - # save modified positional parameters for caller - func_validate_options_result=$func_run_hooks_result -} - - - -## ----------------- ## -## Helper functions. ## -## ----------------- ## - -# This section contains the helper functions used by the rest of the -# hookable option parser framework in ascii-betical order. - - -# func_fatal_help ARG... -# ---------------------- -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - eval \$ECHO \""$fatal_help"\" - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - - -# func_help -# --------- -# Echo long help message to standard output and exit. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message" - exit 0 -} - - -# func_missing_arg ARGNAME -# ------------------------ -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $debug_cmd - - func_error "Missing argument for '$1'." - exit_cmd=exit -} - - -# func_split_equals STRING -# ------------------------ -# Set func_split_equals_lhs and func_split_equals_rhs shell variables after -# splitting STRING at the '=' sign. -test -z "$_G_HAVE_XSI_OPS" \ - && (eval 'x=a/b/c; - test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ - && _G_HAVE_XSI_OPS=yes - -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=${1%%=*} - func_split_equals_rhs=${1#*=} - test "x$func_split_equals_lhs" = "x$1" \ - && func_split_equals_rhs= - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_equals () - { - $debug_cmd - - func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` - func_split_equals_rhs= - test "x$func_split_equals_lhs" = "x$1" \ - || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` - } -fi #func_split_equals - - -# func_split_short_opt SHORTOPT -# ----------------------------- -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -if test yes = "$_G_HAVE_XSI_OPS" -then - # This is an XSI compatible shell, allowing a faster implementation... - eval 'func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"} - }' -else - # ...otherwise fall back to using expr, which is often a shell builtin. - func_split_short_opt () - { - $debug_cmd - - func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` - func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` - } -fi #func_split_short_opt - - -# func_usage -# ---------- -# Echo short help message to standard output and exit. -func_usage () -{ - $debug_cmd - - func_usage_message - $ECHO "Run '$progname --help |${PAGER-more}' for full usage" - exit 0 -} - - -# func_usage_message -# ------------------ -# Echo short help message to standard output. -func_usage_message () -{ - $debug_cmd - - eval \$ECHO \""Usage: $usage"\" - echo - $SED -n 's|^# || - /^Written by/{ - x;p;x - } - h - /^Written by/q' < "$progpath" - echo - eval \$ECHO \""$usage_message"\" -} - - -# func_version -# ------------ -# Echo version message to standard output and exit. -func_version () -{ - $debug_cmd - - printf '%s\n' "$progname $scriptversion" - $SED -n ' - /(C)/!b go - :more - /\./!{ - N - s|\n# | | - b more - } - :go - /^# Written by /,/# warranty; / { - s|^# || - s|^# *$|| - s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| - p - } - /^# Written by / { - s|^# || - p - } - /^warranty; /q' < "$progpath" - - exit $? -} - - -# Local variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" -# time-stamp-time-zone: "UTC" -# End: - -# Set a version string. -scriptversion='(GNU libtool) 2.4.6' - - -# func_echo ARG... -# ---------------- -# Libtool also displays the current mode in messages, so override -# funclib.sh func_echo with this custom definition. -func_echo () -{ - $debug_cmd - - _G_message=$* - - func_echo_IFS=$IFS - IFS=$nl - for _G_line in $_G_message; do - IFS=$func_echo_IFS - $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" - done - IFS=$func_echo_IFS -} - - -# func_warning ARG... -# ------------------- -# Libtool warnings are not categorized, so override funclib.sh -# func_warning with this simpler definition. -func_warning () -{ - $debug_cmd - - $warning_func ${1+"$@"} -} - - -## ---------------- ## -## Options parsing. ## -## ---------------- ## - -# Hook in the functions to make sure our own options are parsed during -# the option parsing loop. - -usage='$progpath [OPTION]... [MODE-ARG]...' - -# Short help message in response to '-h'. -usage_message="Options: - --config show all configuration variables - --debug enable verbose shell tracing - -n, --dry-run display commands without modifying any files - --features display basic configuration information and exit - --mode=MODE use operation mode MODE - --no-warnings equivalent to '-Wnone' - --preserve-dup-deps don't remove duplicate dependency libraries - --quiet, --silent don't print informational messages - --tag=TAG use configuration variables from tag TAG - -v, --verbose print more informational messages than default - --version print version information - -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] - -h, --help, --help-all print short, long, or detailed help message -" - -# Additional text appended to 'usage_message' in response to '--help'. -func_help () -{ - $debug_cmd - - func_usage_message - $ECHO "$long_help_message - -MODE must be one of the following: - - clean remove files from the build directory - compile compile a source file into a libtool object - execute automatically set library path, then run a program - finish complete the installation of libtool libraries - install install libraries or executables - link create a library or an executable - uninstall remove libraries from an installed directory - -MODE-ARGS vary depending on the MODE. When passed as first option, -'--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. -Try '$progname --help --mode=MODE' for a more detailed description of MODE. - -When reporting a bug, please describe a test case to reproduce it and -include the following information: - - host-triplet: $host - shell: $SHELL - compiler: $LTCC - compiler flags: $LTCFLAGS - linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-2 - automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` - autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` - -Report bugs to . -GNU libtool home page: . -General help using GNU software: ." - exit 0 -} - - -# func_lo2o OBJECT-NAME -# --------------------- -# Transform OBJECT-NAME from a '.lo' suffix to the platform specific -# object suffix. - -lo2o=s/\\.lo\$/.$objext/ -o2lo=s/\\.$objext\$/.lo/ - -if test yes = "$_G_HAVE_XSI_OPS"; then - eval 'func_lo2o () - { - case $1 in - *.lo) func_lo2o_result=${1%.lo}.$objext ;; - * ) func_lo2o_result=$1 ;; - esac - }' - - # func_xform LIBOBJ-OR-SOURCE - # --------------------------- - # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) - # suffix to a '.lo' libtool-object suffix. - eval 'func_xform () - { - func_xform_result=${1%.*}.lo - }' -else - # ...otherwise fall back to using sed. - func_lo2o () - { - func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` - } - - func_xform () - { - func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` - } -fi - - -# func_fatal_configuration ARG... -# ------------------------------- -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func__fatal_error ${1+"$@"} \ - "See the $PACKAGE documentation for more information." \ - "Fatal configuration error." -} - - -# func_config -# ----------- -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - - -# func_features -# ------------- -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test yes = "$build_libtool_libs"; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test yes = "$build_old_libs"; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - - -# func_enable_tag TAGNAME -# ----------------------- -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname=$1 - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf=/$re_begincf/,/$re_endcf/p - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - - -# func_check_version_match -# ------------------------ -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# libtool_options_prep [ARG]... -# ----------------------------- -# Preparation for options parsed by libtool. -libtool_options_prep () -{ - $debug_mode - - # Option defaults: - opt_config=false - opt_dlopen= - opt_dry_run=false - opt_help=false - opt_mode= - opt_preserve_dup_deps=false - opt_quiet=false - - nonopt= - preserve_args= - - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac - - # Pass back the list of options. - func_quote_for_eval ${1+"$@"} - libtool_options_prep_result=$func_quote_for_eval_result -} -func_add_hook func_options_prep libtool_options_prep - - -# libtool_parse_options [ARG]... -# --------------------------------- -# Provide handling for libtool specific options. -libtool_parse_options () -{ - $debug_cmd - - # Perform our own loop to consume as many options as possible in - # each iteration. - while test $# -gt 0; do - _G_opt=$1 - shift - case $_G_opt in - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - - --config) func_config ;; - - --dlopen|-dlopen) - opt_dlopen="${opt_dlopen+$opt_dlopen -}$1" - shift - ;; - - --preserve-dup-deps) - opt_preserve_dup_deps=: ;; - - --features) func_features ;; - - --finish) set dummy --mode finish ${1+"$@"}; shift ;; - - --help) opt_help=: ;; - - --help-all) opt_help=': help-all' ;; - - --mode) test $# = 0 && func_missing_arg $_G_opt && break - opt_mode=$1 - case $1 in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $_G_opt" - exit_cmd=exit - break - ;; - esac - shift - ;; - - --no-silent|--no-quiet) - opt_quiet=false - func_append preserve_args " $_G_opt" - ;; - - --no-warnings|--no-warning|--no-warn) - opt_warning=false - func_append preserve_args " $_G_opt" - ;; - - --no-verbose) - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --silent|--quiet) - opt_quiet=: - opt_verbose=false - func_append preserve_args " $_G_opt" - ;; - - --tag) test $# = 0 && func_missing_arg $_G_opt && break - opt_tag=$1 - func_append preserve_args " $_G_opt $1" - func_enable_tag "$1" - shift - ;; - - --verbose|-v) opt_quiet=false - opt_verbose=: - func_append preserve_args " $_G_opt" - ;; - - # An option not handled by this hook function: - *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; - esac - done - - - # save modified positional parameters for caller - func_quote_for_eval ${1+"$@"} - libtool_parse_options_result=$func_quote_for_eval_result -} -func_add_hook func_parse_options libtool_parse_options - - - -# libtool_validate_options [ARG]... -# --------------------------------- -# Perform any sanity checks on option settings and/or unconsumed -# arguments. -libtool_validate_options () -{ - # save first non-option argument - if test 0 -lt $#; then - nonopt=$1 - shift - fi - - # preserve --debug - test : = "$debug_cmd" || func_append preserve_args " --debug" - - case $host in - # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 - # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 - *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - test yes != "$build_libtool_libs" \ - && test yes != "$build_old_libs" \ - && func_fatal_configuration "not configured to build any kind of library" - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test execute != "$opt_mode"; then - func_error "unrecognized option '-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help=$help - help="Try '$progname --help --mode=$opt_mode' for more information." - } - - # Pass back the unparsed argument list - func_quote_for_eval ${1+"$@"} - libtool_validate_options_result=$func_quote_for_eval_result -} -func_add_hook func_validate_options libtool_validate_options - - -# Process options as early as possible so that --help and --version -# can return quickly. -func_options ${1+"$@"} -eval set dummy "$func_options_result"; shift - - - -## ----------- ## -## Main. ## -## ----------- ## - -magic='%%%MAGIC variable%%%' -magic_exe='%%%MAGIC EXE variable%%%' - -# Global variables. -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# func_generated_by_libtool -# True iff stdin has been generated by Libtool. This function is only -# a basic sanity check; it will hardly flush out determined imposters. -func_generated_by_libtool_p () -{ - $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool '.la' library or '.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if 'file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case $lalib_p_line in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test yes = "$lalib_p" -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - test -f "$1" && - $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $debug_cmd - - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# 'FILE.' does not work on cygwin managed mounts. -func_source () -{ - $debug_cmd - - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case $lt_sysroot:$1 in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result='='$func_stripname_result - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $debug_cmd - - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with '--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=$1 - if test yes = "$build_libtool_libs"; then - write_lobj=\'$2\' - else - write_lobj=none - fi - - if test yes = "$build_old_libs"; then - write_oldobj=\'$3\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $debug_cmd - - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result= - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result"; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $debug_cmd - - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $debug_cmd - - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $debug_cmd - - if test -z "$2" && test -n "$1"; then - func_error "Could not determine host file name corresponding to" - func_error " '$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result=$1 - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $debug_cmd - - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " '$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result=$3 - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $debug_cmd - - case $4 in - $1 ) func_to_host_path_result=$3$func_to_host_path_result - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via '$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $debug_cmd - - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $debug_cmd - - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result=$1 -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result=$func_convert_core_msys_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result=$func_convert_core_file_wine_to_w32_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_file_result=$1 - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result=$func_cygpath_result - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via '$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $debug_cmd - - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd=func_convert_path_$func_stripname_result - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $debug_cmd - - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result=$1 -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_msys_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result=$func_convert_core_path_wine_to_w32_result - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $debug_cmd - - func_to_host_path_result=$1 - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result=$func_cygpath_result - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_dll_def_p FILE -# True iff FILE is a Windows DLL '.def' file. -# Keep in sync with _LT_DLL_DEF_P in libtool.m4 -func_dll_def_p () -{ - $debug_cmd - - func_dll_def_p_tmp=`$SED -n \ - -e 's/^[ ]*//' \ - -e '/^\(;.*\)*$/d' \ - -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ - -e q \ - "$1"` - test DEF = "$func_dll_def_p_tmp" -} - - -# func_mode_compile arg... -func_mode_compile () -{ - $debug_cmd - - # Get the compilation command and the source file. - base_compile= - srcfile=$nonopt # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg=$arg - arg_mode=normal - ;; - - target ) - libobj=$arg - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify '-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs=$IFS; IFS=, - for arg in $args; do - IFS=$save_ifs - func_append_quoted lastarg "$arg" - done - IFS=$save_ifs - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg=$srcfile - srcfile=$arg - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with '-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj=$func_basename_result - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from '$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test yes = "$build_libtool_libs" \ - || func_fatal_configuration "cannot build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name '$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname=$func_basename_result - xdir=$func_dirname_result - lobj=$xdir$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test yes = "$build_old_libs"; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test no = "$compiler_c_o"; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext - lockfile=$output_obj.lock - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test yes = "$need_locks"; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test warn = "$need_locks"; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test yes = "$build_libtool_libs"; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test no != "$pic_mode"; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test yes = "$suppress_opt"; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test yes = "$build_old_libs"; then - if test yes != "$pic_mode"; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test yes = "$compiler_c_o"; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test warn = "$need_locks" && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support '-c' and '-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test no != "$need_locks"; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test compile = "$opt_mode" && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a '.o' file suitable for static linking - -static only build a '.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a 'standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix '.c' with the -library object suffix, '.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to '-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the '--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the 'install' or 'cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE use a list of object files found in FILE to specify objects - -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with '-') are ignored. - -Every other argument is treated as a filename. Files ending in '.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in '.la', then a libtool library is created, -only library objects ('.lo' files) may be specified, and '-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created -using 'ar' and 'ranlib', or on Windows using 'lib'. - -If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode '$opt_mode'" - ;; - esac - - echo - $ECHO "Try '$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test : = "$opt_help"; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | $SED -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - $SED '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $debug_cmd - - # The first argument is the command name. - cmd=$nonopt - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "'$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "'$file' was not linked with '-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir=$func_dirname_result - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir=$func_dirname_result - ;; - - *) - func_warning "'-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir=$absdir - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic=$magic - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file=$progdir/$program - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file=$progdir/$program - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if $opt_dry_run; then - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - else - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd=\$cmd$args - fi -} - -test execute = "$opt_mode" && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $debug_cmd - - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "'$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument '$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and '=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_quiet && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the '-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the '$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the '$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the '$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test finish = "$opt_mode" && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $debug_cmd - - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac - then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=false - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=: ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test X-m = "X$prev" && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the '$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=: - if $isdir; then - destdir=$dest - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir=$func_dirname_result - destname=$func_basename_result - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "'$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "'$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "'$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir=$func_dirname_result - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking '$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname=$1 - shift - - srcname=$realname - test -n "$relink_command" && srcname=${realname}T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme=$stripme - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme= - ;; - esac - ;; - os2*) - case $realname in - *_dll.a) - tstripme= - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try 'ln -sf' first, because the 'ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib=$destdir/$realname - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name=$func_basename_result - instname=$dir/${name}i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest=$destfile - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to '$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test yes = "$build_old_libs"; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile=$destdir/$destname - else - func_basename "$file" - destfile=$func_basename_result - destfile=$destdir/$destfile - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext= - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=.exe - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script '$wrapper'" - - finalize=: - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "'$lib' has not been installed in '$libdir'" - finalize=false - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test no = "$fast_install" && test -n "$relink_command"; then - $opt_dry_run || { - if $finalize; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file=$func_basename_result - outputname=$tmpdir/$file - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_quiet || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink '$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file=$outputname - else - func_warning "cannot relink '$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name=$func_basename_result - - # Set up the ranlib parameters. - oldlib=$destdir/$name - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run '$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test install = "$opt_mode" && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $debug_cmd - - my_outputname=$1 - my_originator=$2 - my_pic_p=${3-false} - my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms=${my_outputname}S.c - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist=$output_objdir/$my_outputname.nm - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE -/* DATA imports from DLLs on WIN32 can't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined __osf__ -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* External symbol declarations for the compiler. */\ -" - - if test yes = "$dlself"; then - func_verbose "generating symbol list for '$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from '$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols=$output_objdir/$outputname.exp - $opt_dry_run || { - $RM $export_symbols - eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from '$dlprefile'" - func_basename "$dlprefile" - name=$func_basename_result - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename= - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname"; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename=$func_basename_result - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename"; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - func_show_eval '$RM "${nlist}I"' - if test -n "$global_symbol_to_import"; then - eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[];\ -" - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ -static void lt_syminit(void) -{ - LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; - for (; symbol->name; ++symbol) - {" - $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" - echo >> "$output_objdir/$my_dlsyms" "\ - } -}" - fi - echo >> "$output_objdir/$my_dlsyms" "\ -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{ {\"$my_originator\", (void *) 0}," - - if test -s "$nlist"I; then - echo >> "$output_objdir/$my_dlsyms" "\ - {\"@INIT@\", (void *) <_syminit}," - fi - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - $my_pic_p && pic_flag_for_symtable=" $pic_flag" - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' - - # Transform the symbol file into the correct name. - symfileobj=$output_objdir/${my_outputname}S.$objext - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for '$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $debug_cmd - - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $debug_cmd - - win32_libid_type=unknown - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - case $nm_interface in - "MS dumpbin") - if func_cygming_ms_implib_p "$1" || - func_cygming_gnu_implib_p "$1" - then - win32_nmres=import - else - win32_nmres= - fi - ;; - *) - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s|.*|import| - p - q - } - }'` - ;; - esac - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $debug_cmd - - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $debug_cmd - - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive that possess that section. Heuristic: eliminate - # all those that have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $debug_cmd - - if func_cygming_gnu_implib_p "$1"; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1"; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result= - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $debug_cmd - - f_ex_an_ar_dir=$1; shift - f_ex_an_ar_oldlib=$1 - if test yes = "$lock_old_archive_extraction"; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test yes = "$lock_old_archive_extraction"; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $debug_cmd - - my_gentop=$1; shift - my_oldlibs=${1+"$@"} - my_oldobjs= - my_xlib= - my_xabs= - my_xdir= - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib=$func_basename_result - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir=$my_gentop/$my_xlib_u - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - func_basename "$darwin_archive" - darwin_base_archive=$func_basename_result - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches; do - func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" - $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" - cd "unfat-$$/$darwin_base_archive-$darwin_arch" - func_extract_an_archive "`pwd`" "$darwin_base_archive" - cd "$darwin_curdir" - $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result=$my_oldobjs -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory where it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac -fi -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ that is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options that match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test yes = "$fast_install"; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - \$ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) - -/* declarations of non-ANSI functions */ -#if defined __MINGW32__ -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined __CYGWIN__ -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined other_platform || defined ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined _MSC_VER -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -#elif defined __MINGW32__ -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined __CYGWIN__ -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined other platforms ... */ -#endif - -#if defined PATH_MAX -# define LT_PATHMAX PATH_MAX -#elif defined MAXPATHLEN -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ - defined __OS2__ -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free (stale); stale = 0; } \ -} while (0) - -#if defined LT_DEBUGWRAPPER -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - size_t tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined HAVE_DOS_BASED_FILE_SYSTEM - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined HAVE_DOS_BASED_FILE_SYSTEM - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = (size_t) (q - p); - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (STREQ (str, pat)) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - size_t len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - size_t orig_value_len = strlen (orig_value); - size_t add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - size_t len = strlen (new_value); - while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[--len] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $debug_cmd - - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_suncc_cstd_abi -# !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! -# Several compiler flags select an ABI that is incompatible with the -# Cstd library. Avoid specifying it if any are in CXXFLAGS. -func_suncc_cstd_abi () -{ - $debug_cmd - - case " $compile_command " in - *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) - suncc_use_cstd_abi=no - ;; - *) - suncc_use_cstd_abi=yes - ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $debug_cmd - - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # what system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll that has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - os2dllname= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=false - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module=$wl-single_module - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test yes != "$build_libtool_libs" \ - && func_fatal_configuration "cannot build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg=$1 - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir=$arg - prev= - continue - ;; - dlfiles|dlprefiles) - $preload || { - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=: - } - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test no = "$dlself"; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test dlprefiles = "$prev"; then - dlself=yes - elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test dlfiles = "$prev"; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols=$arg - test -f "$arg" \ - || func_fatal_error "symbol file '$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex=$arg - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir=$arg - prev= - continue - ;; - mllvm) - # Clang does not use LLVM to link, so we can simply discard any - # '-mllvm $arg' options when doing the link step. - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - if test none != "$pic_object"; then - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - fi - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file '$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - os2dllname) - os2dllname=$arg - prev= - continue - ;; - precious_regex) - precious_files_regex=$arg - prev= - continue - ;; - release) - release=-$arg - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test rpath = "$prev"; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds=$arg - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg=$arg - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "'-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test X-export-symbols = "X$arg"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between '-L' and '$1'" - else - func_fatal_error "need path for '-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of '$dir'" - dir=$absdir - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test X-lc = "X$arg" || test X-lm = "X$arg"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test X-lc = "X$arg" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc due to us having libc/libc_r. - test X-lc = "X$arg" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test X-lc = "X$arg" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test X-lc = "X$arg" && continue - ;; - esac - elif test X-lc_r = "X$arg"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -mllvm) - prev=mllvm - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module=$wl-multi_module - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "'-no-install' is ignored for $host" - func_warning "assuming '-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -os2dllname) - prev=os2dllname - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs=$IFS; IFS=, - for flag in $args; do - IFS=$save_ifs - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS=$save_ifs - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # -fstack-protector* stack protector flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - # -specs=* GCC specs files - # -stdlib=* select c++ std lib with clang - # -fsanitize=* Clang/GCC memory and address sanitizer - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ - -specs=*|-fsanitize=*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - -Z*) - if test os2 = "`expr $host : '.*\(os2\)'`"; then - # OS/2 uses -Zxxx to specify OS/2-specific options - compiler_flags="$compiler_flags $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case $arg in - -Zlinker | -Zstack) - prev=xcompiler - ;; - esac - continue - else - # Otherwise treat like 'Some other compiler flag' below - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - fi - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test none = "$pic_object" && - test none = "$non_pic_object"; then - func_fatal_error "cannot find name of object for '$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - test none = "$pic_object" || { - # Prepend the subdirectory the object is found in. - pic_object=$xdir$pic_object - - if test dlfiles = "$prev"; then - if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test dlprefiles = "$prev"; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg=$pic_object - } - - # Non-PIC object. - if test none != "$non_pic_object"; then - # Prepend the subdirectory the object is found in. - non_pic_object=$xdir$non_pic_object - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test none = "$pic_object"; then - arg=$non_pic_object - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object=$pic_object - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir=$func_dirname_result - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "'$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test dlfiles = "$prev"; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test dlprefiles = "$prev"; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg=$func_quote_for_eval_result - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the '$prevarg' option requires an argument" - - if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname=$func_basename_result - libobjs_save=$libobjs - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - # Definition is injected by LT_CONFIG during libtool generation. - func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" - - func_dirname "$output" "/" "" - output_objdir=$func_dirname_result$objdir - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test lib = "$linkmode"; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=false - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test lib,link = "$linkmode,$pass"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs=$tmp_deplibs - fi - - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass"; then - libs=$deplibs - deplibs= - fi - if test prog = "$linkmode"; then - case $pass in - dlopen) libs=$dlfiles ;; - dlpreopen) libs=$dlprefiles ;; - link) - libs="$deplibs %DEPLIBS%" - test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" - ;; - esac - fi - if test lib,dlpreopen = "$linkmode,$pass"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs=$dlprefiles - fi - if test dlopen = "$pass"; then - # Collect dlpreopened libraries - save_deplibs=$deplibs - deplibs= - fi - - for deplib in $libs; do - lib= - found=false - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test lib != "$linkmode" && test prog != "$linkmode"; then - func_warning "'-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test lib = "$linkmode"; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib=$searchdir/lib$name$search_ext - if test -f "$lib"; then - if test .la = "$search_ext"; then - found=: - else - found=false - fi - break 2 - fi - done - done - if $found; then - # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll=$l - done - if test "X$ll" = "X$old_library"; then # only static version available - found=false - func_dirname "$lib" "" "." - ladir=$func_dirname_result - lib=$ladir/$old_library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - else - # deplib doesn't seem to be a libtool library - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - ;; # -l - *.ltframework) - if test prog,link = "$linkmode,$pass"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test lib = "$linkmode"; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test conv = "$pass" && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - if test scan = "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "'-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test link = "$pass"; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=false - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=: - fi - ;; - pass_all) - valid_a_lib=: - ;; - esac - if $valid_a_lib; then - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - else - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - fi - ;; - esac - continue - ;; - prog) - if test link != "$pass"; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test conv = "$pass"; then - deplibs="$deplib $deplibs" - elif test prog = "$linkmode"; then - if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=: - continue - ;; - esac # case $deplib - - $found || test -f "$lib" \ - || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "'$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir=$func_dirname_result - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test lib,link = "$linkmode,$pass" || - test prog,scan = "$linkmode,$pass" || - { test prog != "$linkmode" && test lib != "$linkmode"; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test conv = "$pass"; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - elif test prog != "$linkmode" && test lib != "$linkmode"; then - func_fatal_error "'$lib' is not a convenience library" - fi - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test yes = "$prefer_static_libs" || - test built,no = "$prefer_static_libs,$installed"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib=$l - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for '$lib'" - fi - - # This library was specified with -dlopen. - if test dlopen = "$pass"; then - test -z "$libdir" \ - && func_fatal_error "cannot -dlopen a convenience library: '$lib'" - if test -z "$dlname" || - test yes != "$dlopen_support" || - test no = "$build_libtool_libs" - then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of '$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir=$ladir - fi - ;; - esac - func_basename "$lib" - laname=$func_basename_result - - # Find the relevant object directory and library name. - if test yes = "$installed"; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library '$lib' was moved." - dir=$ladir - absdir=$abs_ladir - libdir=$abs_ladir - else - dir=$lt_sysroot$libdir - absdir=$lt_sysroot$libdir - fi - test yes = "$hardcode_automatic" && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir=$ladir - absdir=$abs_ladir - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir=$ladir/$objdir - absdir=$abs_ladir/$objdir - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test dlpreopen = "$pass"; then - if test -z "$libdir" && test prog = "$linkmode"; then - func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" - fi - case $host in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test lib = "$linkmode"; then - deplibs="$dir/$old_library $deplibs" - elif test prog,link = "$linkmode,$pass"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test prog = "$linkmode" && test link != "$pass"; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=false - if test no != "$link_all_deplibs" || test -z "$library_names" || - test no = "$build_libtool_libs"; then - linkalldeplibs=: - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if $linkalldeplibs; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test prog,link = "$linkmode,$pass"; then - if test -n "$library_names" && - { { test no = "$prefer_static_libs" || - test built,yes = "$prefer_static_libs,$installed"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then - # Make sure the rpath contains only unique directories. - case $temp_rpath: in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if $alldeplibs && - { test pass_all = "$deplibs_check_method" || - { test yes = "$build_libtool_libs" && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test built = "$use_static_libs" && test yes = "$installed"; then - use_static_libs=no - fi - if test -n "$library_names" && - { test no = "$use_static_libs" || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc* | *os2*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test no = "$installed"; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule= - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule=$dlpremoduletest - break - fi - done - if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then - echo - if test prog = "$linkmode"; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test lib = "$linkmode" && - test yes = "$hardcode_into_libs"; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname=$1 - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname=$dlname - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc* | *os2*) - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - esac - eval soname=\"$soname_spec\" - else - soname=$realname - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot=$soname - func_basename "$soroot" - soname=$func_basename_result - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from '$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for '$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test prog = "$linkmode" || test relink != "$opt_mode"; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test no = "$hardcode_direct"; then - add=$dir/$linklib - case $host in - *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; - *-*-sysv4*uw2*) add_dir=-L$dir ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir=-L$dir ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we cannot - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library"; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add=$dir/$old_library - fi - elif test -n "$old_library"; then - add=$dir/$old_library - fi - fi - esac - elif test no = "$hardcode_minus_L"; then - case $host in - *-*-sunos*) add_shlibpath=$dir ;; - esac - add_dir=-L$dir - add=-l$name - elif test no = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - relink) - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$dir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$absdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - add_shlibpath=$dir - add=-l$name - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test yes != "$lib_linked"; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test prog = "$linkmode"; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test yes != "$hardcode_direct" && - test yes != "$hardcode_minus_L" && - test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test prog = "$linkmode" || test relink = "$opt_mode"; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test yes = "$hardcode_direct" && - test no = "$hardcode_direct_absolute"; then - add=$libdir/$linklib - elif test yes = "$hardcode_minus_L"; then - add_dir=-L$libdir - add=-l$name - elif test yes = "$hardcode_shlibpath_var"; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add=-l$name - elif test yes = "$hardcode_automatic"; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib"; then - add=$inst_prefix_dir$libdir/$linklib - else - add=$libdir/$linklib - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir=-L$libdir - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add=-l$name - fi - - if test prog = "$linkmode"; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test prog = "$linkmode"; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test unsupported != "$hardcode_direct"; then - test -n "$old_library" && linklib=$old_library - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test yes = "$build_libtool_libs"; then - # Not a shared library - if test pass_all != "$deplibs_check_method"; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system cannot link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test yes = "$module"; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test lib = "$linkmode"; then - if test -n "$dependency_libs" && - { test yes != "$hardcode_into_libs" || - test yes = "$build_old_libs" || - test yes = "$link_static"; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs=$temp_deplibs - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test no != "$link_all_deplibs"; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path=$deplib ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of '$dir'" - absdir=$dir - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names"; then - for tmp in $deplibrary_names; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl"; then - depdepl=$absdir/$objdir/$depdepl - darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" - func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" - path= - fi - fi - ;; - *) - path=-L$absdir/$objdir - ;; - esac - else - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "'$deplib' seems to be moved" - - path=-L$absdir - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test link = "$pass"; then - if test prog = "$linkmode"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs=$newdependency_libs - if test dlpreopen = "$pass"; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test dlopen != "$pass"; then - test conv = "$pass" || { - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - } - - if test prog,link = "$linkmode,$pass"; then - vars="compile_deplibs finalize_deplibs" - else - vars=deplibs - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - - # Add Sun CC postdeps if required: - test CXX = "$tagname" && { - case $host_os in - linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C++ 5.9 - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - - solaris*) - func_cc_basename "$CC" - case $func_cc_basename_result in - CC* | sunCC*) - func_suncc_cstd_abi - - if test no != "$suncc_use_cstd_abi"; then - func_append postdeps ' -library=Cstd -library=Crun' - fi - ;; - esac - ;; - esac - } - - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i= - ;; - esac - if test -n "$i"; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test prog = "$linkmode"; then - dlfiles=$newdlfiles - fi - if test prog = "$linkmode" || test lib = "$linkmode"; then - dlprefiles=$newdlprefiles - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "'-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "'-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs=$output - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form 'libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test no = "$module" \ - && func_fatal_help "libtool library '$output' must begin with 'lib'" - - if test no != "$need_lib_prefix"; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test pass_all != "$deplibs_check_method"; then - func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test no = "$dlself" \ - || func_warning "'-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test 1 -lt "$#" \ - && func_warning "ignoring multiple '-rpath's for a libtool library" - - install_libdir=$1 - - oldlibs= - if test -z "$rpath"; then - if test yes = "$build_libtool_libs"; then - # Building a libtool convenience library. - # Some compilers have problems with a '.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "'-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "'-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs=$IFS; IFS=: - set dummy $vinfo 0 0 0 - shift - IFS=$save_ifs - - test -n "$7" && \ - func_fatal_help "too many parameters to '-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major=$1 - number_minor=$2 - number_revision=$3 - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # that has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|freebsd-elf|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_revision - ;; - freebsd-aout|qnx|sunos) - current=$number_major - revision=$number_minor - age=0 - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age=$number_minor - revision=$number_minor - lt_irix_increment=no - ;; - *) - func_fatal_configuration "$modename: unknown library version type '$version_type'" - ;; - esac - ;; - no) - current=$1 - revision=$2 - age=$3 - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT '$current' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION '$revision' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE '$age' must be a nonnegative integer" - func_fatal_error "'$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE '$age' is greater than the current interface number '$current'" - func_fatal_error "'$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - # On Darwin other compilers - case $CC in - nagfor*) - verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" - ;; - *) - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - esac - ;; - - freebsd-aout) - major=.$current - versuffix=.$current.$revision - ;; - - freebsd-elf) - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - irix | nonstopux) - if test no = "$lt_irix_increment"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring=$verstring_prefix$major.$revision - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test 0 -ne "$loop"; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring_prefix$major.$iface:$verstring - done - - # Before this point, $major must not contain '.'. - major=.$major - versuffix=$major.$revision - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix=$major.$age.$revision - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=.$current.$age.$revision - verstring=$current.$age.$revision - - # Add in all the interfaces that we are compatible with. - loop=$age - while test 0 -ne "$loop"; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring=$verstring:$iface.0 - done - - # Make executables depend on our current version. - func_append verstring ":$current.0" - ;; - - qnx) - major=.$current - versuffix=.$current - ;; - - sco) - major=.$current - versuffix=.$current - ;; - - sunos) - major=.$current - versuffix=.$current.$revision - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 file systems. - func_arith $current - $age - major=$func_arith_result - versuffix=-$major - ;; - - *) - func_fatal_configuration "unknown library version type '$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring=0.0 - ;; - esac - if test no = "$need_version"; then - versuffix= - else - versuffix=.0.0 - fi - fi - - # Remove version info from name if versioning should be avoided - if test yes,no = "$avoid_version,$need_version"; then - major= - versuffix= - verstring= - fi - - # Check to see if the archive will have undefined symbols. - if test yes = "$allow_undefined"; then - if test unsupported = "$allow_undefined_flag"; then - if test yes = "$build_old_libs"; then - func_warning "undefined symbols not allowed in $host shared libraries; building static only" - build_libtool_libs=no - else - func_fatal_error "can't build $host shared library unless -no-undefined is specified" - fi - fi - else - # Don't allow undefined symbols. - allow_undefined_flag=$no_undefined_flag - fi - - fi - - func_generate_dlsyms "$libname" "$libname" : - func_append libobjs " $symfileobj" - test " " = "$libobjs" && libobjs= - - if test relink != "$opt_mode"; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) - if test -n "$precious_files_regex"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles=$dlfiles - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles=$dlprefiles - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test yes = "$build_libtool_libs"; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test yes = "$build_libtool_need_lc"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release= - versuffix= - major= - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib=$potent_lib - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | $SED 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; - *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib= - ;; - esac - fi - if test -n "$a_deplib"; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib=$potent_lib # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib= - break 2 - fi - done - done - fi - if test -n "$a_deplib"; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib"; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs= - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test yes = "$allow_libtool_libs_with_static_runtimes"; then - for i in $predeps $postdeps; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test none = "$deplibs_check_method"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test yes = "$droppeddeps"; then - if test yes = "$module"; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using 'nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** 'nm' from GNU binutils and a full rebuild may help." - fi - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test no = "$allow_undefined"; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test no = "$build_old_libs"; then - oldlibs=$output_objdir/$libname.$libext - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs=$new_libs - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test yes = "$build_libtool_libs"; then - # Remove $wl instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test yes = "$hardcode_into_libs"; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath=$finalize_rpath - test relink = "$opt_mode" || rpath=$compile_rpath$rpath - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath=$finalize_shlibpath - test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname=$1 - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname=$realname - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib=$output_objdir/$realname - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols=$output_objdir/$libname.uexp - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - func_dll_def_p "$export_symbols" || { - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols=$export_symbols - export_symbols= - always_export_symbols=yes - } - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs=$IFS; IFS='~' - for cmd1 in $cmds; do - IFS=$save_ifs - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test yes = "$try_normal_branch" \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=$output_objdir/$output_la.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS=$save_ifs - if test -n "$export_symbols_regex" && test : != "$skipped_export"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test : != "$skipped_export" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs=$tmp_deplibs - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test yes = "$compiler_needs_object" && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test : != "$skipped_export" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then - output=$output_objdir/$output_la.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then - output=$output_objdir/$output_la.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test yes = "$compiler_needs_object"; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-$k.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test -z "$objlist" || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test 1 -eq "$k"; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-$k.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-$k.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - ${skipped_export-false} && { - func_verbose "generating symbol list for '$libname.la'" - export_symbols=$output_objdir/$libname.exp - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - } - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs=$IFS; IFS='~' - for cmd in $concat_cmds; do - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - ${skipped_export-false} && { - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols=$export_symbols - test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for '$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands, which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - } - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test yes = "$module" && test -n "$module_cmds"; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs=$IFS; IFS='~' - for cmd in $cmds; do - IFS=$sp$nl - eval cmd=\"$cmd\" - IFS=$save_ifs - $opt_quiet || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS=$save_ifs - - # Restore the uninstalled library and exit - if test relink = "$opt_mode"; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test yes = "$module" || test yes = "$export_dynamic"; then - # On all known operating systems, these are identical. - dlname=$soname - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then - func_warning "'-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "'-l' and '-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "'-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "'-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "'-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object '$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj=$output - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # if reload_cmds runs $LD directly, get rid of -Wl from - # whole_archive_flag_spec and hope we can get by with turning comma - # into space. - case $reload_cmds in - *\$LD[\ \$]*) wl= ;; - esac - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags - else - gentop=$output_objdir/${obj}x - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test yes = "$build_libtool_libs" || libobjs=$non_pic_objects - - # Create the old-style object. - reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs - - output=$obj - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - test yes = "$build_libtool_libs" || { - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - } - - if test -n "$pic_flag" || test default != "$pic_mode"; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output=$libobj - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "'-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "'-release' is ignored for programs" - - $preload \ - && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ - && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test CXX = "$tagname"; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " $wl-bind_at_load" - func_append finalize_command " $wl-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs=$new_libs - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath=$rpath - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs=$libdir - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir=$hardcode_libdirs - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath=$rpath - - if test -n "$libobjs" && test yes = "$build_old_libs"; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" false - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=: - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=false - ;; - *cygwin* | *mingw* ) - test yes = "$build_libtool_libs" || wrappers_required=false - ;; - *) - if test no = "$need_relink" || test yes != "$build_libtool_libs"; then - wrappers_required=false - fi - ;; - esac - $wrappers_required || { - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command=$compile_command$compile_rpath - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.$objext"; then - func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' - fi - - exit $exit_status - } - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test yes = "$no_install"; then - # We don't need to create a wrapper script. - link_command=$compile_var$compile_command$compile_rpath - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - case $hardcode_action,$fast_install in - relink,*) - # Fast installation is not supported - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "'$output' will be relinked during installation" - ;; - *,yes) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - ;; - *,no) - link_command=$compile_var$compile_command$compile_rpath - relink_command=$finalize_var$finalize_command$finalize_rpath - ;; - *,needless) - link_command=$finalize_var$compile_command$finalize_rpath - relink_command= - ;; - esac - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource=$output_path/$objdir/lt-$output_name.c - cwrapper=$output_path/$output_name.exe - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host"; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - case $build_libtool_libs in - convenience) - oldobjs="$libobjs_save $symfileobj" - addlibs=$convenience - build_libtool_libs=no - ;; - module) - oldobjs=$libobjs_save - addlibs=$old_convenience - build_libtool_libs=no - ;; - *) - oldobjs="$old_deplibs $non_pic_objects" - $preload && test -f "$symfileobj" \ - && func_append oldobjs " $symfileobj" - addlibs=$old_convenience - ;; - esac - - if test -n "$addlibs"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop=$output_objdir/${outputname}x - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase=$func_basename_result - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj"; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test -z "$oldobjs"; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test yes = "$build_old_libs" && old_library=$libname.$libext - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test yes = "$hardcode_automatic"; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test yes = "$installed"; then - if test -z "$install_libdir"; then - break - fi - output=$output_objdir/${outputname}i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name=$func_basename_result - func_resolve_sysroot "$deplib" - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "'$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs=$newdependency_libs - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name=$func_basename_result - eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "'$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles=$newdlprefiles - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles=$newdlfiles - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles=$newdlprefiles - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test -n "$bindir"; then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result/$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that cannot go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test no,yes = "$installed,$need_relink"; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -if test link = "$opt_mode" || test relink = "$opt_mode"; then - func_mode_link ${1+"$@"} -fi - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $debug_cmd - - RM=$nonopt - files= - rmforce=false - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic=$magic - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=: ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir=$func_dirname_result - if test . = "$dir"; then - odir=$objdir - else - odir=$dir/$objdir - fi - func_basename "$file" - name=$func_basename_result - test uninstall = "$opt_mode" && odir=$dir - - # Remember odir for removal later, being careful to avoid duplicates - if test clean = "$opt_mode"; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif $rmforce; then - continue - fi - - rmfiles=$file - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case $opt_mode in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && test none != "$pic_object"; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && test none != "$non_pic_object"; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test clean = "$opt_mode"; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.$objext" - if test yes = "$fast_install" && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name"; then - func_append rmfiles " $odir/lt-$noexename.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the $objdir's in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then - func_mode_uninstall ${1+"$@"} -fi - -test -z "$opt_mode" && { - help=$generic_help - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode '$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# where we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: diff --git a/m4/missing b/m4/missing deleted file mode 100755 index f62bbae30..000000000 --- a/m4/missing +++ /dev/null @@ -1,215 +0,0 @@ -#! /bin/sh -# Common wrapper for a few potentially missing GNU programs. - -scriptversion=2013-10-28.13; # UTC - -# Copyright (C) 1996-2014 Free Software Foundation, Inc. -# Originally written by Fran,cois Pinard , 1996. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -if test $# -eq 0; then - echo 1>&2 "Try '$0 --help' for more information" - exit 1 -fi - -case $1 in - - --is-lightweight) - # Used by our autoconf macros to check whether the available missing - # script is modern enough. - exit 0 - ;; - - --run) - # Back-compat with the calling convention used by older automake. - shift - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due -to PROGRAM being missing or too old. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - -Supported PROGRAM values: - aclocal autoconf autoheader autom4te automake makeinfo - bison yacc flex lex help2man - -Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and -'g' are ignored when checking the name. - -Send bug reports to ." - exit $? - ;; - - -v|--v|--ve|--ver|--vers|--versi|--versio|--version) - echo "missing $scriptversion (GNU Automake)" - exit $? - ;; - - -*) - echo 1>&2 "$0: unknown '$1' option" - echo 1>&2 "Try '$0 --help' for more information" - exit 1 - ;; - -esac - -# Run the given program, remember its exit status. -"$@"; st=$? - -# If it succeeded, we are done. -test $st -eq 0 && exit 0 - -# Also exit now if we it failed (or wasn't found), and '--version' was -# passed; such an option is passed most likely to detect whether the -# program is present and works. -case $2 in --version|--help) exit $st;; esac - -# Exit code 63 means version mismatch. This often happens when the user -# tries to use an ancient version of a tool on a file that requires a -# minimum version. -if test $st -eq 63; then - msg="probably too old" -elif test $st -eq 127; then - # Program was missing. - msg="missing on your system" -else - # Program was found and executed, but failed. Give up. - exit $st -fi - -perl_URL=http://www.perl.org/ -flex_URL=http://flex.sourceforge.net/ -gnu_software_URL=http://www.gnu.org/software - -program_details () -{ - case $1 in - aclocal|automake) - echo "The '$1' program is part of the GNU Automake package:" - echo "<$gnu_software_URL/automake>" - echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/autoconf>" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - autoconf|autom4te|autoheader) - echo "The '$1' program is part of the GNU Autoconf package:" - echo "<$gnu_software_URL/autoconf/>" - echo "It also requires GNU m4 and Perl in order to run:" - echo "<$gnu_software_URL/m4/>" - echo "<$perl_URL>" - ;; - esac -} - -give_advice () -{ - # Normalize program name to check for. - normalized_program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - - printf '%s\n' "'$1' is $msg." - - configure_deps="'configure.ac' or m4 files included by 'configure.ac'" - case $normalized_program in - autoconf*) - echo "You should only need it if you modified 'configure.ac'," - echo "or m4 files included by it." - program_details 'autoconf' - ;; - autoheader*) - echo "You should only need it if you modified 'acconfig.h' or" - echo "$configure_deps." - program_details 'autoheader' - ;; - automake*) - echo "You should only need it if you modified 'Makefile.am' or" - echo "$configure_deps." - program_details 'automake' - ;; - aclocal*) - echo "You should only need it if you modified 'acinclude.m4' or" - echo "$configure_deps." - program_details 'aclocal' - ;; - autom4te*) - echo "You might have modified some maintainer files that require" - echo "the 'autom4te' program to be rebuilt." - program_details 'autom4te' - ;; - bison*|yacc*) - echo "You should only need it if you modified a '.y' file." - echo "You may want to install the GNU Bison package:" - echo "<$gnu_software_URL/bison/>" - ;; - lex*|flex*) - echo "You should only need it if you modified a '.l' file." - echo "You may want to install the Fast Lexical Analyzer package:" - echo "<$flex_URL>" - ;; - help2man*) - echo "You should only need it if you modified a dependency" \ - "of a man page." - echo "You may want to install the GNU Help2man package:" - echo "<$gnu_software_URL/help2man/>" - ;; - makeinfo*) - echo "You should only need it if you modified a '.texi' file, or" - echo "any other file indirectly affecting the aspect of the manual." - echo "You might want to install the Texinfo package:" - echo "<$gnu_software_URL/texinfo/>" - echo "The spurious makeinfo call might also be the consequence of" - echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" - echo "want to install GNU make:" - echo "<$gnu_software_URL/make/>" - ;; - *) - echo "You might have modified some files without having the proper" - echo "tools for further handling them. Check the 'README' file, it" - echo "often tells you about the needed prerequisites for installing" - echo "this package. You may also peek at any GNU archive site, in" - echo "case some other package contains this missing '$1' program." - ;; - esac -} - -give_advice "$1" | sed -e '1s/^/WARNING: /' \ - -e '2,$s/^/ /' >&2 - -# Propagate the correct exit status (expected to be 127 for a program -# not found, 63 for a program that failed due to version mismatch). -exit $st - -# Local variables: -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/m4/py-compile b/m4/py-compile deleted file mode 100755 index 9f8baf7ab..000000000 --- a/m4/py-compile +++ /dev/null @@ -1,170 +0,0 @@ -#!/bin/sh -# py-compile - Compile a Python program - -scriptversion=2018-03-07.03; # UTC - -# Copyright (C) 2000-2018 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to or send patches to -# . - -if [ -z "$PYTHON" ]; then - PYTHON=python -fi - -me=py-compile - -usage_error () -{ - echo "$me: $*" >&2 - echo "Try '$me --help' for more information." >&2 - exit 1 -} - -basedir= -destdir= -while test $# -ne 0; do - case "$1" in - --basedir) - if test $# -lt 2; then - usage_error "option '--basedir' requires an argument" - else - basedir=$2 - fi - shift - ;; - --destdir) - if test $# -lt 2; then - usage_error "option '--destdir' requires an argument" - else - destdir=$2 - fi - shift - ;; - -h|--help) - cat <<\EOF -Usage: py-compile [--help] [--version] [--basedir DIR] [--destdir DIR] FILES..." - -Byte compile some python scripts FILES. Use --destdir to specify any -leading directory path to the FILES that you don't want to include in the -byte compiled file. Specify --basedir for any additional path information you -do want to be shown in the byte compiled file. - -Example: - py-compile --destdir /tmp/pkg-root --basedir /usr/share/test test.py test2.py - -Report bugs to . -EOF - exit $? - ;; - -v|--version) - echo "$me $scriptversion" - exit $? - ;; - --) - shift - break - ;; - -*) - usage_error "unrecognized option '$1'" - ;; - *) - break - ;; - esac - shift -done - -files=$* -if test -z "$files"; then - usage_error "no files given" -fi - -# if basedir was given, then it should be prepended to filenames before -# byte compilation. -if [ -z "$basedir" ]; then - pathtrans="path = file" -else - pathtrans="path = os.path.join('$basedir', file)" -fi - -# if destdir was given, then it needs to be prepended to the filename to -# byte compile but not go into the compiled file. -if [ -z "$destdir" ]; then - filetrans="filepath = path" -else - filetrans="filepath = os.path.normpath('$destdir' + os.sep + path)" -fi - -$PYTHON -c " -import sys, os, py_compile, imp - -files = '''$files''' - -sys.stdout.write('Byte-compiling python modules...\n') -for file in files.split(): - $pathtrans - $filetrans - if not os.path.exists(filepath) or not (len(filepath) >= 3 - and filepath[-3:] == '.py'): - continue - sys.stdout.write(file) - sys.stdout.flush() - if hasattr(imp, 'get_tag'): - py_compile.compile(filepath, imp.cache_from_source(filepath), path) - else: - py_compile.compile(filepath, filepath + 'c', path) -sys.stdout.write('\n')" || exit $? - -# this will fail for python < 1.5, but that doesn't matter ... -$PYTHON -O -c " -import sys, os, py_compile, imp - -# pypy does not use .pyo optimization -if hasattr(sys, 'pypy_translation_info'): - sys.exit(0) - -files = '''$files''' -sys.stdout.write('Byte-compiling python modules (optimized versions) ...\n') -for file in files.split(): - $pathtrans - $filetrans - if not os.path.exists(filepath) or not (len(filepath) >= 3 - and filepath[-3:] == '.py'): - continue - sys.stdout.write(file) - sys.stdout.flush() - if hasattr(imp, 'get_tag'): - py_compile.compile(filepath, imp.cache_from_source(filepath, False), path) - else: - py_compile.compile(filepath, filepath + 'o', path) -sys.stdout.write('\n')" 2>/dev/null || : - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'before-save-hook 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/m4/pypath.m4 b/m4/pypath.m4 deleted file mode 100644 index 5af6736d8..000000000 --- a/m4/pypath.m4 +++ /dev/null @@ -1,6 +0,0 @@ -AC_DEFUN([adl_CHECK_PYTHON], - [AM_PATH_PYTHON([2.0]) - AC_CACHE_CHECK([for $am_display_PYTHON includes directory], - [adl_cv_python_inc], - [adl_cv_python_inc=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_inc()" 2>/dev/null`]) - AC_SUBST([PYTHONINC], [$adl_cv_python_inc])]) diff --git a/macOS/README b/macOS/README deleted file mode 100644 index 2dcfc5cd7..000000000 --- a/macOS/README +++ /dev/null @@ -1,54 +0,0 @@ -HOW TO PREPARE A NEW VERSION FOR MACOS HOMEBREW REPOSITORY -Go to the nestgpu git repository folder: -cd ~/NESTGPU -Update the version number in configure.ac and in macOS/nestgpu.rb if necessary. Type: -autoreconf -i -mkdir build -cd build -../configure -make -sudo make install -To test the installation from source: -Go to the folder python/test and test the software running the scripts: -(if necessary set the PYTHONPATH environment variable to the location of the nestgpu.py module) -./test_all.sh -./testp3_all.sh -./test_mpi.sh -./testp3_mpi.sh -(unset the PYTHONPATH environment variable if you have defined it before) -Go to the folder MacOS. -cp /usr/local/lib/libnestgpu.so lib/ -cp ../pythonlib/nestgpu.py pythonlib/ -cd ../build -sudo make uninstall -cd .. -rm -fr build -To test the installation before uploading it to the web: -cd macOS -run the script -sudo ./install.sh ../.. -cd ../python/test -./test_all.sh -./testp3_all.sh -./test_mpi.sh -./testp3_mpi.sh -cd ../../MacOS -sudo ./uninstall.sh -cd ../../.. -tar -cvzf NESTGPU_v1.2.2-macOS.tgz NESTGPU/ -(change the version appropriately) -Get the file checksum and take note of it: -shasum -a 256 NESTGPU_v1.2.2-macOS.tgz -Open the github page with a browser. Click on "Releases" -Draft a new release. Write version (example v1.2.2-macOS) and upload the tarball. -Go to the homebrew-science/ git repository -cd ~/homebrew-science/ -open the file Casks/nestgpu.rb -emacs Casks/nestgpu.rb -and change the version, the sha256, the url of the tarball. -push the changes: -git add Casks/nestgpu.rb -git commit -m 'Version 1.2.2' -git push -Try to install it: -brew cask install nestgpu diff --git a/macOS/info.txt b/macOS/info.txt deleted file mode 100644 index b0691e290..000000000 --- a/macOS/info.txt +++ /dev/null @@ -1 +0,0 @@ -macOS distribution folder diff --git a/macOS/install.sh b/macOS/install.sh deleted file mode 100644 index 53fae91c8..000000000 --- a/macOS/install.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/bash -if [ $# -eq 0 ] - then - echo "No source directory supplied" - exit -fi -srcdir=$1/NESTGPU - -if [ ! -f /usr/local/cuda/lib/libcurand.10.dylib ]; then - echo "File not found /usr/local/cuda/libcurand.10.dylib" - echo "It seems that CUDA toolkit is not properly installed" - echo "Please install it following the instructions in:" - echo "https://docs.nvidia.com/cuda/cuda-installation-guide-mac-os-x/index.html" - exit 1 -fi - -# create installation directory if it doesn't exist and clean it -mkdir -p "/usr/local/nestgpu" -rm -fr /usr/local/nestgpu/* -mkdir -p "/usr/local/lib" - -# copy subdirectories -cp -r $srcdir/src /usr/local/nestgpu -cp -r $srcdir/python /usr/local/nestgpu -cp -r $srcdir/c++ /usr/local/nestgpu -cp -r $srcdir/macOS/pythonlib /usr/local/nestgpu -cp -r $srcdir/macOS/lib /usr/local/nestgpu - -#create include directory and copy header file -mkdir /usr/local/nestgpu/include -cp $srcdir/src/nestgpu.h /usr/local/nestgpu/include/ - -# find python package directory -SITEDIR=$(python -m site --user-site) -SITEDIR3=$(python3 -m site --user-site) - -# create if it doesn't exist -mkdir -p "$SITEDIR" -mkdir -p "$SITEDIR3" - -# create new .pth file with path to nestgpu python module -echo "/usr/local/nestgpu/pythonlib/" > "$SITEDIR/nestgpu.pth" -echo "/usr/local/nestgpu/pythonlib/" > "$SITEDIR3/nestgpu.pth" - -# create a symbolic link in /usr/local/lib to the dynamic-link library -ln -s /usr/local/nestgpu/lib/libnestgpu.so /usr/local/lib/libnestgpu.so diff --git a/macOS/lib/info.txt b/macOS/lib/info.txt deleted file mode 100644 index 23cf2ad00..000000000 --- a/macOS/lib/info.txt +++ /dev/null @@ -1 +0,0 @@ -macOS distribution library folder diff --git a/macOS/nestgpu.rb b/macOS/nestgpu.rb deleted file mode 100644 index 0c730434f..000000000 --- a/macOS/nestgpu.rb +++ /dev/null @@ -1,33 +0,0 @@ -cask 'nestgpu' do - version '1.2.2' - sha256 :no_check - - url "http://0.0.0.0:8000/NESTGPU-macOS-1.2.0.tgz" - name 'Neurongpu' - homepage 'https://github.com/golosio/NESTGPU/wiki' - - depends_on macos: [ - :sierra, - :high_sierra, - ] - - depends_on formula: 'libomp' - - depends_on formula: 'openmpi' - - installer script: { - executable: "#{staged_path}/NESTGPU/macOS/install.sh", - args: ["#{staged_path}"], - sudo: true, - } - uninstall script: { - executable: "#{staged_path}/NESTGPU/macOS/uninstall.sh", - sudo: true, - } - caveats "If you have not already done so, for using this software" - caveats "you have to install NVIDIA Web Drivers for your version of macOS," - caveats "either from this site: https://www.tonymacx86.com/nvidia-drivers/" - caveats "or using homebrew:" - caveats "brew cask install nvidia-web-driver" - -end diff --git a/macOS/pythonlib/nestgpu.py b/macOS/pythonlib/nestgpu.py deleted file mode 100644 index b8886ed43..000000000 --- a/macOS/pythonlib/nestgpu.py +++ /dev/null @@ -1,1835 +0,0 @@ -""" Python interface for NESTGPU""" -import sys, platform -import ctypes, ctypes.util -import os -import unicodedata - -print('-----------------------------------------------------------------') -print('NESTGPU') -print('A GPU-MPI library for simulation of large-scale networks') -print(' of spiking neurons') -print('Homepage: https://github.com/golosio/NESTGPU') -print('Author: B. Golosio, University of Cagliari') -print('email: golosio@unica.it') -print('-----------------------------------------------------------------') - -lib_path="/usr/local/lib/libnestgpu.so" -_nestgpu=ctypes.CDLL(lib_path) - -c_float_p = ctypes.POINTER(ctypes.c_float) -c_int_p = ctypes.POINTER(ctypes.c_int) -c_char_p = ctypes.POINTER(ctypes.c_char) -c_void_p = ctypes.c_void_p - -class NodeSeq(object): - def __init__(self, i0, n=1): - if i0 == None: - i0 = 0 - n = -1 - self.i0 = i0 - self.n = n - - def Subseq(self, first, last): - if first<0 | last=self.n: - raise ValueError("Sequence subset out of range") - return NodeSeq(self.i0 + first, last - first + 1) - def __getitem__(self, i): - if type(i)==slice: - if i.step != None: - raise ValueError("Subsequence cannot have a step") - return self.Subseq(i.start, i.stop) - - if i<0: - raise ValueError("Sequence index cannot be negative") - if i>=self.n: - raise ValueError("Sequence index out of range") - return self.i0 + i - def ToList(self): - return list(range(self.i0, self.i0 + self.n)) - def __len__(self): - return self.n - - -class ConnectionId(object): - def __init__(self, i_source, i_group, i_conn): - self.i_source = i_source - self.i_group = i_group - self.i_conn = i_conn - -class SynGroup(object): - def __init__(self, i_syn_group): - self.i_syn_group = i_syn_group - -def to_byte_str(s): - if type(s)==str: - return s.encode('ascii') - elif type(s)==bytes: - return s - else: - raise ValueError("Variable cannot be converted to string") - -def to_def_str(s): - if (sys.version_info >= (3, 0)): - return s.decode("utf-8") - else: - return s - -def waitenter(val): - if (sys.version_info >= (3, 0)): - return input(val) - else: - return raw_input(val) - -conn_rule_name = ("one_to_one", "all_to_all", "fixed_total_number", - "fixed_indegree", "fixed_outdegree") - -NESTGPU_GetErrorMessage = _nestgpu.NESTGPU_GetErrorMessage -NESTGPU_GetErrorMessage.restype = ctypes.POINTER(ctypes.c_char) -def GetErrorMessage(): - "Get error message from NESTGPU exception" - message = ctypes.cast(NESTGPU_GetErrorMessage(), ctypes.c_char_p).value - return message - -NESTGPU_GetErrorCode = _nestgpu.NESTGPU_GetErrorCode -NESTGPU_GetErrorCode.restype = ctypes.c_ubyte -def GetErrorCode(): - "Get error code from NESTGPU exception" - return NESTGPU_GetErrorCode() - -NESTGPU_SetOnException = _nestgpu.NESTGPU_SetOnException -NESTGPU_SetOnException.argtypes = (ctypes.c_int,) -def SetOnException(on_exception): - "Define whether handle exceptions (1) or exit (0) in case of errors" - return NESTGPU_SetOnException(ctypes.c_int(on_exception)) - -SetOnException(1) - -NESTGPU_SetRandomSeed = _nestgpu.NESTGPU_SetRandomSeed -NESTGPU_SetRandomSeed.argtypes = (ctypes.c_ulonglong,) -NESTGPU_SetRandomSeed.restype = ctypes.c_int -def SetRandomSeed(seed): - "Set seed for random number generation" - ret = NESTGPU_SetRandomSeed(ctypes.c_ulonglong(seed)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetTimeResolution = _nestgpu.NESTGPU_SetTimeResolution -NESTGPU_SetTimeResolution.argtypes = (ctypes.c_float,) -NESTGPU_SetTimeResolution.restype = ctypes.c_int -def SetTimeResolution(time_res): - "Set time resolution in ms" - ret = NESTGPU_SetTimeResolution(ctypes.c_float(time_res)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetTimeResolution = _nestgpu.NESTGPU_GetTimeResolution -NESTGPU_GetTimeResolution.restype = ctypes.c_float -def GetTimeResolution(): - "Get time resolution in ms" - ret = NESTGPU_GetTimeResolution() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetMaxSpikeBufferSize = _nestgpu.NESTGPU_SetMaxSpikeBufferSize -NESTGPU_SetMaxSpikeBufferSize.argtypes = (ctypes.c_int,) -NESTGPU_SetMaxSpikeBufferSize.restype = ctypes.c_int -def SetMaxSpikeBufferSize(max_size): - "Set maximum size of spike buffer per node" - ret = NESTGPU_SetMaxSpikeBufferSize(ctypes.c_int(max_size)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetMaxSpikeBufferSize = _nestgpu.NESTGPU_GetMaxSpikeBufferSize -NESTGPU_GetMaxSpikeBufferSize.restype = ctypes.c_int -def GetMaxSpikeBufferSize(): - "Get maximum size of spike buffer per node" - ret = NESTGPU_GetMaxSpikeBufferSize() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetSimTime = _nestgpu.NESTGPU_SetSimTime -NESTGPU_SetSimTime.argtypes = (ctypes.c_float,) -NESTGPU_SetSimTime.restype = ctypes.c_int -def SetSimTime(sim_time): - "Set neural activity simulated time in ms" - ret = NESTGPU_SetSimTime(ctypes.c_float(sim_time)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_Create = _nestgpu.NESTGPU_Create -NESTGPU_Create.argtypes = (c_char_p, ctypes.c_int, ctypes.c_int) -NESTGPU_Create.restype = ctypes.c_int -def Create(model_name, n_node=1, n_ports=1, status_dict=None): - "Create a neuron group" - if (type(status_dict)==dict): - node_group = Create(model_name, n_node, n_ports) - SetStatus(node_group, status_dict) - return node_group - - elif status_dict!=None: - raise ValueError("Wrong argument in Create") - - c_model_name = ctypes.create_string_buffer(to_byte_str(model_name), len(model_name)+1) - i_node =NESTGPU_Create(c_model_name, ctypes.c_int(n_node), ctypes.c_int(n_ports)) - ret = NodeSeq(i_node, n_node) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_CreatePoissonGenerator = _nestgpu.NESTGPU_CreatePoissonGenerator -NESTGPU_CreatePoissonGenerator.argtypes = (ctypes.c_int, ctypes.c_float) -NESTGPU_CreatePoissonGenerator.restype = ctypes.c_int -def CreatePoissonGenerator(n_node, rate): - "Create a poisson-distributed spike generator" - i_node = NESTGPU_CreatePoissonGenerator(ctypes.c_int(n_node), ctypes.c_float(rate)) - ret = NodeSeq(i_node, n_node) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_CreateRecord = _nestgpu.NESTGPU_CreateRecord -NESTGPU_CreateRecord.argtypes = (c_char_p, ctypes.POINTER(c_char_p), c_int_p, c_int_p, ctypes.c_int) -NESTGPU_CreateRecord.restype = ctypes.c_int -def CreateRecord(file_name, var_name_list, i_node_list, i_port_list): - "Create a record of neuron variables" - n_node = len(i_node_list) - c_file_name = ctypes.create_string_buffer(to_byte_str(file_name), len(file_name)+1) - array_int_type = ctypes.c_int * n_node - array_char_pt_type = c_char_p * n_node - c_var_name_list=[] - for i in range(n_node): - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name_list[i]), len(var_name_list[i])+1) - c_var_name_list.append(c_var_name) - - ret = NESTGPU_CreateRecord(c_file_name, - array_char_pt_type(*c_var_name_list), - array_int_type(*i_node_list), - array_int_type(*i_port_list), - ctypes.c_int(n_node)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetRecordDataRows = _nestgpu.NESTGPU_GetRecordDataRows -NESTGPU_GetRecordDataRows.argtypes = (ctypes.c_int,) -NESTGPU_GetRecordDataRows.restype = ctypes.c_int -def GetRecordDataRows(i_record): - "Get record n. of rows" - ret = NESTGPU_GetRecordDataRows(ctypes.c_int(i_record)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetRecordDataColumns = _nestgpu.NESTGPU_GetRecordDataColumns -NESTGPU_GetRecordDataColumns.argtypes = (ctypes.c_int,) -NESTGPU_GetRecordDataColumns.restype = ctypes.c_int -def GetRecordDataColumns(i_record): - "Get record n. of columns" - ret = NESTGPU_GetRecordDataColumns(ctypes.c_int(i_record)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetRecordData = _nestgpu.NESTGPU_GetRecordData -NESTGPU_GetRecordData.argtypes = (ctypes.c_int,) -NESTGPU_GetRecordData.restype = ctypes.POINTER(c_float_p) -def GetRecordData(i_record): - "Get record data" - data_arr_pt = NESTGPU_GetRecordData(ctypes.c_int(i_record)) - nr = GetRecordDataRows(i_record) - nc = GetRecordDataColumns(i_record) - data_list = [] - for ir in range(nr): - row_list = [] - for ic in range(nc): - row_list.append(data_arr_pt[ir][ic]) - - data_list.append(row_list) - - ret = data_list - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetNeuronScalParam = _nestgpu.NESTGPU_SetNeuronScalParam -NESTGPU_SetNeuronScalParam.argtypes = (ctypes.c_int, ctypes.c_int, - c_char_p, ctypes.c_float) -NESTGPU_SetNeuronScalParam.restype = ctypes.c_int -def SetNeuronScalParam(i_node, n_node, param_name, val): - "Set neuron scalar parameter value" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = NESTGPU_SetNeuronScalParam(ctypes.c_int(i_node), - ctypes.c_int(n_node), c_param_name, - ctypes.c_float(val)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetNeuronArrayParam = _nestgpu.NESTGPU_SetNeuronArrayParam -NESTGPU_SetNeuronArrayParam.argtypes = (ctypes.c_int, ctypes.c_int, - c_char_p, c_float_p, ctypes.c_int) -NESTGPU_SetNeuronArrayParam.restype = ctypes.c_int -def SetNeuronArrayParam(i_node, n_node, param_name, param_list): - "Set neuron array parameter value" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - array_size = len(param_list) - array_float_type = ctypes.c_float * array_size - ret = NESTGPU_SetNeuronArrayParam(ctypes.c_int(i_node), - ctypes.c_int(n_node), c_param_name, - array_float_type(*param_list), - ctypes.c_int(array_size)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetNeuronPtScalParam = _nestgpu.NESTGPU_SetNeuronPtScalParam -NESTGPU_SetNeuronPtScalParam.argtypes = (ctypes.c_void_p, ctypes.c_int, - c_char_p, ctypes.c_float) -NESTGPU_SetNeuronPtScalParam.restype = ctypes.c_int -def SetNeuronPtScalParam(nodes, param_name, val): - "Set neuron list scalar parameter value" - n_node = len(nodes) - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - node_arr = (ctypes.c_int * len(nodes))(*nodes) - node_pt = ctypes.cast(node_arr, ctypes.c_void_p) - ret = NESTGPU_SetNeuronPtScalParam(node_pt, - ctypes.c_int(n_node), c_param_name, - ctypes.c_float(val)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetNeuronPtArrayParam = _nestgpu.NESTGPU_SetNeuronPtArrayParam -NESTGPU_SetNeuronPtArrayParam.argtypes = (ctypes.c_void_p, ctypes.c_int, - c_char_p, c_float_p, - ctypes.c_int) -NESTGPU_SetNeuronPtArrayParam.restype = ctypes.c_int -def SetNeuronPtArrayParam(nodes, param_name, param_list): - "Set neuron list array parameter value" - n_node = len(nodes) - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - node_arr = (ctypes.c_int * len(nodes))(*nodes) - node_pt = ctypes.cast(node_arr, ctypes.c_void_p) - - array_size = len(param_list) - array_float_type = ctypes.c_float * array_size - ret = NESTGPU_SetNeuronPtArrayParam(node_pt, - ctypes.c_int(n_node), - c_param_name, - array_float_type(*param_list), - ctypes.c_int(array_size)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_IsNeuronScalParam = _nestgpu.NESTGPU_IsNeuronScalParam -NESTGPU_IsNeuronScalParam.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_IsNeuronScalParam.restype = ctypes.c_int -def IsNeuronScalParam(i_node, param_name): - "Check name of neuron scalar parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - ret = (NESTGPU_IsNeuronScalParam(ctypes.c_int(i_node), c_param_name)!=0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_IsNeuronPortParam = _nestgpu.NESTGPU_IsNeuronPortParam -NESTGPU_IsNeuronPortParam.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_IsNeuronPortParam.restype = ctypes.c_int -def IsNeuronPortParam(i_node, param_name): - "Check name of neuron scalar parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = (NESTGPU_IsNeuronPortParam(ctypes.c_int(i_node), c_param_name)!= 0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_IsNeuronArrayParam = _nestgpu.NESTGPU_IsNeuronArrayParam -NESTGPU_IsNeuronArrayParam.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_IsNeuronArrayParam.restype = ctypes.c_int -def IsNeuronArrayParam(i_node, param_name): - "Check name of neuron scalar parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = (NESTGPU_IsNeuronArrayParam(ctypes.c_int(i_node), c_param_name)!=0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_SetNeuronScalVar = _nestgpu.NESTGPU_SetNeuronScalVar -NESTGPU_SetNeuronScalVar.argtypes = (ctypes.c_int, ctypes.c_int, - c_char_p, ctypes.c_float) -NESTGPU_SetNeuronScalVar.restype = ctypes.c_int -def SetNeuronScalVar(i_node, n_node, var_name, val): - "Set neuron scalar variable value" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), len(var_name)+1) - ret = NESTGPU_SetNeuronScalVar(ctypes.c_int(i_node), - ctypes.c_int(n_node), c_var_name, - ctypes.c_float(val)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetNeuronArrayVar = _nestgpu.NESTGPU_SetNeuronArrayVar -NESTGPU_SetNeuronArrayVar.argtypes = (ctypes.c_int, ctypes.c_int, - c_char_p, c_float_p, ctypes.c_int) -NESTGPU_SetNeuronArrayVar.restype = ctypes.c_int -def SetNeuronArrayVar(i_node, n_node, var_name, var_list): - "Set neuron array variable value" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), len(var_name)+1) - array_size = len(var_list) - array_float_type = ctypes.c_float * array_size - ret = NESTGPU_SetNeuronArrayVar(ctypes.c_int(i_node), - ctypes.c_int(n_node), c_var_name, - array_float_type(*var_list), - ctypes.c_int(array_size)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetNeuronPtScalVar = _nestgpu.NESTGPU_SetNeuronPtScalVar -NESTGPU_SetNeuronPtScalVar.argtypes = (ctypes.c_void_p, ctypes.c_int, - c_char_p, ctypes.c_float) -NESTGPU_SetNeuronPtScalVar.restype = ctypes.c_int -def SetNeuronPtScalVar(nodes, var_name, val): - "Set neuron list scalar variable value" - n_node = len(nodes) - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), len(var_name)+1) - node_arr = (ctypes.c_int * len(nodes))(*nodes) - node_pt = ctypes.cast(node_arr, ctypes.c_void_p) - - ret = NESTGPU_SetNeuronPtScalVar(node_pt, - ctypes.c_int(n_node), c_var_name, - ctypes.c_float(val)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetNeuronPtArrayVar = _nestgpu.NESTGPU_SetNeuronPtArrayVar -NESTGPU_SetNeuronPtArrayVar.argtypes = (ctypes.c_void_p, ctypes.c_int, - c_char_p, c_float_p, - ctypes.c_int) -NESTGPU_SetNeuronPtArrayVar.restype = ctypes.c_int -def SetNeuronPtArrayVar(nodes, var_name, var_list): - "Set neuron list array variable value" - n_node = len(nodes) - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - node_arr = (ctypes.c_int * len(nodes))(*nodes) - node_pt = ctypes.cast(node_arr, ctypes.c_void_p) - - array_size = len(var_list) - array_float_type = ctypes.c_float * array_size - ret = NESTGPU_SetNeuronPtArrayVar(node_pt, - ctypes.c_int(n_node), - c_var_name, - array_float_type(*var_list), - ctypes.c_int(array_size)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_IsNeuronScalVar = _nestgpu.NESTGPU_IsNeuronScalVar -NESTGPU_IsNeuronScalVar.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_IsNeuronScalVar.restype = ctypes.c_int -def IsNeuronScalVar(i_node, var_name): - "Check name of neuron scalar variable" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - ret = (NESTGPU_IsNeuronScalVar(ctypes.c_int(i_node), c_var_name)!=0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_IsNeuronPortVar = _nestgpu.NESTGPU_IsNeuronPortVar -NESTGPU_IsNeuronPortVar.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_IsNeuronPortVar.restype = ctypes.c_int -def IsNeuronPortVar(i_node, var_name): - "Check name of neuron scalar variable" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), len(var_name)+1) - ret = (NESTGPU_IsNeuronPortVar(ctypes.c_int(i_node), c_var_name)!= 0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_IsNeuronArrayVar = _nestgpu.NESTGPU_IsNeuronArrayVar -NESTGPU_IsNeuronArrayVar.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_IsNeuronArrayVar.restype = ctypes.c_int -def IsNeuronArrayVar(i_node, var_name): - "Check name of neuron array variable" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), len(var_name)+1) - ret = (NESTGPU_IsNeuronArrayVar(ctypes.c_int(i_node), c_var_name)!=0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetNeuronParamSize = _nestgpu.NESTGPU_GetNeuronParamSize -NESTGPU_GetNeuronParamSize.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_GetNeuronParamSize.restype = ctypes.c_int -def GetNeuronParamSize(i_node, param_name): - "Get neuron parameter array size" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = NESTGPU_GetNeuronParamSize(ctypes.c_int(i_node), c_param_name) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetNeuronParam = _nestgpu.NESTGPU_GetNeuronParam -NESTGPU_GetNeuronParam.argtypes = (ctypes.c_int, ctypes.c_int, - c_char_p) -NESTGPU_GetNeuronParam.restype = c_float_p -def GetNeuronParam(i_node, n_node, param_name): - "Get neuron parameter value" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - data_pt = NESTGPU_GetNeuronParam(ctypes.c_int(i_node), - ctypes.c_int(n_node), c_param_name) - - array_size = GetNeuronParamSize(i_node, param_name) - data_list = [] - for i_node in range(n_node): - row_list = [] - for i in range(array_size): - row_list.append(data_pt[i_node*array_size + i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetNeuronPtParam = _nestgpu.NESTGPU_GetNeuronPtParam -NESTGPU_GetNeuronPtParam.argtypes = (ctypes.c_void_p, ctypes.c_int, - c_char_p) -NESTGPU_GetNeuronPtParam.restype = c_float_p -def GetNeuronPtParam(nodes, param_name): - "Get neuron list scalar parameter value" - n_node = len(nodes) - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - node_arr = (ctypes.c_int * len(nodes))(*nodes) - node_pt = ctypes.cast(node_arr, ctypes.c_void_p) - data_pt = NESTGPU_GetNeuronPtParam(node_pt, - ctypes.c_int(n_node), c_param_name) - array_size = GetNeuronParamSize(nodes[0], param_name) - - data_list = [] - for i_node in range(n_node): - row_list = [] - for i in range(array_size): - row_list.append(data_pt[i_node*array_size + i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetArrayParam = _nestgpu.NESTGPU_GetArrayParam -NESTGPU_GetArrayParam.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_GetArrayParam.restype = c_float_p -def GetArrayParam(i_node, n_node, param_name): - "Get neuron array parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - data_list = [] - for j_node in range(n_node): - i_node1 = i_node + j_node - row_list = [] - data_pt = NESTGPU_GetArrayParam(ctypes.c_int(i_node1), c_param_name) - array_size = GetNeuronParamSize(i_node1, param_name) - for i in range(array_size): - row_list.append(data_pt[i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -def GetNeuronListArrayParam(node_list, param_name): - "Get neuron array parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - data_list = [] - for i_node in node_list: - row_list = [] - data_pt = NESTGPU_GetArrayParam(ctypes.c_int(i_node), c_param_name) - array_size = GetNeuronParamSize(i_node, param_name) - for i in range(array_size): - row_list.append(data_pt[i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -NESTGPU_GetNeuronVarSize = _nestgpu.NESTGPU_GetNeuronVarSize -NESTGPU_GetNeuronVarSize.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_GetNeuronVarSize.restype = ctypes.c_int -def GetNeuronVarSize(i_node, var_name): - "Get neuron variable array size" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), len(var_name)+1) - ret = NESTGPU_GetNeuronVarSize(ctypes.c_int(i_node), c_var_name) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetNeuronVar = _nestgpu.NESTGPU_GetNeuronVar -NESTGPU_GetNeuronVar.argtypes = (ctypes.c_int, ctypes.c_int, - c_char_p) -NESTGPU_GetNeuronVar.restype = c_float_p -def GetNeuronVar(i_node, n_node, var_name): - "Get neuron variable value" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - data_pt = NESTGPU_GetNeuronVar(ctypes.c_int(i_node), - ctypes.c_int(n_node), c_var_name) - - array_size = GetNeuronVarSize(i_node, var_name) - - data_list = [] - for i_node in range(n_node): - row_list = [] - for i in range(array_size): - row_list.append(data_pt[i_node*array_size + i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetNeuronPtVar = _nestgpu.NESTGPU_GetNeuronPtVar -NESTGPU_GetNeuronPtVar.argtypes = (ctypes.c_void_p, ctypes.c_int, - c_char_p) -NESTGPU_GetNeuronPtVar.restype = c_float_p -def GetNeuronPtVar(nodes, var_name): - "Get neuron list scalar variable value" - n_node = len(nodes) - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - node_arr = (ctypes.c_int * len(nodes))(*nodes) - node_pt = ctypes.cast(node_arr, ctypes.c_void_p) - data_pt = NESTGPU_GetNeuronPtVar(node_pt, - ctypes.c_int(n_node), c_var_name) - array_size = GetNeuronVarSize(nodes[0], var_name) - - data_list = [] - for i_node in range(n_node): - row_list = [] - for i in range(array_size): - row_list.append(data_pt[i_node*array_size + i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetArrayVar = _nestgpu.NESTGPU_GetArrayVar -NESTGPU_GetArrayVar.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_GetArrayVar.restype = c_float_p -def GetArrayVar(i_node, n_node, var_name): - "Get neuron array variable" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - data_list = [] - for j_node in range(n_node): - i_node1 = i_node + j_node - row_list = [] - data_pt = NESTGPU_GetArrayVar(ctypes.c_int(i_node1), c_var_name) - array_size = GetNeuronVarSize(i_node1, var_name) - for i in range(array_size): - row_list.append(data_pt[i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -def GetNeuronListArrayVar(node_list, var_name): - "Get neuron array variable" - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - data_list = [] - for i_node in node_list: - row_list = [] - data_pt = NESTGPU_GetArrayVar(ctypes.c_int(i_node), c_var_name) - array_size = GetNeuronVarSize(i_node, var_name) - for i in range(array_size): - row_list.append(data_pt[i]) - data_list.append(row_list) - - ret = data_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -def GetNeuronStatus(nodes, var_name): - "Get neuron group scalar or array variable or parameter" - if (type(nodes)!=list) & (type(nodes)!=tuple) & (type(nodes)!=NodeSeq): - raise ValueError("Unknown node type") - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - if type(nodes)==NodeSeq: - if (IsNeuronScalParam(nodes.i0, var_name) | - IsNeuronPortParam(nodes.i0, var_name)): - ret = GetNeuronParam(nodes.i0, nodes.n, var_name) - elif IsNeuronArrayParam(nodes.i0, var_name): - ret = GetArrayParam(nodes.i0, nodes.n, var_name) - elif (IsNeuronScalVar(nodes.i0, var_name) | - IsNeuronPortVar(nodes.i0, var_name)): - ret = GetNeuronVar(nodes.i0, nodes.n, var_name) - elif IsNeuronArrayVar(nodes.i0, var_name): - ret = GetArrayVar(nodes.i0, nodes.n, var_name) - else: - raise ValueError("Unknown neuron variable or parameter") - else: - if (IsNeuronScalParam(nodes[0], var_name) | - IsNeuronPortParam(nodes[0], var_name)): - ret = GetNeuronPtParam(nodes, var_name) - elif IsNeuronArrayParam(nodes[0], var_name): - ret = GetNeuronListArrayParam(nodes, var_name) - elif (IsNeuronScalVar(nodes[0], var_name) | - IsNeuronPortVar(nodes[0], var_name)): - ret = GetNeuronPtVar(nodes, var_name) - elif IsNeuronArrayVar(nodes[0], var_name): - ret = GetNeuronListArrayVar(nodes, var_name) - else: - raise ValueError("Unknown neuron variable or parameter") - return ret - - -NESTGPU_GetNScalVar = _nestgpu.NESTGPU_GetNScalVar -NESTGPU_GetNScalVar.argtypes = (ctypes.c_int,) -NESTGPU_GetNScalVar.restype = ctypes.c_int -def GetNScalVar(i_node): - "Get number of scalar variables for a given node" - ret = NESTGPU_GetNScalVar(ctypes.c_int(i_node)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetScalVarNames = _nestgpu.NESTGPU_GetScalVarNames -NESTGPU_GetScalVarNames.argtypes = (ctypes.c_int,) -NESTGPU_GetScalVarNames.restype = ctypes.POINTER(c_char_p) -def GetScalVarNames(i_node): - "Get list of scalar variable names" - n_var = GetNScalVar(i_node) - var_name_pp = ctypes.cast(NESTGPU_GetScalVarNames(ctypes.c_int(i_node)), - ctypes.POINTER(c_char_p)) - var_name_list = [] - for i in range(n_var): - var_name_p = var_name_pp[i] - var_name = ctypes.cast(var_name_p, ctypes.c_char_p).value - var_name_list.append(to_def_str(var_name)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return var_name_list - -NESTGPU_GetNPortVar = _nestgpu.NESTGPU_GetNPortVar -NESTGPU_GetNPortVar.argtypes = (ctypes.c_int,) -NESTGPU_GetNPortVar.restype = ctypes.c_int -def GetNPortVar(i_node): - "Get number of scalar variables for a given node" - ret = NESTGPU_GetNPortVar(ctypes.c_int(i_node)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetPortVarNames = _nestgpu.NESTGPU_GetPortVarNames -NESTGPU_GetPortVarNames.argtypes = (ctypes.c_int,) -NESTGPU_GetPortVarNames.restype = ctypes.POINTER(c_char_p) -def GetPortVarNames(i_node): - "Get list of scalar variable names" - n_var = GetNPortVar(i_node) - var_name_pp = ctypes.cast(NESTGPU_GetPortVarNames(ctypes.c_int(i_node)), - ctypes.POINTER(c_char_p)) - var_name_list = [] - for i in range(n_var): - var_name_p = var_name_pp[i] - var_name = ctypes.cast(var_name_p, ctypes.c_char_p).value - var_name_list.append(to_def_str(var_name)) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return var_name_list - - -NESTGPU_GetNScalParam = _nestgpu.NESTGPU_GetNScalParam -NESTGPU_GetNScalParam.argtypes = (ctypes.c_int,) -NESTGPU_GetNScalParam.restype = ctypes.c_int -def GetNScalParam(i_node): - "Get number of scalar parameters for a given node" - ret = NESTGPU_GetNScalParam(ctypes.c_int(i_node)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetScalParamNames = _nestgpu.NESTGPU_GetScalParamNames -NESTGPU_GetScalParamNames.argtypes = (ctypes.c_int,) -NESTGPU_GetScalParamNames.restype = ctypes.POINTER(c_char_p) -def GetScalParamNames(i_node): - "Get list of scalar parameter names" - n_param = GetNScalParam(i_node) - param_name_pp = ctypes.cast(NESTGPU_GetScalParamNames( - ctypes.c_int(i_node)), ctypes.POINTER(c_char_p)) - param_name_list = [] - for i in range(n_param): - param_name_p = param_name_pp[i] - param_name = ctypes.cast(param_name_p, ctypes.c_char_p).value - param_name_list.append(to_def_str(param_name)) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return param_name_list - -NESTGPU_GetNPortParam = _nestgpu.NESTGPU_GetNPortParam -NESTGPU_GetNPortParam.argtypes = (ctypes.c_int,) -NESTGPU_GetNPortParam.restype = ctypes.c_int -def GetNPortParam(i_node): - "Get number of scalar parameters for a given node" - ret = NESTGPU_GetNPortParam(ctypes.c_int(i_node)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetPortParamNames = _nestgpu.NESTGPU_GetPortParamNames -NESTGPU_GetPortParamNames.argtypes = (ctypes.c_int,) -NESTGPU_GetPortParamNames.restype = ctypes.POINTER(c_char_p) -def GetPortParamNames(i_node): - "Get list of scalar parameter names" - n_param = GetNPortParam(i_node) - param_name_pp = ctypes.cast(NESTGPU_GetPortParamNames( - ctypes.c_int(i_node)), ctypes.POINTER(c_char_p)) - param_name_list = [] - for i in range(n_param): - param_name_p = param_name_pp[i] - param_name = ctypes.cast(param_name_p, ctypes.c_char_p).value - param_name_list.append(to_def_str(param_name)) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return param_name_list - - -NESTGPU_GetNArrayParam = _nestgpu.NESTGPU_GetNArrayParam -NESTGPU_GetNArrayParam.argtypes = (ctypes.c_int,) -NESTGPU_GetNArrayParam.restype = ctypes.c_int -def GetNArrayParam(i_node): - "Get number of scalar parameters for a given node" - ret = NESTGPU_GetNArrayParam(ctypes.c_int(i_node)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetArrayParamNames = _nestgpu.NESTGPU_GetArrayParamNames -NESTGPU_GetArrayParamNames.argtypes = (ctypes.c_int,) -NESTGPU_GetArrayParamNames.restype = ctypes.POINTER(c_char_p) -def GetArrayParamNames(i_node): - "Get list of scalar parameter names" - n_param = GetNArrayParam(i_node) - param_name_pp = ctypes.cast(NESTGPU_GetArrayParamNames( - ctypes.c_int(i_node)), ctypes.POINTER(c_char_p)) - param_name_list = [] - for i in range(n_param): - param_name_p = param_name_pp[i] - param_name = ctypes.cast(param_name_p, ctypes.c_char_p).value - param_name_list.append(to_def_str(param_name)) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return param_name_list - - -NESTGPU_GetNArrayVar = _nestgpu.NESTGPU_GetNArrayVar -NESTGPU_GetNArrayVar.argtypes = (ctypes.c_int,) -NESTGPU_GetNArrayVar.restype = ctypes.c_int -def GetNArrayVar(i_node): - "Get number of scalar variables for a given node" - ret = NESTGPU_GetNArrayVar(ctypes.c_int(i_node)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_GetArrayVarNames = _nestgpu.NESTGPU_GetArrayVarNames -NESTGPU_GetArrayVarNames.argtypes = (ctypes.c_int,) -NESTGPU_GetArrayVarNames.restype = ctypes.POINTER(c_char_p) -def GetArrayVarNames(i_node): - "Get list of scalar variable names" - n_var = GetNArrayVar(i_node) - var_name_pp = ctypes.cast(NESTGPU_GetArrayVarNames(ctypes.c_int(i_node)), - ctypes.POINTER(c_char_p)) - var_name_list = [] - for i in range(n_var): - var_name_p = var_name_pp[i] - var_name = ctypes.cast(var_name_p, ctypes.c_char_p).value - var_name_list.append(to_def_str(var_name)) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return var_name_list - - - - -def SetNeuronStatus(nodes, var_name, val): - "Set neuron group scalar or array variable or parameter" - if (type(nodes)!=list) & (type(nodes)!=tuple) & (type(nodes)!=NodeSeq): - raise ValueError("Unknown node type") - c_var_name = ctypes.create_string_buffer(to_byte_str(var_name), - len(var_name)+1) - if type(nodes)==NodeSeq: - if IsNeuronScalParam(nodes.i0, var_name): - SetNeuronScalParam(nodes.i0, nodes.n, var_name, val) - elif (IsNeuronPortParam(nodes.i0, var_name) | - IsNeuronArrayParam(nodes.i0, var_name)): - SetNeuronArrayParam(nodes.i0, nodes.n, var_name, val) - elif IsNeuronScalVar(nodes.i0, var_name): - SetNeuronScalVar(nodes.i0, nodes.n, var_name, val) - elif (IsNeuronPortVar(nodes.i0, var_name) | - IsNeuronArrayVar(nodes.i0, var_name)): - SetNeuronArrayVar(nodes.i0, nodes.n, var_name, val) - else: - raise ValueError("Unknown neuron variable or parameter") - else: - if IsNeuronScalParam(nodes[0], var_name): - SetNeuronPtScalParam(nodes, var_name, val) - elif (IsNeuronPortParam(nodes[0], var_name) | - IsNeuronArrayParam(nodes[0], var_name)): - SetNeuronPtArrayParam(nodes, var_name, val) - elif IsNeuronScalVar(nodes[0], var_name): - SetNeuronPtScalVar(nodes, var_name, val) - elif (IsNeuronPortVar(nodes[0], var_name) | - IsNeuronArrayVar(nodes[0], var_name)): - SetNeuronPtArrayVar(nodes, var_name, val) - else: - raise ValueError("Unknown neuron variable or parameter") - - -NESTGPU_Calibrate = _nestgpu.NESTGPU_Calibrate -NESTGPU_Calibrate.restype = ctypes.c_int -def Calibrate(): - "Calibrate simulation" - ret = NESTGPU_Calibrate() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_Simulate = _nestgpu.NESTGPU_Simulate -NESTGPU_Simulate.restype = ctypes.c_int -def Simulate(sim_time=1000.0): - "Simulate neural activity" - SetSimTime(sim_time) - ret = NESTGPU_Simulate() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_ConnectMpiInit = _nestgpu.NESTGPU_ConnectMpiInit -NESTGPU_ConnectMpiInit.argtypes = (ctypes.c_int, ctypes.POINTER(c_char_p)) -NESTGPU_ConnectMpiInit.restype = ctypes.c_int -def ConnectMpiInit(): - "Initialize MPI connections" - from mpi4py import MPI - argc=len(sys.argv) - array_char_pt_type = c_char_p * argc - c_var_name_list=[] - for i in range(argc): - c_arg = ctypes.create_string_buffer(to_byte_str(sys.argv[i]), 100) - c_var_name_list.append(c_arg) - ret = NESTGPU_ConnectMpiInit(ctypes.c_int(argc), - array_char_pt_type(*c_var_name_list)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_MpiId = _nestgpu.NESTGPU_MpiId -NESTGPU_MpiId.restype = ctypes.c_int -def MpiId(): - "Get MPI Id" - ret = NESTGPU_MpiId() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_MpiNp = _nestgpu.NESTGPU_MpiNp -NESTGPU_MpiNp.restype = ctypes.c_int -def MpiNp(): - "Get MPI Np" - ret = NESTGPU_MpiNp() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_ProcMaster = _nestgpu.NESTGPU_ProcMaster -NESTGPU_ProcMaster.restype = ctypes.c_int -def ProcMaster(): - "Get MPI ProcMaster" - ret = NESTGPU_ProcMaster() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_MpiFinalize = _nestgpu.NESTGPU_MpiFinalize -NESTGPU_MpiFinalize.restype = ctypes.c_int -def MpiFinalize(): - "Finalize MPI" - ret = NESTGPU_MpiFinalize() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_RandomInt = _nestgpu.NESTGPU_RandomInt -NESTGPU_RandomInt.argtypes = (ctypes.c_size_t,) -NESTGPU_RandomInt.restype = ctypes.POINTER(ctypes.c_uint) -def RandomInt(n): - "Generate n random integers in CUDA memory" - ret = NESTGPU_RandomInt(ctypes.c_size_t(n)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_RandomUniform = _nestgpu.NESTGPU_RandomUniform -NESTGPU_RandomUniform.argtypes = (ctypes.c_size_t,) -NESTGPU_RandomUniform.restype = c_float_p -def RandomUniform(n): - "Generate n random floats with uniform distribution in (0,1) in CUDA memory" - ret = NESTGPU_RandomUniform(ctypes.c_size_t(n)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_RandomNormal = _nestgpu.NESTGPU_RandomNormal -NESTGPU_RandomNormal.argtypes = (ctypes.c_size_t, ctypes.c_float, ctypes.c_float) -NESTGPU_RandomNormal.restype = c_float_p -def RandomNormal(n, mean, stddev): - "Generate n random floats with normal distribution in CUDA memory" - ret = NESTGPU_RandomNormal(ctypes.c_size_t(n), ctypes.c_float(mean), - ctypes.c_float(stddev)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_RandomNormalClipped = _nestgpu.NESTGPU_RandomNormalClipped -NESTGPU_RandomNormalClipped.argtypes = (ctypes.c_size_t, ctypes.c_float, ctypes.c_float, ctypes.c_float, - ctypes.c_float) -NESTGPU_RandomNormalClipped.restype = c_float_p -def RandomNormalClipped(n, mean, stddev, vmin, vmax): - "Generate n random floats with normal clipped distribution in CUDA memory" - ret = NESTGPU_RandomNormalClipped(ctypes.c_size_t(n), - ctypes.c_float(mean), - ctypes.c_float(stddev), - ctypes.c_float(vmin), - ctypes.c_float(vmax)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_ConnectMpiInit = _nestgpu.NESTGPU_ConnectMpiInit -NESTGPU_ConnectMpiInit.argtypes = (ctypes.c_int, ctypes.POINTER(c_char_p)) -NESTGPU_ConnectMpiInit.restype = ctypes.c_int -def ConnectMpiInit(): - "Initialize MPI connections" - from mpi4py import MPI - argc=len(sys.argv) - array_char_pt_type = c_char_p * argc - c_var_name_list=[] - for i in range(argc): - c_arg = ctypes.create_string_buffer(to_byte_str(sys.argv[i]), 100) - c_var_name_list.append(c_arg) - ret = NESTGPU_ConnectMpiInit(ctypes.c_int(argc), - array_char_pt_type(*c_var_name_list)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_Connect = _nestgpu.NESTGPU_Connect -NESTGPU_Connect.argtypes = (ctypes.c_int, ctypes.c_int, ctypes.c_ubyte, ctypes.c_float, ctypes.c_float) -NESTGPU_Connect.restype = ctypes.c_int -def SingleConnect(i_source_node, i_target_node, i_port, weight, delay): - "Connect two nodes" - ret = NESTGPU_Connect(ctypes.c_int(i_source_node), - ctypes.c_int(i_target_node), - ctypes.c_ubyte(i_port), ctypes.c_float(weight), - ctypes.c_float(delay)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_ConnSpecInit = _nestgpu.NESTGPU_ConnSpecInit -NESTGPU_ConnSpecInit.restype = ctypes.c_int -def ConnSpecInit(): - "Initialize connection rules specification" - ret = NESTGPU_ConnSpecInit() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetConnSpecParam = _nestgpu.NESTGPU_SetConnSpecParam -NESTGPU_SetConnSpecParam.argtypes = (c_char_p, ctypes.c_int) -NESTGPU_SetConnSpecParam.restype = ctypes.c_int -def SetConnSpecParam(param_name, val): - "Set connection parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = NESTGPU_SetConnSpecParam(c_param_name, ctypes.c_int(val)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_ConnSpecIsParam = _nestgpu.NESTGPU_ConnSpecIsParam -NESTGPU_ConnSpecIsParam.argtypes = (c_char_p,) -NESTGPU_ConnSpecIsParam.restype = ctypes.c_int -def ConnSpecIsParam(param_name): - "Check name of connection parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = (NESTGPU_ConnSpecIsParam(c_param_name) != 0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SynSpecInit = _nestgpu.NESTGPU_SynSpecInit -NESTGPU_SynSpecInit.restype = ctypes.c_int -def SynSpecInit(): - "Initializa synapse specification" - ret = NESTGPU_SynSpecInit() - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_SetSynSpecIntParam = _nestgpu.NESTGPU_SetSynSpecIntParam -NESTGPU_SetSynSpecIntParam.argtypes = (c_char_p, ctypes.c_int) -NESTGPU_SetSynSpecIntParam.restype = ctypes.c_int -def SetSynSpecIntParam(param_name, val): - "Set synapse int parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = NESTGPU_SetSynSpecIntParam(c_param_name, ctypes.c_int(val)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_SetSynSpecFloatParam = _nestgpu.NESTGPU_SetSynSpecFloatParam -NESTGPU_SetSynSpecFloatParam.argtypes = (c_char_p, ctypes.c_float) -NESTGPU_SetSynSpecFloatParam.restype = ctypes.c_int -def SetSynSpecFloatParam(param_name, val): - "Set synapse float parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = NESTGPU_SetSynSpecFloatParam(c_param_name, ctypes.c_float(val)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -NESTGPU_SetSynSpecFloatPtParam = _nestgpu.NESTGPU_SetSynSpecFloatPtParam -NESTGPU_SetSynSpecFloatPtParam.argtypes = (c_char_p, ctypes.c_void_p) -NESTGPU_SetSynSpecFloatPtParam.restype = ctypes.c_int -def SetSynSpecFloatPtParam(param_name, arr): - "Set synapse pointer to float parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - if (type(arr) is list) | (type(arr) is tuple): - arr = (ctypes.c_float * len(arr))(*arr) - arr_pt = ctypes.cast(arr, ctypes.c_void_p) - ret = NESTGPU_SetSynSpecFloatPtParam(c_param_name, arr_pt) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SynSpecIsIntParam = _nestgpu.NESTGPU_SynSpecIsIntParam -NESTGPU_SynSpecIsIntParam.argtypes = (c_char_p,) -NESTGPU_SynSpecIsIntParam.restype = ctypes.c_int -def SynSpecIsIntParam(param_name): - "Check name of synapse int parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = (NESTGPU_SynSpecIsIntParam(c_param_name) != 0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SynSpecIsFloatParam = _nestgpu.NESTGPU_SynSpecIsFloatParam -NESTGPU_SynSpecIsFloatParam.argtypes = (c_char_p,) -NESTGPU_SynSpecIsFloatParam.restype = ctypes.c_int -def SynSpecIsFloatParam(param_name): - "Check name of synapse float parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = (NESTGPU_SynSpecIsFloatParam(c_param_name) != 0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SynSpecIsFloatPtParam = _nestgpu.NESTGPU_SynSpecIsFloatPtParam -NESTGPU_SynSpecIsFloatPtParam.argtypes = (c_char_p,) -NESTGPU_SynSpecIsFloatPtParam.restype = ctypes.c_int -def SynSpecIsFloatPtParam(param_name): - "Check name of synapse pointer to float parameter" - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), len(param_name)+1) - ret = (NESTGPU_SynSpecIsFloatPtParam(c_param_name) != 0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -def DictToArray(param_dict, array_size): - dist_name = None - arr = None - low = -1.0e35 - high = 1.0e35 - mu = None - sigma = None - - for param_name in param_dict: - pval = param_dict[param_name] - if param_name=="array": - dist_name = "array" - arr = pval - elif param_name=="distribution": - dist_name = pval - elif param_name=="low": - low = pval - elif param_name=="high": - high = pval - elif param_name=="mu": - mu = pval - elif param_name=="sigma": - sigma = pval - else: - raise ValueError("Unknown parameter name in dictionary") - - if dist_name=="array": - if (type(arr) is list) | (type(arr) is tuple): - if len(arr) != array_size: - raise ValueError("Wrong array size.") - arr = (ctypes.c_float * len(arr))(*arr) - #array_pt = ctypes.cast(arr, ctypes.c_void_p) - #return array_pt - return arr - elif dist_name=="normal": - return RandomNormal(array_size, mu, sigma) - elif dist_name=="normal_clipped": - return RandomNormalClipped(array_size, mu, sigma, low, high) - else: - raise ValueError("Unknown distribution") - - -def RuleArraySize(conn_dict, source, target): - if conn_dict["rule"]=="one_to_one": - array_size = len(source) - elif conn_dict["rule"]=="all_to_all": - array_size = len(source)*len(target) - elif conn_dict["rule"]=="fixed_total_number": - array_size = conn_dict["total_num"] - elif conn_dict["rule"]=="fixed_indegree": - array_size = len(target)*conn_dict["indegree"] - elif conn_dict["rule"]=="fixed_outdegree": - array_size = len(source)*conn_dict["outdegree"] - else: - raise ValueError("Unknown number of connections for this rule") - return array_size - - -def SetSynParamFromArray(param_name, par_dict, array_size): - arr_param_name = param_name + "_array" - if (not SynSpecIsFloatPtParam(arr_param_name)): - raise ValueError("Synapse parameter cannot be set by" - " arrays or distributions") - arr = DictToArray(par_dict, array_size) - array_pt = ctypes.cast(arr, ctypes.c_void_p) - SetSynSpecFloatPtParam(arr_param_name, array_pt) - - - - -NESTGPU_ConnectSeqSeq = _nestgpu.NESTGPU_ConnectSeqSeq -NESTGPU_ConnectSeqSeq.argtypes = (ctypes.c_int, ctypes.c_int, ctypes.c_int, - ctypes.c_int) -NESTGPU_ConnectSeqSeq.restype = ctypes.c_int - -NESTGPU_ConnectSeqGroup = _nestgpu.NESTGPU_ConnectSeqGroup -NESTGPU_ConnectSeqGroup.argtypes = (ctypes.c_int, ctypes.c_int, - ctypes.c_void_p, ctypes.c_int) -NESTGPU_ConnectSeqGroup.restype = ctypes.c_int - -NESTGPU_ConnectGroupSeq = _nestgpu.NESTGPU_ConnectGroupSeq -NESTGPU_ConnectGroupSeq.argtypes = (ctypes.c_void_p, ctypes.c_int, - ctypes.c_int, ctypes.c_int) -NESTGPU_ConnectGroupSeq.restype = ctypes.c_int - -NESTGPU_ConnectGroupGroup = _nestgpu.NESTGPU_ConnectGroupGroup -NESTGPU_ConnectGroupGroup.argtypes = (ctypes.c_void_p, ctypes.c_int, - ctypes.c_void_p, ctypes.c_int) -NESTGPU_ConnectGroupGroup.restype = ctypes.c_int - -def Connect(source, target, conn_dict, syn_dict): - "Connect two node groups" - if (type(source)!=list) & (type(source)!=tuple) & (type(source)!=NodeSeq): - raise ValueError("Unknown source type") - if (type(target)!=list) & (type(target)!=tuple) & (type(target)!=NodeSeq): - raise ValueError("Unknown target type") - - ConnSpecInit() - SynSpecInit() - for param_name in conn_dict: - if param_name=="rule": - for i_rule in range(len(conn_rule_name)): - if conn_dict[param_name]==conn_rule_name[i_rule]: - break - if i_rule < len(conn_rule_name): - SetConnSpecParam(param_name, i_rule) - else: - raise ValueError("Unknown connection rule") - elif ConnSpecIsParam(param_name): - SetConnSpecParam(param_name, conn_dict[param_name]) - else: - raise ValueError("Unknown connection parameter") - - array_size = RuleArraySize(conn_dict, source, target) - - for param_name in syn_dict: - if SynSpecIsIntParam(param_name): - val = syn_dict[param_name] - if ((param_name=="synapse_group") & (type(val)==SynGroup)): - val = val.i_syn_group - SetSynSpecIntParam(param_name, val) - elif SynSpecIsFloatParam(param_name): - fpar = syn_dict[param_name] - if (type(fpar)==dict): - SetSynParamFromArray(param_name, fpar, array_size) - else: - SetSynSpecFloatParam(param_name, fpar) - - elif SynSpecIsFloatPtParam(param_name): - SetSynSpecFloatPtParam(param_name, syn_dict[param_name]) - else: - raise ValueError("Unknown synapse parameter") - if (type(source)==NodeSeq) & (type(target)==NodeSeq) : - ret = NESTGPU_ConnectSeqSeq(source.i0, source.n, target.i0, target.n) - else: - if type(source)!=NodeSeq: - source_arr = (ctypes.c_int * len(source))(*source) - source_arr_pt = ctypes.cast(source_arr, ctypes.c_void_p) - if type(target)!=NodeSeq: - target_arr = (ctypes.c_int * len(target))(*target) - target_arr_pt = ctypes.cast(target_arr, ctypes.c_void_p) - if (type(source)==NodeSeq) & (type(target)!=NodeSeq): - ret = NESTGPU_ConnectSeqGroup(source.i0, source.n, target_arr_pt, - len(target)) - elif (type(source)!=NodeSeq) & (type(target)==NodeSeq): - ret = NESTGPU_ConnectGroupSeq(source_arr_pt, len(source), - target.i0, target.n) - else: - ret = NESTGPU_ConnectGroupGroup(source_arr_pt, len(source), - target_arr_pt, len(target)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_RemoteConnectSeqSeq = _nestgpu.NESTGPU_RemoteConnectSeqSeq -NESTGPU_RemoteConnectSeqSeq.argtypes = (ctypes.c_int, ctypes.c_int, - ctypes.c_int, ctypes.c_int, - ctypes.c_int, ctypes.c_int) -NESTGPU_RemoteConnectSeqSeq.restype = ctypes.c_int - -NESTGPU_RemoteConnectSeqGroup = _nestgpu.NESTGPU_RemoteConnectSeqGroup -NESTGPU_RemoteConnectSeqGroup.argtypes = (ctypes.c_int, ctypes.c_int, - ctypes.c_int, ctypes.c_int, - ctypes.c_void_p, ctypes.c_int) -NESTGPU_RemoteConnectSeqGroup.restype = ctypes.c_int - -NESTGPU_RemoteConnectGroupSeq = _nestgpu.NESTGPU_RemoteConnectGroupSeq -NESTGPU_RemoteConnectGroupSeq.argtypes = (ctypes.c_int, ctypes.c_void_p, - ctypes.c_int, ctypes.c_int, - ctypes.c_int, ctypes.c_int) -NESTGPU_RemoteConnectGroupSeq.restype = ctypes.c_int - -NESTGPU_RemoteConnectGroupGroup = _nestgpu.NESTGPU_RemoteConnectGroupGroup -NESTGPU_RemoteConnectGroupGroup.argtypes = (ctypes.c_int, ctypes.c_void_p, - ctypes.c_int, ctypes.c_int, - ctypes.c_void_p, ctypes.c_int) -NESTGPU_RemoteConnectGroupGroup.restype = ctypes.c_int - -def RemoteConnect(i_source_host, source, i_target_host, target, - conn_dict, syn_dict): - "Connect two node groups of differen mpi hosts" - if (type(i_source_host)!=int) | (type(i_target_host)!=int): - raise ValueError("Error in host index") - if (type(source)!=list) & (type(source)!=tuple) & (type(source)!=NodeSeq): - raise ValueError("Unknown source type") - if (type(target)!=list) & (type(target)!=tuple) & (type(target)!=NodeSeq): - raise ValueError("Unknown target type") - - ConnSpecInit() - SynSpecInit() - for param_name in conn_dict: - if param_name=="rule": - for i_rule in range(len(conn_rule_name)): - if conn_dict[param_name]==conn_rule_name[i_rule]: - break - if i_rule < len(conn_rule_name): - SetConnSpecParam(param_name, i_rule) - else: - raise ValueError("Unknown connection rule") - - elif ConnSpecIsParam(param_name): - SetConnSpecParam(param_name, conn_dict[param_name]) - else: - raise ValueError("Unknown connection parameter") - - array_size = RuleArraySize(conn_dict, source, target) - - for param_name in syn_dict: - if SynSpecIsIntParam(param_name): - SetSynSpecIntParam(param_name, syn_dict[param_name]) - elif SynSpecIsFloatParam(param_name): - fpar = syn_dict[param_name] - if (type(fpar)==dict): - SetSynParamFromArray(param_name, fpar, array_size) - else: - SetSynSpecFloatParam(param_name, fpar) - - elif SynSpecIsFloatPtParam(param_name): - SetSynSpecFloatPtParam(param_name, syn_dict[param_name]) - else: - raise ValueError("Unknown synapse parameter") - if (type(source)==NodeSeq) & (type(target)==NodeSeq) : - ret = NESTGPU_RemoteConnectSeqSeq(i_source_host, source.i0, source.n, - i_target_host, target.i0, target.n) - - else: - if type(source)!=NodeSeq: - source_arr = (ctypes.c_int * len(source))(*source) - source_arr_pt = ctypes.cast(source_arr, ctypes.c_void_p) - if type(target)!=NodeSeq: - target_arr = (ctypes.c_int * len(target))(*target) - target_arr_pt = ctypes.cast(target_arr, ctypes.c_void_p) - if (type(source)==NodeSeq) & (type(target)!=NodeSeq): - ret = NESTGPU_RemoteConnectSeqGroup(i_source_host, source.i0, - source.n, i_target_host, - target_arr_pt, len(target)) - elif (type(source)!=NodeSeq) & (type(target)==NodeSeq): - ret = NESTGPU_RemoteConnectGroupSeq(i_source_host, source_arr_pt, - len(source), - i_target_host, target.i0, - target.n) - else: - ret = NESTGPU_RemoteConnectGroupGroup(i_source_host, - source_arr_pt, - len(source), - i_target_host, - target_arr_pt, - len(target)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -def SetStatus(gen_object, params, val=None): - "Set neuron or synapse group parameters or variables using dictionaries" - if type(gen_object)==SynGroup: - return SetSynGroupStatus(gen_object, params, val) - nodes = gen_object - if val != None: - SetNeuronStatus(nodes, params, val) - elif type(params)==dict: - for param_name in params: - SetNeuronStatus(nodes, param_name, params[param_name]) - elif (type(params)==list) | (type(params) is tuple): - if len(params) != len(nodes): - raise ValueError("List should have the same size as nodes") - for param_dict in params: - if type(param_dict)!=dict: - raise ValueError("Type of list elements should be dict") - for param_name in param_dict: - SetNeuronStatus(nodes, param_name, param_dict[param_name]) - else: - raise ValueError("Wrong argument in SetStatus") - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - - -#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - -NESTGPU_GetSeqSeqConnections = _nestgpu.NESTGPU_GetSeqSeqConnections -NESTGPU_GetSeqSeqConnections.argtypes = (ctypes.c_int, ctypes.c_int, - ctypes.c_int, ctypes.c_int, - ctypes.c_int, c_int_p) -NESTGPU_GetSeqSeqConnections.restype = c_int_p - -NESTGPU_GetSeqGroupConnections = _nestgpu.NESTGPU_GetSeqGroupConnections -NESTGPU_GetSeqGroupConnections.argtypes = (ctypes.c_int, ctypes.c_int, - c_void_p, ctypes.c_int, - ctypes.c_int, c_int_p) -NESTGPU_GetSeqGroupConnections.restype = c_int_p - -NESTGPU_GetGroupSeqConnections = _nestgpu.NESTGPU_GetGroupSeqConnections -NESTGPU_GetGroupSeqConnections.argtypes = (c_void_p, ctypes.c_int, - ctypes.c_int, ctypes.c_int, - ctypes.c_int, c_int_p) -NESTGPU_GetGroupSeqConnections.restype = c_int_p - -NESTGPU_GetGroupGroupConnections = _nestgpu.NESTGPU_GetGroupGroupConnections -NESTGPU_GetGroupGroupConnections.argtypes = (c_void_p, ctypes.c_int, - c_void_p, ctypes.c_int, - ctypes.c_int, c_int_p) -NESTGPU_GetGroupGroupConnections.restype = c_int_p - -def GetConnections(source=None, target=None, syn_group=-1): - "Get connections between two node groups" - if source==None: - source = NodeSeq(None) - if target==None: - target = NodeSeq(None) - if (type(source)==int): - source = [source] - if (type(target)==int): - target = [target] - if (type(source)!=list) & (type(source)!=tuple) & (type(source)!=NodeSeq): - raise ValueError("Unknown source type") - if (type(target)!=list) & (type(target)!=tuple) & (type(target)!=NodeSeq): - raise ValueError("Unknown target type") - - n_conn = ctypes.c_int(0) - if (type(source)==NodeSeq) & (type(target)==NodeSeq) : - conn_arr = NESTGPU_GetSeqSeqConnections(source.i0, source.n, - target.i0, target.n, - syn_group, - ctypes.byref(n_conn)) - else: - if type(source)!=NodeSeq: - source_arr = (ctypes.c_int * len(source))(*source) - source_arr_pt = ctypes.cast(source_arr, ctypes.c_void_p) - if type(target)!=NodeSeq: - target_arr = (ctypes.c_int * len(target))(*target) - target_arr_pt = ctypes.cast(target_arr, ctypes.c_void_p) - if (type(source)==NodeSeq) & (type(target)!=NodeSeq): - conn_arr = NESTGPU_GetSeqGroupConnections(source.i0, source.n, - target_arr_pt, - len(target), - syn_group, - ctypes.byref(n_conn)) - elif (type(source)!=NodeSeq) & (type(target)==NodeSeq): - conn_arr = NESTGPU_GetGroupSeqConnections(source_arr_pt, - len(source), - target.i0, target.n, - syn_group, - ctypes.byref(n_conn)) - else: - conn_arr = NESTGPU_GetGroupGroupConnections(source_arr_pt, - len(source), - target_arr_pt, - len(target), - syn_group, - ctypes.byref(n_conn)) - - conn_list = [] - for i_conn in range(n_conn.value): - conn_id = ConnectionId(conn_arr[i_conn*3], conn_arr[i_conn*3 + 1], - conn_arr[i_conn*3 + 2]) - conn_list.append(conn_id) - - ret = conn_list - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetConnectionStatus = _nestgpu.NESTGPU_GetConnectionStatus -NESTGPU_GetConnectionStatus.argtypes = (ctypes.c_int, ctypes.c_int, - ctypes.c_int, c_int_p, - c_char_p, c_char_p, - c_float_p, c_float_p) -NESTGPU_GetConnectionStatus.restype = ctypes.c_int - -def GetConnectionStatus(conn_id): - i_source = conn_id.i_source - i_group = conn_id.i_group - i_conn = conn_id.i_conn - - i_target = ctypes.c_int(0) - i_port = ctypes.c_char() - i_syn = ctypes.c_char() - delay = ctypes.c_float(0.0) - weight = ctypes.c_float(0.0) - - NESTGPU_GetConnectionStatus(i_source, i_group, i_conn, - ctypes.byref(i_target), - ctypes.byref(i_port), - ctypes.byref(i_syn), - ctypes.byref(delay), - ctypes.byref(weight)) - i_target = i_target.value - i_port = ord(i_port.value) - i_syn = ord(i_syn.value) - delay = delay.value - weight = weight.value - conn_status_dict = {"source":i_source, "target":i_target, "port":i_port, - "syn":i_syn, "delay":delay, "weight":weight} - - return conn_status_dict - - -def GetStatus(gen_object, var_key=None): - "Get neuron group, connection or synapse group status" - if type(gen_object)==SynGroup: - return GetSynGroupStatus(gen_object, var_key) - - if type(gen_object)==NodeSeq: - gen_object = gen_object.ToList() - if (type(gen_object)==list) | (type(gen_object)==tuple): - status_list = [] - for gen_elem in gen_object: - elem_dict = GetStatus(gen_elem, var_key) - status_list.append(elem_dict) - return status_list - if (type(var_key)==list) | (type(var_key)==tuple): - status_list = [] - for var_elem in var_key: - var_value = GetStatus(gen_object, var_elem) - status_list.append(var_value) - return status_list - elif (var_key==None): - if (type(gen_object)==ConnectionId): - status_dict = GetConnectionStatus(gen_object) - elif (type(gen_object)==int): - i_node = gen_object - status_dict = {} - name_list = GetScalVarNames(i_node) + GetScalParamNames(i_node) \ - + GetPortVarNames(i_node) + GetPortParamNames(i_node) \ - + GetArrayVarNames(i_node) + GetArrayParamNames(i_node) - for var_name in name_list: - val = GetStatus(i_node, var_name) - status_dict[var_name] = val - else: - raise ValueError("Unknown object type in GetStatus") - return status_dict - elif (type(var_key)==str) | (type(var_key)==bytes): - if (type(gen_object)==ConnectionId): - status_dict = GetConnectionStatus(gen_object) - return status_dict[var_key] - elif (type(gen_object)==int): - i_node = gen_object - return GetNeuronStatus([i_node], var_key)[0] - else: - raise ValueError("Unknown object type in GetStatus") - - else: - raise ValueError("Unknown key type in GetStatus", type(var_key)) - - - -NESTGPU_CreateSynGroup = _nestgpu.NESTGPU_CreateSynGroup -NESTGPU_CreateSynGroup.argtypes = (c_char_p,) -NESTGPU_CreateSynGroup.restype = ctypes.c_int -def CreateSynGroup(model_name, status_dict=None): - "Create a synapse group" - if (type(status_dict)==dict): - syn_group = CreateSynGroup(model_name) - SetStatus(syn_group, status_dict) - return syn_group - elif status_dict!=None: - raise ValueError("Wrong argument in CreateSynGroup") - - c_model_name = ctypes.create_string_buffer(to_byte_str(model_name), \ - len(model_name)+1) - i_syn_group = NESTGPU_CreateSynGroup(c_model_name) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return SynGroup(i_syn_group) - - -NESTGPU_GetSynGroupNParam = _nestgpu.NESTGPU_GetSynGroupNParam -NESTGPU_GetSynGroupNParam.argtypes = (ctypes.c_int,) -NESTGPU_GetSynGroupNParam.restype = ctypes.c_int -def GetSynGroupNParam(syn_group): - "Get number of synapse parameters for a given synapse group" - if type(syn_group)!=SynGroup: - raise ValueError("Wrong argument type in GetSynGroupNParam") - i_syn_group = syn_group.i_syn_group - - ret = NESTGPU_GetSynGroupNParam(ctypes.c_int(i_syn_group)) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetSynGroupParamNames = _nestgpu.NESTGPU_GetSynGroupParamNames -NESTGPU_GetSynGroupParamNames.argtypes = (ctypes.c_int,) -NESTGPU_GetSynGroupParamNames.restype = ctypes.POINTER(c_char_p) -def GetSynGroupParamNames(syn_group): - "Get list of synapse group parameter names" - if type(syn_group)!=SynGroup: - raise ValueError("Wrong argument type in GetSynGroupParamNames") - i_syn_group = syn_group.i_syn_group - - n_param = GetSynGroupNParam(syn_group) - param_name_pp = ctypes.cast(NESTGPU_GetSynGroupParamNames( - ctypes.c_int(i_syn_group)), ctypes.POINTER(c_char_p)) - param_name_list = [] - for i in range(n_param): - param_name_p = param_name_pp[i] - param_name = ctypes.cast(param_name_p, ctypes.c_char_p).value - param_name_list.append(to_def_str(param_name)) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return param_name_list - - -NESTGPU_IsSynGroupParam = _nestgpu.NESTGPU_IsSynGroupParam -NESTGPU_IsSynGroupParam.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_IsSynGroupParam.restype = ctypes.c_int -def IsSynGroupParam(syn_group, param_name): - "Check name of synapse group parameter" - if type(syn_group)!=SynGroup: - raise ValueError("Wrong argument type in IsSynGroupParam") - i_syn_group = syn_group.i_syn_group - - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - ret = (NESTGPU_IsSynGroupParam(ctypes.c_int(i_syn_group), \ - c_param_name)!=0) - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_GetSynGroupParam = _nestgpu.NESTGPU_GetSynGroupParam -NESTGPU_GetSynGroupParam.argtypes = (ctypes.c_int, c_char_p) -NESTGPU_GetSynGroupParam.restype = ctypes.c_float -def GetSynGroupParam(syn_group, param_name): - "Get synapse group parameter value" - if type(syn_group)!=SynGroup: - raise ValueError("Wrong argument type in GetSynGroupParam") - i_syn_group = syn_group.i_syn_group - - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - - ret = NESTGPU_GetSynGroupParam(ctypes.c_int(i_syn_group), - c_param_name) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - - -NESTGPU_SetSynGroupParam = _nestgpu.NESTGPU_SetSynGroupParam -NESTGPU_SetSynGroupParam.argtypes = (ctypes.c_int, c_char_p, - ctypes.c_float) -NESTGPU_SetSynGroupParam.restype = ctypes.c_int -def SetSynGroupParam(syn_group, param_name, val): - "Set synapse group parameter value" - if type(syn_group)!=SynGroup: - raise ValueError("Wrong argument type in SetSynGroupParam") - i_syn_group = syn_group.i_syn_group - - c_param_name = ctypes.create_string_buffer(to_byte_str(param_name), - len(param_name)+1) - ret = NESTGPU_SetSynGroupParam(ctypes.c_int(i_syn_group), - c_param_name, ctypes.c_float(val)) - - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - return ret - -def GetSynGroupStatus(syn_group, var_key=None): - "Get synapse group status" - if type(syn_group)!=SynGroup: - raise ValueError("Wrong argument type in GetSynGroupStatus") - if (type(var_key)==list) | (type(var_key)==tuple): - status_list = [] - for var_elem in var_key: - var_value = GetSynGroupStatus(syn_group, var_elem) - status_list.append(var_value) - return status_list - elif (var_key==None): - status_dict = {} - name_list = GetSynGroupParamNames(syn_group) - for param_name in name_list: - val = GetSynGroupStatus(syn_group, param_name) - status_dict[param_name] = val - return status_dict - elif (type(var_key)==str) | (type(var_key)==bytes): - return GetSynGroupParam(syn_group, var_key) - else: - raise ValueError("Unknown key type in GetSynGroupStatus", type(var_key)) - -def SetSynGroupStatus(syn_group, params, val=None): - "Set synapse group parameters using dictionaries" - if type(syn_group)!=SynGroup: - raise ValueError("Wrong argument type in SetSynGroupStatus") - if ((type(params)==dict) & (val==None)): - for param_name in params: - SetSynGroupStatus(syn_group, param_name, params[param_name]) - elif (type(params)==str): - return SetSynGroupParam(syn_group, params, val) - else: - raise ValueError("Wrong argument in SetSynGroupStatus") - if GetErrorCode() != 0: - raise ValueError(GetErrorMessage()) - diff --git a/macOS/uninstall.sh b/macOS/uninstall.sh deleted file mode 100644 index 9bd4e9c97..000000000 --- a/macOS/uninstall.sh +++ /dev/null @@ -1,13 +0,0 @@ -# remove installation directory -rm -fr /usr/local/nestgpu - -# find python package directory -SITEDIR=$(python -m site --user-site) -SITEDIR3=$(python3 -m site --user-site) - -# remove .pth file -rm -f "$SITEDIR/nestgpu.pth" -rm -f "$SITEDIR3/nestgpu.pth" - -# remove symbolic link to the dynamic-link library from /usr/local/lib -rm -f /usr/local/lib/libnestgpu.so diff --git a/patch.sh b/patch.sh deleted file mode 100755 index 572b6206b..000000000 --- a/patch.sh +++ /dev/null @@ -1,3 +0,0 @@ -echo "Makefile patch for renaming libnestgpu.la to libnestgpu.so" -cat Makefile | sed 's/libnestgpu.la/libnestgpu.so/'> tmpfile -mv tmpfile Makefile diff --git a/postinstall.sh b/postinstall.sh deleted file mode 100644 index 06d572297..000000000 --- a/postinstall.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -echo "libtool running postinstall.sh" -install_name_tool -change @rpath/libcurand.10.dylib /usr/local/cuda/lib/libcurand.10.dylib /usr/local/lib/libnestgpu.so diff --git a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob.txt b/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob.txt deleted file mode 100644 index 616d38edf..000000000 --- a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob.txt +++ /dev/null @@ -1,26 +0,0 @@ -9970.100 -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 5.4432 - poisson_generator_time: 14.1657 - neuron_Update_time: 6.83508 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 25.1129 - GetSpike_time: 4.0969 - SpikeReset_time: 1.47109 - ExternalSpikeReset_time: 0 -Build real time = 61.468404 -Simulation real time = 58.720442 - -Times: - Total time: 119.988 s - Time to initialize: 0.001 s - Time to create: 3.572 s - Time to connect: 54.720 s - Time to calibrate: 2.975 s - Time to simulate: 58.721 s diff --git a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_b.txt b/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_b.txt deleted file mode 100644 index 794398190..000000000 --- a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_b.txt +++ /dev/null @@ -1,25 +0,0 @@ -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 5.46896 - poisson_generator_time: 14.22 - neuron_Update_time: 6.81275 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 25.5739 - GetSpike_time: 4.04125 - SpikeReset_time: 1.47209 - ExternalSpikeReset_time: 0 -Build real time = 61.078281 -Simulation real time = 59.141828 - -Times: - Total time: 119.954 s - Time to initialize: 0.001 s - Time to create: 3.471 s - Time to connect: 54.384 s - Time to calibrate: 2.956 s - Time to simulate: 59.142 s diff --git a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_cde.txt b/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_cde.txt deleted file mode 100644 index 508d91c3b..000000000 --- a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_cde.txt +++ /dev/null @@ -1,25 +0,0 @@ -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 5.60435 - poisson_generator_time: 14.2593 - neuron_Update_time: 7.17554 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 23.9151 - GetSpike_time: 4.14154 - SpikeReset_time: 1.55617 - ExternalSpikeReset_time: 0 -Build real time = 59.962113 -Simulation real time = 58.118082 - -Times: - Total time: 117.812 s - Time to initialize: 0.001 s - Time to create: 3.331 s - Time to connect: 53.476 s - Time to calibrate: 2.891 s - Time to simulate: 58.114 s diff --git a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_g_cde.txt b/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_g_cde.txt deleted file mode 100644 index cd2e45b82..000000000 --- a/python/Potjans_2014/old_results_gtx1050/log_time_10s_gtx1050mob_g_cde.txt +++ /dev/null @@ -1,25 +0,0 @@ -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 5.61054 - poisson_generator_time: 14.261 - neuron_Update_time: 6.37199 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 24.1544 - GetSpike_time: 4.14891 - SpikeReset_time: 1.56336 - ExternalSpikeReset_time: 0 -Build real time = 61.708650 -Simulation real time = 57.645261 - -Times: - Total time: 118.356 s - Time to initialize: 0.012 s - Time to create: 3.385 s - Time to connect: 54.386 s - Time to calibrate: 2.928 s - Time to simulate: 57.646 s diff --git a/python/Potjans_2014_hc/README.rst b/python/Potjans_2014_hc/README.rst deleted file mode 100644 index 6fff2a8dc..000000000 --- a/python/Potjans_2014_hc/README.rst +++ /dev/null @@ -1,105 +0,0 @@ -NEST GPU microcircuit -===================== - -This is a NEST GPU implementation of the microcircuit model by Potjans and Diesmann [1]_. -The network model represents four layers of cortex, L2/3, L4, L5, and L6, each consisting of a population of excitatory neurons and a population of inhibitory neurons. - -Citing this code -################ - -If you use this code, we ask you to cite the paper by Potjans and Diesmann [1]. - -File structure -############## - -* ``run_microcircuit.py``: an example script to try out the microcircuit -* ``network.py``: the main Network class with functions to build and simulate the network -* ``helpers.py``: helper functions for network construction, simulation and evaluation -* ``network_params.py``: network and neuron parameters -* ``stimulus_params.py``: parameters for optional external stimulation -* ``sim_params.py``: simulation parameters -* ``reference_data``: reference data and figures obtained by executing ``run_microcircuit.py`` with default parameters - -Running the simulation -###################### - -By default, the variables ``N_scaling`` and ``K_scaling`` in ``network_params.py`` are set to -`0.1`, which is a good choice for running the microcircuit on a local machine. -``N_scaling`` adjusts the number of neurons and ``K_scaling`` adjusts the indegrees. -The full network can be run by setting these values to `1`. -If this is done, the option to print the time progress should be switched off: ``'print_time': False`` in ``sim_params.py``. - -To run the simulation, simply use: - -.. code-block:: bash - - python run_microcircuit.py - -The output will be saved in the ``data`` directory. - - -Note on parameters -################## - -By default, the simulation uses external Poissonian input to excite all neuronal populations of the microcircuit, i.e., ``poisson_input': True`` in ``network_params.py``. -If set to ``False``, the Poissonian input is turned off and compensated approximately by calculated direct current (DC) input. -In addition to this ongoing external drive, a thalamic stimulation or a stimulation by an external DC input can be switched on in ``stimulus_params.py`` (the default for both types of stimuli is ``False``). - -The default random initialization of membrane voltages in this simulation uses population-specific means and standard deviations to reduce an initial activity burst in the network: ``'V_type': 'optimized'`` in ``network_params.py``. -Previous implementations used the same mean and standard deviation for all populations, which is here achieved by setting ``'V_type': 'original'``. - -Recommendations for benchmarking -################################ - -For benchmark simulations assessing network-construction and state-propagation times, the recommended changes to the default parameters are the following: - -``sim_params.py``: - -* ``'t_sim': 10000.0``: The biological simulation time should be at least `10` s for measuring the state propagation time. -* ``'rec_dev': []``: No recording devices. -* ``'local_num_threads': t``: Adjust the number of threads ``t`` per MPI process as needed for the benchmarks. -* ``'print_time': False'``: No printing of time progress. - -``network_params.py``: - -* ``'N_scaling': 1.``: Full number of neurons. -* ``'K_scaling': 1.``: Full indegrees. -* ``'poisson_input': False``: DC background input. - -Contributions to this NEST GPU microcircuit model implementation -################################################################ - -2020: Adapted for NEST GPU by Bruno Golosio - -Current communicating author of the NEST version: Johanna Senk - -2020: revision of code and documentation, and adaptation to NEST 3.0 by Johanna Senk (in collaboration with Sara Konradi, Stine Brekke Vennemo, Håkon Bakke Mørk, Alexander van Meegen, Sacha van Albada and Markus Diesmann) - -2019: optimized initialization of membrane voltages added by Han-Jia Jiang - -2016: first version implemented by Hendrik Rothe, Hannah Bos and Sacha van Albada - -Acknowledgments -############### - -Funding for the PyNEST microcircuit: This project has received funding from the European Union Seventh Framework Programme ([FP7/2007-2013]) under grant agreement n° 604102 (Human Brain Project, HBP) and the European Union’s Horizon 2020 Framework Programme for Research and Innovation under Specific Grant Agreement No. 720270 (Human Brain Project SGA1) and No. 785907 (Human Brain Project SGA2). - -Funding for [1]_: This work was supported by the Helmholtz Alliance on Systems Biology; European Union (FACETS, grant 15879 and BrainScaleS, grant 269921); Deutsch-Israelische Projektkooperation (DIP, grant F1.2); Bundesministerium für Bildung und Forschung, Germany (BMBF, grant 01GQ0420 to BCCN Freiburg), and the Next-Generation Supercomputer Project of the Ministry of education, culture, sports, science and technology (MEXT), Japan. Funding to pay the Open Access publication charges for this article was provided by Research Center Juelich, a member of the Helmholtz Association. - -Other implementations of the microcircuit model -############################################### -A `SLI version `__ by David Dahmen, Tom Tetzlaff, and Sacha van Albada, based on the original version by Tobias Potjans and Markus Diesmann, is also part of the NEST code base as an example. - -A `PyNN version `__ is part of the PyNN code base as an example. - -References -########## - -.. [1] Potjans TC. and Diesmann M. 2014. The cell-type specific cortical - microcircuit: relating structure and activity in a full-scale spiking - network model. Cerebral Cortex. 24(3):785–806. DOI: `10.1093/cercor/bhs358 `__. - -.. [2] van Albada SJ., Rowley AG., Senk J., Hopkins M., Schmidt M., Stokes AB., Lester DR., Diesmann M. and Furber SB. 2018. - Performance Comparison of the Digital Neuromorphic Hardware SpiNNaker - and the Neural Network Simulation Software NEST for a Full-Scale Cortical Microcircuit Model. - Front. Neurosci. 12:291. DOI: `10.3389/fnins.2018.00291 `__. diff --git a/python/Potjans_2014_hc/eval_microcircuit_time.py b/python/Potjans_2014_hc/eval_microcircuit_time.py deleted file mode 100644 index 3c2fa89b9..000000000 --- a/python/Potjans_2014_hc/eval_microcircuit_time.py +++ /dev/null @@ -1,93 +0,0 @@ -# -# eval_microcircuit_time.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Run Simulation ------------------------------------------ - -This is an example script for running the microcircuit model and generating -basic plots of the network activity. - -""" - -############################################################################### -# Import the necessary modules and start the time measurements. - -from stimulus_params import stim_dict -from network_params import net_dict -from sim_params_norec import sim_dict -import network -#import nestgpu as ngpu -import numpy as np -import time -time_start = time.time() - -############################################################################### -# Initialize the network with simulation, network and stimulation parameters, -# then create and connect all nodes, and finally simulate. -# The times for a presimulation and the main simulation are taken -# independently. A presimulation is useful because the spike activity typically -# exhibits a startup transient. In benchmark simulations, this transient should -# be excluded from a time measurement of the state propagation phase. Besides, -# statistical measures of the spike activity should only be computed after the -# transient has passed. - -net = network.Network(sim_dict, net_dict, stim_dict) -time_network = time.time() - -net.create() -time_create = time.time() - -net.connect() -time_connect = time.time() - -net.simulate(sim_dict['t_presim']) -time_presimulate = time.time() - -net.simulate(sim_dict['t_sim']) -time_simulate = time.time() - - -############################################################################### -# Summarize time measurements. Rank 0 usually takes longest because of the -# data evaluation and print calls. - -print( - '\nTimes:\n' + # of Rank {}:\n'.format( .Rank()) + - ' Total time: {:.3f} s\n'.format( - time_simulate - - time_start) + - ' Time to initialize: {:.3f} s\n'.format( - time_network - - time_start) + - ' Time to create: {:.3f} s\n'.format( - time_create - - time_network) + - ' Time to connect: {:.3f} s\n'.format( - time_connect - - time_create) + - ' Time to calibrate: {:.3f} s\n'.format( - time_presimulate - - time_connect) + - ' Time to simulate: {:.3f} s\n'.format( - time_simulate - - time_presimulate) ) diff --git a/python/Potjans_2014_hc/helpers.py b/python/Potjans_2014_hc/helpers.py deleted file mode 100644 index 00f1a3f95..000000000 --- a/python/Potjans_2014_hc/helpers.py +++ /dev/null @@ -1,421 +0,0 @@ -# -# helpers.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Helper Functions -------------------------------------------- - -Helper functions for network construction, simulation and evaluation of the -microcircuit. - -""" - -from matplotlib.patches import Polygon -import matplotlib.pyplot as plt -import os -import sys -import numpy as np -if 'DISPLAY' not in os.environ: - import matplotlib - matplotlib.use('Agg') - - -def num_synapses_from_conn_probs(conn_probs, popsize1, popsize2): - """Computes the total number of synapses between two populations from - connection probabilities. - - Here it is irrelevant which population is source and which target. - - Paramters - --------- - conn_probs - Matrix of connection probabilities. - popsize1 - Size of first poulation. - popsize2 - Size of second population. - - Returns - ------- - num_synapses - Matrix of synapse numbers. - """ - prod = np.outer(popsize1, popsize2) - num_synapses = np.log(1. - conn_probs) / np.log((prod - 1.) / prod) - return num_synapses - - -def postsynaptic_potential_to_current(C_m, tau_m, tau_syn): - """ Computes a factor to convert postsynaptic potentials to currents. - - The time course of the postsynaptic potential ``v`` is computed as - :math: `v(t)=(i*h)(t)` - with the exponential postsynaptic current - :math:`i(t)=J\mathrm{e}^{-t/\tau_\mathrm{syn}}\Theta (t)`, - the voltage impulse response - :math:`h(t)=\frac{1}{\tau_\mathrm{m}}\mathrm{e}^{-t/\tau_\mathrm{m}}\Theta (t)`, - and - :math:`\Theta(t)=1` if :math:`t\leq 0` and zero otherwise. - - The ``PSP`` is considered as the maximum of ``v``, i.e., it is - computed by setting the derivative of ``v(t)`` to zero. - The expression for the time point at which ``v`` reaches its maximum - can be found in Eq. 5 of [1]_. - - The amplitude of the postsynaptic current ``J`` corresponds to the - synaptic weight ``PSC``. - - References - ---------- - .. [1] Hanuschkin A, Kunkel S, Helias M, Morrison A and Diesmann M (2010) - A general and efficient method for incorporating precise spike times - in globally time-driven simulations. - Front. Neuroinform. 4:113. - DOI: `10.3389/fninf.2010.00113 `__. - - Parameters - ---------- - C_m - Membrane capacitance (in pF). - tau_m - Membrane time constant (in ms). - tau_syn - Synaptic time constant (in ms). - - Returns - ------- - PSC_over_PSP - Conversion factor to be multiplied to a `PSP` (in mV) to obtain a `PSC` - (in pA). - - """ - sub = 1. / (tau_syn - tau_m) - pre = tau_m * tau_syn / C_m * sub - frac = (tau_m / tau_syn) ** sub - - PSC_over_PSP = 1. / (pre * (frac**tau_m - frac**tau_syn)) - return PSC_over_PSP - - -def dc_input_compensating_poisson(bg_rate, K_ext, tau_syn, PSC_ext): - """ Computes DC input if no Poisson input is provided to the microcircuit. - - Parameters - ---------- - bg_rate - Rate of external Poisson generators (in spikes/s). - K_ext - External indegrees. - tau_syn - Synaptic time constant (in ms). - PSC_ext - Weight of external connections (in pA). - - Returns - ------- - DC - DC input (in pA) which compensates lacking Poisson input. - """ - DC = bg_rate * K_ext * PSC_ext * tau_syn * 0.001 - return DC - - -def adjust_weights_and_input_to_synapse_scaling( - full_num_neurons, - full_num_synapses, - K_scaling, - mean_PSC_matrix, - PSC_ext, - tau_syn, - full_mean_rates, - DC_amp, - poisson_input, - bg_rate, - K_ext): - """ Adjusts weights and external input to scaling of indegrees. - - The recurrent and external weights are adjusted to the scaling - of the indegrees. Extra DC input is added to compensate for the - scaling in order to preserve the mean and variance of the input. - - Parameters - ---------- - full_num_neurons - Total numbers of neurons. - full_num_synapses - Total numbers of synapses. - K_scaling - Scaling factor for indegrees. - mean_PSC_matrix - Weight matrix (in pA). - PSC_ext - External weight (in pA). - tau_syn - Synaptic time constant (in ms). - full_mean_rates - Firing rates of the full network (in spikes/s). - DC_amp - DC input current (in pA). - poisson_input - True if Poisson input is used. - bg_rate - Firing rate of Poisson generators (in spikes/s). - K_ext - External indegrees. - - Returns - ------- - PSC_matrix_new - Adjusted weight matrix (in pA). - PSC_ext_new - Adjusted external weight (in pA). - DC_amp_new - Adjusted DC input (in pA). - - """ - PSC_matrix_new = mean_PSC_matrix / np.sqrt(K_scaling) - PSC_ext_new = PSC_ext / np.sqrt(K_scaling) - - # recurrent input of full network - indegree_matrix = \ - full_num_synapses / full_num_neurons[:, np.newaxis] - input_rec = np.sum(mean_PSC_matrix * indegree_matrix * full_mean_rates, - axis=1) - - DC_amp_new = DC_amp \ - + 0.001 * tau_syn * (1. - np.sqrt(K_scaling)) * input_rec - - if poisson_input: - input_ext = PSC_ext * K_ext * bg_rate - DC_amp_new += 0.001 * tau_syn * (1. - np.sqrt(K_scaling)) * input_ext - return PSC_matrix_new, PSC_ext_new, DC_amp_new - - -def plot_raster(path, name, begin, end, N_scaling): - """ Creates a spike raster plot of the network activity. - - Parameters - ----------- - path - Path where the spike times are stored. - name - Name of the spike detector. - begin - Time point (in ms) to start plotting spikes (included). - end - Time point (in ms) to stop plotting spikes (included). - N_scaling - Scaling factor for number of neurons. - - Returns - ------- - None - - """ - fs = 18 # fontsize - ylabels = ['L2/3', 'L4', 'L5', 'L6'] - color_list = np.tile(['#595289', '#af143c'], 4) - - sd_names, node_ids, data = __load_spike_times(path, name, begin, end) - last_node_id = node_ids[-1, -1] - mod_node_ids = np.abs(node_ids - last_node_id) + 1 - - label_pos = [(mod_node_ids[i, 0] + mod_node_ids[i + 1, 1]) / - 2. for i in np.arange(0, 8, 2)] - - stp = 1 - if N_scaling > 0.1: - stp = int(10. * N_scaling) - print(' Only spikes of neurons in steps of {} are shown.'.format(stp)) - - plt.figure(figsize=(8, 6)) - for i, n in enumerate(sd_names): - times = data[i]['time_ms'] - neurons = np.abs(data[i]['sender'] - last_node_id) + 1 - plt.plot(times[::stp], neurons[::stp], '.', color=color_list[i]) - plt.xlabel('time [ms]', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(label_pos, ylabels, fontsize=fs) - plt.savefig(os.path.join(path, 'raster_plot.png'), dpi=300) - - -def firing_rates(path, name, begin, end): - """ Computes mean and standard deviation of firing rates per population. - - The firing rate of each neuron in each population is computed and stored - in a .dat file in the directory of the spike detectors. The mean firing - rate and its standard deviation are printed out for each population. - - Parameters - ----------- - path - Path where the spike times are stored. - name - Name of the spike detector. - begin - Time point (in ms) to start calculating the firing rates (included). - end - Time point (in ms) to stop calculating the firing rates (included). - - Returns - ------- - None - - """ - sd_names, node_ids, data = __load_spike_times(path, name, begin, end) - all_mean_rates = [] - all_std_rates = [] - for i, n in enumerate(sd_names): - senders = data[i]['sender'] - # 1 more bin than node ids per population - bins = np.arange(node_ids[i, 0], node_ids[i, 1] + 2) - spike_count_per_neuron, _ = np.histogram(senders, bins=bins) - rate_per_neuron = spike_count_per_neuron * 1000. / (end - begin) - np.savetxt(os.path.join(path, ('rate' + str(i) + '.dat')), - rate_per_neuron) - # zeros are included - all_mean_rates.append(np.mean(rate_per_neuron)) - all_std_rates.append(np.std(rate_per_neuron)) - print('Mean rates: {} spikes/s'.format(np.around(all_mean_rates, decimals=3))) - print('Standard deviation of rates: {} spikes/s'.format( - np.around(all_std_rates, decimals=3))) - - -def boxplot(path, populations): - """ Creates a boxblot of the firing rates of all populations. - - To create the boxplot, the firing rates of each neuron in each population - need to be computed with the function ``firing_rate()``. - - Parameters - ----------- - path - Path where the firing rates are stored. - populations - Names of neuronal populations. - - Returns - ------- - None - - """ - fs = 18 - pop_names = [string.replace('23', '2/3') for string in populations] - label_pos = list(range(len(populations), 0, -1)) - color_list = ['#af143c', '#595289'] - medianprops = dict(linestyle='-', linewidth=2.5, color='black') - meanprops = dict(linestyle='--', linewidth=2.5, color='lightgray') - - rates_per_neuron_rev = [] - for i in np.arange(len(populations))[::-1]: - rates_per_neuron_rev.append( - np.loadtxt(os.path.join(path, ('rate' + str(i) + '.dat')))) - - plt.figure(figsize=(8, 6)) - bp = plt.boxplot(rates_per_neuron_rev, 0, 'rs', 0, medianprops=medianprops, - meanprops=meanprops, meanline=True, showmeans=True) - plt.setp(bp['boxes'], color='black') - plt.setp(bp['whiskers'], color='black') - plt.setp(bp['fliers'], color='red', marker='+') - - # boxcolors - for i in np.arange(len(populations)): - boxX = [] - boxY = [] - box = bp['boxes'][i] - for j in list(range(5)): - boxX.append(box.get_xdata()[j]) - boxY.append(box.get_ydata()[j]) - boxCoords = list(zip(boxX, boxY)) - k = i % 2 - boxPolygon = Polygon(boxCoords, facecolor=color_list[k]) - plt.gca().add_patch(boxPolygon) - plt.xlabel('firing rate [spikes/s]', fontsize=fs) - plt.yticks(label_pos, pop_names, fontsize=fs) - plt.xticks(fontsize=fs) - plt.savefig(os.path.join(path, 'box_plot.png'), dpi=300) - - -def __gather_metadata(path): - """ Reads first and last ids of - neurons in each population. - - Parameters - ------------ - path - Path where the spike detector files are stored. - - Returns - ------- - node_ids - Lowest and highest id of nodes in each population. - - """ - # load node IDs - node_idfile = open(path + 'population_nodeids.dat', 'r') - node_ids = [] - for l in node_idfile: - node_ids.append(l.split()) - node_ids = np.array(node_ids, dtype='i4') - return node_ids - - -def __load_spike_times(path, name, begin, end): - """ Loads spike times of each spike detector. - - Parameters - ---------- - path - Path where the files with the spike times are stored. - name - Name of the spike detector. - begin - Time point (in ms) to start loading spike times (included). - end - Time point (in ms) to stop loading spike times (included). - - Returns - ------- - data - Dictionary containing spike times in the interval from ``begin`` - to ``end``. - - """ - node_ids = __gather_metadata(path) - data = {} - dtype = {'names': ('sender', 'time_ms'), # as in header - 'formats': ('i4', 'f8')} - #print(node_ids) - - sd_names = {} - - for i_pop in range(8): - fn = os.path.join(path, 'spike_times_' + str(i_pop) + '.dat') - data_i_raw = np.loadtxt(fn, skiprows=1, dtype=dtype) - - data_i_raw = np.sort(data_i_raw, order='time_ms') - # begin and end are included if they exist - low = np.searchsorted(data_i_raw['time_ms'], v=begin, side='left') - high = np.searchsorted(data_i_raw['time_ms'], v=end, side='right') - data[i_pop] = data_i_raw[low:high] - sd_names[i_pop] = 'spike_times_' + str(i_pop) - return sd_names, node_ids, data diff --git a/python/Potjans_2014_hc/log_time_10s_gtx1050mob.txt b/python/Potjans_2014_hc/log_time_10s_gtx1050mob.txt deleted file mode 100644 index 616d38edf..000000000 --- a/python/Potjans_2014_hc/log_time_10s_gtx1050mob.txt +++ /dev/null @@ -1,26 +0,0 @@ -9970.100 -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 5.4432 - poisson_generator_time: 14.1657 - neuron_Update_time: 6.83508 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 25.1129 - GetSpike_time: 4.0969 - SpikeReset_time: 1.47109 - ExternalSpikeReset_time: 0 -Build real time = 61.468404 -Simulation real time = 58.720442 - -Times: - Total time: 119.988 s - Time to initialize: 0.001 s - Time to create: 3.572 s - Time to connect: 54.720 s - Time to calibrate: 2.975 s - Time to simulate: 58.721 s diff --git a/python/Potjans_2014_hc/log_time_10s_gtx1050mob_b.txt b/python/Potjans_2014_hc/log_time_10s_gtx1050mob_b.txt deleted file mode 100644 index 794398190..000000000 --- a/python/Potjans_2014_hc/log_time_10s_gtx1050mob_b.txt +++ /dev/null @@ -1,25 +0,0 @@ -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 5.46896 - poisson_generator_time: 14.22 - neuron_Update_time: 6.81275 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 25.5739 - GetSpike_time: 4.04125 - SpikeReset_time: 1.47209 - ExternalSpikeReset_time: 0 -Build real time = 61.078281 -Simulation real time = 59.141828 - -Times: - Total time: 119.954 s - Time to initialize: 0.001 s - Time to create: 3.471 s - Time to connect: 54.384 s - Time to calibrate: 2.956 s - Time to simulate: 59.142 s diff --git a/python/Potjans_2014_hc/log_time_10s_gtx1050mob_cde.txt b/python/Potjans_2014_hc/log_time_10s_gtx1050mob_cde.txt deleted file mode 100644 index 508d91c3b..000000000 --- a/python/Potjans_2014_hc/log_time_10s_gtx1050mob_cde.txt +++ /dev/null @@ -1,25 +0,0 @@ -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 5.60435 - poisson_generator_time: 14.2593 - neuron_Update_time: 7.17554 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 23.9151 - GetSpike_time: 4.14154 - SpikeReset_time: 1.55617 - ExternalSpikeReset_time: 0 -Build real time = 59.962113 -Simulation real time = 58.118082 - -Times: - Total time: 117.812 s - Time to initialize: 0.001 s - Time to create: 3.331 s - Time to connect: 53.476 s - Time to calibrate: 2.891 s - Time to simulate: 58.114 s diff --git a/python/Potjans_2014_hc/network.py b/python/Potjans_2014_hc/network.py deleted file mode 100644 index 230802092..000000000 --- a/python/Potjans_2014_hc/network.py +++ /dev/null @@ -1,548 +0,0 @@ -# -# network.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - -""" Microcircuit: Network Class ----------------------------------------- - -Main file of the microcircuit defining the ``Network`` class with functions to -build and simulate the network. - -""" - -import os -import numpy as np -import nestgpu as ngpu -import helpers - - -class Network: - """ Provides functions to setup NEST GPU, to create and connect all nodes - of the network, to simulate, and to evaluate the resulting spike data. - - Instantiating a Network object derives dependent parameters and already - initializes NEST GPU. - - Parameters - --------- - sim_dict - Dictionary containing all parameters specific to the simulation - (see: ``sim_params.py``). - net_dict - Dictionary containing all parameters specific to the neuron and - network models (see: ``network_params.py``). - stim_dict - Optional dictionary containing all parameter specific to the stimulus - (see: ``stimulus_params.py``) - - """ - - def __init__(self, sim_dict, net_dict, stim_dict=None): - self.sim_dict = sim_dict - self.net_dict = net_dict - self.stim_dict = stim_dict - self.Rank = 0 - - # data directory - self.data_path = sim_dict['data_path'] - if self.Rank == 0: - if os.path.isdir(self.data_path): - message = ' Directory already existed.' - if self.sim_dict['overwrite_files']: - message += ' Old data will be overwritten.' - else: - os.mkdir(self.data_path) - message = ' Directory has been created.' - print('Data will be written to: {}\n{}\n'.format(self.data_path, - message)) - - # derive parameters based on input dictionaries - self.__derive_parameters() - - # initialize NEST GPU - self.__setup_ngpu() - - def create(self): - """ Creates all network nodes. - - Neuronal populations and recording and stimulating devices are created. - - """ - self.__create_neuronal_populations() - if len(self.sim_dict['rec_dev']) > 0: - self.__create_recording_devices() - if self.net_dict['poisson_input']: - self.__create_poisson_bg_input() - if self.stim_dict['thalamic_input']: - self.__create_thalamic_stim_input() - if self.stim_dict['dc_input']: - self.__create_dc_stim_input() - - def connect(self): - """ Connects the network. - - Recurrent connections among neurons of the neuronal populations are - established, and recording and stimulating devices are connected. - - The ``self.__connect_*()`` functions use ``ngpu.Connect()`` calls which - set up the postsynaptic connectivity. - The full - connection infrastructure including presynaptic connectivity is set up - afterwards in the preparation phase of the simulation. - The preparation phase is usually induced by the first - ``ngpu.Simulate()`` call. - For including this phase in measurements of the connection time, - we induce it here explicitly by calling ``ngpu.Prepare()``. - - """ - self.__connect_neuronal_populations() - - #if len(self.sim_dict['rec_dev']) > 0: - # self.__connect_recording_devices() - if self.net_dict['poisson_input']: - self.__connect_poisson_bg_input() - if self.stim_dict['thalamic_input']: - self.__connect_thalamic_stim_input() - if self.stim_dict['dc_input']: - self.__connect_dc_stim_input() - - #ngpu.Prepare() - #ngpu.Cleanup() - - def simulate(self, t_sim): - """ Simulates the microcircuit. - - Parameters - ---------- - t_sim - Simulation time (in ms). - - """ - if self.Rank == 0: - print('Simulating {} ms.'.format(t_sim)) - - ngpu.Simulate(t_sim) - - def evaluate(self, raster_plot_interval, firing_rates_interval): - """ Displays simulation results. - - Creates a spike raster plot. - Calculates the firing rate of each population and displays them as a - box plot. - - Parameters - ---------- - raster_plot_interval - Times (in ms) to start and stop loading spike times for raster plot - (included). - firing_rates_interval - Times (in ms) to start and stop lading spike times for computing - firing rates (included). - - Returns - ------- - None - - """ - - spike_times_net = ngpu.GetRecSpikeTimes(self.neurons) - popid = 0 - for i_pop in range(len(self.pops)): - population = self.pops[i_pop] - data = [] - spike_times_list = spike_times_net[popid:popid+len(population)] - popid += len(population) - for i_neur in range(len(population)): - spike_times = spike_times_list[i_neur] - if (len(spike_times) != 0): - # print("i_pop:", i_pop, " i_neur:", i_neur, " n_spikes:", - # len(spike_times)) - for t in spike_times: - data.append([population[i_neur], t]) - arr = np.array(data) - fn = os.path.join(self.data_path, 'spike_times_' + str(i_pop) + - '.dat') - fmt='%d\t%.3f' - np.savetxt(fn, arr, fmt=fmt, header="sender time_ms", - comments='') - if self.Rank == 0: - print('Interval to plot spikes: {} ms'.format(raster_plot_interval)) - helpers.plot_raster( - self.data_path, - 'spike_detector', - raster_plot_interval[0], - raster_plot_interval[1], - self.net_dict['N_scaling']) - - print('Interval to compute firing rates: {} ms'.format( - firing_rates_interval)) - helpers.firing_rates( - self.data_path, 'spike_detector', - firing_rates_interval[0], firing_rates_interval[1]) - helpers.boxplot(self.data_path, self.net_dict['populations']) - - def __derive_parameters(self): - """ - Derives and adjusts parameters and stores them as class attributes. - """ - self.num_pops = len(self.net_dict['populations']) - - # total number of synapses between neuronal populations before scaling - full_num_synapses = helpers.num_synapses_from_conn_probs( - self.net_dict['conn_probs'], - self.net_dict['full_num_neurons'], - self.net_dict['full_num_neurons']) - - # scaled numbers of neurons and synapses - self.num_neurons = np.round((self.net_dict['full_num_neurons'] * - self.net_dict['N_scaling'])).astype(int) - self.num_synapses = np.round((full_num_synapses * - self.net_dict['N_scaling'] * - self.net_dict['K_scaling'])).astype(int) - self.ext_indegrees = np.round((self.net_dict['K_ext'] * - self.net_dict['K_scaling'])).astype(int) - - # conversion from PSPs to PSCs - PSC_over_PSP = helpers.postsynaptic_potential_to_current( - self.net_dict['neuron_params']['C_m'], - self.net_dict['neuron_params']['tau_m'], - self.net_dict['neuron_params']['tau_syn']) - PSC_matrix_mean = self.net_dict['PSP_matrix_mean'] * PSC_over_PSP - PSC_ext = self.net_dict['PSP_exc_mean'] * PSC_over_PSP - - # DC input compensates for potentially missing Poisson input - if self.net_dict['poisson_input']: - DC_amp = np.zeros(self.num_pops) - else: - if self.Rank == 0: - print('DC input compensates for missing Poisson input.\n') - DC_amp = helpers.dc_input_compensating_poisson( - self.net_dict['bg_rate'], self.net_dict['K_ext'], - self.net_dict['neuron_params']['tau_syn'], - PSC_ext) - - # adjust weights and DC amplitude if the indegree is scaled - if self.net_dict['K_scaling'] != 1: - PSC_matrix_mean, PSC_ext, DC_amp = \ - helpers.adjust_weights_and_input_to_synapse_scaling( - self.net_dict['full_num_neurons'], - full_num_synapses, self.net_dict['K_scaling'], - PSC_matrix_mean, PSC_ext, - self.net_dict['neuron_params']['tau_syn'], - self.net_dict['full_mean_rates'], - DC_amp, - self.net_dict['poisson_input'], - self.net_dict['bg_rate'], self.net_dict['K_ext']) - - # store final parameters as class attributes - self.weight_matrix_mean = PSC_matrix_mean - self.weight_ext = PSC_ext - self.DC_amp = DC_amp - - # thalamic input - if self.stim_dict['thalamic_input']: - num_th_synapses = helpers.num_synapses_from_conn_probs( - self.stim_dict['conn_probs_th'], - self.stim_dict['num_th_neurons'], - self.net_dict['full_num_neurons'])[0] - self.weight_th = self.stim_dict['PSP_th'] * PSC_over_PSP - if self.net_dict['K_scaling'] != 1: - num_th_synapses *= self.net_dict['K_scaling'] - self.weight_th /= np.sqrt(self.net_dict['K_scaling']) - self.num_th_synapses = np.round(num_th_synapses).astype(int) - - if self.Rank == 0: - message = '' - if self.net_dict['N_scaling'] != 1: - message += \ - 'Neuron numbers are scaled by a factor of {:.3f}.\n'.format( - self.net_dict['N_scaling']) - if self.net_dict['K_scaling'] != 1: - message += \ - 'Indegrees are scaled by a factor of {:.3f}.'.format( - self.net_dict['K_scaling']) - message += '\n Weights and DC input are adjusted to compensate.\n' - print(message) - - def __setup_ngpu(self): - """ Initializes NEST GPU. - - """ - - # set seeds for random number generation - - master_seed = self.sim_dict['master_seed'] - ngpu.SetRandomSeed(master_seed) - ngpu.SetKernelStatus({'print_time': self.sim_dict['print_time']}) - self.sim_resolution = self.sim_dict['sim_resolution'] - - def __create_neuronal_populations(self): - """ Creates the neuronal populations. - - The neuronal populations are created and the parameters are assigned - to them. The initial membrane potential of the neurons is drawn from - normal distributions dependent on the parameter ``V0_type``. - - The first and last neuron id of each population is written to file. - """ - if self.Rank == 0: - print('Creating neuronal populations.') - - self.n_tot_neurons = 0 - for i in np.arange(self.num_pops): - self.n_tot_neurons = self.n_tot_neurons + self.num_neurons[i] - - self.neurons = ngpu.Create(self.net_dict['neuron_model'], - self.n_tot_neurons) - - self.pops = [] - for i in np.arange(self.num_pops): - if i==0: - i_node_0 = 0 - i_node_1 = i_node_0 + self.num_neurons[i] - #print("i_node_1 ", i_node_1) - population = self.neurons[i_node_0:i_node_1] - i_node_0 = i_node_1 - - tau_syn_ex=self.net_dict['neuron_params']['tau_syn'] - tau_syn_in=self.net_dict['neuron_params']['tau_syn'] - E_L=self.net_dict['neuron_params']['E_L'] - V_th=self.net_dict['neuron_params']['V_th'] - V_reset=self.net_dict['neuron_params']['V_reset'] - t_ref=self.net_dict['neuron_params']['t_ref'] - I_e=self.DC_amp[i] - - # ngpu.SetStatus(population, {"tau_ex":tau_syn_ex, - # "tau_in":tau_syn_in, - # "E_L":E_L, - # "Theta_rel":V_th - E_L, - # "V_reset_rel":V_reset - E_L, - # "t_ref":t_ref, - # "I_e":I_e}) - #print(population.i0) - #print(population.n) - ngpu.SetStatus(population, {"I_e":I_e}) - - if self.net_dict['V0_type'] == 'optimized': - V_rel_mean = self.net_dict['neuron_params']['V0_mean'] \ - ['optimized'][i] - E_L - V_std = self.net_dict['neuron_params']['V0_std'] \ - ['optimized'][i] - elif self.net_dict['V0_type'] == 'original': - V_rel_mean = self.net_dict['neuron_params']['V0_mean'] \ - ['original'] - E_L, - V_std = self.net_dict['neuron_params']['V0_std']['original'] - else: - raise Exception( - 'V0_type incorrect. ' + - 'Valid options are "optimized" and "original".') - - #print("V_rel_mean", V_rel_mean) - #print("V_std", V_std) - #print("pop size: ", len(population)) - ngpu.SetStatus(population, {"V_m_rel": {"distribution":"normal", - "mu":V_rel_mean, - "sigma":V_std } } ) - - self.pops.append(population) - - # write node ids to file - if self.Rank == 0: - fn = os.path.join(self.data_path, 'population_nodeids.dat') - with open(fn, 'w+') as f: - for pop in self.pops: - f.write('{} {}\n'.format(pop[0], - pop[len(pop)-1])) - - def __create_recording_devices(self): - """ Creates one recording device of each kind per population. - - Only devices which are given in ``sim_dict['rec_dev']`` are created. - - """ - if self.Rank == 0: - print('Creating recording devices.') - - if 'spike_detector' in self.sim_dict['rec_dev']: - if self.Rank == 0: - print(' Activating spike time recording.') - #for pop in self.pops: - ngpu.ActivateRecSpikeTimes(self.neurons, 1000) - - #self.spike_detectors = ngpu.Create('spike_detector', - # self.num_pops) - #if 'voltmeter' in self.sim_dict['rec_dev']: - # if self.Rank == 0: - # print(' Creating voltmeters.') - # self.voltmeters = ngpu.CreateRecord('V_m_rel', - # n=self.num_pops, - # params=vm_dict) - - def __create_poisson_bg_input(self): - """ Creates the Poisson generators for ongoing background input if - specified in ``network_params.py``. - - If ``poisson_input`` is ``False``, DC input is applied for compensation - in ``create_neuronal_populations()``. - - """ - if self.Rank == 0: - print('Creating Poisson generators for background input.') - - self.poisson_bg_input = ngpu.Create('poisson_generator', - self.num_pops) - rate_list = self.net_dict['bg_rate'] * self.ext_indegrees - for i_pop in range(self.num_pops): - ngpu.SetStatus([self.poisson_bg_input[i_pop]], - "rate", rate_list[i_pop]) - - def __create_thalamic_stim_input(self): - """ Creates the thalamic neuronal population if specified in - ``stim_dict``. - - Thalamic neurons are of type ``parrot_neuron`` and receive input from a - Poisson generator. - Note that the number of thalamic neurons is not scaled with - ``N_scaling``. - - """ - if self.Rank == 0: - print('Creating thalamic input for external stimulation.') - - self.thalamic_population = ngpu.Create( - 'parrot_neuron', n=self.stim_dict['num_th_neurons']) - - self.poisson_th = ngpu.Create('poisson_generator') - self.poisson_th.set( - rate=self.stim_dict['th_rate'], - start=self.stim_dict['th_start'], - stop=(self.stim_dict['th_start'] + self.stim_dict['th_duration'])) - - def __connect_neuronal_populations(self): - """ Creates the recurrent connections between neuronal populations. """ - if self.Rank == 0: - print('Connecting neuronal populations recurrently.') - - for i, target_pop in enumerate(self.pops): - for j, source_pop in enumerate(self.pops): - if self.num_synapses[i][j] >= 0.: - conn_dict_rec = { - 'rule': 'fixed_total_number', - 'total_num': self.num_synapses[i][j]} - - w_mean = self.weight_matrix_mean[i][j] - w_std = abs(self.weight_matrix_mean[i][j] * - self.net_dict['weight_rel_std']) - - if w_mean < 0: - w_min = w_mean-3.0*w_std - w_max = 0.0 - # i_receptor = 1 - else: - w_min = 0.0 - w_max = w_mean+3.0*w_std - # i_receptor = 0 - - d_mean = self.net_dict['delay_matrix_mean'][i][j] - d_std = (self.net_dict['delay_matrix_mean'][i][j] * - self.net_dict['delay_rel_std']) - d_min = self.sim_resolution - d_max = d_mean+3.0*d_std - - syn_dict = { - 'weight': {'distribution':'normal_clipped', - 'mu':w_mean, 'low':w_min, - 'high':w_max, - 'sigma':w_std}, - 'delay': {'distribution':'normal_clipped', - 'mu':d_mean, 'low':d_min, - 'high':d_max, - 'sigma':d_std}} - #'receptor':i_receptor} - - ngpu.Connect( - source_pop, target_pop, conn_dict_rec, syn_dict) - - #def __connect_recording_devices(self): - # """ Connects the recording devices to the microcircuit.""" - # if self.Rank == 0: - # print('Connecting recording devices.') - # - # for i, target_pop in enumerate(self.pops): - # if 'spike_detector' in self.sim_dict['rec_dev']: - # conn_dict = {'rule': 'all_to_all'} - # syn_dict = {'weight': 1.0, 'delay': self.sim_resolution} - # ngpu.Connect(target_pop, [self.spike_detectors[i]], - # conn_dict, syn_dict) - - def __connect_poisson_bg_input(self): - """ Connects the Poisson generators to the microcircuit.""" - if self.Rank == 0: - print('Connecting Poisson generators for background input.') - - for i, target_pop in enumerate(self.pops): - conn_dict_poisson = {'rule': 'all_to_all'} - - syn_dict_poisson = { - 'weight': self.weight_ext, - 'delay': self.net_dict['delay_poisson']} - - ngpu.Connect( - [self.poisson_bg_input[i]], target_pop, - conn_dict_poisson, syn_dict_poisson) - - def __connect_thalamic_stim_input(self): - """ Connects the thalamic input to the neuronal populations.""" - if self.Rank == 0: - print('Connecting thalamic input.') - - # connect Poisson input to thalamic population - ngpu.Connect(self.poisson_th, self.thalamic_population) - - # connect thalamic population to neuronal populations - for i, target_pop in enumerate(self.pops): - conn_dict_th = { - 'rule': 'fixed_total_number', - 'N': self.num_th_synapses[i]} - - w_mean = self.weight_th, - w_std = self.weight_th * self.net_dict['weight_rel_std'] - w_min = 0.0, - w_max = w_mean + 3.0*w_std - - d_mean = self.stim_dict['delay_th_mean'] - d_std = (self.stim_dict['delay_th_mean'] * - self.stim_dict['delay_th_rel_std']) - d_min = self.sim_resolution - d_max = d_mean + 3.0*d_std - - syn_dict_th = { - 'weight': {"distribution":"normal_clipped", - "mu":w_mean, "low":w_min, - "high":w_max, - "sigma":w_std}, - 'delay': {"distribution":"normal_clipped", - "mu":d_mean, "low":d_min, - "high":d_max, - "sigma":d_std}} - - ngpu.Connect( - self.thalamic_population, target_pop, - conn_spec=conn_dict_th, syn_spec=syn_dict_th) - diff --git a/python/Potjans_2014_hc/network_params.py b/python/Potjans_2014_hc/network_params.py deleted file mode 100644 index 664f8b61d..000000000 --- a/python/Potjans_2014_hc/network_params.py +++ /dev/null @@ -1,166 +0,0 @@ -# -# network_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Network Parameters ---------------------------------------------- - -A dictionary with base network and neuron parameters is enhanced with derived -parameters. - -""" - -import numpy as np - - -def get_exc_inh_matrix(val_exc, val_inh, num_pops): - """ Creates a matrix for excitatory and inhibitory values. - - Parameters - ---------- - val_exc - Excitatory value. - val_inh - Inhibitory value. - num_pops - Number of populations. - - Returns - ------- - matrix - A matrix of of size (num_pops x num_pops). - - """ - matrix = np.zeros((num_pops, num_pops)) - matrix[:, 0:num_pops:2] = val_exc - matrix[:, 1:num_pops:2] = val_inh - return matrix - - -net_dict = { - # factor to scale the number of neurons - 'N_scaling': 1.0, # 0.1, - # factor to scale the indegrees - 'K_scaling': 1.0, # 0.1, - # neuron model - 'neuron_model': 'iaf_psc_exp_hc', - # names of the simulated neuronal populations - 'populations': ['L23E', 'L23I', 'L4E', 'L4I', 'L5E', 'L5I', 'L6E', 'L6I'], - # number of neurons in the different populations (same order as - # 'populations') - 'full_num_neurons': - np.array([20683, 5834, 21915, 5479, 4850, 1065, 14395, 2948]), - # mean rates of the different populations in the non-scaled version of the - # microcircuit (in spikes/s; same order as in 'populations'); - # necessary for the scaling of the network. - # The values were optained by running this PyNEST microcircuit with 12 MPI - # processes and both 'N_scaling' and 'K_scaling' set to 1. - 'full_mean_rates': - np.array([0.943, 3.026, 4.368, 5.882, 7.733, 8.664, 1.096, 7.851]), - # connection probabilities (the first index corresponds to the targets - # and the second to the sources) - 'conn_probs': - np.array( - [[0.1009, 0.1689, 0.0437, 0.0818, 0.0323, 0., 0.0076, 0.], - [0.1346, 0.1371, 0.0316, 0.0515, 0.0755, 0., 0.0042, 0.], - [0.0077, 0.0059, 0.0497, 0.135, 0.0067, 0.0003, 0.0453, 0.], - [0.0691, 0.0029, 0.0794, 0.1597, 0.0033, 0., 0.1057, 0.], - [0.1004, 0.0622, 0.0505, 0.0057, 0.0831, 0.3726, 0.0204, 0.], - [0.0548, 0.0269, 0.0257, 0.0022, 0.06, 0.3158, 0.0086, 0.], - [0.0156, 0.0066, 0.0211, 0.0166, 0.0572, 0.0197, 0.0396, 0.2252], - [0.0364, 0.001, 0.0034, 0.0005, 0.0277, 0.008, 0.0658, 0.1443]]), - # mean amplitude of excitatory postsynaptic potential (in mV) - 'PSP_exc_mean': 0.15, - # relative standard deviation of the weight - 'weight_rel_std': 0.1, - # relative inhibitory weight - 'g': -4, - # mean delay of excitatory connections (in ms) - 'delay_exc_mean': 1.5, - # mean delay of inhibitory connections (in ms) - 'delay_inh_mean': 0.75, - # relative standard deviation of the delay of excitatory and - # inhibitory connections - 'delay_rel_std': 0.5, - - # turn Poisson input on or off (True or False) - # if False: DC input is applied for compensation - 'poisson_input': True, - # indegree of external connections to the different populations (same order - # as in 'populations') - 'K_ext': np.array([1600, 1500, 2100, 1900, 2000, 1900, 2900, 2100]), - # rate of the Poisson generator (in spikes/s) - 'bg_rate': 8., - # delay from the Poisson generator to the network (in ms) - 'delay_poisson': 1.5, - - # initial conditions for the membrane potential, options are: - # 'original': uniform mean and standard deviation for all populations as - # used in earlier implementations of the model - # 'optimized': population-specific mean and standard deviation, allowing a - # reduction of the initial activity burst in the network - # (default) - 'V0_type': 'optimized', - # parameters of the neuron model - 'neuron_params': { - # membrane potential average for the neurons (in mV) - 'V0_mean': {'original': -58.0, - 'optimized': [-68.28, -63.16, -63.33, -63.45, - -63.11, -61.66, -66.72, -61.43]}, - # standard deviation of the average membrane potential (in mV) - 'V0_std': {'original': 10.0, - 'optimized': [5.36, 4.57, 4.74, 4.94, - 4.94, 4.55, 5.46, 4.48]}, - # reset membrane potential of the neurons (in mV) - 'E_L': -65.0, - # threshold potential of the neurons (in mV) - 'V_th': -50.0, - # membrane potential after a spike (in mV) - 'V_reset': -65.0, - # membrane capacitance (in pF) - 'C_m': 250.0, - # membrane time constant (in ms) - 'tau_m': 10.0, - # time constant of postsynaptic currents (in ms) - 'tau_syn': 0.5, - # refractory period of the neurons after a spike (in ms) - 't_ref': 2.0}} - -# derive matrix of mean PSPs, -# the mean PSP of the connection from L4E to L23E is doubled -PSP_matrix_mean = get_exc_inh_matrix( - net_dict['PSP_exc_mean'], - net_dict['PSP_exc_mean'] * net_dict['g'], - len(net_dict['populations'])) -PSP_matrix_mean[0, 2] = 2. * net_dict['PSP_exc_mean'] - -updated_dict = { - # matrix of mean PSPs - 'PSP_matrix_mean': PSP_matrix_mean, - - # matrix of mean delays - 'delay_matrix_mean': get_exc_inh_matrix( - net_dict['delay_exc_mean'], - net_dict['delay_inh_mean'], - len(net_dict['populations']))} - -net_dict.update(updated_dict) diff --git a/python/Potjans_2014_hc/run_microcircuit.py b/python/Potjans_2014_hc/run_microcircuit.py deleted file mode 100644 index 9d211f962..000000000 --- a/python/Potjans_2014_hc/run_microcircuit.py +++ /dev/null @@ -1,110 +0,0 @@ -# -# run_microcircuit.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Run Simulation ------------------------------------------ - -This is an example script for running the microcircuit model and generating -basic plots of the network activity. - -""" - -############################################################################### -# Import the necessary modules and start the time measurements. - -from stimulus_params import stim_dict -from network_params import net_dict -from sim_params import sim_dict -import network -#import nestgpu as ngpu -import numpy as np -import time -time_start = time.time() - -############################################################################### -# Initialize the network with simulation, network and stimulation parameters, -# then create and connect all nodes, and finally simulate. -# The times for a presimulation and the main simulation are taken -# independently. A presimulation is useful because the spike activity typically -# exhibits a startup transient. In benchmark simulations, this transient should -# be excluded from a time measurement of the state propagation phase. Besides, -# statistical measures of the spike activity should only be computed after the -# transient has passed. - -net = network.Network(sim_dict, net_dict, stim_dict) -time_network = time.time() - -net.create() -time_create = time.time() - -net.connect() -time_connect = time.time() - -net.simulate(sim_dict['t_presim']) -time_presimulate = time.time() - -net.simulate(sim_dict['t_sim']) -time_simulate = time.time() - -############################################################################### -# Plot a spike raster of the simulated neurons and a box plot of the firing -# rates for each population. -# For visual purposes only, spikes 100 ms before and 100 ms after the thalamic -# stimulus time are plotted here by default. -# The computation of spike rates discards the presimulation time to exclude -# initialization artifacts. - -raster_plot_interval = np.array([stim_dict['th_start'] - 100.0, - stim_dict['th_start'] + 100.0]) -firing_rates_interval = np.array([sim_dict['t_presim'], - sim_dict['t_presim'] + sim_dict['t_sim']]) -net.evaluate(raster_plot_interval, firing_rates_interval) -time_evaluate = time.time() - -############################################################################### -# Summarize time measurements. Rank 0 usually takes longest because of the -# data evaluation and print calls. - -print( - '\nTimes:\n' + # of Rank {}:\n'.format( .Rank()) + - ' Total time: {:.3f} s\n'.format( - time_evaluate - - time_start) + - ' Time to initialize: {:.3f} s\n'.format( - time_network - - time_start) + - ' Time to create: {:.3f} s\n'.format( - time_create - - time_network) + - ' Time to connect: {:.3f} s\n'.format( - time_connect - - time_create) + - ' Time to presimulate: {:.3f} s\n'.format( - time_presimulate - - time_connect) + - ' Time to simulate: {:.3f} s\n'.format( - time_simulate - - time_presimulate) + - ' Time to evaluate: {:.3f} s\n'.format( - time_evaluate - - time_simulate)) diff --git a/python/Potjans_2014_hc/script.sh b/python/Potjans_2014_hc/script.sh deleted file mode 100644 index a44932069..000000000 --- a/python/Potjans_2014_hc/script.sh +++ /dev/null @@ -1,5 +0,0 @@ -for i in $(seq 0 9); do - cat sim_params.templ | sed "s/__seed__/1234$i/" > sim_params.py - python3 run_microcircuit.py - mv data data$i -done diff --git a/python/Potjans_2014_hc/sim_params.py b/python/Potjans_2014_hc/sim_params.py deleted file mode 100644 index b7fbff797..000000000 --- a/python/Potjans_2014_hc/sim_params.py +++ /dev/null @@ -1,59 +0,0 @@ -# -# sim_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Simulation Parameters ------------------------------------------------- - -A dictionary with parameters defining the simulation. - -""" - -import os - -sim_dict = { - # The full simulation time is the sum of a presimulation time and the main - # simulation time. - # presimulation time (in ms) - 't_presim': 1000.0, - # simulation time (in ms) - 't_sim': 10000.0, - # resolution of the simulation (in ms) - 'sim_resolution': 0.1, - # list of recording devices, default is 'spike_detector'. A 'voltmeter' can - # be added to record membrane voltages of the neurons. Nothing will be - # recorded if an empty list is given. - 'rec_dev': ['spike_detector'], - # path to save the output data - 'data_path': os.path.join(os.getcwd(), 'data/'), - # masterseed for NEST GPU and NumPy - 'master_seed': 12349, #55, - # number of threads per MPI process - 'local_num_threads': 1, - # recording interval of the membrane potential (in ms) - 'rec_V_int': 1.0, - # if True, data will be overwritten, - # if False, a NESTError is raised if the files already exist - 'overwrite_files': True, - # print the time progress. This should only be used when the simulation - # is run on a local machine. - 'print_time': False} diff --git a/python/Potjans_2014_hc/sim_params.templ b/python/Potjans_2014_hc/sim_params.templ deleted file mode 100644 index 5cf654a73..000000000 --- a/python/Potjans_2014_hc/sim_params.templ +++ /dev/null @@ -1,58 +0,0 @@ -# -# sim_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# - - -"""PyNEST Microcircuit: Simulation Parameters ------------------------------------------------- - -A dictionary with parameters defining the simulation. - -""" - -import os - -sim_dict = { - # The full simulation time is the sum of a presimulation time and the main - # simulation time. - # presimulation time (in ms) - 't_presim': 1000.0, - # simulation time (in ms) - 't_sim': 10000.0, - # resolution of the simulation (in ms) - 'sim_resolution': 0.1, - # list of recording devices, default is 'spike_detector'. A 'voltmeter' can - # be added to record membrane voltages of the neurons. Nothing will be - # recorded if an empty list is given. - 'rec_dev': ['spike_detector'], - # path to save the output data - 'data_path': os.path.join(os.getcwd(), 'data/'), - # masterseed for NEST GPU and NumPy - 'master_seed': __seed__, #55, - # number of threads per MPI process - 'local_num_threads': 1, - # recording interval of the membrane potential (in ms) - 'rec_V_int': 1.0, - # if True, data will be overwritten, - # if False, a NESTError is raised if the files already exist - 'overwrite_files': True, - # print the time progress. This should only be used when the simulation - # is run on a local machine. - 'print_time': False} diff --git a/python/Potjans_2014_hc/sim_params_norec.py b/python/Potjans_2014_hc/sim_params_norec.py deleted file mode 100644 index db9468144..000000000 --- a/python/Potjans_2014_hc/sim_params_norec.py +++ /dev/null @@ -1,59 +0,0 @@ -# -# sim_params_norec.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Simulation Parameters ------------------------------------------------- - -A dictionary with parameters defining the simulation. - -""" - -import os - -sim_dict = { - # The full simulation time is the sum of a presimulation time and the main - # simulation time. - # presimulation time (in ms) - 't_presim': 0.1, - # simulation time (in ms) - 't_sim': 10000.0, - # resolution of the simulation (in ms) - 'sim_resolution': 0.1, - # list of recording devices, default is 'spike_detector'. A 'voltmeter' can - # be added to record membrane voltages of the neurons. Nothing will be - # recorded if an empty list is given. - 'rec_dev': [], - # path to save the output data - 'data_path': os.path.join(os.getcwd(), 'data/'), - # masterseed for NEST GPU and NumPy - 'master_seed': 12349, #55, - # number of threads per MPI process - 'local_num_threads': 1, - # recording interval of the membrane potential (in ms) - 'rec_V_int': 1.0, - # if True, data will be overwritten, - # if False, a NESTError is raised if the files already exist - 'overwrite_files': True, - # print the time progress. This should only be used when the simulation - # is run on a local machine. - 'print_time': False} diff --git a/python/Potjans_2014_hc/stimulus_params.py b/python/Potjans_2014_hc/stimulus_params.py deleted file mode 100644 index 42d397dfd..000000000 --- a/python/Potjans_2014_hc/stimulus_params.py +++ /dev/null @@ -1,67 +0,0 @@ -# -# stimulus_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -""" PyNEST Microcircuit: Stimulus Parameters ------------------------------------------------ - -A dictionary with parameters for an optional external transient stimulation. -Thalamic input and DC input can be switched on individually. - -""" - -import numpy as np - -stim_dict = { - # optional thalamic input - # turn thalamic input on or off (True or False) - 'thalamic_input': False, - # start of the thalamic input (in ms) - 'th_start': 700.0, - # duration of the thalamic input (in ms) - 'th_duration': 10.0, - # rate of the thalamic input (in spikes/s) - 'th_rate': 120.0, - # number of thalamic neurons - 'num_th_neurons': 902, - # connection probabilities of the thalamus to the different populations - # (same order as in 'populations' in 'net_dict') - 'conn_probs_th': - np.array([0.0, 0.0, 0.0983, 0.0619, 0.0, 0.0, 0.0512, 0.0196]), - # mean amplitude of the thalamic postsynaptic potential (in mV), - # standard deviation will be taken from 'net_dict' - 'PSP_th': 0.15, - # mean delay of the thalamic input (in ms) - 'delay_th_mean': 1.5, - # relative standard deviation of the thalamic delay (in ms) - 'delay_th_rel_std': 0.5, - - # optional DC input - # turn DC input on or off (True or False) - 'dc_input': False, - # start of the DC input (in ms) - 'dc_start': 650.0, - # duration of the DC input (in ms) - 'dc_dur': 100.0, - # amplitude of the DC input (in pA); final amplitude is population-specific - # and will be obtained by multiplication with 'K_ext' - 'dc_amp': 0.3} diff --git a/python/Potjans_2014_s/README.rst b/python/Potjans_2014_s/README.rst deleted file mode 100644 index 6fff2a8dc..000000000 --- a/python/Potjans_2014_s/README.rst +++ /dev/null @@ -1,105 +0,0 @@ -NEST GPU microcircuit -===================== - -This is a NEST GPU implementation of the microcircuit model by Potjans and Diesmann [1]_. -The network model represents four layers of cortex, L2/3, L4, L5, and L6, each consisting of a population of excitatory neurons and a population of inhibitory neurons. - -Citing this code -################ - -If you use this code, we ask you to cite the paper by Potjans and Diesmann [1]. - -File structure -############## - -* ``run_microcircuit.py``: an example script to try out the microcircuit -* ``network.py``: the main Network class with functions to build and simulate the network -* ``helpers.py``: helper functions for network construction, simulation and evaluation -* ``network_params.py``: network and neuron parameters -* ``stimulus_params.py``: parameters for optional external stimulation -* ``sim_params.py``: simulation parameters -* ``reference_data``: reference data and figures obtained by executing ``run_microcircuit.py`` with default parameters - -Running the simulation -###################### - -By default, the variables ``N_scaling`` and ``K_scaling`` in ``network_params.py`` are set to -`0.1`, which is a good choice for running the microcircuit on a local machine. -``N_scaling`` adjusts the number of neurons and ``K_scaling`` adjusts the indegrees. -The full network can be run by setting these values to `1`. -If this is done, the option to print the time progress should be switched off: ``'print_time': False`` in ``sim_params.py``. - -To run the simulation, simply use: - -.. code-block:: bash - - python run_microcircuit.py - -The output will be saved in the ``data`` directory. - - -Note on parameters -################## - -By default, the simulation uses external Poissonian input to excite all neuronal populations of the microcircuit, i.e., ``poisson_input': True`` in ``network_params.py``. -If set to ``False``, the Poissonian input is turned off and compensated approximately by calculated direct current (DC) input. -In addition to this ongoing external drive, a thalamic stimulation or a stimulation by an external DC input can be switched on in ``stimulus_params.py`` (the default for both types of stimuli is ``False``). - -The default random initialization of membrane voltages in this simulation uses population-specific means and standard deviations to reduce an initial activity burst in the network: ``'V_type': 'optimized'`` in ``network_params.py``. -Previous implementations used the same mean and standard deviation for all populations, which is here achieved by setting ``'V_type': 'original'``. - -Recommendations for benchmarking -################################ - -For benchmark simulations assessing network-construction and state-propagation times, the recommended changes to the default parameters are the following: - -``sim_params.py``: - -* ``'t_sim': 10000.0``: The biological simulation time should be at least `10` s for measuring the state propagation time. -* ``'rec_dev': []``: No recording devices. -* ``'local_num_threads': t``: Adjust the number of threads ``t`` per MPI process as needed for the benchmarks. -* ``'print_time': False'``: No printing of time progress. - -``network_params.py``: - -* ``'N_scaling': 1.``: Full number of neurons. -* ``'K_scaling': 1.``: Full indegrees. -* ``'poisson_input': False``: DC background input. - -Contributions to this NEST GPU microcircuit model implementation -################################################################ - -2020: Adapted for NEST GPU by Bruno Golosio - -Current communicating author of the NEST version: Johanna Senk - -2020: revision of code and documentation, and adaptation to NEST 3.0 by Johanna Senk (in collaboration with Sara Konradi, Stine Brekke Vennemo, Håkon Bakke Mørk, Alexander van Meegen, Sacha van Albada and Markus Diesmann) - -2019: optimized initialization of membrane voltages added by Han-Jia Jiang - -2016: first version implemented by Hendrik Rothe, Hannah Bos and Sacha van Albada - -Acknowledgments -############### - -Funding for the PyNEST microcircuit: This project has received funding from the European Union Seventh Framework Programme ([FP7/2007-2013]) under grant agreement n° 604102 (Human Brain Project, HBP) and the European Union’s Horizon 2020 Framework Programme for Research and Innovation under Specific Grant Agreement No. 720270 (Human Brain Project SGA1) and No. 785907 (Human Brain Project SGA2). - -Funding for [1]_: This work was supported by the Helmholtz Alliance on Systems Biology; European Union (FACETS, grant 15879 and BrainScaleS, grant 269921); Deutsch-Israelische Projektkooperation (DIP, grant F1.2); Bundesministerium für Bildung und Forschung, Germany (BMBF, grant 01GQ0420 to BCCN Freiburg), and the Next-Generation Supercomputer Project of the Ministry of education, culture, sports, science and technology (MEXT), Japan. Funding to pay the Open Access publication charges for this article was provided by Research Center Juelich, a member of the Helmholtz Association. - -Other implementations of the microcircuit model -############################################### -A `SLI version `__ by David Dahmen, Tom Tetzlaff, and Sacha van Albada, based on the original version by Tobias Potjans and Markus Diesmann, is also part of the NEST code base as an example. - -A `PyNN version `__ is part of the PyNN code base as an example. - -References -########## - -.. [1] Potjans TC. and Diesmann M. 2014. The cell-type specific cortical - microcircuit: relating structure and activity in a full-scale spiking - network model. Cerebral Cortex. 24(3):785–806. DOI: `10.1093/cercor/bhs358 `__. - -.. [2] van Albada SJ., Rowley AG., Senk J., Hopkins M., Schmidt M., Stokes AB., Lester DR., Diesmann M. and Furber SB. 2018. - Performance Comparison of the Digital Neuromorphic Hardware SpiNNaker - and the Neural Network Simulation Software NEST for a Full-Scale Cortical Microcircuit Model. - Front. Neurosci. 12:291. DOI: `10.3389/fnins.2018.00291 `__. diff --git a/python/Potjans_2014_s/eval_microcircuit_time.py b/python/Potjans_2014_s/eval_microcircuit_time.py deleted file mode 100644 index 3c2fa89b9..000000000 --- a/python/Potjans_2014_s/eval_microcircuit_time.py +++ /dev/null @@ -1,93 +0,0 @@ -# -# eval_microcircuit_time.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Run Simulation ------------------------------------------ - -This is an example script for running the microcircuit model and generating -basic plots of the network activity. - -""" - -############################################################################### -# Import the necessary modules and start the time measurements. - -from stimulus_params import stim_dict -from network_params import net_dict -from sim_params_norec import sim_dict -import network -#import nestgpu as ngpu -import numpy as np -import time -time_start = time.time() - -############################################################################### -# Initialize the network with simulation, network and stimulation parameters, -# then create and connect all nodes, and finally simulate. -# The times for a presimulation and the main simulation are taken -# independently. A presimulation is useful because the spike activity typically -# exhibits a startup transient. In benchmark simulations, this transient should -# be excluded from a time measurement of the state propagation phase. Besides, -# statistical measures of the spike activity should only be computed after the -# transient has passed. - -net = network.Network(sim_dict, net_dict, stim_dict) -time_network = time.time() - -net.create() -time_create = time.time() - -net.connect() -time_connect = time.time() - -net.simulate(sim_dict['t_presim']) -time_presimulate = time.time() - -net.simulate(sim_dict['t_sim']) -time_simulate = time.time() - - -############################################################################### -# Summarize time measurements. Rank 0 usually takes longest because of the -# data evaluation and print calls. - -print( - '\nTimes:\n' + # of Rank {}:\n'.format( .Rank()) + - ' Total time: {:.3f} s\n'.format( - time_simulate - - time_start) + - ' Time to initialize: {:.3f} s\n'.format( - time_network - - time_start) + - ' Time to create: {:.3f} s\n'.format( - time_create - - time_network) + - ' Time to connect: {:.3f} s\n'.format( - time_connect - - time_create) + - ' Time to calibrate: {:.3f} s\n'.format( - time_presimulate - - time_connect) + - ' Time to simulate: {:.3f} s\n'.format( - time_simulate - - time_presimulate) ) diff --git a/python/Potjans_2014_s/helpers.py b/python/Potjans_2014_s/helpers.py deleted file mode 100644 index 00f1a3f95..000000000 --- a/python/Potjans_2014_s/helpers.py +++ /dev/null @@ -1,421 +0,0 @@ -# -# helpers.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Helper Functions -------------------------------------------- - -Helper functions for network construction, simulation and evaluation of the -microcircuit. - -""" - -from matplotlib.patches import Polygon -import matplotlib.pyplot as plt -import os -import sys -import numpy as np -if 'DISPLAY' not in os.environ: - import matplotlib - matplotlib.use('Agg') - - -def num_synapses_from_conn_probs(conn_probs, popsize1, popsize2): - """Computes the total number of synapses between two populations from - connection probabilities. - - Here it is irrelevant which population is source and which target. - - Paramters - --------- - conn_probs - Matrix of connection probabilities. - popsize1 - Size of first poulation. - popsize2 - Size of second population. - - Returns - ------- - num_synapses - Matrix of synapse numbers. - """ - prod = np.outer(popsize1, popsize2) - num_synapses = np.log(1. - conn_probs) / np.log((prod - 1.) / prod) - return num_synapses - - -def postsynaptic_potential_to_current(C_m, tau_m, tau_syn): - """ Computes a factor to convert postsynaptic potentials to currents. - - The time course of the postsynaptic potential ``v`` is computed as - :math: `v(t)=(i*h)(t)` - with the exponential postsynaptic current - :math:`i(t)=J\mathrm{e}^{-t/\tau_\mathrm{syn}}\Theta (t)`, - the voltage impulse response - :math:`h(t)=\frac{1}{\tau_\mathrm{m}}\mathrm{e}^{-t/\tau_\mathrm{m}}\Theta (t)`, - and - :math:`\Theta(t)=1` if :math:`t\leq 0` and zero otherwise. - - The ``PSP`` is considered as the maximum of ``v``, i.e., it is - computed by setting the derivative of ``v(t)`` to zero. - The expression for the time point at which ``v`` reaches its maximum - can be found in Eq. 5 of [1]_. - - The amplitude of the postsynaptic current ``J`` corresponds to the - synaptic weight ``PSC``. - - References - ---------- - .. [1] Hanuschkin A, Kunkel S, Helias M, Morrison A and Diesmann M (2010) - A general and efficient method for incorporating precise spike times - in globally time-driven simulations. - Front. Neuroinform. 4:113. - DOI: `10.3389/fninf.2010.00113 `__. - - Parameters - ---------- - C_m - Membrane capacitance (in pF). - tau_m - Membrane time constant (in ms). - tau_syn - Synaptic time constant (in ms). - - Returns - ------- - PSC_over_PSP - Conversion factor to be multiplied to a `PSP` (in mV) to obtain a `PSC` - (in pA). - - """ - sub = 1. / (tau_syn - tau_m) - pre = tau_m * tau_syn / C_m * sub - frac = (tau_m / tau_syn) ** sub - - PSC_over_PSP = 1. / (pre * (frac**tau_m - frac**tau_syn)) - return PSC_over_PSP - - -def dc_input_compensating_poisson(bg_rate, K_ext, tau_syn, PSC_ext): - """ Computes DC input if no Poisson input is provided to the microcircuit. - - Parameters - ---------- - bg_rate - Rate of external Poisson generators (in spikes/s). - K_ext - External indegrees. - tau_syn - Synaptic time constant (in ms). - PSC_ext - Weight of external connections (in pA). - - Returns - ------- - DC - DC input (in pA) which compensates lacking Poisson input. - """ - DC = bg_rate * K_ext * PSC_ext * tau_syn * 0.001 - return DC - - -def adjust_weights_and_input_to_synapse_scaling( - full_num_neurons, - full_num_synapses, - K_scaling, - mean_PSC_matrix, - PSC_ext, - tau_syn, - full_mean_rates, - DC_amp, - poisson_input, - bg_rate, - K_ext): - """ Adjusts weights and external input to scaling of indegrees. - - The recurrent and external weights are adjusted to the scaling - of the indegrees. Extra DC input is added to compensate for the - scaling in order to preserve the mean and variance of the input. - - Parameters - ---------- - full_num_neurons - Total numbers of neurons. - full_num_synapses - Total numbers of synapses. - K_scaling - Scaling factor for indegrees. - mean_PSC_matrix - Weight matrix (in pA). - PSC_ext - External weight (in pA). - tau_syn - Synaptic time constant (in ms). - full_mean_rates - Firing rates of the full network (in spikes/s). - DC_amp - DC input current (in pA). - poisson_input - True if Poisson input is used. - bg_rate - Firing rate of Poisson generators (in spikes/s). - K_ext - External indegrees. - - Returns - ------- - PSC_matrix_new - Adjusted weight matrix (in pA). - PSC_ext_new - Adjusted external weight (in pA). - DC_amp_new - Adjusted DC input (in pA). - - """ - PSC_matrix_new = mean_PSC_matrix / np.sqrt(K_scaling) - PSC_ext_new = PSC_ext / np.sqrt(K_scaling) - - # recurrent input of full network - indegree_matrix = \ - full_num_synapses / full_num_neurons[:, np.newaxis] - input_rec = np.sum(mean_PSC_matrix * indegree_matrix * full_mean_rates, - axis=1) - - DC_amp_new = DC_amp \ - + 0.001 * tau_syn * (1. - np.sqrt(K_scaling)) * input_rec - - if poisson_input: - input_ext = PSC_ext * K_ext * bg_rate - DC_amp_new += 0.001 * tau_syn * (1. - np.sqrt(K_scaling)) * input_ext - return PSC_matrix_new, PSC_ext_new, DC_amp_new - - -def plot_raster(path, name, begin, end, N_scaling): - """ Creates a spike raster plot of the network activity. - - Parameters - ----------- - path - Path where the spike times are stored. - name - Name of the spike detector. - begin - Time point (in ms) to start plotting spikes (included). - end - Time point (in ms) to stop plotting spikes (included). - N_scaling - Scaling factor for number of neurons. - - Returns - ------- - None - - """ - fs = 18 # fontsize - ylabels = ['L2/3', 'L4', 'L5', 'L6'] - color_list = np.tile(['#595289', '#af143c'], 4) - - sd_names, node_ids, data = __load_spike_times(path, name, begin, end) - last_node_id = node_ids[-1, -1] - mod_node_ids = np.abs(node_ids - last_node_id) + 1 - - label_pos = [(mod_node_ids[i, 0] + mod_node_ids[i + 1, 1]) / - 2. for i in np.arange(0, 8, 2)] - - stp = 1 - if N_scaling > 0.1: - stp = int(10. * N_scaling) - print(' Only spikes of neurons in steps of {} are shown.'.format(stp)) - - plt.figure(figsize=(8, 6)) - for i, n in enumerate(sd_names): - times = data[i]['time_ms'] - neurons = np.abs(data[i]['sender'] - last_node_id) + 1 - plt.plot(times[::stp], neurons[::stp], '.', color=color_list[i]) - plt.xlabel('time [ms]', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(label_pos, ylabels, fontsize=fs) - plt.savefig(os.path.join(path, 'raster_plot.png'), dpi=300) - - -def firing_rates(path, name, begin, end): - """ Computes mean and standard deviation of firing rates per population. - - The firing rate of each neuron in each population is computed and stored - in a .dat file in the directory of the spike detectors. The mean firing - rate and its standard deviation are printed out for each population. - - Parameters - ----------- - path - Path where the spike times are stored. - name - Name of the spike detector. - begin - Time point (in ms) to start calculating the firing rates (included). - end - Time point (in ms) to stop calculating the firing rates (included). - - Returns - ------- - None - - """ - sd_names, node_ids, data = __load_spike_times(path, name, begin, end) - all_mean_rates = [] - all_std_rates = [] - for i, n in enumerate(sd_names): - senders = data[i]['sender'] - # 1 more bin than node ids per population - bins = np.arange(node_ids[i, 0], node_ids[i, 1] + 2) - spike_count_per_neuron, _ = np.histogram(senders, bins=bins) - rate_per_neuron = spike_count_per_neuron * 1000. / (end - begin) - np.savetxt(os.path.join(path, ('rate' + str(i) + '.dat')), - rate_per_neuron) - # zeros are included - all_mean_rates.append(np.mean(rate_per_neuron)) - all_std_rates.append(np.std(rate_per_neuron)) - print('Mean rates: {} spikes/s'.format(np.around(all_mean_rates, decimals=3))) - print('Standard deviation of rates: {} spikes/s'.format( - np.around(all_std_rates, decimals=3))) - - -def boxplot(path, populations): - """ Creates a boxblot of the firing rates of all populations. - - To create the boxplot, the firing rates of each neuron in each population - need to be computed with the function ``firing_rate()``. - - Parameters - ----------- - path - Path where the firing rates are stored. - populations - Names of neuronal populations. - - Returns - ------- - None - - """ - fs = 18 - pop_names = [string.replace('23', '2/3') for string in populations] - label_pos = list(range(len(populations), 0, -1)) - color_list = ['#af143c', '#595289'] - medianprops = dict(linestyle='-', linewidth=2.5, color='black') - meanprops = dict(linestyle='--', linewidth=2.5, color='lightgray') - - rates_per_neuron_rev = [] - for i in np.arange(len(populations))[::-1]: - rates_per_neuron_rev.append( - np.loadtxt(os.path.join(path, ('rate' + str(i) + '.dat')))) - - plt.figure(figsize=(8, 6)) - bp = plt.boxplot(rates_per_neuron_rev, 0, 'rs', 0, medianprops=medianprops, - meanprops=meanprops, meanline=True, showmeans=True) - plt.setp(bp['boxes'], color='black') - plt.setp(bp['whiskers'], color='black') - plt.setp(bp['fliers'], color='red', marker='+') - - # boxcolors - for i in np.arange(len(populations)): - boxX = [] - boxY = [] - box = bp['boxes'][i] - for j in list(range(5)): - boxX.append(box.get_xdata()[j]) - boxY.append(box.get_ydata()[j]) - boxCoords = list(zip(boxX, boxY)) - k = i % 2 - boxPolygon = Polygon(boxCoords, facecolor=color_list[k]) - plt.gca().add_patch(boxPolygon) - plt.xlabel('firing rate [spikes/s]', fontsize=fs) - plt.yticks(label_pos, pop_names, fontsize=fs) - plt.xticks(fontsize=fs) - plt.savefig(os.path.join(path, 'box_plot.png'), dpi=300) - - -def __gather_metadata(path): - """ Reads first and last ids of - neurons in each population. - - Parameters - ------------ - path - Path where the spike detector files are stored. - - Returns - ------- - node_ids - Lowest and highest id of nodes in each population. - - """ - # load node IDs - node_idfile = open(path + 'population_nodeids.dat', 'r') - node_ids = [] - for l in node_idfile: - node_ids.append(l.split()) - node_ids = np.array(node_ids, dtype='i4') - return node_ids - - -def __load_spike_times(path, name, begin, end): - """ Loads spike times of each spike detector. - - Parameters - ---------- - path - Path where the files with the spike times are stored. - name - Name of the spike detector. - begin - Time point (in ms) to start loading spike times (included). - end - Time point (in ms) to stop loading spike times (included). - - Returns - ------- - data - Dictionary containing spike times in the interval from ``begin`` - to ``end``. - - """ - node_ids = __gather_metadata(path) - data = {} - dtype = {'names': ('sender', 'time_ms'), # as in header - 'formats': ('i4', 'f8')} - #print(node_ids) - - sd_names = {} - - for i_pop in range(8): - fn = os.path.join(path, 'spike_times_' + str(i_pop) + '.dat') - data_i_raw = np.loadtxt(fn, skiprows=1, dtype=dtype) - - data_i_raw = np.sort(data_i_raw, order='time_ms') - # begin and end are included if they exist - low = np.searchsorted(data_i_raw['time_ms'], v=begin, side='left') - high = np.searchsorted(data_i_raw['time_ms'], v=end, side='right') - data[i_pop] = data_i_raw[low:high] - sd_names[i_pop] = 'spike_times_' + str(i_pop) - return sd_names, node_ids, data diff --git a/python/Potjans_2014_s/log_time_10s_gtx1050mob.txt b/python/Potjans_2014_s/log_time_10s_gtx1050mob.txt deleted file mode 100644 index dbb38798c..000000000 --- a/python/Potjans_2014_s/log_time_10s_gtx1050mob.txt +++ /dev/null @@ -1,26 +0,0 @@ -9970.100 -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 7.70698 - poisson_generator_time: 0 - neuron_Update_time: 27.6643 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 26.118 - GetSpike_time: 27.6134 - SpikeReset_time: 1.02209 - ExternalSpikeReset_time: 0 -Build real time = 60.323811 -Simulation real time = 93.485882 - -Times: - Total time: 153.604 s - Time to initialize: 0.001 s - Time to create: 3.325 s - Time to connect: 53.894 s - Time to calibrate: 2.898 s - Time to simulate: 93.486 s diff --git a/python/Potjans_2014_s/log_time_10s_gtx1050mob_b.txt b/python/Potjans_2014_s/log_time_10s_gtx1050mob_b.txt deleted file mode 100644 index 4e5e85ecf..000000000 --- a/python/Potjans_2014_s/log_time_10s_gtx1050mob_b.txt +++ /dev/null @@ -1,25 +0,0 @@ -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 7.73518 - poisson_generator_time: 14.4706 - neuron_Update_time: 28.6859 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 26.3585 - GetSpike_time: 7.26078 - SpikeReset_time: 1.13737 - ExternalSpikeReset_time: 0 -Build real time = 61.179162 -Simulation real time = 89.148102 - -Times: - Total time: 150.032 s - Time to initialize: 0.001 s - Time to create: 3.435 s - Time to connect: 54.511 s - Time to calibrate: 2.936 s - Time to simulate: 89.149 s diff --git a/python/Potjans_2014_s/log_time_10s_gtx1050mob_c.txt b/python/Potjans_2014_s/log_time_10s_gtx1050mob_c.txt deleted file mode 100644 index 29aef1f92..000000000 --- a/python/Potjans_2014_s/log_time_10s_gtx1050mob_c.txt +++ /dev/null @@ -1,26 +0,0 @@ -9970.100 -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 7.98513 - poisson_generator_time: 14.6824 - neuron_Update_time: 22.2784 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 27.8786 - GetSpike_time: 7.09352 - SpikeReset_time: 1.39474 - ExternalSpikeReset_time: 0 -Build real time = 61.780456 -Simulation real time = 85.018697 - -Times: - Total time: 146.518 s - Time to initialize: 0.001 s - Time to create: 3.598 s - Time to connect: 54.839 s - Time to calibrate: 3.062 s - Time to simulate: 85.019 s diff --git a/python/Potjans_2014_s/log_time_10s_gtx1050mob_ring_spike_buffer.txt b/python/Potjans_2014_s/log_time_10s_gtx1050mob_ring_spike_buffer.txt deleted file mode 100644 index 9e4a9bf2a..000000000 --- a/python/Potjans_2014_s/log_time_10s_gtx1050mob_ring_spike_buffer.txt +++ /dev/null @@ -1,25 +0,0 @@ -9980.100 -9990.100 -10000.100 - - SpikeBufferUpdate_time: 11.1038 - poisson_generator_time: 14.6276 - neuron_Update_time: 22.5145 - copy_ext_spike_time: 0 - SendExternalSpike_time: 0 - SendSpikeToRemote_time: 0 - RecvSpikeFromRemote_time: 0 - NestedLoop_time: 26.8862 - GetSpike_time: 7.09354 - SpikeReset_time: 1.36537 - ExternalSpikeReset_time: 0 -Build real time = 60.817244 -Simulation real time = 87.142144 - -Times: - Total time: 147.697 s - Time to initialize: 0.001 s - Time to create: 3.357 s - Time to connect: 54.246 s - Time to calibrate: 2.952 s - Time to simulate: 87.142 s diff --git a/python/Potjans_2014_s/network.py b/python/Potjans_2014_s/network.py deleted file mode 100644 index 1d39ac735..000000000 --- a/python/Potjans_2014_s/network.py +++ /dev/null @@ -1,532 +0,0 @@ -# -# -# network.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST. If not, see . - -""" Microcircuit: Network Class ----------------------------------------- - -Main file of the microcircuit defining the ``Network`` class with functions to -build and simulate the network. - -""" - -import os -import numpy as np -import nestgpu as ngpu -import helpers - - -class Network: - """ Provides functions to setup NEST GPU, to create and connect all nodes - of the network, to simulate, and to evaluate the resulting spike data. - - Instantiating a Network object derives dependent parameters and already - initializes NEST GPU. - - Parameters - --------- - sim_dict - Dictionary containing all parameters specific to the simulation - (see: ``sim_params.py``). - net_dict - Dictionary containing all parameters specific to the neuron and - network models (see: ``network_params.py``). - stim_dict - Optional dictionary containing all parameter specific to the stimulus - (see: ``stimulus_params.py``) - - """ - - def __init__(self, sim_dict, net_dict, stim_dict=None): - self.sim_dict = sim_dict - self.net_dict = net_dict - self.stim_dict = stim_dict - self.Rank = 0 - - # data directory - self.data_path = sim_dict['data_path'] - if self.Rank == 0: - if os.path.isdir(self.data_path): - message = ' Directory already existed.' - if self.sim_dict['overwrite_files']: - message += ' Old data will be overwritten.' - else: - os.mkdir(self.data_path) - message = ' Directory has been created.' - print('Data will be written to: {}\n{}\n'.format(self.data_path, - message)) - - # derive parameters based on input dictionaries - self.__derive_parameters() - - # initialize NEST GPU - self.__setup_ngpu() - - def create(self): - """ Creates all network nodes. - - Neuronal populations and recording and stimulating devices are created. - - """ - self.__create_neuronal_populations() - if len(self.sim_dict['rec_dev']) > 0: - self.__create_recording_devices() - if self.net_dict['poisson_input']: - self.__create_poisson_bg_input() - if self.stim_dict['thalamic_input']: - self.__create_thalamic_stim_input() - if self.stim_dict['dc_input']: - self.__create_dc_stim_input() - - def connect(self): - """ Connects the network. - - Recurrent connections among neurons of the neuronal populations are - established, and recording and stimulating devices are connected. - - The ``self.__connect_*()`` functions use ``ngpu.Connect()`` calls which - set up the postsynaptic connectivity. - The full - connection infrastructure including presynaptic connectivity is set up - afterwards in the preparation phase of the simulation. - The preparation phase is usually induced by the first - ``ngpu.Simulate()`` call. - For including this phase in measurements of the connection time, - we induce it here explicitly by calling ``ngpu.Prepare()``. - - """ - self.__connect_neuronal_populations() - - #if len(self.sim_dict['rec_dev']) > 0: - # self.__connect_recording_devices() - if self.net_dict['poisson_input']: - self.__connect_poisson_bg_input() - if self.stim_dict['thalamic_input']: - self.__connect_thalamic_stim_input() - if self.stim_dict['dc_input']: - self.__connect_dc_stim_input() - - #ngpu.Prepare() - #ngpu.Cleanup() - - def simulate(self, t_sim): - """ Simulates the microcircuit. - - Parameters - ---------- - t_sim - Simulation time (in ms). - - """ - if self.Rank == 0: - print('Simulating {} ms.'.format(t_sim)) - - ngpu.Simulate(t_sim) - - def evaluate(self, raster_plot_interval, firing_rates_interval): - """ Displays simulation results. - - Creates a spike raster plot. - Calculates the firing rate of each population and displays them as a - box plot. - - Parameters - ---------- - raster_plot_interval - Times (in ms) to start and stop loading spike times for raster plot - (included). - firing_rates_interval - Times (in ms) to start and stop lading spike times for computing - firing rates (included). - - Returns - ------- - None - - """ - - for i_pop in range(len(self.pops)): - population = self.pops[i_pop] - data = [] - spike_times_list = ngpu.GetRecSpikeTimes(population) - for i_neur in range(len(population)): - spike_times = spike_times_list[i_neur] - if (len(spike_times) != 0): - # print("i_pop:", i_pop, " i_neur:", i_neur, " n_spikes:", - # len(spike_times)) - for t in spike_times: - data.append([population[i_neur], t]) - arr = np.array(data) - fn = os.path.join(self.data_path, 'spike_times_' + str(i_pop) + - '.dat') - fmt='%d\t%.3f' - np.savetxt(fn, arr, fmt=fmt, header="sender time_ms", - comments='') - if self.Rank == 0: - print('Interval to plot spikes: {} ms'.format(raster_plot_interval)) - helpers.plot_raster( - self.data_path, - 'spike_detector', - raster_plot_interval[0], - raster_plot_interval[1], - self.net_dict['N_scaling']) - - print('Interval to compute firing rates: {} ms'.format( - firing_rates_interval)) - helpers.firing_rates( - self.data_path, 'spike_detector', - firing_rates_interval[0], firing_rates_interval[1]) - helpers.boxplot(self.data_path, self.net_dict['populations']) - - def __derive_parameters(self): - """ - Derives and adjusts parameters and stores them as class attributes. - """ - self.num_pops = len(self.net_dict['populations']) - - # total number of synapses between neuronal populations before scaling - full_num_synapses = helpers.num_synapses_from_conn_probs( - self.net_dict['conn_probs'], - self.net_dict['full_num_neurons'], - self.net_dict['full_num_neurons']) - - # scaled numbers of neurons and synapses - self.num_neurons = np.round((self.net_dict['full_num_neurons'] * - self.net_dict['N_scaling'])).astype(int) - self.num_synapses = np.round((full_num_synapses * - self.net_dict['N_scaling'] * - self.net_dict['K_scaling'])).astype(int) - self.ext_indegrees = np.round((self.net_dict['K_ext'] * - self.net_dict['K_scaling'])).astype(int) - - # conversion from PSPs to PSCs - PSC_over_PSP = helpers.postsynaptic_potential_to_current( - self.net_dict['neuron_params']['C_m'], - self.net_dict['neuron_params']['tau_m'], - self.net_dict['neuron_params']['tau_syn']) - PSC_matrix_mean = self.net_dict['PSP_matrix_mean'] * PSC_over_PSP - PSC_ext = self.net_dict['PSP_exc_mean'] * PSC_over_PSP - - # DC input compensates for potentially missing Poisson input - if self.net_dict['poisson_input']: - DC_amp = np.zeros(self.num_pops) - else: - if self.Rank == 0: - print('DC input compensates for missing Poisson input.\n') - DC_amp = helpers.dc_input_compensating_poisson( - self.net_dict['bg_rate'], self.net_dict['K_ext'], - self.net_dict['neuron_params']['tau_syn'], - PSC_ext) - - # adjust weights and DC amplitude if the indegree is scaled - if self.net_dict['K_scaling'] != 1: - PSC_matrix_mean, PSC_ext, DC_amp = \ - helpers.adjust_weights_and_input_to_synapse_scaling( - self.net_dict['full_num_neurons'], - full_num_synapses, self.net_dict['K_scaling'], - PSC_matrix_mean, PSC_ext, - self.net_dict['neuron_params']['tau_syn'], - self.net_dict['full_mean_rates'], - DC_amp, - self.net_dict['poisson_input'], - self.net_dict['bg_rate'], self.net_dict['K_ext']) - - # store final parameters as class attributes - self.weight_matrix_mean = PSC_matrix_mean - self.weight_ext = PSC_ext - self.DC_amp = DC_amp - - # thalamic input - if self.stim_dict['thalamic_input']: - num_th_synapses = helpers.num_synapses_from_conn_probs( - self.stim_dict['conn_probs_th'], - self.stim_dict['num_th_neurons'], - self.net_dict['full_num_neurons'])[0] - self.weight_th = self.stim_dict['PSP_th'] * PSC_over_PSP - if self.net_dict['K_scaling'] != 1: - num_th_synapses *= self.net_dict['K_scaling'] - self.weight_th /= np.sqrt(self.net_dict['K_scaling']) - self.num_th_synapses = np.round(num_th_synapses).astype(int) - - if self.Rank == 0: - message = '' - if self.net_dict['N_scaling'] != 1: - message += \ - 'Neuron numbers are scaled by a factor of {:.3f}.\n'.format( - self.net_dict['N_scaling']) - if self.net_dict['K_scaling'] != 1: - message += \ - 'Indegrees are scaled by a factor of {:.3f}.'.format( - self.net_dict['K_scaling']) - message += '\n Weights and DC input are adjusted to compensate.\n' - print(message) - - def __setup_ngpu(self): - """ Initializes NEST GPU. - - """ - - # set seeds for random number generation - - master_seed = self.sim_dict['master_seed'] - ngpu.SetRandomSeed(master_seed) - ngpu.SetKernelStatus({'print_time': self.sim_dict['print_time']}) - self.sim_resolution = self.sim_dict['sim_resolution'] - - def __create_neuronal_populations(self): - """ Creates the neuronal populations. - - The neuronal populations are created and the parameters are assigned - to them. The initial membrane potential of the neurons is drawn from - normal distributions dependent on the parameter ``V0_type``. - - The first and last neuron id of each population is written to file. - """ - if self.Rank == 0: - print('Creating neuronal populations.') - - self.pops = [] - for i in np.arange(self.num_pops): - population = ngpu.Create(self.net_dict['neuron_model'], - self.num_neurons[i]) - - tau_syn_ex=self.net_dict['neuron_params']['tau_syn'] - tau_syn_in=self.net_dict['neuron_params']['tau_syn'] - E_L=self.net_dict['neuron_params']['E_L'] - V_th=self.net_dict['neuron_params']['V_th'] - V_reset=self.net_dict['neuron_params']['V_reset'] - t_ref=self.net_dict['neuron_params']['t_ref'] - I_e=self.DC_amp[i] - - ngpu.SetStatus(population, {"tau_ex":tau_syn_ex, - "tau_in":tau_syn_in, - "E_L":E_L, - "Theta_rel":V_th - E_L, - "V_reset_rel":V_reset - E_L, - "t_ref":t_ref, - "I_e":I_e}) - - if self.net_dict['V0_type'] == 'optimized': - V_rel_mean = self.net_dict['neuron_params']['V0_mean'] \ - ['optimized'][i] - E_L - V_std = self.net_dict['neuron_params']['V0_std'] \ - ['optimized'][i] - elif self.net_dict['V0_type'] == 'original': - V_rel_mean = self.net_dict['neuron_params']['V0_mean'] \ - ['original'] - E_L, - V_std = self.net_dict['neuron_params']['V0_std']['original'] - else: - raise Exception( - 'V0_type incorrect. ' + - 'Valid options are "optimized" and "original".') - - #print("V_rel_mean", V_rel_mean) - #print("V_std", V_std) - #print("pop size: ", len(population)) - ngpu.SetStatus(population, {"V_m_rel": {"distribution":"normal", - "mu":V_rel_mean, - "sigma":V_std } } ) - - self.pops.append(population) - - # write node ids to file - if self.Rank == 0: - fn = os.path.join(self.data_path, 'population_nodeids.dat') - with open(fn, 'w+') as f: - for pop in self.pops: - f.write('{} {}\n'.format(pop[0], - pop[len(pop)-1])) - - def __create_recording_devices(self): - """ Creates one recording device of each kind per population. - - Only devices which are given in ``sim_dict['rec_dev']`` are created. - - """ - if self.Rank == 0: - print('Creating recording devices.') - - if 'spike_detector' in self.sim_dict['rec_dev']: - if self.Rank == 0: - print(' Activating spike time recording.') - for pop in self.pops: - ngpu.ActivateRecSpikeTimes(pop, 1000) - - #self.spike_detectors = ngpu.Create('spike_detector', - # self.num_pops) - #if 'voltmeter' in self.sim_dict['rec_dev']: - # if self.Rank == 0: - # print(' Creating voltmeters.') - # self.voltmeters = ngpu.CreateRecord('V_m_rel', - # n=self.num_pops, - # params=vm_dict) - - def __create_poisson_bg_input(self): - """ Creates the Poisson generators for ongoing background input if - specified in ``network_params.py``. - - If ``poisson_input`` is ``False``, DC input is applied for compensation - in ``create_neuronal_populations()``. - - """ - if self.Rank == 0: - print('Creating Poisson generators for background input.') - - self.poisson_bg_input = ngpu.Create('poisson_generator', - self.num_pops) - rate_list = self.net_dict['bg_rate'] * self.ext_indegrees - for i_pop in range(self.num_pops): - ngpu.SetStatus([self.poisson_bg_input[i_pop]], - "rate", rate_list[i_pop]) - - def __create_thalamic_stim_input(self): - """ Creates the thalamic neuronal population if specified in - ``stim_dict``. - - Thalamic neurons are of type ``parrot_neuron`` and receive input from a - Poisson generator. - Note that the number of thalamic neurons is not scaled with - ``N_scaling``. - - """ - if self.Rank == 0: - print('Creating thalamic input for external stimulation.') - - self.thalamic_population = ngpu.Create( - 'parrot_neuron', n=self.stim_dict['num_th_neurons']) - - self.poisson_th = ngpu.Create('poisson_generator') - self.poisson_th.set( - rate=self.stim_dict['th_rate'], - start=self.stim_dict['th_start'], - stop=(self.stim_dict['th_start'] + self.stim_dict['th_duration'])) - - def __connect_neuronal_populations(self): - """ Creates the recurrent connections between neuronal populations. """ - if self.Rank == 0: - print('Connecting neuronal populations recurrently.') - - for i, target_pop in enumerate(self.pops): - for j, source_pop in enumerate(self.pops): - if self.num_synapses[i][j] >= 0.: - conn_dict_rec = { - 'rule': 'fixed_total_number', - 'total_num': self.num_synapses[i][j]} - - w_mean = self.weight_matrix_mean[i][j] - w_std = abs(self.weight_matrix_mean[i][j] * - self.net_dict['weight_rel_std']) - - if w_mean < 0: - w_min = w_mean-3.0*w_std - w_max = 0.0 - i_receptor = 1 - else: - w_min = 0.0 - w_max = w_mean+3.0*w_std - i_receptor = 0 - - d_mean = self.net_dict['delay_matrix_mean'][i][j] - d_std = (self.net_dict['delay_matrix_mean'][i][j] * - self.net_dict['delay_rel_std']) - d_min = self.sim_resolution - d_max = d_mean+3.0*d_std - - syn_dict = { - 'weight': {'distribution':'normal_clipped', - 'mu':w_mean, 'low':w_min, - 'high':w_max, - 'sigma':w_std}, - 'delay': {'distribution':'normal_clipped', - 'mu':d_mean, 'low':d_min, - 'high':d_max, - 'sigma':d_std}, - 'receptor':i_receptor} - - ngpu.Connect( - source_pop, target_pop, conn_dict_rec, syn_dict) - - #def __connect_recording_devices(self): - # """ Connects the recording devices to the microcircuit.""" - # if self.Rank == 0: - # print('Connecting recording devices.') - # - # for i, target_pop in enumerate(self.pops): - # if 'spike_detector' in self.sim_dict['rec_dev']: - # conn_dict = {'rule': 'all_to_all'} - # syn_dict = {'weight': 1.0, 'delay': self.sim_resolution} - # ngpu.Connect(target_pop, [self.spike_detectors[i]], - # conn_dict, syn_dict) - - def __connect_poisson_bg_input(self): - """ Connects the Poisson generators to the microcircuit.""" - if self.Rank == 0: - print('Connecting Poisson generators for background input.') - - for i, target_pop in enumerate(self.pops): - conn_dict_poisson = {'rule': 'all_to_all'} - - syn_dict_poisson = { - 'weight': self.weight_ext, - 'delay': self.net_dict['delay_poisson']} - - ngpu.Connect( - [self.poisson_bg_input[i]], target_pop, - conn_dict_poisson, syn_dict_poisson) - - def __connect_thalamic_stim_input(self): - """ Connects the thalamic input to the neuronal populations.""" - if self.Rank == 0: - print('Connecting thalamic input.') - - # connect Poisson input to thalamic population - ngpu.Connect(self.poisson_th, self.thalamic_population) - - # connect thalamic population to neuronal populations - for i, target_pop in enumerate(self.pops): - conn_dict_th = { - 'rule': 'fixed_total_number', - 'N': self.num_th_synapses[i]} - - w_mean = self.weight_th, - w_std = self.weight_th * self.net_dict['weight_rel_std'] - w_min = 0.0, - w_max = w_mean + 3.0*w_std - - d_mean = self.stim_dict['delay_th_mean'] - d_std = (self.stim_dict['delay_th_mean'] * - self.stim_dict['delay_th_rel_std']) - d_min = self.sim_resolution - d_max = d_mean + 3.0*d_std - - syn_dict_th = { - 'weight': {"distribution":"normal_clipped", - "mu":w_mean, "low":w_min, - "high":w_max, - "sigma":w_std}, - 'delay': {"distribution":"normal_clipped", - "mu":d_mean, "low":d_min, - "high":d_max, - "sigma":d_std}} - - ngpu.Connect( - self.thalamic_population, target_pop, - conn_spec=conn_dict_th, syn_spec=syn_dict_th) - diff --git a/python/Potjans_2014_s/network_params.py b/python/Potjans_2014_s/network_params.py deleted file mode 100644 index a060e8205..000000000 --- a/python/Potjans_2014_s/network_params.py +++ /dev/null @@ -1,166 +0,0 @@ -# -# network_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Network Parameters ---------------------------------------------- - -A dictionary with base network and neuron parameters is enhanced with derived -parameters. - -""" - -import numpy as np - - -def get_exc_inh_matrix(val_exc, val_inh, num_pops): - """ Creates a matrix for excitatory and inhibitory values. - - Parameters - ---------- - val_exc - Excitatory value. - val_inh - Inhibitory value. - num_pops - Number of populations. - - Returns - ------- - matrix - A matrix of of size (num_pops x num_pops). - - """ - matrix = np.zeros((num_pops, num_pops)) - matrix[:, 0:num_pops:2] = val_exc - matrix[:, 1:num_pops:2] = val_inh - return matrix - - -net_dict = { - # factor to scale the number of neurons - 'N_scaling': 1.0, # 0.1, - # factor to scale the indegrees - 'K_scaling': 1.0, # 0.1, - # neuron model - 'neuron_model': 'iaf_psc_exp', - # names of the simulated neuronal populations - 'populations': ['L23E', 'L23I', 'L4E', 'L4I', 'L5E', 'L5I', 'L6E', 'L6I'], - # number of neurons in the different populations (same order as - # 'populations') - 'full_num_neurons': - np.array([20683, 5834, 21915, 5479, 4850, 1065, 14395, 2948]), - # mean rates of the different populations in the non-scaled version of the - # microcircuit (in spikes/s; same order as in 'populations'); - # necessary for the scaling of the network. - # The values were optained by running this PyNEST microcircuit with 12 MPI - # processes and both 'N_scaling' and 'K_scaling' set to 1. - 'full_mean_rates': - np.array([0.943, 3.026, 4.368, 5.882, 7.733, 8.664, 1.096, 7.851]), - # connection probabilities (the first index corresponds to the targets - # and the second to the sources) - 'conn_probs': - np.array( - [[0.1009, 0.1689, 0.0437, 0.0818, 0.0323, 0., 0.0076, 0.], - [0.1346, 0.1371, 0.0316, 0.0515, 0.0755, 0., 0.0042, 0.], - [0.0077, 0.0059, 0.0497, 0.135, 0.0067, 0.0003, 0.0453, 0.], - [0.0691, 0.0029, 0.0794, 0.1597, 0.0033, 0., 0.1057, 0.], - [0.1004, 0.0622, 0.0505, 0.0057, 0.0831, 0.3726, 0.0204, 0.], - [0.0548, 0.0269, 0.0257, 0.0022, 0.06, 0.3158, 0.0086, 0.], - [0.0156, 0.0066, 0.0211, 0.0166, 0.0572, 0.0197, 0.0396, 0.2252], - [0.0364, 0.001, 0.0034, 0.0005, 0.0277, 0.008, 0.0658, 0.1443]]), - # mean amplitude of excitatory postsynaptic potential (in mV) - 'PSP_exc_mean': 0.15, - # relative standard deviation of the weight - 'weight_rel_std': 0.1, - # relative inhibitory weight - 'g': -4, - # mean delay of excitatory connections (in ms) - 'delay_exc_mean': 1.5, - # mean delay of inhibitory connections (in ms) - 'delay_inh_mean': 0.75, - # relative standard deviation of the delay of excitatory and - # inhibitory connections - 'delay_rel_std': 0.5, - - # turn Poisson input on or off (True or False) - # if False: DC input is applied for compensation - 'poisson_input': True, - # indegree of external connections to the different populations (same order - # as in 'populations') - 'K_ext': np.array([1600, 1500, 2100, 1900, 2000, 1900, 2900, 2100]), - # rate of the Poisson generator (in spikes/s) - 'bg_rate': 8., - # delay from the Poisson generator to the network (in ms) - 'delay_poisson': 1.5, - - # initial conditions for the membrane potential, options are: - # 'original': uniform mean and standard deviation for all populations as - # used in earlier implementations of the model - # 'optimized': population-specific mean and standard deviation, allowing a - # reduction of the initial activity burst in the network - # (default) - 'V0_type': 'optimized', - # parameters of the neuron model - 'neuron_params': { - # membrane potential average for the neurons (in mV) - 'V0_mean': {'original': -58.0, - 'optimized': [-68.28, -63.16, -63.33, -63.45, - -63.11, -61.66, -66.72, -61.43]}, - # standard deviation of the average membrane potential (in mV) - 'V0_std': {'original': 10.0, - 'optimized': [5.36, 4.57, 4.74, 4.94, - 4.94, 4.55, 5.46, 4.48]}, - # reset membrane potential of the neurons (in mV) - 'E_L': -65.0, - # threshold potential of the neurons (in mV) - 'V_th': -50.0, - # membrane potential after a spike (in mV) - 'V_reset': -65.0, - # membrane capacitance (in pF) - 'C_m': 250.0, - # membrane time constant (in ms) - 'tau_m': 10.0, - # time constant of postsynaptic currents (in ms) - 'tau_syn': 0.5, - # refractory period of the neurons after a spike (in ms) - 't_ref': 2.0}} - -# derive matrix of mean PSPs, -# the mean PSP of the connection from L4E to L23E is doubled -PSP_matrix_mean = get_exc_inh_matrix( - net_dict['PSP_exc_mean'], - net_dict['PSP_exc_mean'] * net_dict['g'], - len(net_dict['populations'])) -PSP_matrix_mean[0, 2] = 2. * net_dict['PSP_exc_mean'] - -updated_dict = { - # matrix of mean PSPs - 'PSP_matrix_mean': PSP_matrix_mean, - - # matrix of mean delays - 'delay_matrix_mean': get_exc_inh_matrix( - net_dict['delay_exc_mean'], - net_dict['delay_inh_mean'], - len(net_dict['populations']))} - -net_dict.update(updated_dict) diff --git a/python/Potjans_2014_s/run_microcircuit.py b/python/Potjans_2014_s/run_microcircuit.py deleted file mode 100644 index 9d211f962..000000000 --- a/python/Potjans_2014_s/run_microcircuit.py +++ /dev/null @@ -1,110 +0,0 @@ -# -# run_microcircuit.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Run Simulation ------------------------------------------ - -This is an example script for running the microcircuit model and generating -basic plots of the network activity. - -""" - -############################################################################### -# Import the necessary modules and start the time measurements. - -from stimulus_params import stim_dict -from network_params import net_dict -from sim_params import sim_dict -import network -#import nestgpu as ngpu -import numpy as np -import time -time_start = time.time() - -############################################################################### -# Initialize the network with simulation, network and stimulation parameters, -# then create and connect all nodes, and finally simulate. -# The times for a presimulation and the main simulation are taken -# independently. A presimulation is useful because the spike activity typically -# exhibits a startup transient. In benchmark simulations, this transient should -# be excluded from a time measurement of the state propagation phase. Besides, -# statistical measures of the spike activity should only be computed after the -# transient has passed. - -net = network.Network(sim_dict, net_dict, stim_dict) -time_network = time.time() - -net.create() -time_create = time.time() - -net.connect() -time_connect = time.time() - -net.simulate(sim_dict['t_presim']) -time_presimulate = time.time() - -net.simulate(sim_dict['t_sim']) -time_simulate = time.time() - -############################################################################### -# Plot a spike raster of the simulated neurons and a box plot of the firing -# rates for each population. -# For visual purposes only, spikes 100 ms before and 100 ms after the thalamic -# stimulus time are plotted here by default. -# The computation of spike rates discards the presimulation time to exclude -# initialization artifacts. - -raster_plot_interval = np.array([stim_dict['th_start'] - 100.0, - stim_dict['th_start'] + 100.0]) -firing_rates_interval = np.array([sim_dict['t_presim'], - sim_dict['t_presim'] + sim_dict['t_sim']]) -net.evaluate(raster_plot_interval, firing_rates_interval) -time_evaluate = time.time() - -############################################################################### -# Summarize time measurements. Rank 0 usually takes longest because of the -# data evaluation and print calls. - -print( - '\nTimes:\n' + # of Rank {}:\n'.format( .Rank()) + - ' Total time: {:.3f} s\n'.format( - time_evaluate - - time_start) + - ' Time to initialize: {:.3f} s\n'.format( - time_network - - time_start) + - ' Time to create: {:.3f} s\n'.format( - time_create - - time_network) + - ' Time to connect: {:.3f} s\n'.format( - time_connect - - time_create) + - ' Time to presimulate: {:.3f} s\n'.format( - time_presimulate - - time_connect) + - ' Time to simulate: {:.3f} s\n'.format( - time_simulate - - time_presimulate) + - ' Time to evaluate: {:.3f} s\n'.format( - time_evaluate - - time_simulate)) diff --git a/python/Potjans_2014_s/script.sh b/python/Potjans_2014_s/script.sh deleted file mode 100644 index a44932069..000000000 --- a/python/Potjans_2014_s/script.sh +++ /dev/null @@ -1,5 +0,0 @@ -for i in $(seq 0 9); do - cat sim_params.templ | sed "s/__seed__/1234$i/" > sim_params.py - python3 run_microcircuit.py - mv data data$i -done diff --git a/python/Potjans_2014_s/sim_params.py b/python/Potjans_2014_s/sim_params.py deleted file mode 100644 index b7fbff797..000000000 --- a/python/Potjans_2014_s/sim_params.py +++ /dev/null @@ -1,59 +0,0 @@ -# -# sim_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Simulation Parameters ------------------------------------------------- - -A dictionary with parameters defining the simulation. - -""" - -import os - -sim_dict = { - # The full simulation time is the sum of a presimulation time and the main - # simulation time. - # presimulation time (in ms) - 't_presim': 1000.0, - # simulation time (in ms) - 't_sim': 10000.0, - # resolution of the simulation (in ms) - 'sim_resolution': 0.1, - # list of recording devices, default is 'spike_detector'. A 'voltmeter' can - # be added to record membrane voltages of the neurons. Nothing will be - # recorded if an empty list is given. - 'rec_dev': ['spike_detector'], - # path to save the output data - 'data_path': os.path.join(os.getcwd(), 'data/'), - # masterseed for NEST GPU and NumPy - 'master_seed': 12349, #55, - # number of threads per MPI process - 'local_num_threads': 1, - # recording interval of the membrane potential (in ms) - 'rec_V_int': 1.0, - # if True, data will be overwritten, - # if False, a NESTError is raised if the files already exist - 'overwrite_files': True, - # print the time progress. This should only be used when the simulation - # is run on a local machine. - 'print_time': False} diff --git a/python/Potjans_2014_s/sim_params.templ b/python/Potjans_2014_s/sim_params.templ deleted file mode 100644 index f8d7ba618..000000000 --- a/python/Potjans_2014_s/sim_params.templ +++ /dev/null @@ -1,58 +0,0 @@ -# -# sim_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# - -"""PyNEST Microcircuit: Simulation Parameters ------------------------------------------------- - -A dictionary with parameters defining the simulation. - -""" - -import os - -sim_dict = { - # The full simulation time is the sum of a presimulation time and the main - # simulation time. - # presimulation time (in ms) - 't_presim': 1000.0, - # simulation time (in ms) - 't_sim': 10000.0, - # resolution of the simulation (in ms) - 'sim_resolution': 0.1, - # list of recording devices, default is 'spike_detector'. A 'voltmeter' can - # be added to record membrane voltages of the neurons. Nothing will be - # recorded if an empty list is given. - 'rec_dev': ['spike_detector'], - # path to save the output data - 'data_path': os.path.join(os.getcwd(), 'data/'), - # masterseed for NEST GPU and NumPy - 'master_seed': __seed__, #55, - # number of threads per MPI process - 'local_num_threads': 1, - # recording interval of the membrane potential (in ms) - 'rec_V_int': 1.0, - # if True, data will be overwritten, - # if False, a NESTError is raised if the files already exist - 'overwrite_files': True, - # print the time progress. This should only be used when the simulation - # is run on a local machine. - 'print_time': False} diff --git a/python/Potjans_2014_s/sim_params_norec.py b/python/Potjans_2014_s/sim_params_norec.py deleted file mode 100644 index e5503d0b7..000000000 --- a/python/Potjans_2014_s/sim_params_norec.py +++ /dev/null @@ -1,59 +0,0 @@ -# -# sim_params_norec.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -"""PyNEST Microcircuit: Simulation Parameters ------------------------------------------------- - -A dictionary with parameters defining the simulation. - -""" - -import os - -sim_dict = { - # The full simulation time is the sum of a presimulation time and the main - # simulation time. - # presimulation time (in ms) - 't_presim': 0.1, - # simulation time (in ms) - 't_sim': 10000.0, - # resolution of the simulation (in ms) - 'sim_resolution': 0.1, - # list of recording devices, default is 'spike_detector'. A 'voltmeter' can - # be added to record membrane voltages of the neurons. Nothing will be - # recorded if an empty list is given. - 'rec_dev': [], - # path to save the output data - 'data_path': os.path.join(os.getcwd(), 'data/'), - # masterseed for NESTGPU and NumPy - 'master_seed': 12349, #55, - # number of threads per MPI process - 'local_num_threads': 1, - # recording interval of the membrane potential (in ms) - 'rec_V_int': 1.0, - # if True, data will be overwritten, - # if False, a NESTError is raised if the files already exist - 'overwrite_files': True, - # print the time progress. This should only be used when the simulation - # is run on a local machine. - 'print_time': False} diff --git a/python/Potjans_2014_s/stimulus_params.py b/python/Potjans_2014_s/stimulus_params.py deleted file mode 100644 index 42d397dfd..000000000 --- a/python/Potjans_2014_s/stimulus_params.py +++ /dev/null @@ -1,67 +0,0 @@ -# -# stimulus_params.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . -# -# -# -# -""" PyNEST Microcircuit: Stimulus Parameters ------------------------------------------------ - -A dictionary with parameters for an optional external transient stimulation. -Thalamic input and DC input can be switched on individually. - -""" - -import numpy as np - -stim_dict = { - # optional thalamic input - # turn thalamic input on or off (True or False) - 'thalamic_input': False, - # start of the thalamic input (in ms) - 'th_start': 700.0, - # duration of the thalamic input (in ms) - 'th_duration': 10.0, - # rate of the thalamic input (in spikes/s) - 'th_rate': 120.0, - # number of thalamic neurons - 'num_th_neurons': 902, - # connection probabilities of the thalamus to the different populations - # (same order as in 'populations' in 'net_dict') - 'conn_probs_th': - np.array([0.0, 0.0, 0.0983, 0.0619, 0.0, 0.0, 0.0512, 0.0196]), - # mean amplitude of the thalamic postsynaptic potential (in mV), - # standard deviation will be taken from 'net_dict' - 'PSP_th': 0.15, - # mean delay of the thalamic input (in ms) - 'delay_th_mean': 1.5, - # relative standard deviation of the thalamic delay (in ms) - 'delay_th_rel_std': 0.5, - - # optional DC input - # turn DC input on or off (True or False) - 'dc_input': False, - # start of the DC input (in ms) - 'dc_start': 650.0, - # duration of the DC input (in ms) - 'dc_dur': 100.0, - # amplitude of the DC input (in pA); final amplitude is population-specific - # and will be obtained by multiplication with 'K_ext' - 'dc_amp': 0.3} diff --git a/python/Potjans_2014/README.md b/python/examples/Potjans_2014/README.md similarity index 100% rename from python/Potjans_2014/README.md rename to python/examples/Potjans_2014/README.md diff --git a/python/Potjans_2014/helpers.py b/python/examples/Potjans_2014/helpers.py similarity index 100% rename from python/Potjans_2014/helpers.py rename to python/examples/Potjans_2014/helpers.py diff --git a/python/Potjans_2014/network.py b/python/examples/Potjans_2014/network.py similarity index 100% rename from python/Potjans_2014/network.py rename to python/examples/Potjans_2014/network.py diff --git a/python/Potjans_2014/network_params.py b/python/examples/Potjans_2014/network_params.py similarity index 100% rename from python/Potjans_2014/network_params.py rename to python/examples/Potjans_2014/network_params.py diff --git a/python/Potjans_2014/run_benchmark.py b/python/examples/Potjans_2014/run_benchmark.py similarity index 100% rename from python/Potjans_2014/run_benchmark.py rename to python/examples/Potjans_2014/run_benchmark.py diff --git a/python/Potjans_2014/run_benchmark.sh b/python/examples/Potjans_2014/run_benchmark.sh similarity index 100% rename from python/Potjans_2014/run_benchmark.sh rename to python/examples/Potjans_2014/run_benchmark.sh diff --git a/python/Potjans_2014/run_microcircuit.py b/python/examples/Potjans_2014/run_microcircuit.py similarity index 100% rename from python/Potjans_2014/run_microcircuit.py rename to python/examples/Potjans_2014/run_microcircuit.py diff --git a/python/Potjans_2014/script.sh b/python/examples/Potjans_2014/script.sh similarity index 100% rename from python/Potjans_2014/script.sh rename to python/examples/Potjans_2014/script.sh diff --git a/python/Potjans_2014/sim_params.py b/python/examples/Potjans_2014/sim_params.py similarity index 100% rename from python/Potjans_2014/sim_params.py rename to python/examples/Potjans_2014/sim_params.py diff --git a/python/Potjans_2014/sim_params.templ b/python/examples/Potjans_2014/sim_params.templ similarity index 100% rename from python/Potjans_2014/sim_params.templ rename to python/examples/Potjans_2014/sim_params.templ diff --git a/python/Potjans_2014/stimulus_params.py b/python/examples/Potjans_2014/stimulus_params.py similarity index 100% rename from python/Potjans_2014/stimulus_params.py rename to python/examples/Potjans_2014/stimulus_params.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_fake.py b/python/examples/hpc_benchmark/hpc_benchmark.py similarity index 84% rename from python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_fake.py rename to python/examples/hpc_benchmark/hpc_benchmark.py index bf122d50a..deb03545c 100644 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_fake.py +++ b/python/examples/hpc_benchmark/hpc_benchmark.py @@ -94,53 +94,79 @@ parser.add_argument("--seed", type=int, default=12345) parser.add_argument("--fake_mpi_proc_num", type=int, default=0) parser.add_argument("--fake_mpi_proc_id", type=int, default=0) +parser.add_argument("--scale", type=float, default=1.0) +parser.add_argument("--simtime", type=float, default=250.0) +parser.add_argument("--raster_plot", type=int, default=0) +parser.add_argument("--record_spikes", type=int, default=1) +parser.add_argument("--nhosts", type=int, default=0) +parser.add_argument("--opt", type=int, default=2) +parser.add_argument("--verbosity", type=int, default=1) +parser.add_argument("--max_spike_num_fact", type=float, default=0.01) +parser.add_argument("--max_spike_per_host_fact", type=float, default=0.01) + args = parser.parse_args() M_INFO = 10 M_ERROR = 30 if args.fake_mpi_proc_num > 0: - ngpu.FakeConnectMpiInit(args.fake_mpi_proc_num, args.fake_mpi_proc_id) + fake_mpi_proc_id = args.fake_mpi_proc_id + if fake_mpi_proc_id < 0: + fake_mpi_proc_id = int(os.environ['SLURM_PROCID']) + print(f"Fake MPI proc id: {fake_mpi_proc_id}") + ngpu.FakeConnectMpiInit(args.fake_mpi_proc_num, fake_mpi_proc_id) else: ngpu.ConnectMpiInit() mpi_id = ngpu.HostId() mpi_np = ngpu.HostNum() -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) +if args.nhosts != 0: + mpi_np = args.nhosts + hg = ngpu.CreateHostGroup(list(range(mpi_np))) +if args.nhosts != 0: + ngpu.SetNHosts(args.nhosts) + +if mpi_id >= mpi_np: + ngpu.MpiFinalize() + quit() + ############################################################################### # Parameter section # Define all relevant parameters: changes should be made here params = { - 'scale': 20.0, # scaling factor of the network size + 'scale': args.scale, # scaling factor of the network size # total network size = scale*11250 neurons 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms + 'simtime': args.simtime, # total simulation time in ms 'presimtime': 50., # simulation time until reaching equilibrium 'dt': 0.1, # simulation step 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory + 'record_spikes': (args.record_spikes != 0 and args.opt < 3) , # switch to record spikes of excitatory # neurons to file 'show_plot': False, # switch to show plot at the end of simulation # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot + 'raster_plot': (args.raster_plot != 0) , # when record_spikes=True, depicts a raster plot 'path_name': args.path, # path where all files will have to be written 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! 'use_dc_input': False, # Use DC input instead of Poisson generators 'verbose_log': False, # Enable verbose output per MPI process + 'opt': args.opt, # Optimization gpu-memory-vs-speed [0-3] + 'verbosity': args.verbosity, + 'max_spike_num_fact': args.max_spike_num_fact, # factor used to set the maximum number of spikes in a time step + 'max_spike_per_host_fact': args.max_spike_per_host_fact, # factor used to set the maximum number of remote spikes in a time step } def rank_print(message): """Prints message and attaches MPI rank""" if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") + print(f"MPI RANK {mpi_id}: {message}", flush=True) rank_print("Simulation with {} MPI processes".format(mpi_np)) @@ -266,7 +292,6 @@ def build_network(): neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) E_pops.append(neurons[i][0:NE]) I_pops.append(neurons[i][NE:NE+NI]) - else: neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) E_pops.append(neurons[mpi_id][0:NE]) @@ -314,7 +339,7 @@ def build_network(): if params['record_spikes']: recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) + ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 100) record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) time_create = perf_counter_ns() @@ -322,6 +347,8 @@ def build_network(): syn_dict_ex = None syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} if params['stdp']: + print("error stdp") + sys.exit(1) syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} else: @@ -337,42 +364,23 @@ def build_network(): rank_print('Creating local connections.') rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - + time_connect_local = perf_counter_ns() rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) + host_list = list(range(mpi_np)) + neurons_list = [] + E_pops_list = [] + I_pops_list = [] - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) + for i in range(mpi_np): + E_pops_list.append(E_pops[i]) + I_pops_list.append(I_pops[i]) + neurons_list.append(neurons[i]) - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) + ngpu.ConnectDistributedFixedIndegree(host_list, E_pops_list, host_list, neurons_list, CE, hg, syn_dict_ex) + ngpu.ConnectDistributedFixedIndegree(host_list, I_pops_list, host_list, neurons_list, CI, hg, syn_dict_in) # read out time used for building time_connect_remote = perf_counter_ns() @@ -411,15 +419,38 @@ def run_simulation(): time_start = perf_counter_ns() + delete_remote_node_map = 1 + + opt = params["opt"] + if opt==0: + first_out_conn_in_device = 0 + delete_image_node_map = 1 + else: + first_out_conn_in_device = 1 + delete_image_node_map = 0 + + if opt==1: + have_n_out_conn = 0 + else: + have_n_out_conn = 1 + ngpu.SetKernelStatus({ - "verbosity_level": 4, + "verbosity_level": params["verbosity"], "rnd_seed": params["seed"], "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) + "max_node_n_bits": 31, + "max_syn_n_bits": 0, + "use_all_source_node_fact": 0.0, + "max_spike_num_fact": params["max_spike_num_fact"], + "max_spike_per_host_fact": params["max_spike_per_host_fact"], + "min_allowed_delay": 1.5, + "max_n_ports_warning": False, + "first_out_conn_in_device": first_out_conn_in_device, + "have_n_out_conn": have_n_out_conn, + "delete_remote_node_map": delete_remote_node_map, + "delete_image_node_map": delete_image_node_map + }) + seed = ngpu.GetKernelStatus("rnd_seed") time_initialize = perf_counter_ns() @@ -431,17 +462,17 @@ def run_simulation(): ngpu.Calibrate() time_calibrate = perf_counter_ns() - if args.fake_mpi_proc_num > 0: - quit() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() + time_presimulate = time_calibrate + time_simulate = time_calibrate + else: + ngpu.Simulate(params['presimtime']) + + time_presimulate = perf_counter_ns() + + ngpu.Simulate(params['simtime']) + + time_simulate = perf_counter_ns() time_dict.update({ "time_initialize": time_initialize - time_start, @@ -457,12 +488,19 @@ def run_simulation(): "brunel_params": brunel_params, "simulation_params": params } + + gpu_mem_dict = { + "gpu_mem_peak": ngpu.getCUDAMemHostPeak(), + "gpu_mem_used": ngpu.getCUDAMemHostUsed(), + "gpu_mem_total": ngpu.getCUDAMemTotal() + } info_dict = { "rank": mpi_id, "seed": seed, "conf": conf_dict, - "timers": time_dict + "timers": time_dict, + "gpu_mem": gpu_mem_dict } if params['record_spikes']: diff --git a/python/examples/hpc_benchmark/run_sbatch.templ b/python/examples/hpc_benchmark/run_sbatch.templ new file mode 100644 index 000000000..e7fa44e86 --- /dev/null +++ b/python/examples/hpc_benchmark/run_sbatch.templ @@ -0,0 +1,50 @@ +#!/bin/bash -x +#SBATCH --account=#ACCOUNT# +#SBATCH --nodes=#NUM_NODES# +#SBATCH --ntasks-per-node=#TASKS_PER_NODE# +#SBATCH --cpus-per-task=#CPUS_PER_TASK# +#SBATCH --time=#JOB_TIME_LIMIT# +#SBATCH --partition=#PARTITION# +#SBATCH --qos=#QOS# +#SBATCH --gres=#GRES# +#SBATCH --gpus-per-task=#GPUS_PER_TASK# +#SBATCH --exclusive +#SBATCH --output=#OUTPUT# +#SBATCH --error=#ERROR# +# *** start of job script *** +# Note: The current working directory at this point is +# the directory where sbatch was executed. + +###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} +if [ "$#" -lt 1 ]; then + opt=2 +else + opt=$1 +fi +if [ "$#" -lt 2 ]; then + run=0 +else + run=$2 +fi + +out_dir=opt_${opt}_run_${run} +mkdir -p $out_dir + +if [ "$opt" -gt 2 ]; then + record_spikes=0 +else + record_spikes=1 +fi + +seed=12345${run} + +nodes=__nodes__ +proc_num=$(expr $nodes \* 4) + +max_spike_per_host_fact=$(echo "scale=6; 1.0/$nodes" | bc -l) +if (( $(bc <<< "$max_spike_per_host_fact>0.01") )) ; then + max_spike_per_host_fact=0.01 +fi + +srun python3 ../../hpc_benchmark.py --scale 20.0 --simtime 1000.0 --opt $opt --seed $seed --path $out_dir --max_spike_per_host_fact $max_spike_per_host_fact --record_spikes $record_spikes +sacct -j ${SLURM_JOB_ID}.0 --format='JobID,MaxVMSize' > $out_dir/stat.dat diff --git a/python/examples/temp_mpi.py b/python/examples/temp_mpi.py deleted file mode 100644 index 6a0065031..000000000 --- a/python/examples/temp_mpi.py +++ /dev/null @@ -1,166 +0,0 @@ -import sys -import ctypes -import nestgpu as ngpu -from random import randrange - -""" -Example of a balanced network executed using MPI. -A network of n_neurons is created in every MPI process, -and a fraction of the indegrees of each population -is connected remotely, i.e., with neurons belonging -to other MPI processes. - -""" - -ngpu.ConnectMpiInit(); -mpi_np = ngpu.MpiNp() - -if (mpi_np < 2) | (len(sys.argv) != 2): - print ("Usage: mpirun -np NP python %s n_neurons" % sys.argv[0]) - quit() - -order = int(sys.argv[1])//5 - -mpi_id = ngpu.MpiId() -print("Building on host ", mpi_id, " ...") - -ngpu.SetKernelStatus("rnd_seed", 1234) # seed for GPU random numbers - -n_receptors = 2 - -delay = 1.0 # synaptic delay in ms - -NE = 4 * order # number of excitatory neurons -NI = 1 * order # number of inhibitory neurons -n_neurons = NE + NI # number of neurons in total - -CE = 800 # number of excitatory synapses per neuron -CI = CE//4 # number of inhibitory synapses per neuron - -Wex = 0.05 -Win = 0.35 - -# poisson generator parameters -poiss_rate = 20000.0 # poisson signal rate in Hz -poiss_weight = 0.37 -poiss_delay = 0.2 # poisson signal delay in ms - -# create poisson generator -pg = ngpu.Create("poisson_generator") -ngpu.SetStatus(pg, "rate", poiss_rate) - -# Create n_neurons neurons with n_receptor receptor ports -neuron = [] -exc_neuron = [] -inh_neuron = [] -for i in range(mpi_np): - neuron.append(ngpu.RemoteCreate(i, "aeif_cond_beta_multisynapse", n_neurons, n_receptors).node_seq) - exc_neuron.append(neuron[i][0:NE]) # excitatory neurons - inh_neuron.append(neuron[i][NE:n_neurons]) # inhibitory neurons - -# receptor parameters -E_rev = [0.0, -85.0] -tau_decay = [1.0, 1.0] -tau_rise = [1.0, 1.0] -ngpu.SetStatus(neuron[mpi_id], {"E_rev":E_rev, "tau_decay":tau_decay, - "tau_rise":tau_rise}) - -# Excitatory local connections, defined on all hosts -# connect excitatory neurons to port 0 of all neurons -# weight Wex and fixed indegree CE*3/4 - -exc_conn_dict={"rule": "fixed_indegree", "indegree": CE*3//4} -exc_syn_dict={"weight": Wex, "delay": delay, - "receptor":0} -ngpu.Connect(exc_neuron[mpi_id], neuron[mpi_id], exc_conn_dict, exc_syn_dict) - - -# Inhibitory local connections, defined on all hosts -# connect inhibitory neurons to port 1 of all neurons -# weight Win and fixed indegree CI*3/4 - -inh_conn_dict={"rule": "fixed_indegree", "indegree": CI*3//4} -inh_syn_dict={"weight": Win, "delay": delay, - "receptor":1} -ngpu.Connect(inh_neuron[mpi_id], neuron[mpi_id], inh_conn_dict, inh_syn_dict) - - -#connect poisson generator to port 0 of all neurons -pg_conn_dict={"rule": "all_to_all"} -pg_syn_dict={"weight": poiss_weight, "delay": poiss_delay, - "receptor":0} - -ngpu.Connect(pg, neuron[mpi_id], pg_conn_dict, pg_syn_dict) - - -filename = "test_brunel_mpi" + str(mpi_id) + ".dat" -i_neuron_arr = [neuron[mpi_id][0], neuron[mpi_id][randrange(n_neurons)], neuron[mpi_id][n_neurons-1]] -i_receptor_arr = [0, 0, 0] -# any set of neuron indexes -# create multimeter record of V_m -var_name_arr = ["V_m", "V_m", "V_m"] -record = ngpu.CreateRecord(filename, var_name_arr, i_neuron_arr, - i_receptor_arr) - -###################################################################### -## WRITE HERE REMOTE CONNECTIONS -###################################################################### - -# Excitatory remote connections -# connect excitatory neurons to port 0 of all neurons -# weight Wex and fixed indegree CE//4 -# host 0 to host 1 -re_conn_dict={"rule": "fixed_indegree", "indegree": (CE//4)//(mpi_np-1)} -re_syn_dict={"weight": Wex, "delay": delay, - "receptor":0} -# host 0 to host 1 -#ngpu.RemoteConnect(0, exc_neuron[0], 1, neuron[1], re_conn_dict, re_syn_dict) -# host 1 to host 0 -#ngpu.RemoteConnect(1, exc_neuron[1], 0, neuron[0], re_conn_dict, re_syn_dict) - -# Inhibitory remote connections -# connect inhibitory neurons to port 1 of all neurons -# weight Win and fixed indegree CI//4 -# host 0 to host 1 -ri_conn_dict={"rule": "fixed_indegree", "indegree": (CI//4)//(mpi_np-1)} -ri_syn_dict={"weight": Win, "delay": delay, - "receptor":1} -# host 0 to host 1 -#ngpu.RemoteConnect(0, inh_neuron[0], 1, neuron[1], ri_conn_dict, ri_syn_dict) -# host 1 to host 0 -#ngpu.RemoteConnect(1, inh_neuron[1], 0, neuron[0], ri_conn_dict, ri_syn_dict) - -for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - ngpu.RemoteConnect(i, exc_neuron[i], j, neuron[j], re_conn_dict, re_syn_dict) - ngpu.RemoteConnect(i, inh_neuron[i], j, neuron[j], ri_conn_dict, ri_syn_dict) - - -ngpu.Simulate() - -nrows=ngpu.GetRecordDataRows(record) -ncol=ngpu.GetRecordDataColumns(record) -#print nrows, ncol - -data_list = ngpu.GetRecordData(record) -t=[row[0] for row in data_list] -V1=[row[1] for row in data_list] -V2=[row[2] for row in data_list] -V3=[row[3] for row in data_list] - -import matplotlib.pyplot as plt - -fig1 = plt.figure(1) -fig1.suptitle("host " + str(mpi_id), fontsize=20) -plt.plot(t, V1) - -fig2 = plt.figure(2) -fig2.suptitle("host " + str(mpi_id), fontsize=20) -plt.plot(t, V2) - -fig3 = plt.figure(3) -fig3.suptitle("host " + str(mpi_id), fontsize=20) -plt.plot(t, V3) - -plt.show() diff --git a/python/examples/tmp.py b/python/examples/tmp.py deleted file mode 100644 index 075f8d488..000000000 --- a/python/examples/tmp.py +++ /dev/null @@ -1,119 +0,0 @@ -import sys -import ctypes -import nestgpu as ngpu -from random import randrange - -if len(sys.argv) != 2: - print ("Usage: python %s n_neurons" % sys.argv[0]) - quit() - -order = int(sys.argv[1])//5 - -print("Building ...") - -ngpu.SetKernelStatus("rnd_seed", 1234) # seed for GPU random numbers - -n_receptors = 2 - -NE = 4 * order # number of excitatory neurons -NI = 1 * order # number of inhibitory neurons -n_neurons = NE + NI # number of neurons in total - -CE = 800 # number of excitatory synapses per neuron -CI = CE//4 # number of inhibitory synapses per neuron - -Wex = 0.05 -Win = 0.35 - -# poisson generator parameters -poiss_rate = 20000.0 # poisson signal rate in Hz -poiss_weight = 0.37 -poiss_delay = 0.2 # poisson signal delay in ms - -# create poisson generator -pg = ngpu.Create("poisson_generator") -ngpu.SetStatus(pg, "rate", poiss_rate) -pg_list = pg.ToList() - -# Create n_neurons neurons with n_receptor receptor ports -neuron = ngpu.Create("aeif_cond_beta", n_neurons, n_receptors) -exc_neuron = neuron[0:NE] # excitatory neurons -inh_neuron = neuron[NE:n_neurons] # inhibitory neurons -neuron_list = neuron.ToList() -exc_neuron_list = exc_neuron.ToList() -inh_neuron_list = exc_neuron.ToList() - -# receptor parameters -E_rev = [0.0, -85.0] -tau_decay = [1.0, 1.0] -tau_rise = [1.0, 1.0] -ngpu.SetStatus(neuron, {"E_rev":E_rev, "tau_decay":tau_decay, - "tau_rise":tau_rise}) - - -mean_delay = 0.5 -std_delay = 0.25 -min_delay = 0.1 -# Excitatory connections -# connect excitatory neurons to port 0 of all neurons -# normally distributed delays, weight Wex and CE connections per neuron -exc_conn_dict={"rule": "fixed_total_number", "total_num": n_neurons*CE} -exc_syn_dict={"weight": Wex, "delay": {"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":0} -ngpu.Connect(exc_neuron, neuron_list, exc_conn_dict, exc_syn_dict) - -# Inhibitory connections -# connect inhibitory neurons to port 1 of all neurons -# normally distributed delays, weight Win and CI connections per neuron -inh_conn_dict={"rule": "fixed_total_number", "total_num": n_neurons*CI} -inh_syn_dict={"weight": Win, "delay":{"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":1} -ngpu.Connect(inh_neuron_list, neuron, inh_conn_dict, inh_syn_dict) - -#connect poisson generator to port 0 of all neurons -pg_conn_dict={"rule": "all_to_all"} -pg_syn_dict={"weight": poiss_weight, "delay": poiss_delay, - "receptor":0} - -ngpu.Connect(pg_list, neuron_list, pg_conn_dict, pg_syn_dict) - -filename = "test_brunel_list.dat" -i_neuron_arr = [neuron[37], neuron[randrange(n_neurons)], neuron[n_neurons-1]] -i_receptor_arr = [0, 0, 0] -# any set of neuron indexes -# create multimeter record of V_m -var_name_arr = ["V_m", "V_m", "V_m"] -record = ngpu.CreateRecord(filename, var_name_arr, i_neuron_arr, - i_receptor_arr) - -ngpu.Simulate() - -nrows=ngpu.GetRecordDataRows(record) -ncol=ngpu.GetRecordDataColumns(record) -#print nrows, ncol - -data_list = ngpu.GetRecordData(record) -t=[row[0] for row in data_list] -V1=[row[1] for row in data_list] -V2=[row[2] for row in data_list] -V3=[row[3] for row in data_list] - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(t, V1) - -plt.figure(2) -plt.plot(t, V2) - -plt.figure(3) -plt.plot(t, V3) - -plt.draw() -plt.pause(0.5) -ngpu.waitenter("") -plt.close() diff --git a/python/examples/tmp1.py b/python/examples/tmp1.py deleted file mode 100644 index 7aa3b1f06..000000000 --- a/python/examples/tmp1.py +++ /dev/null @@ -1,116 +0,0 @@ -import sys -import ctypes -import nestgpu as ngpu -from random import randrange - -if len(sys.argv) != 2: - print ("Usage: python %s n_neurons" % sys.argv[0]) - quit() - -order = int(sys.argv[1])//5 - -print("Building ...") - -ngpu.SetKernelStatus("rnd_seed", 1234) # seed for GPU random numbers - -n_receptors = 2 - -NE = 4 * order # number of excitatory neurons -NI = 1 * order # number of inhibitory neurons -n_neurons = NE + NI # number of neurons in total - -CE = 800 # number of excitatory synapses per neuron -CI = CE//4 # number of inhibitory synapses per neuron - -Wex = 0.05 -Win = 0.35 - -# poisson generator parameters -poiss_rate = 20000.0 # poisson signal rate in Hz -poiss_weight = 0.37 -poiss_delay = 0.2 # poisson signal delay in ms - -# create poisson generator -pg = ngpu.Create("poisson_generator") -ngpu.SetStatus(pg, "rate", poiss_rate) -pg_list = pg.ToList() - -# Create n_neurons neurons with n_receptor receptor ports -neuron = ngpu.Create("aeif_cond_beta", n_neurons, n_receptors) -exc_neuron = neuron[0:NE] # excitatory neurons -inh_neuron = neuron[NE:n_neurons] # inhibitory neurons -neuron_list = neuron.ToList() -exc_neuron_list = exc_neuron.ToList() -inh_neuron_list = exc_neuron.ToList() - -# receptor parameters -E_rev = [0.0, -85.0] -tau_decay = [1.0, 1.0] -tau_rise = [1.0, 1.0] -ngpu.SetStatus(neuron, {"E_rev":E_rev, "tau_decay":tau_decay, - "tau_rise":tau_rise}) - - -mean_delay = 0.5 -std_delay = 0.25 -min_delay = 0.1 -# Excitatory connections -# connect excitatory neurons to port 0 of all neurons -# normally distributed delays, weight Wex and CE connections per neuron -exc_conn_dict={"rule": "fixed_total_number", "total_num": n_neurons*CE} -exc_syn_dict={"weight": Wex, "delay": mean_delay, "receptor":0} -#ngpu.Connect(exc_neuron, neuron_list, exc_conn_dict, exc_syn_dict) -ngpu.Connect(exc_neuron, neuron, exc_conn_dict, exc_syn_dict) - -# Inhibitory connections -# connect inhibitory neurons to port 1 of all neurons -# normally distributed delays, weight Win and CI connections per neuron -inh_conn_dict={"rule": "fixed_total_number", "total_num": n_neurons*CI} -inh_syn_dict={"weight": Win, "delay": mean_delay, "receptor":1} -#ngpu.Connect(inh_neuron_list, neuron, inh_conn_dict, inh_syn_dict) -ngpu.Connect(inh_neuron, neuron, inh_conn_dict, inh_syn_dict) - -#connect poisson generator to port 0 of all neurons -pg_conn_dict={"rule": "all_to_all"} -pg_syn_dict={"weight": poiss_weight, "delay": poiss_delay, - "receptor":0} - -#ngpu.Connect(pg_list, neuron_list, pg_conn_dict, pg_syn_dict) -ngpu.Connect(pg, neuron, pg_conn_dict, pg_syn_dict) - -filename = "test_brunel_list.dat" -i_neuron_arr = [neuron[37], neuron[randrange(n_neurons)], neuron[n_neurons-1]] -i_receptor_arr = [0, 0, 0] -# any set of neuron indexes -# create multimeter record of V_m -var_name_arr = ["V_m", "V_m", "V_m"] -record = ngpu.CreateRecord(filename, var_name_arr, i_neuron_arr, - i_receptor_arr) - -ngpu.Simulate() - -nrows=ngpu.GetRecordDataRows(record) -ncol=ngpu.GetRecordDataColumns(record) -#print nrows, ncol - -data_list = ngpu.GetRecordData(record) -t=[row[0] for row in data_list] -V1=[row[1] for row in data_list] -V2=[row[2] for row in data_list] -V3=[row[3] for row in data_list] - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(t, V1) - -plt.figure(2) -plt.plot(t, V2) - -plt.figure(3) -plt.plot(t, V3) - -plt.draw() -plt.pause(0.5) -ngpu.waitenter("") -plt.close() diff --git a/python/examples/tmp2.py b/python/examples/tmp2.py deleted file mode 100644 index 36ae568e8..000000000 --- a/python/examples/tmp2.py +++ /dev/null @@ -1,111 +0,0 @@ -import sys -import math -import nestgpu as ngpu - -def STDPUpdate(w, Dt, tau_plus, tau_minus, Wplus, alpha, mu_plus, mu_minus, \ - Wmax): - if (Dt>=0): - fact = Wplus*math.exp(-Dt/tau_plus) - w1 = w + fact*math.pow(1.0 - w/Wmax, mu_plus) - if w1>Wmax: - w1 = Wmax - - else: - fact = -alpha*Wplus*math.exp(Dt/tau_minus) - w1 = w + fact*math.pow(w/Wmax, mu_minus) - if w1<0.0: - w1 = 0.0 - return w1 - - -tolerance = 1.0e-5 -dt_step = 5.0 -N = 50 - -tau_plus = 20.0 -tau_minus = 20.0 -lambd = 1.0 -alpha = 1.0 -mu_plus = 1.0 -mu_minus = 1.0 -Wmax = 0.001 -den_delay = 0.0 - -syn_group = ngpu.CreateSynGroup \ - ("stdp", {"tau_plus":tau_plus, "tau_minus":tau_minus, \ - "lambda":lambd, "alpha":alpha, "mu_plus":mu_plus, \ - "mu_minus":mu_minus, "Wmax":Wmax}) - -sg = ngpu.Create("spike_generator") -neuron0 = ngpu.Create("aeif_cond_beta") -neuron1 = ngpu.Create("aeif_cond_beta", N) -ngpu.SetStatus(neuron1, {"t_ref": 1000.0, "den_delay":den_delay}) - -time_diff = 400.0 -dt_list = [] -delay_stdp_list = [] -for i in range(N): - dt_list.append(dt_step*(-0.5*(N-1) + i)) - delay_stdp_list.append(time_diff - dt_list[i]) - -spike_times = [50.0] -n_spikes = 1 - - -# set spike times and height -ngpu.SetStatus(sg, {"spike_times": spike_times}) -delay0 = 1.0 -delay1 = delay0 + time_diff -weight_sg = 17.9 # to make it spike immediately and only once -weight_stdp = Wmax/2 - -conn_dict={"rule": "one_to_one"} -conn_dict_full={"rule": "all_to_all"} -syn_dict0={"weight":weight_sg, "delay":delay0} -syn_dict1={"weight":weight_sg, "delay":delay1} - -ngpu.Connect(sg, neuron0, conn_dict, syn_dict0) -ngpu.Connect(sg, neuron1, conn_dict_full, syn_dict1) - - -syn_dict_stdp={"weight":weight_stdp, "delay_array":delay_stdp_list, \ - "synapse_group":syn_group} - -ngpu.Connect(neuron0, neuron1, conn_dict_full, syn_dict_stdp) - -ngpu.Simulate(1000.0) - -#conn_id = ngpu.GetConnections(neuron0, neuron1) -dt = dt_list -#w = ngpu.GetStatus(conn_id, "weight") - - -expect_w = [] -dw = [] -sim_w = [] -for i in range(N): - conn_id = ngpu.GetConnections(neuron0, neuron1[i]) - w = ngpu.GetStatus(conn_id, "weight") - w1 = STDPUpdate(weight_stdp, dt[i], tau_plus, tau_minus, lambd*Wmax, \ - alpha, mu_plus, mu_minus, Wmax) - expect_w.append(w1) - sim_w.append(w[0]) - dw.append(w1-w[0]) - if abs(dw[i])>tolerance: - print("Expected weight: ", w1, " simulated: ", w) - #sys.exit(1) - -#sys.exit(0) - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(dt, sim_w) - -plt.figure(2) -plt.plot(dt, expect_w) - -plt.draw() -plt.pause(1) -ngpu.waitenter("") -plt.close() diff --git a/python/examples/tmp3.py b/python/examples/tmp3.py deleted file mode 100644 index fdfcd9794..000000000 --- a/python/examples/tmp3.py +++ /dev/null @@ -1,111 +0,0 @@ -import sys -import math -import nestgpu as ngpu - -def STDPUpdate(w, Dt, tau_plus, tau_minus, Wplus, alpha, mu_plus, mu_minus, \ - Wmax): - if (Dt>=0): - fact = Wplus*math.exp(-Dt/tau_plus) - w1 = w + fact*math.pow(1.0 - w/Wmax, mu_plus) - if w1>Wmax: - w1 = Wmax - - else: - fact = -alpha*Wplus*math.exp(Dt/tau_minus) - w1 = w + fact*math.pow(w/Wmax, mu_minus) - if w1<0.0: - w1 = 0.0 - return w1 - - -tolerance = 1.0e-5 -dt_step = 5.0 -N = 50 - -tau_plus = 20.0 -tau_minus = 20.0 -lambd = 1.0 -alpha = 1.0 -mu_plus = 1.0 -mu_minus = 1.0 -Wmax = 0.001 -den_delay = 0.0 - -syn_group = ngpu.CreateSynGroup \ - ("stdp", {"tau_plus":tau_plus, "tau_minus":tau_minus, \ - "lambda":lambd, "alpha":alpha, "mu_plus":mu_plus, \ - "mu_minus":mu_minus, "Wmax":Wmax}) - -sg = ngpu.Create("spike_generator") -neuron0 = ngpu.Create("aeif_cond_beta") -neuron1 = ngpu.Create("aeif_cond_beta", N) -ngpu.SetStatus(neuron1, {"t_ref": 1000.0, "den_delay":den_delay}) - -time_diff = 200.0 -dt_list = [] -delay_stdp_list = [] -for i in range(N): - dt_list.append(dt_step*(-0.5*(N-1) + i)) - delay_stdp_list.append(time_diff - dt_list[i]) - -spike_times = [50.0] -n_spikes = 1 - - -# set spike times and height -ngpu.SetStatus(sg, {"spike_times": spike_times}) -delay0 = 1.0 -delay1 = delay0 + time_diff -weight_sg = 17.9 # to make it spike immediately and only once -weight_stdp = Wmax/2 - -conn_dict={"rule": "one_to_one"} -conn_dict_full={"rule": "all_to_all"} -syn_dict0={"weight":weight_sg, "delay":delay0} -syn_dict1={"weight":weight_sg, "delay":delay1} - -ngpu.Connect(sg, neuron0, conn_dict, syn_dict0) -ngpu.Connect(sg, neuron1, conn_dict_full, syn_dict1) - - -syn_dict_stdp={"weight":weight_stdp, "delay_array":delay_stdp_list, \ - "synapse_group":syn_group} - -ngpu.Connect(neuron0, neuron1, conn_dict_full, syn_dict_stdp) - -ngpu.Simulate(1000.0) - -#conn_id = ngpu.GetConnections(neuron0, neuron1) -dt = dt_list -#w = ngpu.GetStatus(conn_id, "weight") - - -expect_w = [] -dw = [] -sim_w = [] -for i in range(N): - conn_id = ngpu.GetConnections(neuron0, neuron1[i]) - w = ngpu.GetStatus(conn_id, "weight") - w1 = STDPUpdate(weight_stdp, dt[i], tau_plus, tau_minus, lambd*Wmax, \ - alpha, mu_plus, mu_minus, Wmax) - expect_w.append(w1) - sim_w.append(w[0]) - dw.append(w1-w[0]) - if abs(dw[i])>tolerance: - print("Expected weight: ", w1, " simulated: ", w) - #sys.exit(1) - -#sys.exit(0) - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(dt, sim_w) - -plt.figure(2) -plt.plot(dt, expect_w) - -plt.draw() -plt.pause(1) -ngpu.waitenter("") -plt.close() diff --git a/python/examples/tmp4.py b/python/examples/tmp4.py deleted file mode 100644 index b0d0f440a..000000000 --- a/python/examples/tmp4.py +++ /dev/null @@ -1,114 +0,0 @@ -import sys -import math -import nestgpu as ngpu - -def STDPUpdate(w, Dt, tau_plus, tau_minus, Wplus, alpha, mu_plus, mu_minus, \ - Wmax): - if (Dt>=0): - fact = Wplus*math.exp(-Dt/tau_plus) - w1 = w + fact*math.pow(1.0 - w/Wmax, mu_plus) - if w1>Wmax: - w1 = Wmax - - else: - fact = -alpha*Wplus*math.exp(Dt/tau_minus) - w1 = w + fact*math.pow(w/Wmax, mu_minus) - if w1<0.0: - w1 = 0.0 - return w1 - - -tolerance = 1.0e-5 -dt_step = 5.0 -N = 50 - -tau_plus = 20.0 -tau_minus = 20.0 -lambd = 1.0 -alpha = 1.0 -mu_plus = 1.0 -mu_minus = 1.0 -Wmax = 0.001 -den_delay = 0.0 - -syn_group = ngpu.CreateSynGroup \ - ("stdp", {"tau_plus":tau_plus, "tau_minus":tau_minus, \ - "lambda":lambd, "alpha":alpha, "mu_plus":mu_plus, \ - "mu_minus":mu_minus, "Wmax":Wmax}) - -sg = ngpu.Create("spike_generator") -neuron0 = ngpu.Create("aeif_cond_beta") -neuron1 = ngpu.Create("aeif_cond_beta", N) -ngpu.SetStatus(neuron1, {"t_ref": 1000.0, "den_delay":den_delay}) - -time_diff = 200.0 -dt_list = [] -delay_stdp_list = [] -for i in range(N): - dt_list.append(dt_step*(-0.5*(N-1) + i)) - delay_stdp_list.append(time_diff - dt_list[i]) - -spike_times = [50.0] -n_spikes = 1 - - -# set spike times and height -ngpu.SetStatus(sg, {"spike_times": spike_times}) -delay0 = 1.0 -delay1 = delay0 + time_diff -weight_sg = 17.9 # to make it spike immediately and only once -weight_stdp = Wmax/2 - -conn_dict={"rule": "one_to_one"} -conn_dict_full={"rule": "all_to_all"} -syn_dict0={"weight":weight_sg, "delay":delay0} -syn_dict1={"weight":weight_sg, "delay":delay1} - -ngpu.Connect(sg, neuron0, conn_dict, syn_dict0) -ngpu.Connect(sg, neuron1, conn_dict_full, syn_dict1) - - -syn_dict_stdp={"weight":weight_stdp, "delay_array":delay_stdp_list, \ - "synapse_group":syn_group} - -ngpu.Connect(neuron0, neuron1, conn_dict_full, syn_dict_stdp) - -ngpu.Simulate(1000.0) - -#conn_id = ngpu.GetConnections(neuron0, neuron1) -dt = dt_list -#w = ngpu.GetStatus(conn_id, "weight") - - -expect_w = [] -dw = [] -sim_w = [] -for i in range(N): - conn_id = ngpu.GetConnections(neuron0, neuron1[i]) - #w = ngpu.GetStatus(conn_id, "weight") - conn_stat = ngpu.GetConnectionStatus(conn_id) - print(conn_stat) - w = conn_stat[0]["weight"] - w1 = STDPUpdate(weight_stdp, dt[i], tau_plus, tau_minus, lambd*Wmax, \ - alpha, mu_plus, mu_minus, Wmax) - expect_w.append(w1) - sim_w.append(w) #[0]) - dw.append(w1-w) #[0]) - if abs(dw[i])>tolerance: - print("Expected weight: ", w1, " simulated: ", w) - #sys.exit(1) - -#sys.exit(0) - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(dt, sim_w) - -plt.figure(2) -plt.plot(dt, expect_w) - -plt.draw() -plt.pause(1) -ngpu.waitenter("") -plt.close() diff --git a/python/examples/tmp5.py b/python/examples/tmp5.py deleted file mode 100644 index f10d6aa05..000000000 --- a/python/examples/tmp5.py +++ /dev/null @@ -1,117 +0,0 @@ -import sys -import math -import nestgpu as ngpu - -def STDPUpdate(w, Dt, tau_plus, tau_minus, Wplus, alpha, mu_plus, mu_minus, \ - Wmax): - if (Dt>=0): - fact = Wplus*math.exp(-Dt/tau_plus) - w1 = w + fact*math.pow(1.0 - w/Wmax, mu_plus) - if w1>Wmax: - w1 = Wmax - - else: - fact = -alpha*Wplus*math.exp(Dt/tau_minus) - w1 = w + fact*math.pow(w/Wmax, mu_minus) - if w1<0.0: - w1 = 0.0 - return w1 - - -tolerance = 1.0e-5 -dt_step = 5.0 -N = 50 - -tau_plus = 20.0 -tau_minus = 20.0 -lambd = 1.0 -alpha = 1.0 -mu_plus = 1.0 -mu_minus = 1.0 -Wmax = 0.001 -den_delay = 0.0 - -syn_group = ngpu.CreateSynGroup \ - ("stdp", {"tau_plus":tau_plus, "tau_minus":tau_minus, \ - "lambda":lambd, "alpha":alpha, "mu_plus":mu_plus, \ - "mu_minus":mu_minus, "Wmax":Wmax}) - -sg = ngpu.Create("spike_generator") -neuron0 = ngpu.Create("aeif_cond_beta") -neuron1 = ngpu.Create("aeif_cond_beta", N) -ngpu.SetStatus(neuron1, {"t_ref": 1000.0, "den_delay":den_delay}) - -time_diff = 200.0 -dt_list = [] -delay_stdp_list = [] -for i in range(N): - dt_list.append(dt_step*(-0.5*(N-1) + i)) - delay_stdp_list.append(time_diff - dt_list[i]) - -spike_times = [50.0] -n_spikes = 1 - - -# set spike times and height -ngpu.SetStatus(sg, {"spike_times": spike_times}) -delay0 = 1.0 -delay1 = delay0 + time_diff -weight_sg = 17.9 # to make it spike immediately and only once -weight_stdp = Wmax/2 - -conn_dict={"rule": "one_to_one"} -conn_dict_full={"rule": "all_to_all"} -syn_dict0={"weight":weight_sg, "delay":delay0} -syn_dict1={"weight":weight_sg, "delay":delay1} - -ngpu.Connect(sg, neuron0, conn_dict, syn_dict0) -ngpu.Connect(sg, neuron1, conn_dict_full, syn_dict1) - - -syn_dict_stdp={"weight":weight_stdp, "delay_array":delay_stdp_list, \ - "synapse_group":syn_group} - -ngpu.Connect(neuron0, neuron1, conn_dict_full, syn_dict_stdp) - -ngpu.Simulate(1000.0) - -conn_id = ngpu.GetConnections(neuron0, neuron1) -dt = dt_list -#w0 = ngpu.GetStatus(conn_id, "weight") -w0 = ngpu.GetConnectionFloatParam(conn_id, "weight") -print(w0) -tgt = ngpu.GetConnectionIntParam(conn_id, "target") -print(tgt) - -expect_w = [] -dw = [] -sim_w = [] -for i in range(N): - conn_id = ngpu.GetConnections(neuron0, neuron1[i]) - #w = ngpu.GetStatus(conn_id, "weight") - conn_stat = ngpu.GetConnectionStatus(conn_id) - print(conn_stat) - w = w0[i] #conn_stat[0]["weight"] - w1 = STDPUpdate(weight_stdp, dt[i], tau_plus, tau_minus, lambd*Wmax, \ - alpha, mu_plus, mu_minus, Wmax) - expect_w.append(w1) - sim_w.append(w) #[0]) - dw.append(w1-w) #[0]) - if abs(dw[i])>tolerance: - print("Expected weight: ", w1, " simulated: ", w) - #sys.exit(1) - -#sys.exit(0) - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(dt, sim_w) - -plt.figure(2) -plt.plot(dt, expect_w) - -plt.draw() -plt.pause(1) -ngpu.waitenter("") -plt.close() diff --git a/python/examples/tmp6.py b/python/examples/tmp6.py deleted file mode 100644 index 83d855953..000000000 --- a/python/examples/tmp6.py +++ /dev/null @@ -1,121 +0,0 @@ -import sys -import math -import nestgpu as ngpu - -def STDPUpdate(w, Dt, tau_plus, tau_minus, Wplus, alpha, mu_plus, mu_minus, \ - Wmax): - if (Dt>=0): - fact = Wplus*math.exp(-Dt/tau_plus) - w1 = w + fact*math.pow(1.0 - w/Wmax, mu_plus) - if w1>Wmax: - w1 = Wmax - - else: - fact = -alpha*Wplus*math.exp(Dt/tau_minus) - w1 = w + fact*math.pow(w/Wmax, mu_minus) - if w1<0.0: - w1 = 0.0 - return w1 - - -tolerance = 1.0e-5 -dt_step = 5.0 -N = 50 - -tau_plus = 20.0 -tau_minus = 20.0 -lambd = 1.0 -alpha = 1.0 -mu_plus = 1.0 -mu_minus = 1.0 -Wmax = 0.001 -den_delay = 0.0 - -syn_group = ngpu.CreateSynGroup \ - ("stdp", {"tau_plus":tau_plus, "tau_minus":tau_minus, \ - "lambda":lambd, "alpha":alpha, "mu_plus":mu_plus, \ - "mu_minus":mu_minus, "Wmax":Wmax}) - -sg = ngpu.Create("spike_generator") -neuron0 = ngpu.Create("aeif_cond_beta") -neuron1 = ngpu.Create("aeif_cond_beta", N) -ngpu.SetStatus(neuron1, {"t_ref": 1000.0, "den_delay":den_delay}) - -time_diff = 200.0 -dt_list = [] -delay_stdp_list = [] -for i in range(N): - dt_list.append(dt_step*(-0.5*(N-1) + i)) - delay_stdp_list.append(time_diff - dt_list[i]) - -spike_times = [50.0] -n_spikes = 1 - - -# set spike times and height -ngpu.SetStatus(sg, {"spike_times": spike_times}) -delay0 = 1.0 -delay1 = delay0 + time_diff -weight_sg = 17.9 # to make it spike immediately and only once -weight_stdp = Wmax/2 - -conn_dict={"rule": "one_to_one"} -conn_dict_full={"rule": "all_to_all"} -syn_dict0={"weight":weight_sg, "delay":delay0} -syn_dict1={"weight":weight_sg, "delay":delay1} - -ngpu.Connect(sg, neuron0, conn_dict, syn_dict0) -ngpu.Connect(sg, neuron1, conn_dict_full, syn_dict1) - - -syn_dict_stdp={"weight":weight_stdp, "delay_array":delay_stdp_list, \ - "synapse_group":syn_group} - -ngpu.Connect(neuron0, neuron1, conn_dict_full, syn_dict_stdp) - -ngpu.Simulate(1000.0) - -conn_id = ngpu.GetConnections(neuron0, neuron1) -dt = dt_list -#w0 = ngpu.GetStatus(conn_id, "weight") -w0 = ngpu.GetStatus(conn_id, "weight") -print(w0) -tgt = ngpu.GetStatus(conn_id, "target") -print(tgt) -src_tgt_w = ngpu.GetStatus(conn_id, ["source", "target", "weight"]) -print(src_tgt_w) -conn_status = ngpu.GetStatus(conn_id) -print (conn_status) - -expect_w = [] -dw = [] -sim_w = [] -for i in range(N): - conn_id = ngpu.GetConnections(neuron0, neuron1[i]) - #w = ngpu.GetStatus(conn_id, "weight") - conn_stat = ngpu.GetStatus(conn_id) - print(conn_stat) - w = conn_stat[0]["weight"] #w0[i] #conn_stat[0]["weight"] - w1 = STDPUpdate(weight_stdp, dt[i], tau_plus, tau_minus, lambd*Wmax, \ - alpha, mu_plus, mu_minus, Wmax) - expect_w.append(w1) - sim_w.append(w) #[0]) - dw.append(w1-w) #[0]) - if abs(dw[i])>tolerance: - print("Expected weight: ", w1, " simulated: ", w) - #sys.exit(1) - -#sys.exit(0) - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(dt, sim_w) - -plt.figure(2) -plt.plot(dt, expect_w) - -plt.draw() -plt.pause(1) -ngpu.waitenter("") -plt.close() diff --git a/python/examples/tmp7.py b/python/examples/tmp7.py deleted file mode 100644 index 0fa7387b7..000000000 --- a/python/examples/tmp7.py +++ /dev/null @@ -1,169 +0,0 @@ -import sys -import math -import nestgpu as ngpu - -def STDPUpdate(w, Dt, tau_plus, tau_minus, Wplus, alpha, mu_plus, mu_minus, \ - Wmax): - if (Dt>=0): - fact = Wplus*math.exp(-Dt/tau_plus) - w1 = w + fact*math.pow(1.0 - w/Wmax, mu_plus) - if w1>Wmax: - w1 = Wmax - - else: - fact = -alpha*Wplus*math.exp(Dt/tau_minus) - w1 = w + fact*math.pow(w/Wmax, mu_minus) - if w1<0.0: - w1 = 0.0 - return w1 - - -tolerance = 1.0e-5 -dt_step = 5.0 -N = 50 - -tau_plus = 20.0 -tau_minus = 20.0 -lambd = 1.0 -alpha = 1.0 -mu_plus = 1.0 -mu_minus = 1.0 -Wmax = 0.001 -den_delay = 0.0 - -syn_group = ngpu.CreateSynGroup \ - ("stdp", {"tau_plus":tau_plus, "tau_minus":tau_minus, \ - "lambda":lambd, "alpha":alpha, "mu_plus":mu_plus, \ - "mu_minus":mu_minus, "Wmax":Wmax}) - -sg = ngpu.Create("spike_generator") -neuron0 = ngpu.Create("aeif_cond_beta") -neuron1 = ngpu.Create("aeif_cond_beta", N) -ngpu.SetStatus(neuron1, {"t_ref": 1000.0, "den_delay":den_delay}) - -time_diff = 200.0 -dt_list = [] -delay_stdp_list = [] -for i in range(N): - dt_list.append(dt_step*(-0.5*(N-1) + i)) - delay_stdp_list.append(time_diff - dt_list[i]) - -spike_times = [50.0] -n_spikes = 1 - - -# set spike times and height -ngpu.SetStatus(sg, {"spike_times": spike_times}) -delay0 = 1.0 -delay1 = delay0 + time_diff -weight_sg = 17.9 # to make it spike immediately and only once -weight_stdp = Wmax/2 - -conn_dict={"rule": "one_to_one"} -conn_dict_full={"rule": "all_to_all"} -syn_dict0={"weight":weight_sg, "delay":delay0} -syn_dict1={"weight":weight_sg, "delay":delay1} - -ngpu.Connect(sg, neuron0, conn_dict, syn_dict0) -ngpu.Connect(sg, neuron1, conn_dict_full, syn_dict1) - - -syn_dict_stdp={"weight":weight_stdp, "delay_array":delay_stdp_list, \ - "synapse_group":syn_group} - -ngpu.Connect(neuron0, neuron1, conn_dict_full, syn_dict_stdp) - -ngpu.Simulate(1000.0) - -conn_id = ngpu.GetConnections(neuron0, neuron1) -dt = dt_list -wl = ngpu.GetStatus(conn_id, "weight") -wl1 = [w*2.0 for w in wl] -iw = [int (w*1000000.0) for w in wl] -#ngpu.SetConnectionStatus(conn_id, "weight", 3.0) -#ngpu.SetStatus(conn_id, "weight", 3.0) -#ngpu.SetConnectionStatus(conn_id, "weight", {"array": wl1}) -#ngpu.SetConnectionStatus(conn_id, "weight", {"array": wl1}) -#ngpu.SetStatus(conn_id, "weight", {"array": wl1}) -#ngpu.SetConnectionStatus(conn_id, "weight", {"distribution":"normal_clipped", -# "mu":3, "low":2, -# "high":4, -# "sigma":0.5}) -#ngpu.SetStatus(conn_id, "weight", {"distribution":"normal_clipped", -# "mu":3, "low":2, -# "high":4, -# "sigma":0.5}) -#ngpu.SetStatus(conn_id, "delay", {"distribution":"normal_clipped", -# "mu":3, "low":2, -# "high":4, -# "sigma":0.5}) -#ngpu.SetConnectionStatus(conn_id, "source", {"distribution":"normal_clipped", -# "mu":3, "low":2, -# "high":4, -# "sigma":0.5}) -#ngpu.SetStatus(conn_id, "source", {"distribution":"normal_clipped", -# "mu":3, "low":2, -# "high":4, -# "sigma":0.5}) - -l=len(iw) -print(l) -print(iw[0], iw[1], iw[l-1]) -#ngpu.SetConnectionStatus(conn_id, "port", {"array": iw}) -ngpu.SetStatus(conn_id, "port", {"array": iw}) -#ngpu.SetStatus(conn_id, "source", {"array": iw}) -#ngpu.SetStatus(conn_id, "source", 17) -#ngpu.SetStatus(conn_id, "port", 17) -conn_dict = ngpu.GetStatus(conn_id) -print(conn_dict[0]) -print(conn_dict[1]) -print(conn_dict[l-1]) -port = ngpu.GetStatus(conn_id, "port") -print(port[0]) -print(port[1]) -print(port[l-1]) - -conn_index = ngpu.GetStatus(conn_id, "index") -print(conn_index[0]) -print(conn_index[1]) -print(conn_index[l-1]) - -V = [10.0*i for i in range(l)] -ngpu.SetStatus(neuron1, "V_m", {"array": V}) -neur_dict = ngpu.GetStatus(neuron1) -l=len(neur_dict) -print (l) -print(neur_dict[0]) -print(neur_dict[1]) -print(neur_dict[l-1]) - -expect_w = [] -dw = [] -sim_w = [] -for i in range(N): - conn_id = ngpu.GetConnections(neuron0, neuron1[i]) - #ngpu.SetConnectionStatus(conn_id, "weight", 3.0) - w = ngpu.GetStatus(conn_id, "weight") - w1 = STDPUpdate(weight_stdp, dt[i], tau_plus, tau_minus, lambd*Wmax, \ - alpha, mu_plus, mu_minus, Wmax) - expect_w.append(w1) - sim_w.append(w[0]) - dw.append(w1-w[0]) - if abs(dw[i])>tolerance: - print("Expected weight: ", w1, " simulated: ", w) - #sys.exit(1) - -#sys.exit(0) - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(dt, sim_w) - -plt.figure(2) -plt.plot(dt, expect_w) - -plt.draw() -plt.pause(1) -ngpu.waitenter("") -plt.close() diff --git a/python/hpc_benchmark/hpc_benchmark.py b/python/hpc_benchmark/hpc_benchmark.py deleted file mode 100644 index a19a8da38..000000000 --- a/python/hpc_benchmark/hpc_benchmark.py +++ /dev/null @@ -1,583 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 1., # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': False, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - - CE_distrib = int(1.0 * CE / (mpi_np)) - CI_distrib = int(1.0 * CI / (mpi_np)) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'] - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/check_indegree.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/check_indegree.py deleted file mode 100644 index 4074aed30..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/check_indegree.py +++ /dev/null @@ -1,40 +0,0 @@ -mpi_np = 640 -mpi_id = 113 - -CE = 9000 -CI = 2250 - -for j in range(mpi_np): - CE_total = 0 - CI_total = 0 - for i in range(mpi_np): - if(i!=j): - CE_distrib = CE // mpi_np - if ( (i + j) % mpi_np ) < ( CE % mpi_np ): - CE_distrib = CE_distrib + 1 - - CI_distrib = CI // mpi_np - if ( (i + j) % mpi_np ) < ( CI % mpi_np ): - CI_distrib = CI_distrib + 1 - - CE_total = CE_total + CE_distrib - CI_total = CI_total + CI_distrib - #print('{} {} CE_distrib {} '.format(i, j, CE_distrib)) - #print('{} {} CI_distrib {} '.format(i, j, CI_distrib)) - - mpi_id = j - # number of indegrees from current MPI process - CE_local = CE // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CE % mpi_np ): - CE_local = CE_local + 1 - - CI_local = CI // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CI % mpi_np ): - CI_local = CI_local + 1 - print('{} CE_local {}'.format(mpi_id, CE_local)) - print('{} CI_local {}'.format(mpi_id, CI_local)) - CE_total = CE_total + CE_local - CI_total = CI_total + CI_local - - print('{} CE_total {} '.format(j, CE_total)) - print('{} CI_total {} '.format(j, CI_total)) diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/check_indegree_new.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/check_indegree_new.py deleted file mode 100644 index 0e81d8276..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/check_indegree_new.py +++ /dev/null @@ -1,26 +0,0 @@ -mpi_np = 640 -mpi_id = 113 - -CE = 9000 -CI = 2250 - -for j in range(mpi_np): - CE_total = 0 - CI_total = 0 - for i in range(mpi_np): - if(i!=j): - CE_distrib = CE // ( mpi_np - 1 ) - if ( (i + j) % ( mpi_np - 1 ) ) < ( CE % ( mpi_np - 1 ) ): - CE_distrib = CE_distrib + 1 - - CI_distrib = CI // ( mpi_np - 1 ) - if ( (i + j) % ( mpi_np - 1 ) ) < ( CI % ( mpi_np - 1 ) ): - CI_distrib = CI_distrib + 1 - - CE_total = CE_total + CE_distrib - CI_total = CI_total + CI_distrib - #print('{} {} CE_distrib {} '.format(i, j, CE_distrib)) - #print('{} {} CI_distrib {} '.format(i, j, CI_distrib)) - - print('{} CE_total {} '.format(j, CE_total)) - print('{} CI_total {} '.format(j, CI_total)) diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg.py deleted file mode 100644 index 4b7b11cac..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg.py +++ /dev/null @@ -1,585 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 0.1, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': True, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - - CE_distrib = int(1.0 * CE / (mpi_np)) - CI_distrib = int(1.0 * CI / (mpi_np)) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'] - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_ignore_leonardo.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_ignore_leonardo.py deleted file mode 100644 index a0c9bb87c..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_ignore_leonardo.py +++ /dev/null @@ -1,620 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process - 'ignore_and_fire': True, # if True, all connection weights but those from poisson generator are set to zero - 'ignore_and_fire_rate': 50000.0, # rate of poisson generator when the 'ignore_and_fire' flag is True - 'ignore_and_fire_weight': 10.75 # weight of poisson generator connections when the 'ignore_and_fire' flag is True -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'], -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if params['ignore_and_fire']: - brunel_params["poisson_rate"] = params['ignore_and_fire_rate'] - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': params['ignore_and_fire_rate']}) - JE_pA = 0.0 - elif not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if params['ignore_and_fire']: - rank_print('Connecting stimulus generators.') - syn_dict_stim = {'weight': params['ignore_and_fire_weight'], 'delay': brunel_params['delay']} - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_stim) - elif not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - # number of indegrees from current MPI process - CE_local = CE // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CE % mpi_np ): - CE_local = CE_local + 1 - - CI_local = CI // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CI % mpi_np ): - CI_local = CI_local + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_local} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_local} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - CE_distrib = CE // mpi_np - if ( (i + j) % mpi_np ) < ( CE % mpi_np ): - CE_distrib = CE_distrib + 1 - - CI_distrib = CI // mpi_np - if ( (i + j) % mpi_np ) < ( CI % mpi_np ): - CI_distrib = CI_distrib + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo.py deleted file mode 100644 index 4feeb2843..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo.py +++ /dev/null @@ -1,610 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - # number of indegrees from current MPI process - CE_local = CE // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CE % mpi_np ): - CE_local = CE_local + 1 - - CI_local = CI // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CI % mpi_np ): - CI_local = CI_local + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_local} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_local} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - CE_distrib = CE // mpi_np - if ( (i + j) % mpi_np ) < ( CE % mpi_np ): - CE_distrib = CE_distrib + 1 - - CI_distrib = CI // mpi_np - if ( (i + j) % mpi_np ) < ( CI % mpi_np ): - CI_distrib = CI_distrib + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_long.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_long.py deleted file mode 100644 index 7d40b180c..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_long.py +++ /dev/null @@ -1,590 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 2500., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - - CE_distrib = int(1.0 * CE / (mpi_np)) - CI_distrib = int(1.0 * CI / (mpi_np)) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_old.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_old.py deleted file mode 100644 index a48e294cc..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_old.py +++ /dev/null @@ -1,590 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - - CE_distrib = int(1.0 * CE / (mpi_np)) - CI_distrib = int(1.0 * CI / (mpi_np)) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_test.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_test.py deleted file mode 100644 index aabcd9fe9..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_test.py +++ /dev/null @@ -1,610 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - # number of indegrees from current MPI process - CE_local = CE // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CE % mpi_np ): - CE_local = CE_local + 1 - - CI_local = CI // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CI % mpi_np ): - CI_local = CI_local + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_local} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_local} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - #my_connect(E_pops[mpi_id], neurons[mpi_id], - # e_conn_rule, syn_dict_ex) - - #my_connect(I_pops[mpi_id], neurons[mpi_id], - # i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - CE_distrib = CE // ( mpi_np - 1 ) - if ( (i + j) % ( mpi_np - 1 ) ) < ( CE % ( mpi_np - 1 ) ): - CE_distrib = CE_distrib + 1 - - CI_distrib = CI // ( mpi_np - 1 ) - if ( (i + j) % ( mpi_np - 1 ) ) < ( CI % ( mpi_np - 1 ) ): - CI_distrib = CI_distrib + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_test2.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_test2.py deleted file mode 100644 index 619647db6..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/hpc_benchmark_wg_leonardo_test2.py +++ /dev/null @@ -1,590 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.2, # 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - - CE_distrib = int(1.0 * CE / (mpi_np)) - CI_distrib = int(1.0 * CI / (mpi_np)) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640.sh deleted file mode 100644 index cad8fa491..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=160 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_bprod -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_fake.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_fake.sh deleted file mode 100644 index a0671f0ad..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_fake.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=1 -#SBATCH --cpus-per-task=32 -#SBATCH --time=00:30:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_dbg -####SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_fake.py --fake_mpi_proc_num 640 --fake_mpi_proc_id 113 diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_fake_long.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_fake_long.sh deleted file mode 100644 index b515fff27..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_fake_long.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=1 -#SBATCH --cpus-per-task=32 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -####SBATCH --qos=boost_qos_dbg -####SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_fake.py --fake_mpi_proc_num 640 --fake_mpi_proc_id 113 diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_ignore.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_ignore.sh deleted file mode 100644 index e472c96da..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_ignore.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=160 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_bprod -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_ignore_leonardo.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_long.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_long.sh deleted file mode 100644 index cb9460328..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_long.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=160 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_bprod -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo_long.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_old.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_old.sh deleted file mode 100644 index d625e3495..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_old.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=160 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_bprod -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo_old.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_test.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_test.sh deleted file mode 100644 index 74e2db89a..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_test.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=160 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_bprod -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo_test.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_test2.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_test2.sh deleted file mode 100644 index 27eea696c..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch_640_test2.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=160 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_bprod -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo_test2.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/clean.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/clean.sh deleted file mode 100755 index 1757710a9..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/clean.sh +++ /dev/null @@ -1,3 +0,0 @@ -rm -f alpha_*pop.dat -rm -f log_*.json -rm -f raster_plot*.png diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg.py deleted file mode 100644 index 0acd2c9ec..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg.py +++ /dev/null @@ -1,585 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 0.1, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': True, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - - CE_distrib = int(1.0 * CE / (mpi_np)) - CI_distrib = int(1.0 * CI / (mpi_np)) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'] - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg_leonardo.py b/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg_leonardo.py deleted file mode 100644 index a48e294cc..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg_leonardo.py +++ /dev/null @@ -1,590 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - - CE_distrib = int(1.0 * CE / (mpi_np)) - CI_distrib = int(1.0 * CI / (mpi_np)) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch.sh deleted file mode 100644 index f7182d82a..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=2 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=00:10:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_dbg -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo.py -#srun python3 hpc_benchmark_wg.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640.sh deleted file mode 100644 index cad8fa491..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=160 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=10:00:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_bprod -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640_fake.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640_fake.sh deleted file mode 100644 index a0671f0ad..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640_fake.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=1 -#SBATCH --cpus-per-task=32 -#SBATCH --time=00:30:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_dbg -####SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_fake.py --fake_mpi_proc_num 640 --fake_mpi_proc_id 113 diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640_fake_long.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640_fake_long.sh deleted file mode 100644 index d0175d743..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/run_sbatch_640_fake_long.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=1 -#SBATCH --ntasks-per-node=1 -#SBATCH --cpus-per-task=32 -#SBATCH --time=00:30:00 -#SBATCH --partition=boost_usr_prod -####SBATCH --qos=boost_qos_dbg -####SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_fake.py --fake_mpi_proc_num 640 --fake_mpi_proc_id 113 diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_8/clean.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_8/clean.sh deleted file mode 100755 index 1757710a9..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_8/clean.sh +++ /dev/null @@ -1,3 +0,0 @@ -rm -f alpha_*pop.dat -rm -f log_*.json -rm -f raster_plot*.png diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_8/hpc_benchmark_wg_leonardo.py b/python/hpc_benchmark/test_hpc_benchmark_wg_8/hpc_benchmark_wg_leonardo.py deleted file mode 100644 index 4feeb2843..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_8/hpc_benchmark_wg_leonardo.py +++ /dev/null @@ -1,610 +0,0 @@ -# -*- coding: utf-8 -*- -# -# hpc_benchmark.py -# -# This file is part of NEST GPU. -# -# Copyright (C) 2021 The NEST Initiative -# -# NEST GPU is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 2 of the License, or -# (at your option) any later version. -# -# NEST GPU is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with NEST GPU. If not, see . - - -""" -Random balanced network HPC benchmark -------------------------------------- -Warning: the NEST GPU implementation still presents differencies with respect -to NEST in the average firing rate of neurons. - -This script produces a balanced random network of `scale*11250` neurons -connected with static connections. The number of incoming connections -per neuron is fixed and independent of network size (indegree=11250). - -Furthermore, the scale can be also increased through running the script -using several MPI processes using the command mpirun -np nproc python hpc_benchmark.py -This way, a network of `scale*11250` neurons is built in every MPI process, -with indegrees equally distributed across the processes. - -This is the standard network investigated in [1]_, [2]_, [3]_. -A note on connectivity -~~~~~~~~~~~~~~~~~~~~~~ -Each neuron receives :math:`K_{in,{\\tau} E}` excitatory connections randomly -drawn from population E and :math:`K_{in,\\tau I}` inhibitory connections from -population I. Autapses are prohibited while multapses are allowed. Each neuron -receives additional input from an external stimulation device. All delays are -constant, all weights but excitatory onto excitatory are constant. - -A note on scaling -~~~~~~~~~~~~~~~~~ -This benchmark was originally developed for very large-scale simulations on -supercomputers with more than 1 million neurons in the network and -11.250 incoming synapses per neuron. For such large networks, synaptic input -to a single neuron will be little correlated across inputs and network -activity will remain stable over long periods of time. -The original network size corresponds to a scale parameter of 100 or more. -In order to make it possible to test this benchmark script on desktop -computers, the scale parameter is set to 1 below, while the number of -11.250 incoming synapses per neuron is retained. -Over time, network dynamics will therefore become unstable and all neurons -in the network will fire in synchrony, leading to extremely slow simulation -speeds. -Therefore, the presimulation time is reduced to 50 ms below and the -simulation time to 250 ms, while we usually use 100 ms presimulation and -1000 ms simulation time. -For meaningful use of this benchmark, you should use a scale > 10 and check -that the firing rate reported at the end of the benchmark is below 10 spikes -per second. -References -~~~~~~~~~~ -.. [1] Morrison A, Aertsen A, Diesmann M (2007). Spike-timing-dependent - plasticity in balanced random networks. Neural Comput 19(6):1437-67 -.. [2] Helias et al (2012). Supercomputers ready for use as discovery machines - for neuroscience. Front. Neuroinform. 6:26 -.. [3] Kunkel et al (2014). Spiking network simulation code for petascale - computers. Front. Neuroinform. 8:78 -.. [4] Senk et al (2021). Connectivity Concepts in Neuronal Network Modeling. - arXiv. 2110.02883 -""" - -import os -import sys -import json -import numpy as np -import scipy.special as sp -import matplotlib.pyplot as plt - -from time import perf_counter_ns - -import nestgpu as ngpu - -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument("--path", type=str, default=".") -parser.add_argument("--seed", type=int, default=12345) -args = parser.parse_args() - -M_INFO = 10 -M_ERROR = 30 - -ngpu.ConnectMpiInit() - -mpi_id = ngpu.HostId() -mpi_np = ngpu.HostNum() - -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) -hg = ngpu.CreateHostGroup(list(range(mpi_np))) - -############################################################################### -# Parameter section -# Define all relevant parameters: changes should be made here - - -params = { - 'scale': 20.0, # scaling factor of the network size - # total network size = scale*11250 neurons - 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms - 'presimtime': 50., # simulation time until reaching equilibrium - 'dt': 0.1, # simulation step - 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory - # neurons to file - 'show_plot': False, # switch to show plot at the end of simulation - # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot - 'path_name': args.path, # path where all files will have to be written - 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule - 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! - 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process -} - - -def rank_print(message): - """Prints message and attaches MPI rank""" - if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") - -rank_print("Simulation with {} MPI processes".format(mpi_np)) - - -def lambertwm1(x): - """Wrapper for LambertWm1 function""" - # Using scipy to mimic the gsl_sf_lambert_Wm1 function. - return sp.lambertw(x, k=-1 if x < 0 else 0).real - - -def convert_synapse_weight(tau_m, tau_syn, C_m): - """ - Computes conversion factor for synapse weight from mV to pA - This function is specific to the leaky integrate-and-fire neuron - model with alpha-shaped postsynaptic currents. - """ - - # compute time to maximum of V_m after spike input - # to neuron at rest - a = tau_m / tau_syn - b = 1.0 / tau_syn - 1.0 / tau_m - t_rise = 1.0 / b * (-lambertwm1(-np.exp(-1.0 / a) / a).real - 1.0 / a) - - v_max = np.exp(1.0) / (tau_syn * C_m * b) * ( - (np.exp(-t_rise / tau_m) - np.exp(-t_rise / tau_syn)) / - b - t_rise * np.exp(-t_rise / tau_syn)) - return 1. / v_max - -def dc_input_compensating_poisson(*args, **kwargs): - """TEST FUNCTION - DC amplitude tuned to obtain a target firing rate of 13Hz for E and I pops. - """ - return 500.1 - -############################################################################### -# For compatibility with earlier benchmarks, we require a rise time of -# ``t_rise = 1.700759 ms`` and we choose ``tau_syn`` to achieve this for given -# ``tau_m``. This requires numerical inversion of the expression for ``t_rise`` -# in ``convert_synapse_weight``. We computed this value once and hard-code -# it here. - - -tau_syn = 0.32582722403722841 - - -brunel_params = { - 'NE': int(9000 * params['scale']), # number of excitatory neurons - 'NI': int(2250 * params['scale']), # number of inhibitory neurons - - 'model_params': { # Set variables for iaf_psc_alpha - 'E_L': 0.0, # Resting membrane potential(mV) - 'C_m': 250.0, # Capacity of the membrane(pF) - 'tau_m': 10.0, # Membrane time constant(ms) - 't_ref': 0.5, # Duration of refractory period(ms) - 'Theta_rel': 20.0, # Threshold(mV) - 'V_reset_rel': 0.0, # Reset Potential(mV) - # time const. postsynaptic excitatory currents(ms) - 'tau_syn_ex': tau_syn, - # time const. postsynaptic inhibitory currents(ms) - 'tau_syn_in': tau_syn, - #'tau_minus': 30.0, # time constant for STDP(depression) - # V can be randomly initialized see below - 'V_m_rel': 0.0 #5.7 # mean value of membrane potential - }, - - #################################################################### - # Note that Kunkel et al. (2014) report different values. The values - # in the paper were used for the benchmarks on K, the values given - # here were used for the benchmark on JUQUEEN. - - 'randomize_Vm': True, - 'mean_potential': 5.7, - 'sigma_potential': 7.2, - - 'delay': 1.5, # synaptic delay, all alpha connections(ms) - - # synaptic weight - 'JE': 0.14, # peak of EPSP - - 'sigma_w': 3.47, # standard dev. of E->E synapses(pA) - 'g': -5.0, - - # stdp synapses still to be implemented correctly - 'stdp_params': { - 'alpha': 0.0513, - 'lambda': 0.1, # STDP step size - 'mu_plus': 0.4, # STDP weight dependence exponent(potentiation) - 'mu_minus': 0.4, # STDP weight dependence exponent(depression) - 'tau_plus': 15.0, # time constant for potentiation - 'tau_minus': 15.0, # time constant for depression - }, - 'stdp_delay': 1.5, - - 'eta': 1.685, # scaling of external stimulus - 'filestem': params['path_name'] -} - -############################################################################### -# Function Section - -def build_network(): - """Builds the network including setting of simulation and neuron - parameters, creation of neurons and connections. - Uses a dictionary to store information about the network construction times. - - Returns recorded neuron ids if spike recording is enabled, and the time dictionary. - """ - - time_start = perf_counter_ns() # start timer on construction - - # unpack a few variables for convenience - NE = brunel_params['NE'] - NI = brunel_params['NI'] - model_params = brunel_params['model_params'] - stdp_params = brunel_params['stdp_params'] - - rank_print('Creating neuron populations.') - - neurons = []; E_pops = []; I_pops = [] - - if(mpi_np > 1): - for i in range(mpi_np): - neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) - E_pops.append(neurons[i][0:NE]) - I_pops.append(neurons[i][NE:NE+NI]) - - else: - neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) - E_pops.append(neurons[mpi_id][0:NE]) - I_pops.append(neurons[mpi_id][NE:NE+NI]) - - if brunel_params['randomize_Vm']: - rank_print('Randomizing membrane potentials.') - ngpu.SetStatus(neurons[mpi_id], {"V_m_rel": {"distribution": "normal", "mu": brunel_params['mean_potential'], "sigma": brunel_params['sigma_potential']}}) - - # total number of incoming excitatory connections - CE = int(1. * NE / params['scale']) - # total number of incomining inhibitory connections - CI = int(1. * NI / params['scale']) - - rank_print('Creating excitatory stimulus generator.') - - # Convert synapse weight from mV to pA - conversion_factor = convert_synapse_weight(model_params['tau_m'], model_params['tau_syn_ex'], model_params['C_m']) - JE_pA = conversion_factor * brunel_params['JE'] - - nu_thresh = model_params['Theta_rel'] / ( CE * model_params['tau_m'] / model_params['C_m'] * JE_pA * np.exp(1.) * tau_syn) - nu_ext = nu_thresh * brunel_params['eta'] - rate = nu_ext * CE * 1000. - if not params['use_dc_input']: - brunel_params["poisson_rate"] = rate - E_stim= ngpu.Create('poisson_generator', 1, 1, {'rate': rate}) - else: - inh_amp = dc_input_compensating_poisson(rate, CI, tau_syn, brunel_params['g'] * JE_pA) - ex_amp = dc_input_compensating_poisson(rate, CE, tau_syn, JE_pA) - brunel_params["DC_amp_I"] = inh_amp - brunel_params["DC_amp_E"] = ex_amp - ngpu.SetStatus(I_pops[mpi_id], {"I_e": inh_amp}) - ngpu.SetStatus(E_pops[mpi_id], {"I_e": ex_amp}) - - - rank_print('Creating excitatory spike recorder.') - - if params['record_spikes']: - recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) - brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) - record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) - - time_create = perf_counter_ns() - - syn_dict_ex = None - syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} - if params['stdp']: - syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) - syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} - else: - syn_dict_ex = {'weight': JE_pA, 'delay': brunel_params['delay']} - - if mpi_id==0: - rank_print("Synaptic weights: JE={}; JI={}".format(JE_pA, JE_pA*brunel_params['g'])) - - if not params["use_dc_input"]: - rank_print('Connecting stimulus generators.') - # connect Poisson generator to neuron - my_connect(E_stim, neurons[mpi_id], {'rule': 'all_to_all'}, syn_dict_ex) - - rank_print('Creating local connections.') - rank_print('Connecting excitatory -> excitatory population.') - - # number of indegrees from current MPI process - CE_local = CE // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CE % mpi_np ): - CE_local = CE_local + 1 - - CI_local = CI // mpi_np - if ( (2*mpi_id) % mpi_np ) < ( CI % mpi_np ): - CI_local = CI_local + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_local} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_local} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - - time_connect_local = perf_counter_ns() - - rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - - # number of indegrees from each MPI process - # here the indegrees are equally distributed among the - # neuron populations in all the MPI processes - CE_distrib = CE // mpi_np - if ( (i + j) % mpi_np ) < ( CE % mpi_np ): - CE_distrib = CE_distrib + 1 - - CI_distrib = CI // mpi_np - if ( (i + j) % mpi_np ) < ( CI % mpi_np ): - CI_distrib = CI_distrib + 1 - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) - - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) - - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) - - # read out time used for building - time_connect_remote = perf_counter_ns() - - time_dict = { - "time_create": time_create - time_start, - "time_connect_local": time_connect_local - time_create, - "time_connect_remote": time_connect_remote - time_connect_local, - "time_connect": time_connect_remote - time_create - } - - conns = None - if params['check_conns']: - conns = dict() - for i in range(mpi_np): - if mpi_id == i: - conns[i] = dict() - for j in range(mpi_np): - conns[i][j] = dict() - conns[i][j]["E"] = dict() - conns[i][j]["I"] = dict() - conns[i][j]["E"]["E"] = get_conn_dict_array(E_pops[i], E_pops[j]) - conns[i][j]["I"]["E"] = get_conn_dict_array(I_pops[i], E_pops[j]) - conns[i][j]["E"]["I"] = get_conn_dict_array(E_pops[i], I_pops[j]) - conns[i][j]["I"]["I"] = get_conn_dict_array(I_pops[i], I_pops[j]) - - time_check_connect = perf_counter_ns() - - time_dict["time_check_connect"] = time_check_connect - time_connect_remote - - return neurons[mpi_id], record if params['record_spikes'] else None, conns, time_dict - - -def run_simulation(): - """Performs a simulation, including network construction""" - - time_start = perf_counter_ns() - - ngpu.SetKernelStatus({ - "verbosity_level": 4, - "rnd_seed": params["seed"], - "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, - "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 - }) - seed = ngpu.GetKernelStatus("rnd_seed") - - time_initialize = perf_counter_ns() - - neurons, record, conns, time_dict = build_network() - - time_construct = perf_counter_ns() - - ngpu.Calibrate() - - time_calibrate = perf_counter_ns() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() - - time_dict.update({ - "time_initialize": time_initialize - time_start, - "time_construct": time_construct - time_initialize, - "time_calibrate": time_calibrate - time_construct, - "time_presimulate": time_presimulate - time_calibrate, - "time_simulate": time_simulate - time_presimulate, - "time_total": time_simulate - time_start - }) - - conf_dict = { - "num_processes": mpi_np, - "brunel_params": brunel_params, - "simulation_params": params - } - - info_dict = { - "rank": mpi_id, - "seed": seed, - "conf": conf_dict, - "timers": time_dict - } - - if params['record_spikes']: - e_stats, e_data, i_stats, i_data= get_spike_times(neurons) - e_rate = compute_rate(*e_stats) - i_rate = compute_rate(*i_stats) - info_dict["stats"] = { - "excitatory_firing_rate": e_rate, - "inhibitory_firing_rate": i_rate - } - - if params['show_plot']: - recorded_data = ngpu.GetRecordData(record) - time = [row[0] for row in recorded_data] - V_m = [row[1] for row in recorded_data] - plt.figure(mpi_id) - plt.plot(time, V_m, '-r') - plt.draw() - if params['raster_plot']: - raster_plot(e_data, i_data) - - if params['check_conns']: - with open(os.path.join(params['path_name'], f"connections_{mpi_id}.json"), 'w') as f: - json.dump(conns, f, indent=4) - - k_status = ngpu.GetKernelStatus() - info_dict["kernel_status"] = k_status - - rank_print(json.dumps(info_dict, indent=4)) - - with open(os.path.join(params['path_name'], params['log_file'] + f"_{mpi_id}.json"), 'w') as f: - json.dump(info_dict, f, indent=4) - -def my_connect(source, target, conn_dict, syn_dict): - rank_print("MY id {} LOCAL Source {} {} | Target {} {}".format(mpi_id, source.i0, source.n, target.i0, target.n)) - ngpu.Connect(source, target, conn_dict, syn_dict) - - -def my_remoteconnect(source_host, source, target_host, target, conn_dict, syn_dict, hg): - rank_print("MY id {} REMOTE Source {} {} {} | Target {} {} {}".format(mpi_id, source_host, source.i0, source.n, target_host, target.i0, target.n)) - ngpu.RemoteConnect(source_host, source, target_host, target, conn_dict, syn_dict, hg) - - -def get_conn_dict_array(source, target): - """Retrieve neural connections as an array of dictionaries.""" - connectionIdArray = ngpu.GetConnections(source, target) - res = [{"i_source": i.i_source, "i_group": i.i_group, "i_conn": i.i_conn} for i in connectionIdArray] - return res - - -def get_spike_times(neurons): - """Retrieve spike times from local neuron population - and filter through inhibitory neurons to store only excitatory spikes. - """ - - # get spikes - spike_times = ngpu.GetRecSpikeTimes(neurons) - - # select excitatory neurons - e_count = 0 - e_data = [] - e_bound = brunel_params['NE'] - i_count = 0 - i_data = [] - i_bound = brunel_params['NE'] + brunel_params['NI'] - for i_neur in range(i_bound): - spikes = spike_times[i_neur] - if len(spikes) != 0: - if i_neur < e_bound: - for t in spikes: - if t > params['presimtime']: - e_count += 1 - e_data.append([i_neur, t]) - else: - for t in spikes: - if t > params['presimtime']: - i_count += 1 - i_data.append([i_neur, t]) - - # Save data - if len(e_data) > 0: - e_array = np.array(e_data) - e_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_e_pop.dat") - np.savetxt(e_fn, e_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - if len(i_data) > 0: - i_array = np.array(i_data) - i_fn = os.path.join(brunel_params['filestem'], brunel_params["recorder_label"] + "_i_pop.dat") - np.savetxt(i_fn, i_array, fmt='%d\t%.3f', header="sender time_ms", comments='') - - return (brunel_params['NE'], e_count), e_data, (brunel_params['NI'], i_count), i_data - - -def compute_rate(num_neurons, spike_count): - """Compute local approximation of average firing rate - This approximation is based on the number of local nodes, number - of local spikes and total time. Since this also considers devices, - the actual firing rate is usually underestimated. - """ - if spike_count < 1: - return 0 - - time_frame = params['simtime'] - - return (1. * spike_count / (num_neurons * time_frame) * 1e3) - -def raster_plot(e_st, i_st): - fs = 18 # fontsize - colors = ['#595289', '#af143c'] - e_ids = np.zeros(len(e_st)); i_ids = np.zeros(len(i_st)) - e_times = np.zeros(len(e_st)); i_times = np.zeros(len(i_st)) - for i in range(len(e_st)): - e_ids[i]=e_st[i][0] - e_times[i]=e_st[i][1] - for i in range(len(i_st)): - i_ids[i]=i_st[i][0] - i_times[i]=i_st[i][1] - - plt.figure(1, figsize=(16, 10)) - plt.plot(e_times, e_ids, '.', color=colors[0]) - plt.plot(i_times, i_ids, '.', color=colors[1]) - plt.xlabel('time [ms]', fontsize=fs) - plt.ylabel('neuron ID', fontsize=fs) - plt.xticks(fontsize=fs) - plt.yticks(fontsize=fs) - plt.tight_layout() - plt.savefig(os.path.join(brunel_params['filestem'], 'raster_plot'+ str(mpi_id) +'.png'), dpi=300) - -if __name__ == '__main__': - run_simulation() - if params['show_plot']: - plt.show() - ngpu.MpiFinalize() diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_8/run_sbatch_8.sh b/python/hpc_benchmark/test_hpc_benchmark_wg_8/run_sbatch_8.sh deleted file mode 100644 index 6fd7f58bb..000000000 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_8/run_sbatch_8.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash -x -#SBATCH --account=INF24_brainsta_1 -#SBATCH --nodes=2 -#SBATCH --ntasks-per-node=4 -#SBATCH --cpus-per-task=8 -#SBATCH --time=00:30:00 -#SBATCH --partition=boost_usr_prod -#SBATCH --qos=boost_qos_dbg -#SBATCH --gres=gpu:4 -#SBATCH --gpus-per-task=1 -#SBATCH --exclusive -#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_out.%j -#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/debug/test_ngpu_hpcb_wg_err.%j -# *** start of job script *** -# Note: The current working directory at this point is -# the directory where sbatch was executed. - -###export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} -srun python3 hpc_benchmark_wg_leonardo.py diff --git a/python/script.sh b/python/script.sh deleted file mode 100644 index a5ed36ca2..000000000 --- a/python/script.sh +++ /dev/null @@ -1,2 +0,0 @@ -export NEST_GPU=/home/golosio/nest-gpu-git/golosio/nest-gpu/ -export PYTHONPATH=/home/golosio/nest-gpu-git/golosio/nest-gpu/pythonlib diff --git a/python/test/log_setvar.txt b/python/test/log_setvar.txt deleted file mode 100644 index 878004764..000000000 --- a/python/test/log_setvar.txt +++ /dev/null @@ -1,99 +0,0 @@ ------------------------------------------------------------------ -NESTGPU -A GPU-MPI library for simulation of large-scale networks - of spiking neurons ------------------------------------------------------------------ -('read_td', [[60.0, 10.0], [60.0, 10.0], [60.0, 10.0]]) -('read_tr', [[40.0, 5.0], [40.0, 5.0], [40.0, 5.0]]) -('read_Vm', [[-80.0], [-70.5999984741211], [-70.5999984741211]]) -('read_Vth', [[-50.400001525878906], [-50.400001525878906], [-50.400001525878906]]) -('read_g1', [[0.0, 0.0], [0.0, 0.10000000149011612], [0.10000000149011612, 0.0]]) -('read1_td', [[60.0, 10.0], [60.0, 10.0], [60.0, 10.0]]) -('read1_tr', [[40.0, 5.0], [40.0, 5.0], [40.0, 5.0]]) -('read1_Vm', [[-70.5999984741211], [-70.5999984741211], [-80.0]]) -('read1_Vth', [[-50.400001525878906], [-50.400001525878906], [-50.400001525878906]]) -('read1_g1', [[0.0, 0.10000000149011612], [0.10000000149011612, 0.0], [0.0, 0.0]]) -Calibrating ... -Simulating ... -Neural activity simulation time: 800.000 -0.000 -10.000 -20.000 -30.000 -40.000 -50.000 -60.000 -70.000 -80.000 -90.000 -100.000 -110.000 -120.000 -130.000 -140.000 -150.000 -160.000 -170.000 -180.000 -190.000 -200.000 -210.000 -220.000 -230.000 -240.000 -250.000 -260.000 -270.000 -280.000 -290.000 -300.000 -310.000 -320.000 -330.000 -340.000 -350.000 -360.000 -370.000 -380.000 -390.000 -400.000 -410.000 -420.000 -430.000 -440.000 -450.000 -460.000 -470.000 -480.000 -490.000 -500.000 -510.000 -520.000 -530.000 -540.000 -550.000 -560.000 -570.000 -580.000 -590.000 -600.000 -610.000 -620.000 -630.000 -640.000 -650.000 -660.000 -670.000 -680.000 -690.000 -700.000 -710.000 -720.000 -730.000 -740.000 -750.000 -760.000 -770.000 -780.000 -790.000 -800.000 diff --git a/python/test/log_setvar3.txt b/python/test/log_setvar3.txt deleted file mode 100644 index c3b050874..000000000 --- a/python/test/log_setvar3.txt +++ /dev/null @@ -1,35 +0,0 @@ ------------------------------------------------------------------ -NESTGPU -A GPU-MPI library for simulation of large-scale networks - of spiking neurons ------------------------------------------------------------------ -('read_td', [[80.0, 40.0], [70.0, 30.0], [80.0, 40.0], [70.0, 30.0], [80.0, 40.0], [70.0, 30.0]]) -('read_tr', [[60.0, 20.0], [50.0, 10.0], [60.0, 20.0], [50.0, 10.0], [60.0, 20.0], [50.0, 10.0]]) -('read_Vm', [[-80.0], [-90.0], [-80.0], [-90.0], [-80.0], [-90.0]]) -('read_Vth', [[-40.0], [-30.0], [-40.0], [-30.0], [-40.0], [-30.0]]) -('read_g1', [[0.4000000059604645, 0.20000000298023224], [0.30000001192092896, 0.10000000149011612], [0.4000000059604645, 0.20000000298023224], [0.30000001192092896, 0.10000000149011612], [0.4000000059604645, 0.20000000298023224], [0.30000001192092896, 0.10000000149011612]]) -('read1_td', [[80.0, 40.0], [80.0, 40.0], [80.0, 40.0], [70.0, 30.0], [70.0, 30.0], [70.0, 30.0]]) -('read1_tr', [[60.0, 20.0], [60.0, 20.0], [60.0, 20.0], [50.0, 10.0], [50.0, 10.0], [50.0, 10.0]]) -('read1_Vm', [[-80.0], [-80.0], [-80.0], [-90.0], [-90.0], [-90.0]]) -('read1_Vth', [[-40.0], [-40.0], [-40.0], [-30.0], [-30.0], [-30.0]]) -('read1_g1', [[0.4000000059604645, 0.20000000298023224], [0.4000000059604645, 0.20000000298023224], [0.4000000059604645, 0.20000000298023224], [0.30000001192092896, 0.10000000149011612], [0.30000001192092896, 0.10000000149011612], [0.30000001192092896, 0.10000000149011612]]) -2 -['V_m', 'w'] -2 -['g', 'g1'] -13 -['V_th', 'Delta_T', 'g_L', 'E_L', 'C_m', 'a', 'b', 'tau_w', 'I_e', 'V_peak', 'V_reset', 't_ref', 'refractory_step'] -4 -['E_rev', 'tau_rise', 'tau_decay', 'g0'] -() -{'a': [4.0], 'tau_decay': [80.0, 40.0], 'b': [80.5], 'V_th': [-40.0], 'g': [0.0, 0.0], 'g0': [0.0, 0.0], 'Delta_T': [2.0], 'I_e': [0.0], 'refractory_step': [0.0], 'C_m': [281.0], 'g_L': [30.0], 'tau_rise': [60.0, 20.0], 'V_reset': [-60.0], 'w': [0.0], 'tau_w': [144.0], 'V_m': [-80.0], 'E_rev': [0.0, 0.0], 't_ref': [0.0], 'g1': [0.4000000059604645, 0.20000000298023224], 'V_peak': [0.0], 'E_L': [-70.5999984741211]} -() -[{'a': [4.0], 'tau_decay': [70.0, 30.0], 'b': [80.5], 'V_th': [-30.0], 'g': [0.0, 0.0], 'g0': [0.0, 0.0], 'Delta_T': [2.0], 'I_e': [0.0], 'refractory_step': [0.0], 'C_m': [281.0], 'g_L': [30.0], 'tau_rise': [50.0, 10.0], 'V_reset': [-60.0], 'w': [0.0], 'tau_w': [144.0], 'V_m': [-90.0], 'E_rev': [0.0, 0.0], 't_ref': [0.0], 'g1': [0.30000001192092896, 0.10000000149011612], 'V_peak': [0.0], 'E_L': [-70.5999984741211]}, {'a': [4.0], 'tau_decay': [70.0, 30.0], 'b': [80.5], 'V_th': [-30.0], 'g': [0.0, 0.0], 'g0': [0.0, 0.0], 'Delta_T': [2.0], 'I_e': [0.0], 'refractory_step': [0.0], 'C_m': [281.0], 'g_L': [30.0], 'tau_rise': [50.0, 10.0], 'V_reset': [-60.0], 'w': [0.0], 'tau_w': [144.0], 'V_m': [-90.0], 'E_rev': [0.0, 0.0], 't_ref': [0.0], 'g1': [0.30000001192092896, 0.10000000149011612], 'V_peak': [0.0], 'E_L': [-70.5999984741211]}, {'a': [4.0], 'tau_decay': [70.0, 30.0], 'b': [80.5], 'V_th': [-30.0], 'g': [0.0, 0.0], 'g0': [0.0, 0.0], 'Delta_T': [2.0], 'I_e': [0.0], 'refractory_step': [0.0], 'C_m': [281.0], 'g_L': [30.0], 'tau_rise': [50.0, 10.0], 'V_reset': [-60.0], 'w': [0.0], 'tau_w': [144.0], 'V_m': [-90.0], 'E_rev': [0.0, 0.0], 't_ref': [0.0], 'g1': [0.30000001192092896, 0.10000000149011612], 'V_peak': [0.0], 'E_L': [-70.5999984741211]}] -() -[[60.0, 20.0], [60.0, 20.0], [60.0, 20.0]] -() -[[50.0, 10.0], [50.0, 10.0], [50.0, 10.0]] -() -[[-80.0], [-80.0], [-80.0]] -() -[[-90.0], [-90.0], [-90.0]] diff --git a/python/test/test_brunel_user_m1.py.bk b/python/test/test_brunel_user_m1.py.bk deleted file mode 100644 index ae8c6390c..000000000 --- a/python/test/test_brunel_user_m1.py.bk +++ /dev/null @@ -1,151 +0,0 @@ -import sys -import math -import ctypes -import nestgpu as ngpu -from random import randrange -import numpy as np - -order = 200 -n_test = 100 - -expected_rate = 30.78 -print("Building ...") - -ngpu.SetKernelStatus("rnd_seed", 1234) # seed for GPU random numbers - -n_receptors = 2 - -NE = 4 * order # number of excitatory neurons -NI = 1 * order # number of inhibitory neurons -n_neurons = NE + NI # number of neurons in total - -CE = 800 # number of excitatory synapses per neuron -CI = CE//4 # number of inhibitory synapses per neuron - -Wex = 0.05 -Win = 0.35 - -# poisson generator parameters -poiss_rate = 20000.0 # poisson signal rate in Hz -poiss_weight = 0.37 -poiss_delay = 0.2 # poisson signal delay in ms - -# create poisson generator -pg = ngpu.Create("poisson_generator") -ngpu.SetStatus(pg, "rate", poiss_rate) -pg_list = pg.ToList() - -# Create n_neurons neurons with n_receptor receptor ports -neuron = ngpu.Create("user_m1", n_neurons, n_receptors) -exc_neuron = neuron[0:NE] # excitatory neurons -inh_neuron = neuron[NE:n_neurons] # inhibitory neurons -neuron_list = neuron.ToList() -exc_neuron_list = exc_neuron.ToList() -inh_neuron_list = inh_neuron.ToList() - -# receptor parameters -E_rev = [0.0, -85.0] -tau_decay = [1.0, 1.0] -tau_rise = [1.0, 1.0] -ngpu.SetStatus(neuron, {"E_rev":E_rev, "tau_decay":tau_decay, - "tau_rise":tau_rise}) - - -mean_delay = 0.5 -std_delay = 0.25 -min_delay = 0.1 -# Excitatory connections -# connect excitatory neurons to port 0 of all neurons -# normally distributed delays, weight Wex and CE connections per neuron -exc_conn_dict={"rule": "fixed_indegree", "indegree": CE} -exc_syn_dict={"weight": Wex, "delay": {"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":0} -ngpu.Connect(exc_neuron, neuron_list, exc_conn_dict, exc_syn_dict) - -# Inhibitory connections -# connect inhibitory neurons to port 1 of all neurons -# normally distributed delays, weight Win and CI connections per neuron -inh_conn_dict={"rule": "fixed_indegree", "indegree": CI} -inh_syn_dict={"weight": Win, "delay":{"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":1} -ngpu.Connect(inh_neuron_list, exc_neuron_list, inh_conn_dict, inh_syn_dict) -ngpu.Connect(inh_neuron_list, inh_neuron, inh_conn_dict, inh_syn_dict) - -#connect poisson generator to port 0 of all neurons -pg_conn_dict={"rule": "all_to_all"} -pg_syn_dict={"weight": poiss_weight, "delay": poiss_delay, - "receptor":0} - -ngpu.Connect(pg_list, neuron_list, pg_conn_dict, pg_syn_dict) - -i_neuron_list = [neuron[0], neuron[n_neurons-1]] -i_receptor_list = [0, 0] -var_name_list = ["spike", "spike"] - -for i in range(n_test-2): - i_neuron_list.append(neuron[randrange(n_neurons)]) - i_receptor_list.append(0) - var_name_list.append("spike") - -# create multimeter record of spikes -record = ngpu.CreateRecord("", var_name_list, i_neuron_list, i_receptor_list) - -ngpu.Simulate() - -data_list = ngpu.GetRecordData(record) - -for i in range(1000): - conn_id = ngpu.GetConnections(i+1) - n_out_conn = len(conn_id) - if (n_out_conn!=NE+NI): - print("Expected number of out connections per neuron: ", NE+NI) - print("Number of out connections of neuron ", i + 1, ": ", \ - n_out_conn) - sys.exit(1) - - -for i in range(10): - i_target = randrange(n_neurons) - conn_id = ngpu.GetConnections(target=i_target+1) - n_in_conn = len(conn_id) - if (n_in_conn!=NE+NI+1): - print("Expected number of in connections per neuron: ", NE+NI+1) - print("Number of in connections of neuron ", i_target, ": ", \ - n_in_conn) - sys.exit(1) - - -row_sum = list(data_list[0]) -for row in data_list[1:len(data_list)]: - for i in range(len(row_sum)): - row_sum[i] = row_sum[i] + row[i] - -spike = row_sum[1:len(row_sum)] -spike_arr = np.array(spike) - -min_spike_num = np.min(spike_arr) -max_spike_num = np.max(spike_arr) -if (min_spike_num < expected_rate - 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Min rate :", min_spike_num) - sys.exit(1) - -if (max_spike_num > expected_rate + 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Max rate :", max_spike_num) - sys.exit(1) - -mean_spike_num = np.mean(spike_arr) -diff = abs(mean_spike_num - expected_rate) -max_diff = 3.0*np.sqrt(expected_rate)/np.sqrt(n_test) -print ("Expected rate: ", expected_rate) -print("Mean rate: ", mean_spike_num) -if diff > max_diff: - sys.exit(1) -else: - sys.exit(0) - diff --git a/python/test/test_brunel_user_m1.py.bk2 b/python/test/test_brunel_user_m1.py.bk2 deleted file mode 100644 index 2e7e405a6..000000000 --- a/python/test/test_brunel_user_m1.py.bk2 +++ /dev/null @@ -1,151 +0,0 @@ -import sys -import math -import ctypes -import nestgpu as ngpu -from random import randrange -import numpy as np - -order = 200 -n_test = 100 - -expected_rate = 30.78 -print("Building ...") - -ngpu.SetKernelStatus("rnd_seed", 1234) # seed for GPU random numbers - -n_receptors = 2 - -NE = 4 * order # number of excitatory neurons -NI = 1 * order # number of inhibitory neurons -n_neurons = NE + NI # number of neurons in total - -CE = 800 # number of excitatory synapses per neuron -CI = CE//4 # number of inhibitory synapses per neuron - -Wex = 0.05 -Win = 0.35 - -# poisson generator parameters -poiss_rate = 20000.0 # poisson signal rate in Hz -poiss_weight = 0.37 -poiss_delay = 0.2 # poisson signal delay in ms - -# create poisson generator -pg = ngpu.Create("poisson_generator") -ngpu.SetStatus(pg, "rate", poiss_rate) -pg_list = pg.ToList() - -# Create n_neurons neurons with n_receptor receptor ports -neuron = ngpu.Create("user_m1", n_neurons, n_receptors) -exc_neuron = neuron[0:NE] # excitatory neurons -inh_neuron = neuron[NE:n_neurons] # inhibitory neurons -neuron_list = neuron.ToList() -exc_neuron_list = exc_neuron.ToList() -inh_neuron_list = inh_neuron.ToList() - -# receptor parameters -E_rev = [0.0, -85.0] -tau_decay = [1.0, 1.0] -tau_rise = [1.0, 1.0] -ngpu.SetStatus(neuron, {"E_rev":E_rev, "tau_decay":tau_decay, - "tau_rise":tau_rise}) - - -mean_delay = 0.5 -std_delay = 0.25 -min_delay = 0.1 -# Excitatory connections -# connect excitatory neurons to port 0 of all neurons -# normally distributed delays, weight Wex and CE connections per neuron -exc_conn_dict={"rule": "fixed_indegree", "indegree": CE} -exc_syn_dict={"weight": Wex, "delay": {"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":0} -ngpu.Connect(exc_neuron, neuron, exc_conn_dict, exc_syn_dict) - -# Inhibitory connections -# connect inhibitory neurons to port 1 of all neurons -# normally distributed delays, weight Win and CI connections per neuron -inh_conn_dict={"rule": "fixed_indegree", "indegree": CI} -inh_syn_dict={"weight": Win, "delay":{"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":1} -ngpu.Connect(inh_neuron, exc_neuron, inh_conn_dict, inh_syn_dict) -ngpu.Connect(inh_neuron, inh_neuron, inh_conn_dict, inh_syn_dict) - -#connect poisson generator to port 0 of all neurons -pg_conn_dict={"rule": "all_to_all"} -pg_syn_dict={"weight": poiss_weight, "delay": poiss_delay, - "receptor":0} - -ngpu.Connect(pg, neuron, pg_conn_dict, pg_syn_dict) - -i_neuron_list = [neuron[0], neuron[n_neurons-1]] -i_receptor_list = [0, 0] -var_name_list = ["spike", "spike"] - -for i in range(n_test-2): - i_neuron_list.append(neuron[randrange(n_neurons)]) - i_receptor_list.append(0) - var_name_list.append("spike") - -# create multimeter record of spikes -record = ngpu.CreateRecord("", var_name_list, i_neuron_list, i_receptor_list) - -ngpu.Simulate() - -data_list = ngpu.GetRecordData(record) - -for i in range(1000): - conn_id = ngpu.GetConnections(i+1) - n_out_conn = len(conn_id) - if (n_out_conn!=NE+NI): - print("Expected number of out connections per neuron: ", NE+NI) - print("Number of out connections of neuron ", i + 1, ": ", \ - n_out_conn) - #sys.exit(1) - - -for i in range(10): - i_target = randrange(n_neurons) - conn_id = ngpu.GetConnections(target=i_target+1) - n_in_conn = len(conn_id) - if (n_in_conn!=NE+NI+1): - print("Expected number of in connections per neuron: ", NE+NI+1) - print("Number of in connections of neuron ", i_target, ": ", \ - n_in_conn) - #sys.exit(1) - - -row_sum = list(data_list[0]) -for row in data_list[1:len(data_list)]: - for i in range(len(row_sum)): - row_sum[i] = row_sum[i] + row[i] - -spike = row_sum[1:len(row_sum)] -spike_arr = np.array(spike) - -min_spike_num = np.min(spike_arr) -max_spike_num = np.max(spike_arr) -if (min_spike_num < expected_rate - 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Min rate :", min_spike_num) - sys.exit(1) - -if (max_spike_num > expected_rate + 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Max rate :", max_spike_num) - sys.exit(1) - -mean_spike_num = np.mean(spike_arr) -diff = abs(mean_spike_num - expected_rate) -max_diff = 3.0*np.sqrt(expected_rate)/np.sqrt(n_test) -print ("Expected rate: ", expected_rate) -print("Mean rate: ", mean_spike_num) -if diff > max_diff: - sys.exit(1) -else: - sys.exit(0) - diff --git a/python/test/test_fixed_total_number.py.bk b/python/test/test_fixed_total_number.py.bk deleted file mode 100644 index a8f9baca2..000000000 --- a/python/test/test_fixed_total_number.py.bk +++ /dev/null @@ -1,138 +0,0 @@ -import sys -import math -import ctypes -import nestgpu as ngpu -from random import randrange -import numpy as np - -order = 200 -n_test = 100 - -expected_rate = 30.78 -print("Building ...") - -ngpu.SetKernelStatus("rnd_seed", 1234) # seed for GPU random numbers - -n_receptors = 2 - -NE = 4 * order # number of excitatory neurons -NI = 1 * order # number of inhibitory neurons -n_neurons = NE + NI # number of neurons in total - -CPN = 1000 # number of connections per neuron - -Wex = 0.05 -Win = 0.35 - -# poisson generator parameters -poiss_rate = 20000.0 # poisson signal rate in Hz -poiss_weight = 0.37 -poiss_delay = 0.2 # poisson signal delay in ms - -# create poisson generator -pg = ngpu.Create("poisson_generator") -ngpu.SetStatus(pg, "rate", poiss_rate) -pg_list = pg.ToList() - -# Create n_neurons neurons with n_receptor receptor ports -neuron = ngpu.Create("aeif_cond_beta", n_neurons, n_receptors) -exc_neuron = neuron[0:NE] # excitatory neurons -inh_neuron = neuron[NE:n_neurons] # inhibitory neurons -neuron_list = neuron.ToList() -exc_neuron_list = exc_neuron.ToList() -inh_neuron_list = inh_neuron.ToList() - -# receptor parameters -E_rev = [0.0, -85.0] -tau_decay = [1.0, 1.0] -tau_rise = [1.0, 1.0] -ngpu.SetStatus(neuron, {"E_rev":E_rev, "tau_decay":tau_decay, - "tau_rise":tau_rise}) - - -mean_delay = 0.5 -std_delay = 0.25 -min_delay = 0.1 -# Excitatory connections -# connect excitatory neurons to port 0 of all neurons -# normally distributed delays, weight Wex and CPN connections per neuron -exc_conn_dict={"rule": "fixed_total_number", "total_num": CPN*NE} -exc_syn_dict={"weight": Wex, "delay": {"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":0} -ngpu.Connect(exc_neuron, neuron_list, exc_conn_dict, exc_syn_dict) - -# Inhibitory connections -# connect inhibitory neurons to port 1 of all neurons -# normally distributed delays, weight Win and CPN connections per neuron -inh_conn_dict={"rule": "fixed_total_number", "total_num": CPN*NI} -inh_syn_dict={"weight": Win, "delay":{"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":1} -ngpu.Connect(inh_neuron_list, neuron, inh_conn_dict, inh_syn_dict) - -#connect poisson generator to port 0 of all neurons -pg_conn_dict={"rule": "all_to_all"} -pg_syn_dict={"weight": poiss_weight, "delay": poiss_delay, "receptor":0} - -ngpu.Connect(pg_list, neuron_list, pg_conn_dict, pg_syn_dict) - -i_neuron_list = [neuron[0], neuron[n_neurons-1]] -i_receptor_list = [0, 0] -var_name_list = ["spike", "spike"] - -for i in range(n_test-2): - i_neuron_list.append(neuron[randrange(n_neurons)]) - i_receptor_list.append(0) - var_name_list.append("spike") - -# create multimeter record of spikes -record = ngpu.CreateRecord("", var_name_list, i_neuron_list, i_receptor_list) - -ngpu.Simulate() - -data_list = ngpu.GetRecordData(record) - -n_conn_tot = 0 -for i in range(1000): - conn_id = ngpu.GetConnections(i+1) - n_out_conn = len(conn_id) - n_conn_tot = n_conn_tot + n_out_conn - -if (n_conn_tot!=(NE+NI)*CPN): - print("Expected total number of connections: ", (NE+NI)*CPN) - print("Total number of connections ", n_conn_tot) - sys.exit(1) - -row_sum = list(data_list[0]) -for row in data_list[1:len(data_list)]: - for i in range(len(row_sum)): - row_sum[i] = row_sum[i] + row[i] - -spike = row_sum[1:len(row_sum)] -spike_arr = np.array(spike) - -min_spike_num = np.min(spike_arr) -max_spike_num = np.max(spike_arr) -if (min_spike_num < expected_rate - 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Min rate :", min_spike_num) - sys.exit(1) - -if (max_spike_num > expected_rate + 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Max rate :", max_spike_num) - sys.exit(1) - -mean_spike_num = np.mean(spike_arr) -diff = abs(mean_spike_num - expected_rate) -max_diff = 3.0*np.sqrt(expected_rate)/np.sqrt(n_test) -print ("Expected rate: ", expected_rate) -print("Mean rate: ", mean_spike_num) -if diff > max_diff: - sys.exit(1) -else: - sys.exit(0) - diff --git a/python/test/test_fixed_total_number.py.bk2 b/python/test/test_fixed_total_number.py.bk2 deleted file mode 100644 index 0ee5abe3d..000000000 --- a/python/test/test_fixed_total_number.py.bk2 +++ /dev/null @@ -1,138 +0,0 @@ -import sys -import math -import ctypes -import nestgpu as ngpu -from random import randrange -import numpy as np - -order = 200 -n_test = 100 - -expected_rate = 30.78 -print("Building ...") - -ngpu.SetKernelStatus("rnd_seed", 1234) # seed for GPU random numbers - -n_receptors = 2 - -NE = 4 * order # number of excitatory neurons -NI = 1 * order # number of inhibitory neurons -n_neurons = NE + NI # number of neurons in total - -CPN = 1000 # number of connections per neuron - -Wex = 0.05 -Win = 0.35 - -# poisson generator parameters -poiss_rate = 20000.0 # poisson signal rate in Hz -poiss_weight = 0.37 -poiss_delay = 0.2 # poisson signal delay in ms - -# create poisson generator -pg = ngpu.Create("poisson_generator") -ngpu.SetStatus(pg, "rate", poiss_rate) -pg_list = pg.ToList() - -# Create n_neurons neurons with n_receptor receptor ports -neuron = ngpu.Create("aeif_cond_beta", n_neurons, n_receptors) -exc_neuron = neuron[0:NE] # excitatory neurons -inh_neuron = neuron[NE:n_neurons] # inhibitory neurons -neuron_list = neuron.ToList() -exc_neuron_list = exc_neuron.ToList() -inh_neuron_list = inh_neuron.ToList() - -# receptor parameters -E_rev = [0.0, -85.0] -tau_decay = [1.0, 1.0] -tau_rise = [1.0, 1.0] -ngpu.SetStatus(neuron, {"E_rev":E_rev, "tau_decay":tau_decay, - "tau_rise":tau_rise}) - - -mean_delay = 0.5 -std_delay = 0.25 -min_delay = 0.1 -# Excitatory connections -# connect excitatory neurons to port 0 of all neurons -# normally distributed delays, weight Wex and CPN connections per neuron -exc_conn_dict={"rule": "fixed_total_number", "total_num": CPN*NE} -exc_syn_dict={"weight": Wex, "delay": {"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":0} -ngpu.Connect(exc_neuron, neuron, exc_conn_dict, exc_syn_dict) - -# Inhibitory connections -# connect inhibitory neurons to port 1 of all neurons -# normally distributed delays, weight Win and CPN connections per neuron -inh_conn_dict={"rule": "fixed_total_number", "total_num": CPN*NI} -inh_syn_dict={"weight": Win, "delay":{"distribution":"normal_clipped", - "mu":mean_delay, "low":min_delay, - "high":mean_delay+3*std_delay, - "sigma":std_delay}, "receptor":1} -ngpu.Connect(inh_neuron, neuron, inh_conn_dict, inh_syn_dict) - -#connect poisson generator to port 0 of all neurons -pg_conn_dict={"rule": "all_to_all"} -pg_syn_dict={"weight": poiss_weight, "delay": poiss_delay, "receptor":0} - -ngpu.Connect(pg, neuron, pg_conn_dict, pg_syn_dict) - -i_neuron_list = [neuron[0], neuron[n_neurons-1]] -i_receptor_list = [0, 0] -var_name_list = ["spike", "spike"] - -for i in range(n_test-2): - i_neuron_list.append(neuron[randrange(n_neurons)]) - i_receptor_list.append(0) - var_name_list.append("spike") - -# create multimeter record of spikes -record = ngpu.CreateRecord("", var_name_list, i_neuron_list, i_receptor_list) - -ngpu.Simulate() - -data_list = ngpu.GetRecordData(record) - -n_conn_tot = 0 -for i in range(1000): - conn_id = ngpu.GetConnections(i+1) - n_out_conn = len(conn_id) - n_conn_tot = n_conn_tot + n_out_conn - -if (n_conn_tot!=(NE+NI)*CPN): - print("Expected total number of connections: ", (NE+NI)*CPN) - print("Total number of connections ", n_conn_tot) - #sys.exit(1) - -row_sum = list(data_list[0]) -for row in data_list[1:len(data_list)]: - for i in range(len(row_sum)): - row_sum[i] = row_sum[i] + row[i] - -spike = row_sum[1:len(row_sum)] -spike_arr = np.array(spike) - -min_spike_num = np.min(spike_arr) -max_spike_num = np.max(spike_arr) -if (min_spike_num < expected_rate - 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Min rate :", min_spike_num) - sys.exit(1) - -if (max_spike_num > expected_rate + 3.0*math.sqrt(expected_rate)): - print ("Expected rate: ", expected_rate) - print("Max rate :", max_spike_num) - sys.exit(1) - -mean_spike_num = np.mean(spike_arr) -diff = abs(mean_spike_num - expected_rate) -max_diff = 3.0*np.sqrt(expected_rate)/np.sqrt(n_test) -print ("Expected rate: ", expected_rate) -print("Mean rate: ", mean_spike_num) -if diff > max_diff: - sys.exit(1) -else: - sys.exit(0) - diff --git a/python/test1.txt b/python/test1.txt deleted file mode 100644 index cb5974839..000000000 --- a/python/test1.txt +++ /dev/null @@ -1,270 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -d_source_node_flag: 0x7f3f82e01400 -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -d_source_node_flag: 0x7f3f82e01400 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 0 local_node_index: --- -i_source: 2 source_node_flag: 1 local_node_index: 30 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 31 -i_source: 5 source_node_flag: 1 local_node_index: 30 -i_source: 6 source_node_flag: 1 local_node_index: 32 -i_source: 7 source_node_flag: 1 local_node_index: 33 -i_source: 8 source_node_flag: 0 local_node_index: --- -i_source: 9 source_node_flag: 1 local_node_index: 31 -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 new_i_source: 31 -i_conn: 1 new_i_source: 31 -i_conn: 2 new_i_source: 31 -i_conn: 3 new_i_source: 30 -i_conn: 4 new_i_source: 30 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 33 -i_conn: 8 new_i_source: 32 -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -d_source_node_flag: 0x7f3f82e33e00 -i_conn: 0 source: 31 delay: 3 -i_conn: 1 source: 31 delay: 6 -i_conn: 2 source: 31 delay: 8 -i_conn: 3 source: 30 delay: 4 -i_conn: 4 source: 30 delay: 7 -i_conn: 5 source: 33 delay: 4 -i_conn: 6 source: 31 delay: 2 -i_conn: 7 source: 33 delay: 5 -i_conn: 8 source: 32 delay: 6 -i_conn: 9 source: 6 delay: 5 -i_conn: 10 source: 1 delay: 6 -i_conn: 11 source: 8 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 8 delay: 4 -i_conn: 14 source: 5 delay: 2 -i_conn: 15 source: 2 delay: 4 -i_conn: 16 source: 2 delay: 8 -i_conn: 17 source: 2 delay: 7 -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -d_source_node_flag: 0x7f3f82e33e00 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 -24 34 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -24 34 -25 33 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 1 local_node_index: 30 -i_source: 2 source_node_flag: 1 local_node_index: 31 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 34 -i_source: 5 source_node_flag: 1 local_node_index: 33 -i_source: 6 source_node_flag: 1 local_node_index: 35 -i_source: 7 source_node_flag: 0 local_node_index: --- -i_source: 8 source_node_flag: 1 local_node_index: 36 -i_source: 9 source_node_flag: 0 local_node_index: --- -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 new_i_source: 35 -i_conn: 1 new_i_source: 30 -i_conn: 2 new_i_source: 36 -i_conn: 3 new_i_source: 34 -i_conn: 4 new_i_source: 36 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 31 -i_conn: 8 new_i_source: 31 ->>> diff --git a/python/test10.txt b/python/test10.txt deleted file mode 100644 index a5d2da112..000000000 --- a/python/test10.txt +++ /dev/null @@ -1,666 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -i_conn: 0 source: 6 delay: 5 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 8 delay: 8 -i_conn: 3 source: 4 delay: 5 -i_conn: 4 source: 8 delay: 4 -i_conn: 5 source: 5 delay: 2 -i_conn: 6 source: 2 delay: 4 -i_conn: 7 source: 2 delay: 8 -i_conn: 8 source: 2 delay: 7 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 -24 -26 - - -block 2 -local source node index -28 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 - -i_conn: 0 source: 0 delay: 9 -i_conn: 1 source: 1 delay: 7 -i_conn: 2 source: 2 delay: 6 -i_conn: 3 source: 3 delay: 5 -n_new_conn: 4 n_conn: 4 old_n_conn: 0 -n_new_conn: 4 i_conn0: 0 n_block_conn: 4 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 2 -i_conn: 3 i_source: 3 -n_source: 4 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 1 -n_used_source_nodes: 4 -n_used_source_nodes: 4 -i_used_source: 0 unsorted_source_node_index: 1 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 2 i_unsorted_source_arr: 1 -i_used_source: 2 unsorted_source_node_index: 3 i_unsorted_source_arr: 2 -i_used_source: 3 unsorted_source_node_index: 4 i_unsorted_source_arr: 3 -i_used_source: 0 sorted_source_node_index: 1 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 2 i_sorted_source_arr: 1 -i_used_source: 2 sorted_source_node_index: 3 i_sorted_source_arr: 2 -i_used_source: 3 sorted_source_node_index: 4 i_sorted_source_arr: 3 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 1 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 2 node_to_map: 1 -i_used_source: 2 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -1 -2 -3 - - -block 1 -local source node index -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -1 -2 -3 - - -block 1 -local source node index -4 - -i_conn: 0 source: 0 delay: 6 -i_conn: 1 source: 1 delay: 3 -i_conn: 2 source: 2 delay: 4 -n_new_conn: 3 n_conn: 3 old_n_conn: 0 -n_new_conn: 3 i_conn0: 0 n_block_conn: 3 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 2 -n_source: 3 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -n_used_source_nodes: 3 -n_used_source_nodes: 3 -i_used_source: 0 unsorted_source_node_index: 2 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 3 i_unsorted_source_arr: 1 -i_used_source: 2 unsorted_source_node_index: 4 i_unsorted_source_arr: 2 -i_used_source: 0 sorted_source_node_index: 2 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 3 i_sorted_source_arr: 1 -i_used_source: 2 sorted_source_node_index: 4 i_sorted_source_arr: 2 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 2 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 2 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 1 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 3 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -2 -3 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 3 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -2 -3 -4 - -i_conn: 0 source: 0 delay: 6 -i_conn: 1 source: 1 delay: 5 -n_new_conn: 2 n_conn: 2 old_n_conn: 0 -n_new_conn: 2 i_conn0: 0 n_block_conn: 2 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -n_source: 2 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -n_used_source_nodes: 2 -n_used_source_nodes: 2 -i_used_source: 0 unsorted_source_node_index: 3 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 4 i_unsorted_source_arr: 1 -i_used_source: 0 sorted_source_node_index: 3 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 4 i_sorted_source_arr: 1 -n_node_to_map: 2 -i_used_source: 0 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 1 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 2 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -3 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 2 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -3 -4 - -i_conn: 0 source: 0 delay: 11 -n_new_conn: 1 n_conn: 1 old_n_conn: 0 -n_new_conn: 1 i_conn0: 0 n_block_conn: 1 -i_conn: 0 i_source: 0 -n_source: 1 -i_source: 0 source_node_flag: 1 -n_used_source_nodes: 1 -n_used_source_nodes: 1 -i_used_source: 0 unsorted_source_node_index: 4 i_unsorted_source_arr: 0 -i_used_source: 0 sorted_source_node_index: 4 i_sorted_source_arr: 0 -n_node_to_map: 1 -i_used_source: 0 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -4 -21 -22 - - -block 1 -local source node index -23 -24 -25 - - -block 2 -local source node index -26 -28 - -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Source Node Map -target host: 0 -n_local_source_node_map: 8 -n_blocks: 3 -block 0 -local source node index -4 -21 -22 -block 1 -local source node index -23 -24 -25 -block 2 -local source node index -26 -28 -//////////////////////////////////////// -i_node, n_target_hosts -0 0 -1 1 -2 2 -3 3 -4 4 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 1 -22 1 -23 1 -24 1 -25 1 -26 1 -27 0 -28 1 -29 0 -//////////////////////////////////////// -i_node, n_target_hosts_cumul -0 0 -1 0 -2 1 -3 3 -4 6 -5 10 -6 10 -7 10 -8 10 -9 10 -10 10 -11 10 -12 10 -13 10 -14 10 -15 10 -16 10 -17 10 -18 10 -19 10 -20 10 -21 10 -22 11 -23 12 -24 13 -25 14 -26 15 -27 16 -28 16 -29 17 -30 17 -//////////////////////////////////////// -Checking node_target_hosts and node_target_host_i_map - -i_node: 0 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 1 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -3 0 - -i_node: 2 - n_target_hosts: 2 -node_target_hosts node_target_host_i_map -2 0 -3 1 - -i_node: 3 - n_target_hosts: 3 -node_target_hosts node_target_host_i_map -2 1 -3 2 -4 0 - -i_node: 4 - n_target_hosts: 4 -node_target_hosts node_target_host_i_map -0 0 -2 2 -3 3 -4 1 - -i_node: 5 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 6 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 7 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 8 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 9 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 10 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 11 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 12 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 13 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 14 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 15 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 16 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 17 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 18 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 19 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 20 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 21 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 1 - -i_node: 22 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 2 - -i_node: 23 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 3 - -i_node: 24 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 4 - -i_node: 25 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 5 - -i_node: 26 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 6 - -i_node: 27 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 28 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 7 - -i_node: 29 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map ->>> diff --git a/python/test11.txt b/python/test11.txt deleted file mode 100644 index 3d0bd6853..000000000 --- a/python/test11.txt +++ /dev/null @@ -1,564 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -25 3 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -25 3 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 0 local_node_index: --- -i_source: 2 source_node_flag: 1 local_node_index: 0 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 1 -i_source: 5 source_node_flag: 1 local_node_index: 0 -i_source: 6 source_node_flag: 1 local_node_index: 2 -i_source: 7 source_node_flag: 1 local_node_index: 3 -i_source: 8 source_node_flag: 0 local_node_index: --- -i_source: 9 source_node_flag: 1 local_node_index: 1 -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 new_i_source: 1 -i_conn: 1 new_i_source: 1 -i_conn: 2 new_i_source: 1 -i_conn: 3 new_i_source: 0 -i_conn: 4 new_i_source: 0 -i_conn: 5 new_i_source: 3 -i_conn: 6 new_i_source: 1 -i_conn: 7 new_i_source: 3 -i_conn: 8 new_i_source: 2 -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -i_conn: 0 source: 1 delay: 3 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 1 delay: 8 -i_conn: 3 source: 0 delay: 4 -i_conn: 4 source: 0 delay: 7 -i_conn: 5 source: 3 delay: 4 -i_conn: 6 source: 1 delay: 2 -i_conn: 7 source: 3 delay: 5 -i_conn: 8 source: 2 delay: 6 -i_conn: 9 source: 6 delay: 5 -i_conn: 10 source: 1 delay: 6 -i_conn: 11 source: 8 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 8 delay: 4 -i_conn: 14 source: 5 delay: 2 -i_conn: 15 source: 2 delay: 4 -i_conn: 16 source: 2 delay: 8 -i_conn: 17 source: 2 delay: 7 -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -25 3 -24 4 -26 5 - - -block 2 -remote source node index, local spike buffer index -28 6 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -24 4 -25 3 -26 5 - - -block 2 -remote source node index, local spike buffer index -28 6 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 1 local_node_index: 0 -i_source: 2 source_node_flag: 1 local_node_index: 1 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 4 -i_source: 5 source_node_flag: 1 local_node_index: 3 -i_source: 6 source_node_flag: 1 local_node_index: 5 -i_source: 7 source_node_flag: 0 local_node_index: --- -i_source: 8 source_node_flag: 1 local_node_index: 6 -i_source: 9 source_node_flag: 0 local_node_index: --- -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 new_i_source: 5 -i_conn: 1 new_i_source: 0 -i_conn: 2 new_i_source: 6 -i_conn: 3 new_i_source: 4 -i_conn: 4 new_i_source: 6 -i_conn: 5 new_i_source: 3 -i_conn: 6 new_i_source: 1 -i_conn: 7 new_i_source: 1 -i_conn: 8 new_i_source: 1 -i_conn: 0 source: 1 delay: 3 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 1 delay: 8 -i_conn: 3 source: 0 delay: 4 -i_conn: 4 source: 0 delay: 7 -i_conn: 5 source: 3 delay: 4 -i_conn: 6 source: 1 delay: 2 -i_conn: 7 source: 3 delay: 5 -i_conn: 8 source: 2 delay: 6 -i_conn: 9 source: 5 delay: 5 -i_conn: 10 source: 0 delay: 6 -i_conn: 11 source: 6 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 6 delay: 4 -i_conn: 14 source: 3 delay: 2 -i_conn: 15 source: 1 delay: 4 -i_conn: 16 source: 1 delay: 8 -i_conn: 17 source: 1 delay: 7 -i_conn: 18 source: 0 delay: 11 -n_new_conn: 1 n_conn: 19 old_n_conn: 18 -n_new_conn: 1 i_conn0: 18 n_block_conn: 1 -i_conn: 0 i_source: 0 -n_source: 1 -i_source: 0 source_node_flag: 1 -n_used_source_nodes: 1 -n_used_source_nodes: 1 -i_used_source: 0 unsorted_source_node_index: 4 i_unsorted_source_arr: 0 -i_used_source: 0 sorted_source_node_index: 4 i_sorted_source_arr: 0 -n_node_to_map: 1 -i_used_source: 0 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -24 4 -25 3 -26 5 - - -block 2 -remote source node index, local spike buffer index -28 6 -4 7 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -4 7 -21 0 -22 1 - - -block 1 -remote source node index, local spike buffer index -23 2 -24 4 -25 3 - - -block 2 -remote source node index, local spike buffer index -26 5 -28 6 - -n_source: 1 -i_source: 0 source_node_flag: 1 local_node_index: 7 -Fixing source node indexes in new remote connections -n_new_conn: 1 n_conn: 19 old_n_conn: 18 -n_new_conn: 1 i_conn0: 18 n_block_conn: 1 -i_conn: 0 new_i_source: 7 -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Spike Buffer Map -source host: 1 -n_local_spike_buffer_map: 8 -n_blocks: 3 -block 0 -local spike buffer index -7 -0 -1 -block 1 -local spike buffer index -2 -4 -3 -block 2 -local spike buffer index -5 -6 -//////////////////////////////////////// -i_node, n_target_hosts -0 0 -1 0 -2 0 -3 0 -4 0 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 0 -22 0 -23 0 -24 0 -25 0 -26 0 -27 0 -28 0 -29 0 -//////////////////////////////////////// -i_node, n_target_hosts_cumul -0 0 -1 0 -2 0 -3 0 -4 0 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 0 -22 0 -23 0 -24 0 -25 0 -26 0 -27 0 -28 0 -29 0 -30 0 -//////////////////////////////////////// -Checking node_target_hosts and node_target_host_i_map - -i_node: 0 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 1 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 2 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 3 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 4 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 5 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 6 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 7 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 8 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 9 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 10 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 11 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 12 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 13 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 14 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 15 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 16 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 17 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 18 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 19 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 20 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 21 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 22 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 23 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 24 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 25 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 26 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 27 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 28 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 29 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map ->>> diff --git a/python/test12.txt b/python/test12.txt deleted file mode 100644 index 1173b3437..000000000 --- a/python/test12.txt +++ /dev/null @@ -1,664 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -25 3 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -25 3 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 0 local_node_index: --- -i_source: 2 source_node_flag: 1 local_node_index: 0 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 1 -i_source: 5 source_node_flag: 1 local_node_index: 0 -i_source: 6 source_node_flag: 1 local_node_index: 2 -i_source: 7 source_node_flag: 1 local_node_index: 3 -i_source: 8 source_node_flag: 0 local_node_index: --- -i_source: 9 source_node_flag: 1 local_node_index: 1 -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 new_i_source: 1 -i_conn: 1 new_i_source: 1 -i_conn: 2 new_i_source: 1 -i_conn: 3 new_i_source: 0 -i_conn: 4 new_i_source: 0 -i_conn: 5 new_i_source: 3 -i_conn: 6 new_i_source: 1 -i_conn: 7 new_i_source: 3 -i_conn: 8 new_i_source: 2 -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -i_conn: 0 source: 1 delay: 3 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 1 delay: 8 -i_conn: 3 source: 0 delay: 4 -i_conn: 4 source: 0 delay: 7 -i_conn: 5 source: 3 delay: 4 -i_conn: 6 source: 1 delay: 2 -i_conn: 7 source: 3 delay: 5 -i_conn: 8 source: 2 delay: 6 -i_conn: 9 source: 6 delay: 5 -i_conn: 10 source: 1 delay: 6 -i_conn: 11 source: 8 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 8 delay: 4 -i_conn: 14 source: 5 delay: 2 -i_conn: 15 source: 2 delay: 4 -i_conn: 16 source: 2 delay: 8 -i_conn: 17 source: 2 delay: 7 -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -25 3 -24 4 -26 5 - - -block 2 -remote source node index, local spike buffer index -28 6 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -24 4 -25 3 -26 5 - - -block 2 -remote source node index, local spike buffer index -28 6 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 1 local_node_index: 0 -i_source: 2 source_node_flag: 1 local_node_index: 1 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 4 -i_source: 5 source_node_flag: 1 local_node_index: 3 -i_source: 6 source_node_flag: 1 local_node_index: 5 -i_source: 7 source_node_flag: 0 local_node_index: --- -i_source: 8 source_node_flag: 1 local_node_index: 6 -i_source: 9 source_node_flag: 0 local_node_index: --- -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 new_i_source: 5 -i_conn: 1 new_i_source: 0 -i_conn: 2 new_i_source: 6 -i_conn: 3 new_i_source: 4 -i_conn: 4 new_i_source: 6 -i_conn: 5 new_i_source: 3 -i_conn: 6 new_i_source: 1 -i_conn: 7 new_i_source: 1 -i_conn: 8 new_i_source: 1 -i_conn: 0 source: 1 delay: 3 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 1 delay: 8 -i_conn: 3 source: 0 delay: 4 -i_conn: 4 source: 0 delay: 7 -i_conn: 5 source: 3 delay: 4 -i_conn: 6 source: 1 delay: 2 -i_conn: 7 source: 3 delay: 5 -i_conn: 8 source: 2 delay: 6 -i_conn: 9 source: 5 delay: 5 -i_conn: 10 source: 0 delay: 6 -i_conn: 11 source: 6 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 6 delay: 4 -i_conn: 14 source: 3 delay: 2 -i_conn: 15 source: 1 delay: 4 -i_conn: 16 source: 1 delay: 8 -i_conn: 17 source: 1 delay: 7 -i_conn: 18 source: 0 delay: 11 -n_new_conn: 1 n_conn: 19 old_n_conn: 18 -n_new_conn: 1 i_conn0: 18 n_block_conn: 1 -i_conn: 0 i_source: 0 -n_source: 1 -i_source: 0 source_node_flag: 1 -n_used_source_nodes: 1 -n_used_source_nodes: 1 -i_used_source: 0 unsorted_source_node_index: 4 i_unsorted_source_arr: 0 -i_used_source: 0 sorted_source_node_index: 4 i_sorted_source_arr: 0 -n_node_to_map: 1 -i_used_source: 0 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 0 -22 1 -23 2 - - -block 1 -remote source node index, local spike buffer index -24 4 -25 3 -26 5 - - -block 2 -remote source node index, local spike buffer index -28 6 -4 7 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -4 7 -21 0 -22 1 - - -block 1 -remote source node index, local spike buffer index -23 2 -24 4 -25 3 - - -block 2 -remote source node index, local spike buffer index -26 5 -28 6 - -n_source: 1 -i_source: 0 source_node_flag: 1 local_node_index: 7 -Fixing source node indexes in new remote connections -n_new_conn: 1 n_conn: 19 old_n_conn: 18 -n_new_conn: 1 i_conn0: 18 n_block_conn: 1 -i_conn: 0 new_i_source: 7 -Host 0 : Calibrating ... -i_ext_node_0_: 30 n_ext_nodes_: 8 -After addOffsetToExternalNodeIds -i_conn: 0 source: 31 delay: 3 -i_conn: 1 source: 31 delay: 6 -i_conn: 2 source: 31 delay: 8 -i_conn: 3 source: 30 delay: 4 -i_conn: 4 source: 30 delay: 7 -i_conn: 5 source: 33 delay: 4 -i_conn: 6 source: 31 delay: 2 -i_conn: 7 source: 33 delay: 5 -i_conn: 8 source: 32 delay: 6 -i_conn: 9 source: 35 delay: 5 -i_conn: 10 source: 30 delay: 6 -i_conn: 11 source: 36 delay: 8 -i_conn: 12 source: 34 delay: 5 -i_conn: 13 source: 36 delay: 4 -i_conn: 14 source: 33 delay: 2 -i_conn: 15 source: 31 delay: 4 -i_conn: 16 source: 31 delay: 8 -i_conn: 17 source: 31 delay: 7 -i_conn: 18 source: 37 delay: 11 -Allocating auxiliary GPU memory... -storage bytes: 162000384 -Sorting... -Indexing connection groups... -Total number of connection groups: 18 -Maximum number of connection groups (delays) over all nodes: 6 -Time: 0.55 ms -Done -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Spike Buffer Map -source host: 1 -n_local_spike_buffer_map: 8 -n_blocks: 3 -block 0 -local spike buffer index -7 -0 -1 -block 1 -local spike buffer index -2 -4 -3 -block 2 -local spike buffer index -5 -6 -//////////////////////////////////////// -i_node, n_target_hosts -0 0 -1 0 -2 0 -3 0 -4 0 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 0 -22 0 -23 0 -24 0 -25 0 -26 0 -27 0 -28 0 -29 0 -30 0 -31 0 -32 0 -33 0 -34 0 -35 0 -36 0 -37 0 -//////////////////////////////////////// -i_node, n_target_hosts_cumul -0 0 -1 0 -2 0 -3 0 -4 0 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 0 -22 0 -23 0 -24 0 -25 0 -26 0 -27 0 -28 0 -29 0 -30 0 -31 0 -32 0 -33 0 -34 0 -35 0 -36 0 -37 0 -38 0 -//////////////////////////////////////// -Checking node_target_hosts and node_target_host_i_map - -i_node: 0 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 1 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 2 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 3 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 4 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 5 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 6 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 7 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 8 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 9 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 10 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 11 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 12 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 13 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 14 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 15 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 16 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 17 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 18 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 19 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 20 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 21 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 22 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 23 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 24 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 25 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 26 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 27 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 28 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 29 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 30 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 31 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 32 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 33 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 34 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 35 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 36 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 37 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map -//////////////////////////////////////// -After addOffsetToSpikeBufferMap -MAP -//////////////////////////////////////// -Local Spike Buffer Map -source host: 1 -n_local_spike_buffer_map: 8 -n_blocks: 3 -block 0 -local spike buffer index -37 -30 -31 -block 1 -local spike buffer index -32 -34 -33 -block 2 -local spike buffer index -35 -36 ->>> diff --git a/python/test2.txt b/python/test2.txt deleted file mode 100644 index f1ffa7558..000000000 --- a/python/test2.txt +++ /dev/null @@ -1,215 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -d_source_node_flag: 0x7f05a6e01400 -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -d_source_node_flag: 0x7f05a6e01400 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -d_source_node_flag: 0x7f05a6e33000 -i_conn: 0 source: 6 delay: 5 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 8 delay: 8 -i_conn: 3 source: 4 delay: 5 -i_conn: 4 source: 8 delay: 4 -i_conn: 5 source: 5 delay: 2 -i_conn: 6 source: 2 delay: 4 -i_conn: 7 source: 2 delay: 8 -i_conn: 8 source: 2 delay: 7 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -d_source_node_flag: 0x7f05a6e33000 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 -24 -26 - - -block 2 -local source node index -28 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 - ->>> diff --git a/python/test3.txt b/python/test3.txt deleted file mode 100644 index a4fdd60e6..000000000 --- a/python/test3.txt +++ /dev/null @@ -1,235 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -d_source_node_flag: 0x7f3072e01400 -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -d_source_node_flag: 0x7f3072e01400 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -d_source_node_flag: 0x7f3072e33000 -i_conn: 0 source: 6 delay: 5 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 8 delay: 8 -i_conn: 3 source: 4 delay: 5 -i_conn: 4 source: 8 delay: 4 -i_conn: 5 source: 5 delay: 2 -i_conn: 6 source: 2 delay: 4 -i_conn: 7 source: 2 delay: 8 -i_conn: 8 source: 2 delay: 7 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -d_source_node_flag: 0x7f3072e33000 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 -24 -26 - - -block 2 -local source node index -28 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 - -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Source Node Map -target host: 0 -n_local_source_node_map: 7 -n_blocks: 3 -block 0 -local source node index -21 -22 -23 -block 1 -local source node index -24 -25 -26 -block 2 -local source node index -28 ->>> diff --git a/python/test4.txt b/python/test4.txt deleted file mode 100644 index 7535c8608..000000000 --- a/python/test4.txt +++ /dev/null @@ -1,290 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -d_source_node_flag: 0x7fe5d6e01400 -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -d_source_node_flag: 0x7fe5d6e01400 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 0 local_node_index: --- -i_source: 2 source_node_flag: 1 local_node_index: 30 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 31 -i_source: 5 source_node_flag: 1 local_node_index: 30 -i_source: 6 source_node_flag: 1 local_node_index: 32 -i_source: 7 source_node_flag: 1 local_node_index: 33 -i_source: 8 source_node_flag: 0 local_node_index: --- -i_source: 9 source_node_flag: 1 local_node_index: 31 -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 new_i_source: 31 -i_conn: 1 new_i_source: 31 -i_conn: 2 new_i_source: 31 -i_conn: 3 new_i_source: 30 -i_conn: 4 new_i_source: 30 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 33 -i_conn: 8 new_i_source: 32 -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -d_source_node_flag: 0x7fe5d6e33e00 -i_conn: 0 source: 31 delay: 3 -i_conn: 1 source: 31 delay: 6 -i_conn: 2 source: 31 delay: 8 -i_conn: 3 source: 30 delay: 4 -i_conn: 4 source: 30 delay: 7 -i_conn: 5 source: 33 delay: 4 -i_conn: 6 source: 31 delay: 2 -i_conn: 7 source: 33 delay: 5 -i_conn: 8 source: 32 delay: 6 -i_conn: 9 source: 6 delay: 5 -i_conn: 10 source: 1 delay: 6 -i_conn: 11 source: 8 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 8 delay: 4 -i_conn: 14 source: 5 delay: 2 -i_conn: 15 source: 2 delay: 4 -i_conn: 16 source: 2 delay: 8 -i_conn: 17 source: 2 delay: 7 -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -d_source_node_flag: 0x7fe5d6e33e00 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 -24 34 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -24 34 -25 33 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 1 local_node_index: 30 -i_source: 2 source_node_flag: 1 local_node_index: 31 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 34 -i_source: 5 source_node_flag: 1 local_node_index: 33 -i_source: 6 source_node_flag: 1 local_node_index: 35 -i_source: 7 source_node_flag: 0 local_node_index: --- -i_source: 8 source_node_flag: 1 local_node_index: 36 -i_source: 9 source_node_flag: 0 local_node_index: --- -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 new_i_source: 35 -i_conn: 1 new_i_source: 30 -i_conn: 2 new_i_source: 36 -i_conn: 3 new_i_source: 34 -i_conn: 4 new_i_source: 36 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 31 -i_conn: 8 new_i_source: 31 -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Spike Buffer Map -source host: 1 -n_local_spike_buffer_map: 7 -n_blocks: 3 -block 0 -local spike buffer index -30 -31 -32 -block 1 -local spike buffer index -34 -33 -35 -block 2 -local spike buffer index -36 ->>> diff --git a/python/test5.txt b/python/test5.txt deleted file mode 100644 index bc17007a2..000000000 --- a/python/test5.txt +++ /dev/null @@ -1,678 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -d_source_node_flag: 0x7fc308e01400 -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -d_source_node_flag: 0x7fc308e01400 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -d_source_node_flag: 0x7fc308e33000 -i_conn: 0 source: 6 delay: 5 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 8 delay: 8 -i_conn: 3 source: 4 delay: 5 -i_conn: 4 source: 8 delay: 4 -i_conn: 5 source: 5 delay: 2 -i_conn: 6 source: 2 delay: 4 -i_conn: 7 source: 2 delay: 8 -i_conn: 8 source: 2 delay: 7 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -d_source_node_flag: 0x7fc308e33000 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 -24 -26 - - -block 2 -local source node index -28 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 - -d_source_node_flag: 0x7fc308e34c00 -i_conn: 0 source: 0 delay: 11 -i_conn: 1 source: 1 delay: 7 -i_conn: 2 source: 2 delay: 6 -i_conn: 3 source: 3 delay: 4 -n_new_conn: 4 n_conn: 4 old_n_conn: 0 -n_new_conn: 4 i_conn0: 0 n_block_conn: 4 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 2 -i_conn: 3 i_source: 3 -n_source: 4 -d_source_node_flag: 0x7fc308e34c00 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 1 -n_used_source_nodes: 4 -n_used_source_nodes: 4 -i_used_source: 0 unsorted_source_node_index: 1 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 2 i_unsorted_source_arr: 1 -i_used_source: 2 unsorted_source_node_index: 3 i_unsorted_source_arr: 2 -i_used_source: 3 unsorted_source_node_index: 4 i_unsorted_source_arr: 3 -i_used_source: 0 sorted_source_node_index: 1 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 2 i_sorted_source_arr: 1 -i_used_source: 2 sorted_source_node_index: 3 i_sorted_source_arr: 2 -i_used_source: 3 sorted_source_node_index: 4 i_sorted_source_arr: 3 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 1 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 2 node_to_map: 1 -i_used_source: 2 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -1 -2 -3 - - -block 1 -local source node index -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -1 -2 -3 - - -block 1 -local source node index -4 - -d_source_node_flag: 0x7fc308e36a00 -i_conn: 0 source: 0 delay: 6 -i_conn: 1 source: 1 delay: 9 -i_conn: 2 source: 2 delay: 5 -n_new_conn: 3 n_conn: 3 old_n_conn: 0 -n_new_conn: 3 i_conn0: 0 n_block_conn: 3 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 2 -n_source: 3 -d_source_node_flag: 0x7fc308e36a00 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -n_used_source_nodes: 3 -n_used_source_nodes: 3 -i_used_source: 0 unsorted_source_node_index: 2 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 3 i_unsorted_source_arr: 1 -i_used_source: 2 unsorted_source_node_index: 4 i_unsorted_source_arr: 2 -i_used_source: 0 sorted_source_node_index: 2 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 3 i_sorted_source_arr: 1 -i_used_source: 2 sorted_source_node_index: 4 i_sorted_source_arr: 2 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 2 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 2 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 1 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 3 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -2 -3 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 3 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -2 -3 -4 - -d_source_node_flag: 0x7fc308e38600 -i_conn: 0 source: 0 delay: 4 -i_conn: 1 source: 1 delay: 4 -n_new_conn: 2 n_conn: 2 old_n_conn: 0 -n_new_conn: 2 i_conn0: 0 n_block_conn: 2 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -n_source: 2 -d_source_node_flag: 0x7fc308e38600 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -n_used_source_nodes: 2 -n_used_source_nodes: 2 -i_used_source: 0 unsorted_source_node_index: 3 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 4 i_unsorted_source_arr: 1 -i_used_source: 0 sorted_source_node_index: 3 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 4 i_sorted_source_arr: 1 -n_node_to_map: 2 -i_used_source: 0 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 1 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 2 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -3 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 2 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -3 -4 - -d_source_node_flag: 0x7fc308e3a200 -i_conn: 0 source: 0 delay: 9 -n_new_conn: 1 n_conn: 1 old_n_conn: 0 -n_new_conn: 1 i_conn0: 0 n_block_conn: 1 -i_conn: 0 i_source: 0 -n_source: 1 -d_source_node_flag: 0x7fc308e3a200 -i_source: 0 source_node_flag: 1 -n_used_source_nodes: 1 -n_used_source_nodes: 1 -i_used_source: 0 unsorted_source_node_index: 4 i_unsorted_source_arr: 0 -i_used_source: 0 sorted_source_node_index: 4 i_sorted_source_arr: 0 -n_node_to_map: 1 -i_used_source: 0 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -4 -21 -22 - - -block 1 -local source node index -23 -24 -25 - - -block 2 -local source node index -26 -28 - -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Source Node Map -target host: 0 -n_local_source_node_map: 8 -n_blocks: 3 -block 0 -local source node index -4 -21 -22 -block 1 -local source node index -23 -24 -25 -block 2 -local source node index -26 -28 -//////////////////////////////////////// -i_node, n_target_hosts -0 0 -1 1 -2 2 -3 3 -4 4 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 1 -22 1 -23 1 -24 1 -25 1 -26 1 -27 0 -28 1 -29 0 -//////////////////////////////////////// -i_node, n_target_hosts_cumul -0 0 -1 0 -2 1 -3 3 -4 6 -5 10 -6 10 -7 10 -8 10 -9 10 -10 10 -11 10 -12 10 -13 10 -14 10 -15 10 -16 10 -17 10 -18 10 -19 10 -20 10 -21 10 -22 11 -23 12 -24 13 -25 14 -26 15 -27 16 -28 16 -29 17 -30 17 -//////////////////////////////////////// -Checking node_target_hosts and node_target_host_i_map - -i_node: 0 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 1 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -3 0 - -i_node: 2 - n_target_hosts: 2 -node_target_hosts node_target_host_i_map -2 0 -3 1 - -i_node: 3 - n_target_hosts: 3 -node_target_hosts node_target_host_i_map -2 1 -3 2 -4 0 - -i_node: 4 - n_target_hosts: 4 -node_target_hosts node_target_host_i_map -0 0 -2 2 -3 3 -4 1 - -i_node: 5 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 6 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 7 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 8 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 9 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 10 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 11 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 12 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 13 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 14 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 15 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 16 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 17 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 18 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 19 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 20 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 21 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 1 - -i_node: 22 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 2 - -i_node: 23 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 3 - -i_node: 24 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 4 - -i_node: 25 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 5 - -i_node: 26 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 6 - -i_node: 27 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 28 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 7 - -i_node: 29 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map ->>> diff --git a/python/test6.txt b/python/test6.txt deleted file mode 100644 index 678633c6d..000000000 --- a/python/test6.txt +++ /dev/null @@ -1,215 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -d_source_node_flag: 0x7f29bae01400 -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -d_source_node_flag: 0x7f29bae01400 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -d_source_node_flag: 0x7f29bae33000 -i_conn: 0 source: 6 delay: 5 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 8 delay: 8 -i_conn: 3 source: 4 delay: 5 -i_conn: 4 source: 8 delay: 4 -i_conn: 5 source: 5 delay: 2 -i_conn: 6 source: 2 delay: 4 -i_conn: 7 source: 2 delay: 8 -i_conn: 8 source: 2 delay: 7 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -d_source_node_flag: 0x7f29bae33000 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 -24 -26 - - -block 2 -local source node index -28 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 - ->>> diff --git a/python/test7.txt b/python/test7.txt deleted file mode 100644 index fe34d3dad..000000000 --- a/python/test7.txt +++ /dev/null @@ -1,270 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -d_source_node_flag: 0x7fbaeae01400 -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -d_source_node_flag: 0x7fbaeae01400 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 0 local_node_index: --- -i_source: 2 source_node_flag: 1 local_node_index: 30 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 31 -i_source: 5 source_node_flag: 1 local_node_index: 30 -i_source: 6 source_node_flag: 1 local_node_index: 32 -i_source: 7 source_node_flag: 1 local_node_index: 33 -i_source: 8 source_node_flag: 0 local_node_index: --- -i_source: 9 source_node_flag: 1 local_node_index: 31 -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 new_i_source: 31 -i_conn: 1 new_i_source: 31 -i_conn: 2 new_i_source: 31 -i_conn: 3 new_i_source: 30 -i_conn: 4 new_i_source: 30 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 33 -i_conn: 8 new_i_source: 32 -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -d_source_node_flag: 0x7fbaeae33e00 -i_conn: 0 source: 31 delay: 3 -i_conn: 1 source: 31 delay: 6 -i_conn: 2 source: 31 delay: 8 -i_conn: 3 source: 30 delay: 4 -i_conn: 4 source: 30 delay: 7 -i_conn: 5 source: 33 delay: 4 -i_conn: 6 source: 31 delay: 2 -i_conn: 7 source: 33 delay: 5 -i_conn: 8 source: 32 delay: 6 -i_conn: 9 source: 6 delay: 5 -i_conn: 10 source: 1 delay: 6 -i_conn: 11 source: 8 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 8 delay: 4 -i_conn: 14 source: 5 delay: 2 -i_conn: 15 source: 2 delay: 4 -i_conn: 16 source: 2 delay: 8 -i_conn: 17 source: 2 delay: 7 -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -d_source_node_flag: 0x7fbaeae33e00 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 -24 34 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -24 34 -25 33 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 1 local_node_index: 30 -i_source: 2 source_node_flag: 1 local_node_index: 31 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 34 -i_source: 5 source_node_flag: 1 local_node_index: 33 -i_source: 6 source_node_flag: 1 local_node_index: 35 -i_source: 7 source_node_flag: 0 local_node_index: --- -i_source: 8 source_node_flag: 1 local_node_index: 36 -i_source: 9 source_node_flag: 0 local_node_index: --- -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 new_i_source: 35 -i_conn: 1 new_i_source: 30 -i_conn: 2 new_i_source: 36 -i_conn: 3 new_i_source: 34 -i_conn: 4 new_i_source: 36 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 31 -i_conn: 8 new_i_source: 31 ->>> diff --git a/python/test8.txt b/python/test8.txt deleted file mode 100644 index a5d2da112..000000000 --- a/python/test8.txt +++ /dev/null @@ -1,666 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 - -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -i_conn: 0 source: 6 delay: 5 -i_conn: 1 source: 1 delay: 6 -i_conn: 2 source: 8 delay: 8 -i_conn: 3 source: 4 delay: 5 -i_conn: 4 source: 8 delay: 4 -i_conn: 5 source: 5 delay: 2 -i_conn: 6 source: 2 delay: 4 -i_conn: 7 source: 2 delay: 8 -i_conn: 8 source: 2 delay: 7 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -25 -24 -26 - - -block 2 -local source node index -28 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 - -i_conn: 0 source: 0 delay: 9 -i_conn: 1 source: 1 delay: 7 -i_conn: 2 source: 2 delay: 6 -i_conn: 3 source: 3 delay: 5 -n_new_conn: 4 n_conn: 4 old_n_conn: 0 -n_new_conn: 4 i_conn0: 0 n_block_conn: 4 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 2 -i_conn: 3 i_source: 3 -n_source: 4 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 1 -n_used_source_nodes: 4 -n_used_source_nodes: 4 -i_used_source: 0 unsorted_source_node_index: 1 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 2 i_unsorted_source_arr: 1 -i_used_source: 2 unsorted_source_node_index: 3 i_unsorted_source_arr: 2 -i_used_source: 3 unsorted_source_node_index: 4 i_unsorted_source_arr: 3 -i_used_source: 0 sorted_source_node_index: 1 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 2 i_sorted_source_arr: 1 -i_used_source: 2 sorted_source_node_index: 3 i_sorted_source_arr: 2 -i_used_source: 3 sorted_source_node_index: 4 i_sorted_source_arr: 3 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 1 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 2 node_to_map: 1 -i_used_source: 2 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -1 -2 -3 - - -block 1 -local source node index -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -local source node index -1 -2 -3 - - -block 1 -local source node index -4 - -i_conn: 0 source: 0 delay: 6 -i_conn: 1 source: 1 delay: 3 -i_conn: 2 source: 2 delay: 4 -n_new_conn: 3 n_conn: 3 old_n_conn: 0 -n_new_conn: 3 i_conn0: 0 n_block_conn: 3 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 2 -n_source: 3 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -n_used_source_nodes: 3 -n_used_source_nodes: 3 -i_used_source: 0 unsorted_source_node_index: 2 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 3 i_unsorted_source_arr: 1 -i_used_source: 2 unsorted_source_node_index: 4 i_unsorted_source_arr: 2 -i_used_source: 0 sorted_source_node_index: 2 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 3 i_sorted_source_arr: 1 -i_used_source: 2 sorted_source_node_index: 4 i_sorted_source_arr: 2 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 2 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 2 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 1 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 3 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -2 -3 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 3 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -2 -3 -4 - -i_conn: 0 source: 0 delay: 6 -i_conn: 1 source: 1 delay: 5 -n_new_conn: 2 n_conn: 2 old_n_conn: 0 -n_new_conn: 2 i_conn0: 0 n_block_conn: 2 -i_conn: 0 i_source: 0 -i_conn: 1 i_source: 1 -n_source: 2 -i_source: 0 source_node_flag: 1 -i_source: 1 source_node_flag: 1 -n_used_source_nodes: 2 -n_used_source_nodes: 2 -i_used_source: 0 unsorted_source_node_index: 3 i_unsorted_source_arr: 0 -i_used_source: 1 unsorted_source_node_index: 4 i_unsorted_source_arr: 1 -i_used_source: 0 sorted_source_node_index: 3 i_sorted_source_arr: 0 -i_used_source: 1 sorted_source_node_index: 4 i_sorted_source_arr: 1 -n_node_to_map: 2 -i_used_source: 0 sorted_source_node_index: 3 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 1 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 2 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -3 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 2 -n_blocks: 1 -block_size: 3 - -block 0 -local source node index -3 -4 - -i_conn: 0 source: 0 delay: 11 -n_new_conn: 1 n_conn: 1 old_n_conn: 0 -n_new_conn: 1 i_conn0: 0 n_block_conn: 1 -i_conn: 0 i_source: 0 -n_source: 1 -i_source: 0 source_node_flag: 1 -n_used_source_nodes: 1 -n_used_source_nodes: 1 -i_used_source: 0 unsorted_source_node_index: 4 i_unsorted_source_arr: 0 -i_used_source: 0 sorted_source_node_index: 4 i_sorted_source_arr: 0 -n_node_to_map: 1 -i_used_source: 0 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -21 -22 -23 - - -block 1 -local source node index -24 -25 -26 - - -block 2 -local source node index -28 -4 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF LOCAL-SOURCE_NODES -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -local source node index -4 -21 -22 - - -block 1 -local source node index -23 -24 -25 - - -block 2 -local source node index -26 -28 - -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Source Node Map -target host: 0 -n_local_source_node_map: 8 -n_blocks: 3 -block 0 -local source node index -4 -21 -22 -block 1 -local source node index -23 -24 -25 -block 2 -local source node index -26 -28 -//////////////////////////////////////// -i_node, n_target_hosts -0 0 -1 1 -2 2 -3 3 -4 4 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 1 -22 1 -23 1 -24 1 -25 1 -26 1 -27 0 -28 1 -29 0 -//////////////////////////////////////// -i_node, n_target_hosts_cumul -0 0 -1 0 -2 1 -3 3 -4 6 -5 10 -6 10 -7 10 -8 10 -9 10 -10 10 -11 10 -12 10 -13 10 -14 10 -15 10 -16 10 -17 10 -18 10 -19 10 -20 10 -21 10 -22 11 -23 12 -24 13 -25 14 -26 15 -27 16 -28 16 -29 17 -30 17 -//////////////////////////////////////// -Checking node_target_hosts and node_target_host_i_map - -i_node: 0 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 1 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -3 0 - -i_node: 2 - n_target_hosts: 2 -node_target_hosts node_target_host_i_map -2 0 -3 1 - -i_node: 3 - n_target_hosts: 3 -node_target_hosts node_target_host_i_map -2 1 -3 2 -4 0 - -i_node: 4 - n_target_hosts: 4 -node_target_hosts node_target_host_i_map -0 0 -2 2 -3 3 -4 1 - -i_node: 5 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 6 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 7 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 8 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 9 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 10 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 11 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 12 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 13 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 14 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 15 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 16 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 17 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 18 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 19 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 20 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 21 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 1 - -i_node: 22 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 2 - -i_node: 23 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 3 - -i_node: 24 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 4 - -i_node: 25 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 5 - -i_node: 26 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 6 - -i_node: 27 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 28 - n_target_hosts: 1 -node_target_hosts node_target_host_i_map -0 7 - -i_node: 29 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map ->>> diff --git a/python/test9.txt b/python/test9.txt deleted file mode 100644 index b4ed1c281..000000000 --- a/python/test9.txt +++ /dev/null @@ -1,612 +0,0 @@ ->>> import nestgpu - - -- NEST GPU -- - - Copyright (C) 2004 The NEST Initiative - - This program is provided AS IS and comes with - NO WARRANTY. See the file LICENSE for details. - - Homepage: https://github.com/nest/nest-gpu - -i_conn: 0 source: 4 delay: 3 -i_conn: 1 source: 9 delay: 6 -i_conn: 2 source: 9 delay: 8 -i_conn: 3 source: 2 delay: 4 -i_conn: 4 source: 5 delay: 7 -i_conn: 5 source: 7 delay: 4 -i_conn: 6 source: 4 delay: 2 -i_conn: 7 source: 7 delay: 5 -i_conn: 8 source: 6 delay: 6 -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 i_source: 4 -i_conn: 1 i_source: 9 -i_conn: 2 i_source: 9 -i_conn: 3 i_source: 2 -i_conn: 4 i_source: 5 -i_conn: 5 i_source: 7 -i_conn: 6 i_source: 4 -i_conn: 7 i_source: 7 -i_conn: 8 i_source: 6 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 0 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 1 -i_source: 8 source_node_flag: 0 -i_source: 9 source_node_flag: 1 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 2 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 4 -i_used_source: 2 unsorted_source_node_index: 21 i_unsorted_source_arr: 5 -i_used_source: 3 unsorted_source_node_index: 23 i_unsorted_source_arr: 6 -i_used_source: 4 unsorted_source_node_index: 25 i_unsorted_source_arr: 7 -i_used_source: 5 unsorted_source_node_index: 22 i_unsorted_source_arr: 9 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 2 -i_used_source: 1 sorted_source_node_index: 21 i_sorted_source_arr: 5 -i_used_source: 2 sorted_source_node_index: 22 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 22 i_sorted_source_arr: 9 -i_used_source: 4 sorted_source_node_index: 23 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 25 i_sorted_source_arr: 7 -n_node_to_map: 4 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 1 -i_used_source: 1 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 22 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 23 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 25 node_to_map: 1 -new_n_blocks: 2 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -storage bytes for copass sort: 513 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 4 -n_blocks: 2 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 0 local_node_index: --- -i_source: 2 source_node_flag: 1 local_node_index: 30 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 31 -i_source: 5 source_node_flag: 1 local_node_index: 30 -i_source: 6 source_node_flag: 1 local_node_index: 32 -i_source: 7 source_node_flag: 1 local_node_index: 33 -i_source: 8 source_node_flag: 0 local_node_index: --- -i_source: 9 source_node_flag: 1 local_node_index: 31 -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 9 old_n_conn: 0 -n_new_conn: 9 i_conn0: 0 n_block_conn: 9 -i_conn: 0 new_i_source: 31 -i_conn: 1 new_i_source: 31 -i_conn: 2 new_i_source: 31 -i_conn: 3 new_i_source: 30 -i_conn: 4 new_i_source: 30 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 33 -i_conn: 8 new_i_source: 32 -################################################## -################################################## -SECOND CONNECT COMMAND -################################################## -################################################## -i_conn: 0 source: 31 delay: 3 -i_conn: 1 source: 31 delay: 6 -i_conn: 2 source: 31 delay: 8 -i_conn: 3 source: 30 delay: 4 -i_conn: 4 source: 30 delay: 7 -i_conn: 5 source: 33 delay: 4 -i_conn: 6 source: 31 delay: 2 -i_conn: 7 source: 33 delay: 5 -i_conn: 8 source: 32 delay: 6 -i_conn: 9 source: 6 delay: 5 -i_conn: 10 source: 1 delay: 6 -i_conn: 11 source: 8 delay: 8 -i_conn: 12 source: 4 delay: 5 -i_conn: 13 source: 8 delay: 4 -i_conn: 14 source: 5 delay: 2 -i_conn: 15 source: 2 delay: 4 -i_conn: 16 source: 2 delay: 8 -i_conn: 17 source: 2 delay: 7 -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 i_source: 6 -i_conn: 1 i_source: 1 -i_conn: 2 i_source: 8 -i_conn: 3 i_source: 4 -i_conn: 4 i_source: 8 -i_conn: 5 i_source: 5 -i_conn: 6 i_source: 2 -i_conn: 7 i_source: 2 -i_conn: 8 i_source: 2 -n_source: 10 -i_source: 0 source_node_flag: 0 -i_source: 1 source_node_flag: 1 -i_source: 2 source_node_flag: 1 -i_source: 3 source_node_flag: 0 -i_source: 4 source_node_flag: 1 -i_source: 5 source_node_flag: 1 -i_source: 6 source_node_flag: 1 -i_source: 7 source_node_flag: 0 -i_source: 8 source_node_flag: 1 -i_source: 9 source_node_flag: 0 -n_used_source_nodes: 6 -n_used_source_nodes: 6 -i_used_source: 0 unsorted_source_node_index: 21 i_unsorted_source_arr: 1 -i_used_source: 1 unsorted_source_node_index: 22 i_unsorted_source_arr: 2 -i_used_source: 2 unsorted_source_node_index: 24 i_unsorted_source_arr: 4 -i_used_source: 3 unsorted_source_node_index: 25 i_unsorted_source_arr: 5 -i_used_source: 4 unsorted_source_node_index: 26 i_unsorted_source_arr: 6 -i_used_source: 5 unsorted_source_node_index: 28 i_unsorted_source_arr: 8 -i_used_source: 0 sorted_source_node_index: 21 i_sorted_source_arr: 1 -i_used_source: 1 sorted_source_node_index: 22 i_sorted_source_arr: 2 -i_used_source: 2 sorted_source_node_index: 24 i_sorted_source_arr: 4 -i_used_source: 3 sorted_source_node_index: 25 i_sorted_source_arr: 5 -i_used_source: 4 sorted_source_node_index: 26 i_sorted_source_arr: 6 -i_used_source: 5 sorted_source_node_index: 28 i_sorted_source_arr: 8 -n_node_to_map: 3 -i_used_source: 0 sorted_source_node_index: 21 node_to_map: 0 -i_used_source: 1 sorted_source_node_index: 22 node_to_map: 0 -i_used_source: 2 sorted_source_node_index: 24 node_to_map: 1 -i_used_source: 3 sorted_source_node_index: 25 node_to_map: 0 -i_used_source: 4 sorted_source_node_index: 26 node_to_map: 1 -i_used_source: 5 sorted_source_node_index: 28 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -25 33 -24 34 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 7 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -24 34 -25 33 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 - -n_source: 10 -i_source: 0 source_node_flag: 0 local_node_index: --- -i_source: 1 source_node_flag: 1 local_node_index: 30 -i_source: 2 source_node_flag: 1 local_node_index: 31 -i_source: 3 source_node_flag: 0 local_node_index: --- -i_source: 4 source_node_flag: 1 local_node_index: 34 -i_source: 5 source_node_flag: 1 local_node_index: 33 -i_source: 6 source_node_flag: 1 local_node_index: 35 -i_source: 7 source_node_flag: 0 local_node_index: --- -i_source: 8 source_node_flag: 1 local_node_index: 36 -i_source: 9 source_node_flag: 0 local_node_index: --- -Fixing source node indexes in new remote connections -n_new_conn: 9 n_conn: 18 old_n_conn: 9 -n_new_conn: 9 i_conn0: 9 n_block_conn: 9 -i_conn: 0 new_i_source: 35 -i_conn: 1 new_i_source: 30 -i_conn: 2 new_i_source: 36 -i_conn: 3 new_i_source: 34 -i_conn: 4 new_i_source: 36 -i_conn: 5 new_i_source: 33 -i_conn: 6 new_i_source: 31 -i_conn: 7 new_i_source: 31 -i_conn: 8 new_i_source: 31 -i_conn: 0 source: 31 delay: 3 -i_conn: 1 source: 31 delay: 6 -i_conn: 2 source: 31 delay: 8 -i_conn: 3 source: 30 delay: 4 -i_conn: 4 source: 30 delay: 7 -i_conn: 5 source: 33 delay: 4 -i_conn: 6 source: 31 delay: 2 -i_conn: 7 source: 33 delay: 5 -i_conn: 8 source: 32 delay: 6 -i_conn: 9 source: 35 delay: 5 -i_conn: 10 source: 30 delay: 6 -i_conn: 11 source: 36 delay: 8 -i_conn: 12 source: 34 delay: 5 -i_conn: 13 source: 36 delay: 4 -i_conn: 14 source: 33 delay: 2 -i_conn: 15 source: 31 delay: 4 -i_conn: 16 source: 31 delay: 8 -i_conn: 17 source: 31 delay: 7 -i_conn: 18 source: 0 delay: 11 -n_new_conn: 1 n_conn: 19 old_n_conn: 18 -n_new_conn: 1 i_conn0: 18 n_block_conn: 1 -i_conn: 0 i_source: 0 -n_source: 1 -i_source: 0 source_node_flag: 1 -n_used_source_nodes: 1 -n_used_source_nodes: 1 -i_used_source: 0 unsorted_source_node_index: 4 i_unsorted_source_arr: 0 -i_used_source: 0 sorted_source_node_index: 4 i_sorted_source_arr: 0 -n_node_to_map: 1 -i_used_source: 0 sorted_source_node_index: 4 node_to_map: 1 -new_n_blocks: 3 -////////////////////////////////////////////// -UPDATED UNSORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -21 30 -22 31 -23 32 - - -block 1 -remote source node index, local spike buffer index -24 34 -25 33 -26 35 - - -block 2 -remote source node index, local spike buffer index -28 36 -4 37 - -storage bytes for copass sort: 768 -////////////////////////////////////////////// -UPDATED SORTED MAP -OF REMOTE-SOURCE_NODES TO LOCAL-SPIKE-BUFFERS -n_node_map: 8 -n_blocks: 3 -block_size: 3 - -block 0 -remote source node index, local spike buffer index -4 37 -21 30 -22 31 - - -block 1 -remote source node index, local spike buffer index -23 32 -24 34 -25 33 - - -block 2 -remote source node index, local spike buffer index -26 35 -28 36 - -n_source: 1 -i_source: 0 source_node_flag: 1 local_node_index: 37 -Fixing source node indexes in new remote connections -n_new_conn: 1 n_conn: 19 old_n_conn: 18 -n_new_conn: 1 i_conn0: 18 n_block_conn: 1 -i_conn: 0 new_i_source: 37 -//////////////////////////////////////// -IN MAP CALIBRATION -//////////////////////////////////////// -Local Spike Buffer Map -source host: 1 -n_local_spike_buffer_map: 8 -n_blocks: 3 -block 0 -local spike buffer index -37 -30 -31 -block 1 -local spike buffer index -32 -34 -33 -block 2 -local spike buffer index -35 -36 -//////////////////////////////////////// -i_node, n_target_hosts -0 0 -1 0 -2 0 -3 0 -4 0 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 0 -22 0 -23 0 -24 0 -25 0 -26 0 -27 0 -28 0 -29 0 -30 0 -31 0 -32 0 -33 0 -34 0 -35 0 -36 0 -37 0 -//////////////////////////////////////// -i_node, n_target_hosts_cumul -0 0 -1 0 -2 0 -3 0 -4 0 -5 0 -6 0 -7 0 -8 0 -9 0 -10 0 -11 0 -12 0 -13 0 -14 0 -15 0 -16 0 -17 0 -18 0 -19 0 -20 0 -21 0 -22 0 -23 0 -24 0 -25 0 -26 0 -27 0 -28 0 -29 0 -30 0 -31 0 -32 0 -33 0 -34 0 -35 0 -36 0 -37 0 -38 0 -//////////////////////////////////////// -Checking node_target_hosts and node_target_host_i_map - -i_node: 0 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 1 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 2 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 3 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 4 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 5 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 6 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 7 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 8 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 9 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 10 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 11 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 12 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 13 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 14 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 15 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 16 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 17 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 18 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 19 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 20 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 21 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 22 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 23 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 24 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 25 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 26 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 27 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 28 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 29 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 30 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 31 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 32 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 33 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 34 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 35 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 36 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map - -i_node: 37 - n_target_hosts: 0 -node_target_hosts node_target_host_i_map ->>> diff --git a/python/test_new_features/oct_plot.m b/python/test_new_features/oct_plot.m deleted file mode 100644 index d5e8d5365..000000000 --- a/python/test_new_features/oct_plot.m +++ /dev/null @@ -1,3 +0,0 @@ -data=load('prova.dat'); -hist(data,100); -pause(); diff --git a/python/test_new_features/plot_aeif_cond_beta.py b/python/test_new_features/plot_aeif_cond_beta.py deleted file mode 100644 index 9891321c2..000000000 --- a/python/test_new_features/plot_aeif_cond_beta.py +++ /dev/null @@ -1,64 +0,0 @@ -import sys -import nestgpu as ngpu -import numpy as np -tolerance = 0.0005 -neuron = ngpu.Create('aeif_cond_beta', 1, 3) -ngpu.SetStatus(neuron, {"V_peak": 0.0, "a": 4.0, "b":80.5, "E_L":-70.6, - "g_L":300.0, 'E_rev':[20.0, 0.0, -85.0], \ - 'tau_decay':[40.0, 20.0, 30.0], \ - 'tau_rise':[20.0, 10.0, 5.0]}) -spike = ngpu.Create("spike_generator") -spike_times = [10.0, 400.0] -n_spikes = 2 - -# set spike times and heights -ngpu.SetStatus(spike, {"spike_times": spike_times}) -delay = [1.0, 100.0, 130.0] -weight = [0.1, 0.2, 0.5] - -conn_spec={"rule": "all_to_all"} -for syn in range(3): - syn_spec={'receptor': syn, 'weight': weight[syn], 'delay': delay[syn]} - ngpu.Connect(spike, neuron, conn_spec, syn_spec) - -record = ngpu.CreateRecord("", ["V_m"], [neuron[0]], [0]) -#voltmeter = nest.Create('voltmeter') -#nest.Connect(voltmeter, neuron) - -ngpu.Simulate(800.0) - -data_list = ngpu.GetRecordData(record) -t=[row[0] for row in data_list] -V_m=[row[1] for row in data_list] -#dmm = nest.GetStatus(voltmeter)[0] -#V_m = dmm["events"]["V_m"] -#t = dmm["events"]["times"] -#with open('test_aeif_cond_beta_nest.txt', 'w') as f: -# for i in range(len(t)): -# f.write("%s\t%s\n" % (t[i], V_m[i])) - -data = np.loadtxt('../test/test_aeif_cond_beta_nest.txt', delimiter="\t") -t1=[x[0] for x in data ] -V_m1=[x[1] for x in data ] -print (len(t)) -print (len(t1)) - -dV=[V_m[i*10+20]-V_m1[i] for i in range(len(t1))] -rmse =np.std(dV)/abs(np.mean(V_m)) -print("rmse : ", rmse, " tolerance: ", tolerance) -#if rmse>tolerance: -# sys.exit(1) - -#sys.exit(0) -import matplotlib.pyplot as plt - -fig1 = plt.figure(1) -plt.plot(t, V_m) -fig1.suptitle("NESTGPU") -fig2 = plt.figure(2) -plt.plot(t1, V_m1) -fig2.suptitle("NEST") -plt.draw() -plt.pause(1) -ngpu.waitenter("") -plt.close() diff --git a/python/test_new_features/test_new_connect.py.bk1 b/python/test_new_features/test_new_connect.py.bk1 deleted file mode 100644 index b2a430b30..000000000 --- a/python/test_new_features/test_new_connect.py.bk1 +++ /dev/null @@ -1,41 +0,0 @@ -import nestgpu as ngpu - -neuron = ngpu.Create('iaf_psc_exp', 2) -sg = ngpu.Create('spike_generator', 3) -spike_times = [10.0, 400.0, 600.0] -# set spike times -for i in range(3): - ngpu.SetStatus(sg[i:i+1], {"spike_times": [spike_times[i]]}) - -conn_dict={"rule": "all_to_all"} -syn_dict={"weight": 1.0, "delay": 0.1} - -ngpu.Connect(sg, neuron, conn_dict, syn_dict) - -filename = "test_new_connect.dat" -i_neuron_arr = [neuron[0], neuron[1]] -i_receptor_arr = [0, 0] -# create multimeter record of V_m -var_name_arr = ["V_m_rel", "V_m_rel"] -record = ngpu.CreateRecord(filename, var_name_arr, i_neuron_arr, - i_receptor_arr) - -ngpu.Simulate(1000.0) - -data_list = ngpu.GetRecordData(record) -t=[row[0] for row in data_list] -V1=[row[1] for row in data_list] -V2=[row[2] for row in data_list] - -import matplotlib.pyplot as plt - -plt.figure(1) -plt.plot(t, V1) - -plt.figure(2) -plt.plot(t, V2) - -plt.draw() -plt.pause(0.5) -ngpu.waitenter("") -plt.close() diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_0_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_0_e_pop.dat new file mode 100644 index 000000000..36d0c0bed --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_0_e_pop.dat @@ -0,0 +1,2103 @@ +sender time_ms +0 106.400 +0 217.300 +1 82.500 +1 260.500 +3 200.100 +4 54.100 +4 165.400 +4 228.300 +5 201.000 +6 70.600 +6 200.800 +7 164.400 +7 227.400 +7 256.100 +8 70.100 +8 218.500 +9 117.100 +9 144.400 +9 260.500 +9 291.800 +10 57.200 +10 144.300 +10 228.600 +10 244.900 +10 290.800 +11 185.900 +12 55.700 +12 164.700 +13 107.100 +13 116.700 +13 164.600 +13 290.300 +14 93.400 +14 142.500 +14 185.700 +15 106.800 +15 164.300 +15 187.200 +15 244.500 +16 108.400 +16 119.300 +17 237.600 +17 289.000 +19 127.600 +19 153.400 +19 244.000 +20 126.900 +21 81.600 +21 164.100 +21 291.500 +24 94.100 +24 186.500 +25 130.800 +26 69.800 +26 218.400 +27 93.600 +27 116.200 +27 146.000 +27 233.800 +28 143.600 +28 201.400 +29 81.800 +29 115.800 +29 144.300 +29 265.500 +30 80.600 +30 148.400 +31 130.000 +31 278.800 +32 69.200 +33 52.500 +33 116.400 +33 194.800 +33 290.700 +34 92.700 +35 186.200 +35 219.500 +35 291.500 +37 144.400 +37 185.000 +37 266.400 +38 69.300 +38 126.200 +38 219.600 +39 184.700 +39 291.500 +40 219.500 +41 280.100 +42 128.200 +42 245.300 +43 158.300 +45 57.500 +45 141.600 +46 68.100 +46 108.800 +46 116.900 +46 145.100 +46 219.000 +47 102.300 +47 116.700 +47 185.100 +47 290.500 +48 69.600 +49 97.000 +49 146.300 +49 277.800 +50 143.400 +51 81.800 +51 116.400 +51 228.500 +51 280.900 +52 150.700 +52 164.500 +53 92.400 +53 185.100 +53 279.600 +54 81.400 +54 164.100 +54 200.400 +55 66.200 +55 96.700 +56 101.400 +56 144.300 +56 164.800 +56 216.500 +57 144.200 +57 265.700 +58 108.100 +59 97.300 +60 59.700 +60 164.500 +60 187.300 +60 218.600 +61 57.400 +61 291.600 +62 140.600 +62 290.300 +63 101.200 +63 131.800 +63 164.500 +63 256.700 +63 280.200 +64 121.700 +64 185.800 +64 265.900 +64 279.700 +65 63.200 +65 116.000 +65 164.500 +65 256.200 +66 165.000 +68 102.000 +68 164.300 +69 92.700 +69 100.200 +69 164.700 +69 289.700 +71 153.000 +72 114.600 +72 150.000 +72 217.700 +73 80.700 +73 144.800 +73 227.400 +74 92.500 +74 186.100 +74 244.200 +75 131.800 +75 164.900 +76 67.800 +76 117.500 +76 260.400 +76 281.500 +77 91.500 +77 125.400 +77 131.800 +77 146.500 +77 289.200 +78 186.100 +79 291.500 +80 131.800 +81 82.400 +81 141.300 +82 116.700 +82 164.700 +83 200.600 +83 290.600 +84 200.300 +85 56.000 +85 266.100 +86 116.800 +87 55.500 +87 162.500 +88 219.500 +88 266.300 +89 264.700 +90 109.200 +90 184.800 +91 101.400 +91 164.000 +91 266.000 +95 116.600 +95 164.200 +96 164.500 +97 116.700 +98 139.200 +98 246.600 +100 70.500 +100 144.200 +100 280.600 +101 187.100 +102 50.400 +102 101.800 +102 185.700 +102 231.000 +103 118.600 +103 145.100 +103 201.200 +103 291.200 +104 92.500 +104 291.200 +105 114.200 +105 254.800 +106 65.300 +106 287.600 +107 116.400 +107 187.200 +109 58.000 +109 81.700 +109 218.800 +110 93.300 +111 244.700 +112 164.700 +112 291.100 +113 143.600 +113 165.000 +113 228.600 +113 265.800 +114 164.600 +114 265.200 +114 291.400 +115 93.800 +115 164.300 +115 235.400 +116 265.900 +117 92.400 +118 116.100 +118 164.600 +118 280.200 +119 69.900 +119 81.900 +119 291.000 +120 102.300 +121 164.300 +121 244.200 +122 101.500 +122 164.600 +123 56.600 +123 70.600 +123 245.200 +124 70.800 +124 245.200 +124 265.900 +125 219.500 +126 98.400 +126 126.300 +126 131.300 +127 130.500 +127 150.200 +127 185.800 +128 164.600 +129 71.100 +129 117.200 +130 106.700 +131 93.800 +132 92.400 +132 100.200 +132 279.200 +133 217.700 +133 257.800 +134 82.000 +134 116.800 +134 251.700 +134 281.100 +135 100.200 +135 164.500 +135 265.800 +136 125.800 +136 291.100 +137 70.000 +137 215.200 +137 253.600 +138 280.100 +138 291.600 +139 164.500 +139 260.100 +140 150.200 +140 202.300 +141 79.000 +142 81.700 +142 116.500 +142 187.200 +142 279.100 +143 81.400 +143 91.200 +143 146.200 +143 245.000 +144 98.800 +144 165.000 +144 186.600 +145 291.700 +146 117.000 +147 81.900 +147 163.100 +147 184.000 +147 219.700 +149 116.500 +149 144.100 +149 217.800 +149 291.100 +150 69.400 +150 144.300 +150 181.400 +150 219.100 +151 81.800 +151 289.400 +152 94.000 +152 201.800 +153 118.000 +154 128.100 +154 164.900 +154 187.400 +154 201.000 +154 279.900 +155 263.900 +155 280.000 +156 81.200 +156 117.300 +158 218.000 +158 235.600 +159 116.500 +159 260.500 +160 132.600 +160 163.900 +160 185.400 +161 164.600 +161 291.500 +162 61.200 +162 114.300 +163 121.400 +164 290.700 +165 116.800 +166 80.700 +166 116.300 +166 185.300 +167 81.900 +167 144.100 +167 219.200 +167 260.200 +168 106.700 +168 116.100 +168 256.900 +169 68.200 +169 281.700 +170 52.700 +170 280.400 +170 289.200 +171 200.900 +171 259.500 +171 291.100 +172 81.200 +172 164.700 +172 229.500 +172 281.200 +173 185.900 +173 218.100 +173 291.400 +174 129.200 +174 146.000 +174 291.000 +176 217.800 +176 291.200 +177 101.800 +177 291.200 +178 244.500 +178 266.600 +179 57.300 +179 105.200 +179 164.500 +179 218.400 +180 117.600 +180 153.400 +180 266.000 +181 112.300 +181 291.900 +182 108.600 +182 218.200 +182 279.500 +183 164.800 +183 256.600 +184 117.100 +184 182.600 +184 218.000 +184 245.700 +184 266.400 +185 116.300 +185 164.400 +186 63.000 +186 218.900 +186 260.500 +187 144.500 +187 244.300 +187 259.800 +188 228.200 +189 81.900 +189 127.000 +189 164.000 +190 124.800 +190 153.500 +190 227.000 +191 128.800 +191 187.200 +192 265.800 +192 290.600 +193 164.600 +194 96.900 +194 185.800 +195 80.700 +195 159.000 +195 218.200 +195 291.600 +197 227.400 +197 286.100 +197 290.800 +198 97.700 +198 199.900 +198 234.900 +198 290.700 +199 217.900 +200 70.400 +200 138.600 +200 266.200 +201 186.900 +201 280.300 +203 80.900 +203 117.800 +204 106.000 +204 279.700 +205 68.500 +205 184.500 +206 244.500 +206 291.000 +207 187.200 +208 116.500 +208 153.500 +209 186.100 +209 228.100 +210 69.700 +210 100.100 +210 138.400 +211 164.600 +212 280.500 +213 97.700 +213 140.600 +213 200.700 +213 279.900 +214 257.500 +215 131.100 +215 161.800 +215 291.200 +216 101.900 +216 186.500 +216 289.300 +217 200.900 +217 288.400 +218 82.300 +219 81.500 +219 106.800 +219 218.200 +220 164.700 +220 201.800 +220 245.500 +221 150.000 +222 117.000 +222 132.800 +222 184.900 +222 218.200 +222 229.400 +222 288.500 +223 280.400 +224 69.500 +224 133.100 +224 185.300 +225 198.600 +225 279.200 +226 130.100 +227 105.900 +227 164.900 +227 218.000 +228 92.600 +228 132.500 +228 153.200 +229 130.600 +229 264.500 +230 79.400 +230 117.100 +230 146.500 +230 280.800 +231 185.900 +231 200.700 +231 291.700 +232 164.700 +232 265.700 +233 83.000 +233 237.500 +233 281.200 +234 164.700 +235 265.900 +236 81.100 +236 164.300 +236 243.800 +237 115.600 +239 116.500 +239 148.900 +241 65.900 +241 93.800 +241 164.200 +242 202.400 +242 291.200 +243 81.600 +243 158.300 +243 164.900 +243 186.200 +243 280.000 +244 69.600 +244 164.300 +244 258.600 +245 185.800 +245 201.100 +245 266.200 +245 288.100 +246 164.300 +246 186.500 +246 244.300 +247 129.300 +247 164.800 +247 244.500 +247 291.600 +248 244.600 +248 291.600 +249 145.000 +250 68.800 +250 280.000 +250 291.700 +251 61.100 +251 160.000 +252 70.600 +252 130.900 +252 218.500 +254 81.900 +254 225.700 +255 125.300 +255 164.900 +255 245.300 +256 164.500 +257 107.100 +257 132.800 +257 281.100 +258 82.500 +258 133.800 +258 163.800 +258 229.500 +260 133.500 +260 187.100 +260 230.900 +260 247.700 +261 286.700 +262 93.500 +262 127.300 +262 165.100 +262 279.500 +263 130.100 +263 263.300 +264 185.700 +264 228.100 +265 111.300 +265 274.200 +266 50.200 +266 163.500 +266 201.500 +267 266.200 +268 96.700 +268 200.300 +269 93.100 +269 114.000 +269 164.100 +269 289.400 +270 50.300 +270 121.700 +270 259.600 +271 116.700 +271 183.900 +271 216.800 +272 50.200 +272 93.100 +272 258.900 +273 94.100 +273 245.400 +274 116.600 +275 117.800 +275 186.900 +275 231.200 +276 70.200 +276 217.600 +276 289.800 +277 69.700 +277 116.500 +278 164.900 +278 260.300 +279 164.400 +279 241.700 +280 152.500 +280 290.800 +281 219.600 +281 290.600 +282 69.300 +282 113.400 +282 281.000 +284 217.800 +284 290.800 +285 163.900 +286 94.000 +286 164.300 +286 186.500 +286 218.100 +287 131.500 +287 164.400 +288 116.800 +288 260.200 +289 83.000 +289 92.800 +289 148.600 +289 290.700 +290 96.800 +290 114.400 +290 145.000 +290 280.500 +291 67.600 +291 118.000 +291 164.800 +291 290.500 +292 102.400 +292 153.400 +292 227.900 +293 185.800 +293 279.900 +294 131.600 +294 164.700 +295 163.700 +295 185.600 +295 278.300 +296 218.400 +297 260.400 +298 99.800 +299 186.100 +300 55.300 +300 265.900 +301 56.700 +301 219.700 +302 107.900 +302 164.600 +302 264.200 +303 113.400 +303 131.600 +304 80.800 +304 195.000 +304 230.000 +305 116.900 +305 144.300 +305 158.500 +305 244.800 +305 291.000 +306 217.900 +306 290.700 +307 117.500 +307 125.300 +307 291.200 +308 158.200 +309 81.800 +310 200.100 +311 102.000 +312 81.900 +312 226.500 +312 291.500 +313 128.100 +313 164.700 +313 187.100 +313 219.400 +313 291.400 +314 101.400 +314 115.700 +314 164.600 +314 291.900 +315 102.100 +315 164.400 +315 263.700 +316 164.500 +316 257.800 +317 144.200 +317 165.200 +318 113.800 +318 132.600 +318 246.200 +319 67.900 +319 266.100 +320 127.900 +320 217.500 +321 69.600 +321 93.600 +322 288.400 +323 69.600 +323 101.500 +323 116.800 +324 185.600 +324 266.000 +325 164.600 +325 289.300 +326 128.100 +327 117.900 +327 129.700 +327 164.500 +327 202.900 +329 56.100 +329 81.800 +329 100.200 +329 201.700 +329 218.300 +329 281.500 +330 116.400 +330 201.800 +330 237.500 +330 280.200 +330 291.700 +331 164.200 +331 288.900 +332 185.800 +333 81.400 +333 132.300 +333 202.000 +333 244.500 +333 280.500 +334 70.900 +334 81.600 +334 144.500 +334 185.900 +334 244.500 +335 99.800 +335 126.100 +336 81.700 +336 115.100 +336 164.100 +337 145.800 +337 159.100 +338 117.900 +338 164.800 +338 218.000 +339 201.400 +339 291.200 +340 130.200 +341 218.000 +342 185.200 +342 219.500 +343 126.400 +343 202.800 +343 266.000 +344 93.200 +345 144.800 +345 244.000 +346 82.100 +346 164.500 +348 164.300 +348 265.800 +348 291.300 +349 116.900 +349 202.200 +349 291.600 +350 185.300 +350 266.100 +350 280.200 +351 82.600 +351 164.600 +351 241.200 +351 278.200 +352 128.500 +352 165.000 +353 57.400 +353 69.800 +353 100.100 +353 185.900 +354 126.000 +354 164.600 +355 56.500 +355 264.200 +356 159.200 +356 245.000 +357 218.400 +357 247.100 +358 117.900 +358 244.300 +359 57.400 +360 144.600 +361 82.900 +361 141.900 +361 185.000 +361 218.500 +362 55.900 +362 150.900 +362 164.700 +362 218.500 +363 93.900 +363 131.800 +363 184.200 +365 81.200 +365 164.500 +365 218.500 +365 265.800 +366 117.000 +366 185.700 +367 130.300 +367 163.600 +367 288.900 +369 131.600 +369 165.100 +369 264.700 +370 70.500 +370 130.300 +370 230.200 +371 144.300 +371 164.700 +371 287.400 +372 152.500 +372 199.300 +373 69.600 +373 94.000 +373 218.800 +374 54.900 +374 185.000 +374 227.700 +375 185.800 +376 142.000 +376 164.100 +376 291.600 +377 215.500 +377 230.900 +377 245.300 +377 291.500 +378 57.200 +378 164.500 +378 187.100 +379 69.300 +379 116.300 +379 280.600 +380 279.800 +381 68.500 +381 98.600 +381 142.100 +381 162.500 +381 244.100 +382 98.700 +382 140.900 +383 165.100 +383 218.200 +383 263.300 +384 127.000 +384 186.900 +384 257.100 +385 100.300 +385 227.600 +385 290.800 +386 281.500 +387 163.600 +388 51.800 +388 114.000 +389 145.800 +389 163.900 +389 219.700 +389 290.600 +390 92.100 +390 164.200 +390 260.300 +390 266.000 +391 164.400 +392 56.900 +392 67.700 +392 152.300 +392 218.200 +393 93.600 +393 219.500 +393 256.300 +396 95.900 +396 185.500 +396 218.800 +396 281.500 +398 164.800 +398 185.300 +398 291.800 +399 66.400 +400 96.700 +400 144.900 +400 185.000 +401 128.300 +401 164.500 +402 144.000 +402 186.100 +402 217.900 +403 218.000 +404 184.900 +404 280.300 +405 144.700 +405 217.900 +406 185.300 +407 164.500 +408 279.000 +409 81.600 +409 218.100 +410 70.100 +410 81.300 +410 99.900 +410 130.100 +410 164.500 +410 201.900 +412 127.400 +412 140.100 +413 184.200 +413 217.600 +414 82.600 +414 116.500 +414 244.200 +414 265.800 +415 146.700 +415 187.200 +415 219.400 +416 117.200 +416 185.500 +416 245.400 +416 290.800 +417 132.600 +417 217.900 +418 163.800 +418 244.600 +419 71.000 +419 183.400 +419 291.700 +420 227.600 +421 93.200 +422 108.400 +422 218.300 +423 58.100 +423 96.600 +424 164.700 +424 219.700 +424 290.600 +425 83.000 +425 256.600 +426 69.500 +426 164.700 +426 264.900 +427 201.600 +427 225.300 +428 117.300 +428 185.000 +429 141.500 +429 187.300 +430 185.800 +431 185.000 +431 234.000 +431 277.300 +432 70.700 +432 202.300 +433 131.700 +433 164.600 +434 57.600 +434 116.600 +435 50.300 +435 117.000 +436 107.100 +436 117.100 +436 283.000 +437 114.400 +437 128.500 +437 165.400 +438 81.900 +438 164.200 +438 219.600 +439 72.200 +439 113.500 +439 185.100 +439 243.900 +440 55.600 +440 115.800 +441 98.800 +441 219.700 +441 231.200 +441 246.900 +442 280.200 +443 128.500 +443 144.600 +444 144.100 +445 265.100 +447 219.400 +447 260.000 +448 115.700 +448 144.800 +448 181.900 +448 291.300 +449 130.400 +451 96.200 +451 201.800 +452 163.900 +453 145.800 +455 93.200 +455 183.900 +456 69.400 +456 117.200 +456 132.800 +456 245.500 +457 143.700 +457 184.800 +458 100.100 +458 147.800 +458 195.000 +458 227.700 +458 291.200 +459 163.500 +459 202.400 +459 230.800 +460 82.800 +460 93.900 +460 144.600 +460 262.900 +460 280.300 +461 163.900 +461 217.900 +461 290.700 +462 81.900 +462 125.400 +462 216.800 +462 261.400 +462 289.000 +463 104.200 +463 164.400 +463 259.100 +464 92.900 +465 57.900 +465 241.100 +466 163.500 +466 184.700 +467 71.000 +467 142.300 +467 163.300 +469 96.500 +469 165.000 +470 108.200 +470 218.000 +470 260.600 +471 164.700 +472 69.000 +472 290.400 +473 81.300 +473 126.700 +474 291.100 +475 51.600 +475 185.700 +475 288.800 +476 117.500 +476 152.700 +476 165.400 +476 217.600 +477 164.200 +479 81.200 +479 164.400 +479 289.000 +480 106.700 +480 141.400 +480 160.300 +481 163.400 +481 200.300 +481 263.700 +482 62.300 +482 131.000 +482 291.000 +483 65.800 +483 132.200 +483 164.500 +483 289.600 +484 144.900 +484 164.600 +484 228.600 +484 290.400 +486 117.600 +486 145.500 +486 184.900 +486 200.700 +486 235.400 +486 286.000 +487 127.400 +487 184.600 +487 218.200 +488 108.200 +488 145.700 +488 230.900 +490 219.200 +490 266.200 +491 99.900 +491 185.200 +491 259.300 +492 69.300 +492 164.500 +493 114.800 +493 164.600 +493 185.900 +493 201.400 +494 257.700 +495 217.600 +495 289.000 +496 150.200 +496 164.700 +496 244.200 +497 131.300 +497 146.500 +497 243.300 +498 164.500 +499 99.500 +499 116.700 +499 185.900 +499 201.700 +499 259.600 +500 50.400 +500 117.600 +501 164.500 +501 217.000 +502 127.400 +502 163.400 +504 117.100 +504 126.800 +504 201.300 +505 186.900 +505 224.200 +505 263.700 +506 80.800 +506 216.400 +507 125.800 +507 164.700 +507 244.700 +508 100.900 +508 231.200 +509 131.400 +510 96.900 +510 126.700 +511 126.800 +511 265.900 +511 290.600 +512 92.700 +512 144.600 +512 217.300 +512 266.200 +512 288.500 +513 244.300 +514 164.500 +514 185.000 +514 219.300 +514 244.400 +514 279.800 +515 116.300 +516 96.900 +516 113.400 +516 164.700 +516 263.500 +517 133.000 +517 200.700 +518 131.800 +518 217.700 +518 244.800 +519 81.600 +519 143.900 +520 278.900 +521 69.500 +521 164.700 +521 236.300 +522 81.700 +522 130.800 +522 164.500 +523 184.300 +523 218.200 +524 68.000 +524 165.100 +524 228.500 +524 290.800 +525 57.600 +525 117.700 +526 144.800 +526 183.500 +527 50.200 +527 129.600 +527 218.100 +527 265.900 +527 291.100 +528 56.500 +528 164.700 +529 93.500 +529 138.500 +529 164.500 +529 260.300 +530 266.200 +530 280.600 +531 100.100 +531 116.400 +532 114.000 +532 164.000 +532 244.300 +533 69.500 +533 79.200 +533 93.900 +533 116.900 +533 164.500 +533 243.600 +534 164.500 +534 200.900 +534 245.600 +535 116.300 +535 129.200 +536 56.700 +537 163.900 +538 69.900 +538 145.000 +538 280.600 +539 68.700 +539 126.100 +539 185.700 +539 288.800 +540 58.900 +540 186.300 +541 101.300 +542 202.200 +542 228.400 +543 80.900 +544 164.400 +545 78.900 +546 96.200 +546 185.400 +546 280.600 +547 69.600 +547 105.200 +547 202.100 +548 81.800 +548 144.400 +549 94.000 +549 164.200 +549 219.300 +549 291.300 +550 58.400 +550 79.700 +550 141.900 +550 164.400 +550 226.900 +550 246.200 +550 265.800 +551 201.200 +551 265.000 +552 144.300 +552 202.000 +552 265.500 +553 188.700 +553 199.900 +553 218.200 +555 116.500 +555 159.100 +555 243.800 +555 266.300 +556 105.900 +556 132.000 +556 260.300 +557 107.900 +557 255.500 +560 58.100 +560 87.200 +561 116.800 +561 202.700 +562 131.900 +562 164.200 +562 186.900 +562 266.000 +563 146.300 +563 184.300 +564 70.900 +564 130.300 +564 219.000 +565 93.100 +565 164.700 +565 245.100 +565 279.600 +566 70.700 +566 265.900 +567 68.100 +567 114.800 +567 186.200 +567 218.200 +567 244.100 +567 265.800 +568 133.000 +569 164.700 +570 117.000 +570 290.800 +571 56.800 +571 144.500 +571 291.000 +572 88.900 +572 202.100 +573 67.800 +573 94.100 +573 245.200 +574 117.900 +574 228.200 +574 261.600 +575 65.400 +575 101.300 +575 116.500 +575 162.900 +575 237.400 +576 165.000 +576 236.100 +577 218.200 +578 93.200 +578 185.900 +578 217.900 +578 228.300 +578 288.900 +579 67.400 +579 131.200 +579 144.700 +579 244.100 +580 201.100 +580 290.900 +581 130.700 +582 127.300 +582 164.800 +583 93.100 +583 126.200 +583 165.100 +583 219.200 +583 244.500 +584 81.000 +584 229.800 +585 264.400 +586 100.100 +586 163.800 +586 290.300 +587 80.800 +587 126.600 +588 164.500 +588 218.800 +589 69.300 +589 128.600 +589 259.100 +590 62.400 +590 93.700 +590 113.900 +590 202.000 +590 235.600 +591 116.900 +591 237.700 +591 290.800 +592 150.400 +594 147.400 +594 244.500 +595 82.500 +595 184.400 +595 285.700 +596 80.900 +596 116.600 +596 279.500 +597 113.600 +597 185.800 +598 96.300 +598 266.100 +599 82.300 +599 99.000 +600 198.900 +600 247.100 +601 108.200 +601 255.400 +602 93.400 +603 289.400 +604 61.600 +604 200.100 +604 245.000 +607 81.700 +607 128.300 +607 186.800 +608 163.700 +608 246.200 +609 68.300 +609 184.600 +609 260.600 +609 281.100 +610 117.000 +610 145.500 +611 143.800 +611 163.500 +612 69.800 +612 132.100 +612 185.700 +613 101.600 +613 164.500 +613 187.200 +613 263.100 +613 281.100 +614 68.100 +615 68.000 +615 266.200 +616 81.900 +616 202.600 +616 219.500 +616 279.800 +617 144.900 +617 149.000 +617 164.200 +617 219.500 +618 146.500 +619 217.400 +620 93.000 +620 265.700 +620 291.600 +621 141.900 +621 163.800 +621 217.600 +622 82.100 +622 93.100 +622 126.500 +622 130.400 +622 164.700 +622 290.700 +623 243.800 +624 114.100 +624 263.900 +624 291.600 +626 244.400 +627 80.600 +627 163.200 +628 116.100 +628 164.600 +628 219.700 +629 50.300 +630 164.700 +630 290.500 +631 219.700 +632 99.100 +632 164.500 +632 186.100 +632 256.600 +633 57.300 +633 81.700 +633 145.300 +633 291.300 +634 145.500 +634 187.300 +635 70.800 +635 280.500 +636 131.800 +636 184.800 +636 244.500 +637 127.200 +637 187.200 +637 198.900 +638 185.500 +638 266.000 +638 280.500 +639 114.600 +639 144.800 +640 55.500 +640 201.300 +640 280.200 +641 93.600 +641 184.200 +642 90.400 +642 102.700 +642 164.200 +643 165.100 +644 125.900 +645 69.600 +645 185.100 +645 218.200 +646 80.600 +646 227.400 +646 244.300 +646 289.300 +647 164.700 +648 146.200 +649 219.300 +650 79.000 +650 186.200 +650 244.000 +650 288.800 +651 184.900 +652 260.100 +653 100.200 +653 185.500 +653 245.200 +654 266.000 +656 69.200 +656 115.700 +656 164.400 +656 186.500 +656 229.700 +657 67.500 +657 115.700 +657 185.300 +658 97.900 +658 185.700 +658 219.700 +658 266.300 +659 69.300 +660 132.400 +660 164.000 +660 265.600 +661 52.300 +661 69.200 +661 102.100 +661 187.300 +662 57.500 +662 115.500 +662 164.600 +662 218.300 +663 50.200 +664 81.600 +664 244.700 +664 291.400 +665 184.500 +665 217.700 +666 70.800 +666 128.900 +666 279.400 +666 289.100 +667 85.400 +667 96.400 +667 164.400 +667 225.200 +668 55.900 +668 146.000 +668 217.700 +668 291.700 +669 80.900 +669 217.600 +670 70.000 +670 117.300 +671 132.500 +671 198.000 +672 81.700 +672 102.700 +672 114.800 +672 164.900 +672 245.100 +672 265.800 +674 81.500 +674 114.900 +674 128.000 +674 163.400 +674 202.200 +674 260.400 +675 104.100 +676 116.200 +676 219.200 +676 266.000 +676 291.700 +677 131.300 +677 291.700 +678 99.300 +678 164.400 +678 198.500 +679 125.800 +679 278.900 +679 291.700 +680 130.100 +680 148.400 +680 164.400 +681 71.100 +681 81.700 +681 125.400 +681 151.000 +682 80.900 +682 102.500 +682 116.200 +682 164.800 +683 131.600 +683 279.700 +684 99.900 +684 184.200 +684 247.800 +684 265.400 +685 163.900 +685 217.800 +685 281.100 +685 291.300 +686 164.600 +686 280.900 +688 81.700 +688 202.700 +688 281.100 +689 67.800 +689 184.800 +690 55.500 +691 57.400 +691 81.600 +691 278.700 +692 126.300 +692 163.500 +692 218.100 +693 101.200 +693 164.400 +694 58.300 +694 96.600 +694 184.900 +694 202.100 +695 67.300 +695 141.500 +695 185.700 +696 100.000 +696 164.900 +696 186.800 +697 81.300 +697 185.200 +699 219.500 +699 281.100 +700 164.500 +700 266.000 +701 116.400 +701 244.500 +701 290.800 +702 217.600 +702 291.100 +703 116.200 +703 260.500 +703 281.200 +704 68.100 +704 128.300 +704 164.600 +704 259.700 +705 104.400 +705 164.800 +705 186.900 +706 69.500 +706 291.300 +707 52.400 +707 80.800 +707 116.700 +707 131.600 +707 152.400 +708 82.000 +708 202.300 +709 93.900 +709 144.400 +709 217.800 +710 117.200 +711 113.400 +711 150.400 +711 201.400 +712 96.500 +712 105.300 +713 187.300 +713 291.300 +715 153.500 +715 185.000 +716 258.500 +717 97.800 +717 101.600 +717 107.700 +718 69.600 +718 218.400 +719 117.200 +719 260.700 +720 96.700 +720 257.100 +720 265.800 +721 145.100 +722 115.900 +722 164.200 +723 96.600 +723 114.200 +724 218.100 +724 279.300 +725 141.900 +725 245.400 +726 69.400 +726 103.900 +726 145.800 +727 116.200 +727 144.800 +727 185.200 +727 219.700 +728 164.700 +729 101.400 +729 247.300 +730 69.700 +730 184.900 +731 247.000 +732 68.200 +732 106.700 +732 127.800 +733 104.300 +733 127.400 +733 202.000 +733 291.300 +734 52.700 +734 117.400 +734 260.600 +735 93.800 +735 116.800 +735 162.100 +736 61.400 +736 147.100 +736 165.400 +736 244.000 +737 164.400 +737 280.500 +738 101.500 +738 144.800 +738 280.100 +739 100.200 +739 278.800 +741 117.100 +741 146.300 +741 164.100 +741 266.300 +742 124.900 +743 93.900 +743 121.700 +743 202.800 +743 229.400 +745 117.600 +745 219.400 +745 230.100 +746 117.300 +746 148.700 +747 81.600 +747 138.200 +747 164.700 +748 102.600 +748 164.400 +749 102.200 +750 160.500 +750 185.900 +751 164.100 +752 52.700 +753 107.000 +753 127.900 +753 164.700 +753 202.800 +754 80.200 +754 259.100 +754 289.400 +755 94.000 +755 97.300 +755 212.800 +755 265.900 +756 153.100 +756 235.900 +757 92.600 +757 185.500 +758 81.000 +758 117.400 +758 146.500 +758 229.400 +758 260.400 +759 82.900 +759 144.000 +759 217.800 +760 99.300 +760 114.500 +760 217.800 +760 260.000 +760 281.300 +762 116.500 +763 68.300 +763 164.500 +763 279.600 +764 81.600 +764 243.900 +764 291.900 +765 280.100 +766 57.700 +766 100.100 +766 164.700 +767 65.800 +767 131.900 +767 164.300 +768 164.500 +768 217.700 +769 108.600 +769 165.300 +769 186.000 +769 200.800 +770 164.300 +771 92.500 +771 141.600 +771 202.600 +772 140.900 +772 219.700 +772 260.200 +773 145.800 +773 164.700 +774 100.900 +774 147.200 +774 164.800 +774 217.700 +775 128.600 +775 145.000 +775 219.300 +775 247.100 +775 290.700 +776 71.800 +776 202.300 +776 218.500 +777 140.900 +777 155.100 +777 219.400 +778 114.500 +778 125.600 +778 165.500 +778 278.200 +779 82.600 +779 106.500 +779 127.800 +779 165.700 +779 218.400 +779 289.000 +780 102.400 +780 219.600 +781 127.400 +781 291.300 +782 140.700 +783 202.200 +784 93.800 +784 128.600 +785 116.500 +786 102.000 +787 101.500 +788 108.200 +788 279.300 +789 107.900 +789 164.700 +789 288.400 +790 116.100 +790 140.400 +790 150.700 +790 186.800 +791 66.700 +791 105.900 +792 164.300 +793 56.600 +793 247.800 +794 187.300 +794 245.000 +795 82.300 +795 116.500 +795 184.700 +796 108.300 +796 163.500 +796 202.900 +797 83.000 +797 96.500 +798 131.300 +798 184.800 +799 107.600 +799 259.400 +800 56.800 +800 102.300 +800 219.600 +801 101.700 +801 115.900 +801 187.100 +801 244.200 +802 126.700 +802 219.600 +803 105.600 +803 141.300 +803 218.000 +803 291.400 +804 291.200 +805 101.500 +805 164.200 +806 116.200 +806 165.100 +806 185.700 +806 289.400 +807 58.700 +807 107.600 +807 164.400 +807 184.800 +807 244.000 +808 57.800 +808 102.000 +808 117.400 +808 291.400 +809 81.800 +810 93.800 +810 280.200 +811 152.800 +811 184.800 +812 82.100 +812 108.200 +813 65.800 +813 219.000 +813 228.300 +815 280.200 +816 260.500 +817 100.100 +817 187.200 +817 244.900 +818 132.200 +818 219.700 +819 244.200 +820 165.400 +820 266.000 +821 106.300 +821 229.200 +821 260.200 +822 116.700 +822 200.400 +823 202.400 +824 102.300 +824 126.500 +824 141.200 +824 218.000 +825 281.100 +826 80.500 +826 146.700 +826 159.100 +826 244.400 +827 164.800 +827 244.400 +828 116.800 +828 219.800 +828 244.500 +829 185.400 +830 67.800 +830 164.800 +830 187.000 +830 217.600 +831 131.900 +831 147.900 +831 186.900 +832 102.100 +832 152.100 +832 165.200 +832 216.900 +832 281.400 +833 217.900 +833 280.200 +834 96.200 +834 126.700 +834 164.200 +834 201.000 +835 92.900 +835 164.400 +836 186.400 +837 67.800 +837 144.600 +837 185.500 +837 217.200 +838 93.700 +838 107.100 +838 184.400 +838 219.200 +839 150.400 +839 186.400 +839 216.000 +841 164.800 +842 117.300 +842 200.900 +843 117.400 +843 165.500 +844 230.300 +846 128.000 +847 202.900 +848 93.700 +848 132.000 +848 185.800 +849 102.100 +849 128.300 +849 185.200 +849 229.100 +850 143.900 +850 201.100 +851 78.800 +851 116.300 +851 266.000 +852 185.100 +852 198.300 +853 95.800 +853 116.800 +853 144.300 +853 217.900 +854 66.500 +854 244.700 +855 69.800 +855 102.600 +855 125.500 +855 235.600 +856 89.000 +856 164.700 +857 58.200 +857 125.100 +857 187.300 +857 229.600 +858 69.400 +859 52.100 +859 164.900 +860 69.000 +860 290.700 +861 101.700 +861 227.500 +862 99.500 +862 141.000 +862 202.200 +863 50.600 +863 164.600 +863 217.900 +864 79.500 +864 164.900 +864 266.400 +865 164.300 +865 291.200 +866 244.200 +867 117.300 +867 236.500 +868 97.300 +868 128.000 +868 165.200 +868 264.800 +868 280.700 +868 291.800 +869 50.200 +869 80.600 +869 153.500 +869 265.200 +870 97.100 +870 164.700 +871 54.900 +871 117.100 +871 202.200 +872 150.200 +873 55.900 +873 164.300 +874 108.100 +874 164.400 +874 236.000 +875 57.500 +875 141.100 +875 184.800 +876 117.400 +876 164.400 +877 94.100 +877 145.100 +877 280.100 +878 217.700 +879 80.800 +879 144.200 +879 184.700 +880 107.800 +881 260.400 +882 186.100 +883 164.400 +883 187.500 +884 96.900 +884 164.100 +885 164.600 +885 217.000 +886 80.900 +886 185.700 +886 265.200 +887 69.300 +888 107.600 +888 202.200 +888 218.000 +889 156.000 +889 280.600 +890 81.100 +891 164.500 +892 81.900 +893 81.300 +893 107.400 +893 146.600 +894 127.700 +894 266.300 +894 289.800 +895 108.900 +895 278.200 +896 162.500 +898 69.200 +898 291.700 +899 185.400 +899 218.400 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_0_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_0_i_pop.dat new file mode 100644 index 000000000..3fcefcd08 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_0_i_pop.dat @@ -0,0 +1,514 @@ +sender time_ms +900 287.500 +901 116.800 +901 164.600 +901 245.900 +902 96.500 +902 164.400 +902 281.300 +903 185.900 +903 200.900 +904 102.100 +904 164.100 +904 265.400 +905 201.400 +905 243.300 +906 281.100 +907 52.100 +907 80.600 +907 145.000 +907 164.100 +908 125.500 +908 150.800 +908 164.800 +909 50.800 +909 96.300 +909 106.800 +909 202.800 +909 243.800 +909 265.800 +910 101.600 +911 71.000 +911 145.000 +911 200.800 +911 218.100 +912 152.800 +912 281.500 +913 99.700 +913 227.600 +914 163.900 +914 244.800 +915 148.600 +915 218.300 +916 244.500 +917 131.300 +917 164.400 +918 117.100 +918 163.200 +918 236.100 +919 93.300 +919 185.900 +920 141.100 +921 184.700 +924 164.500 +924 244.300 +925 81.900 +925 116.300 +925 186.100 +925 265.800 +925 291.400 +926 68.000 +926 116.000 +926 280.500 +927 130.800 +927 146.200 +927 185.100 +928 121.100 +928 165.200 +928 218.200 +929 81.500 +929 144.900 +930 80.800 +930 184.900 +930 210.200 +931 92.300 +931 145.100 +931 164.600 +931 186.000 +931 200.800 +932 81.500 +932 132.000 +932 218.600 +932 229.600 +933 163.800 +933 265.100 +934 99.000 +934 185.900 +934 245.900 +935 102.300 +936 66.000 +936 81.700 +936 229.600 +937 93.800 +937 164.500 +937 185.800 +938 164.600 +939 164.800 +939 255.500 +939 279.800 +940 92.500 +940 117.300 +940 265.900 +941 106.800 +941 144.800 +941 201.000 +941 237.200 +941 265.300 +942 81.100 +942 132.400 +943 117.700 +943 164.400 +944 100.000 +944 131.000 +944 161.700 +944 202.300 +944 244.500 +945 88.000 +945 99.400 +945 163.500 +946 132.700 +947 116.600 +947 155.900 +948 266.000 +949 229.500 +950 80.800 +950 291.900 +951 291.700 +952 165.200 +952 261.000 +953 148.700 +953 259.900 +954 107.300 +954 132.300 +954 145.000 +954 164.800 +954 202.200 +955 104.300 +955 219.500 +955 228.200 +955 290.900 +956 144.300 +956 163.500 +956 290.700 +957 107.700 +957 131.600 +957 219.600 +958 158.400 +958 200.800 +958 280.300 +959 107.800 +960 163.600 +960 260.700 +961 114.200 +962 80.400 +962 116.300 +962 187.000 +962 228.800 +962 291.500 +963 55.900 +963 70.500 +963 105.400 +963 117.300 +963 219.200 +964 69.300 +966 100.000 +966 148.600 +966 258.500 +967 128.000 +967 146.800 +968 82.600 +968 116.600 +968 290.400 +969 164.300 +971 235.900 +971 279.100 +973 163.800 +973 244.100 +974 202.700 +974 218.400 +975 127.000 +975 265.800 +976 146.400 +977 65.700 +977 117.900 +977 291.500 +978 117.100 +978 125.200 +978 164.700 +978 186.200 +979 58.000 +979 107.300 +979 185.800 +979 279.100 +980 71.100 +980 202.600 +981 93.800 +981 117.200 +981 280.300 +983 186.900 +983 265.800 +984 55.800 +984 125.900 +985 50.600 +985 108.200 +985 164.700 +985 291.800 +987 81.800 +987 144.800 +987 186.100 +989 103.500 +989 112.900 +989 281.000 +991 50.100 +991 265.900 +991 291.100 +992 81.300 +992 187.100 +992 201.700 +992 266.300 +993 132.500 +993 185.700 +994 81.900 +994 218.500 +996 164.300 +997 265.500 +998 131.900 +998 219.600 +998 236.400 +998 264.500 +999 128.200 +999 187.200 +999 231.200 +1000 146.300 +1000 279.600 +1001 115.500 +1001 143.100 +1001 164.600 +1001 290.900 +1002 69.500 +1002 290.900 +1003 81.200 +1003 292.300 +1004 245.700 +1004 265.900 +1005 79.300 +1005 153.300 +1005 216.900 +1005 276.600 +1005 288.800 +1006 244.500 +1006 290.600 +1007 62.300 +1007 116.800 +1007 186.000 +1007 279.100 +1008 93.800 +1008 185.200 +1009 200.100 +1009 219.600 +1010 265.800 +1011 86.600 +1011 117.400 +1011 144.900 +1011 277.800 +1012 58.500 +1012 95.700 +1012 155.700 +1012 217.900 +1012 291.700 +1013 116.700 +1013 140.800 +1013 164.100 +1014 132.100 +1014 165.000 +1014 279.900 +1015 202.800 +1016 130.300 +1016 230.900 +1018 55.200 +1018 186.200 +1018 218.100 +1019 108.300 +1019 163.000 +1019 266.400 +1020 93.100 +1020 145.500 +1020 164.400 +1020 186.600 +1021 260.700 +1021 288.900 +1022 50.100 +1022 81.500 +1022 291.600 +1023 164.000 +1024 82.000 +1024 218.200 +1024 287.800 +1025 291.400 +1026 163.100 +1028 101.900 +1028 164.700 +1028 259.500 +1029 150.200 +1030 57.300 +1030 132.200 +1030 186.400 +1031 244.600 +1032 291.200 +1033 144.900 +1033 164.700 +1034 69.300 +1034 101.200 +1034 200.500 +1035 130.200 +1035 146.300 +1035 256.900 +1035 291.300 +1036 185.900 +1036 219.700 +1037 117.100 +1038 131.500 +1038 291.200 +1039 81.900 +1039 131.300 +1039 184.500 +1040 54.800 +1040 115.400 +1041 69.500 +1042 70.200 +1042 164.900 +1042 290.800 +1043 93.600 +1043 164.400 +1043 234.700 +1043 279.000 +1044 228.200 +1045 260.200 +1046 165.000 +1047 289.100 +1048 59.800 +1048 218.200 +1048 266.000 +1050 56.500 +1050 80.800 +1050 164.900 +1050 219.400 +1051 102.300 +1051 126.500 +1051 164.800 +1051 291.700 +1052 116.200 +1053 159.200 +1053 218.100 +1053 289.200 +1056 106.900 +1058 81.000 +1058 218.200 +1058 279.400 +1059 93.800 +1059 266.200 +1060 69.300 +1060 95.600 +1060 117.400 +1060 163.900 +1060 256.500 +1061 81.600 +1061 218.800 +1062 115.300 +1062 228.300 +1062 246.900 +1062 281.100 +1063 143.900 +1063 218.400 +1064 184.900 +1064 218.200 +1065 55.200 +1065 217.900 +1065 289.300 +1066 81.600 +1066 143.900 +1066 164.100 +1066 187.500 +1066 219.600 +1066 260.500 +1067 81.000 +1068 80.400 +1068 235.600 +1069 96.400 +1069 265.600 +1070 116.400 +1070 165.100 +1071 152.200 +1071 164.600 +1071 184.800 +1072 116.700 +1074 117.800 +1074 164.700 +1074 185.200 +1075 57.800 +1075 186.100 +1075 280.100 +1076 107.100 +1076 127.700 +1076 290.900 +1077 118.000 +1077 144.500 +1077 202.300 +1077 265.700 +1078 219.500 +1079 101.200 +1079 187.300 +1079 219.400 +1080 116.300 +1080 133.200 +1080 148.100 +1080 234.700 +1081 81.500 +1082 92.500 +1082 164.400 +1083 218.400 +1083 291.500 +1084 113.700 +1084 146.000 +1084 219.400 +1084 291.700 +1085 93.800 +1085 164.800 +1085 235.900 +1086 57.400 +1086 164.200 +1086 290.300 +1087 105.800 +1087 288.100 +1088 130.900 +1088 185.300 +1088 217.700 +1091 100.000 +1091 124.800 +1091 164.500 +1091 218.200 +1092 57.200 +1092 184.400 +1093 112.900 +1093 116.900 +1093 164.500 +1094 126.200 +1094 187.300 +1095 144.300 +1096 186.600 +1097 99.900 +1097 106.300 +1097 164.900 +1097 224.500 +1098 164.600 +1098 281.200 +1099 50.100 +1099 99.700 +1099 186.300 +1099 290.900 +1100 50.300 +1100 202.100 +1100 244.800 +1101 164.700 +1101 245.700 +1102 201.200 +1102 281.300 +1103 148.800 +1103 202.600 +1103 265.800 +1104 280.900 +1105 81.900 +1105 108.600 +1106 116.000 +1106 132.900 +1106 265.500 +1106 291.500 +1107 164.800 +1108 291.300 +1109 81.800 +1109 244.400 +1110 99.200 +1110 141.700 +1110 185.700 +1110 258.900 +1111 100.200 +1111 248.300 +1112 55.600 +1112 96.000 +1113 131.300 +1114 124.800 +1115 186.000 +1115 219.700 +1116 102.000 +1116 164.800 +1117 291.100 +1118 101.000 +1118 243.800 +1118 265.300 +1119 105.400 +1119 218.400 +1119 245.200 +1120 150.200 +1121 116.600 +1122 80.600 +1122 140.600 +1122 163.900 +1122 202.200 +1122 288.700 +1123 145.800 +1123 164.500 +1123 219.600 +1124 66.800 +1124 100.100 +1124 107.000 +1124 164.700 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_1_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_1_e_pop.dat new file mode 100644 index 000000000..cf9094203 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_1_e_pop.dat @@ -0,0 +1,2128 @@ +sender time_ms +0 218.000 +0 291.600 +1 69.300 +1 164.500 +2 130.400 +2 291.700 +3 68.600 +3 99.100 +3 108.800 +3 151.200 +3 280.500 +4 118.800 +4 187.100 +4 201.400 +5 184.500 +6 68.200 +6 81.900 +7 68.100 +7 113.500 +7 165.200 +7 228.200 +8 131.700 +8 185.700 +8 280.300 +9 93.400 +9 278.900 +10 58.000 +10 236.200 +11 81.600 +12 236.100 +13 71.200 +13 201.400 +14 93.400 +14 222.000 +15 80.300 +15 128.100 +15 140.400 +16 81.600 +16 185.900 +18 100.300 +18 163.400 +18 290.700 +19 117.400 +19 147.000 +19 202.800 +19 290.700 +20 81.600 +20 132.600 +21 291.300 +22 186.800 +22 219.600 +23 164.700 +23 186.800 +23 201.500 +25 97.300 +25 156.300 +26 157.200 +27 160.300 +27 186.000 +27 218.600 +28 93.600 +28 147.400 +28 184.300 +28 218.000 +29 69.700 +29 116.200 +29 290.900 +30 141.900 +30 291.700 +31 94.100 +31 102.600 +32 220.500 +32 229.600 +34 126.600 +35 70.300 +35 128.500 +36 202.400 +36 244.000 +37 92.500 +37 186.200 +37 289.300 +38 81.300 +38 117.100 +39 68.400 +39 101.000 +39 116.000 +39 165.100 +39 280.200 +40 81.800 +40 186.700 +41 108.300 +41 131.500 +41 290.800 +42 94.000 +43 140.600 +43 259.800 +44 117.100 +44 131.000 +44 280.800 +45 148.400 +45 200.200 +46 117.800 +46 157.300 +46 164.600 +46 244.500 +47 162.000 +47 184.800 +47 219.600 +47 280.400 +48 217.900 +50 186.900 +50 290.100 +51 158.600 +51 235.800 +51 291.200 +52 69.200 +52 164.700 +52 261.300 +52 279.600 +53 164.300 +55 80.600 +55 218.000 +56 93.000 +56 266.400 +57 114.100 +57 187.300 +57 291.300 +58 93.900 +58 291.500 +59 81.700 +59 164.600 +59 227.900 +60 185.900 +61 52.700 +61 147.000 +61 217.800 +62 93.500 +62 243.100 +63 68.200 +63 130.100 +63 261.100 +64 164.300 +65 93.300 +65 187.400 +65 248.300 +65 291.400 +66 128.100 +66 161.800 +67 218.300 +67 260.500 +68 81.600 +68 146.500 +68 244.400 +69 101.200 +69 201.600 +70 108.500 +70 126.300 +71 128.400 +71 218.200 +71 288.700 +72 108.300 +72 164.500 +72 187.000 +72 229.600 +73 164.600 +73 218.200 +73 228.000 +74 93.800 +74 245.100 +75 131.900 +75 236.000 +76 56.600 +76 116.100 +76 131.000 +76 145.000 +76 201.700 +77 92.200 +78 128.000 +78 260.100 +79 152.900 +79 184.900 +79 219.800 +80 97.000 +80 217.800 +81 106.900 +81 132.000 +82 82.000 +82 132.100 +83 92.200 +83 186.400 +84 107.100 +84 259.700 +85 116.000 +85 145.800 +85 229.100 +85 265.800 +85 290.500 +86 102.200 +86 164.800 +86 257.600 +86 281.500 +87 93.200 +87 150.200 +87 244.900 +88 81.700 +88 114.400 +88 164.500 +88 290.800 +89 143.300 +89 185.400 +90 184.300 +90 217.900 +91 230.800 +91 289.100 +92 93.900 +92 117.200 +92 152.500 +93 141.800 +93 243.700 +94 57.800 +94 91.500 +94 144.800 +94 217.500 +95 55.300 +95 80.900 +96 227.200 +96 287.900 +97 125.000 +97 164.700 +97 257.700 +97 290.900 +98 153.400 +99 185.700 +100 102.300 +101 57.300 +101 132.000 +101 244.000 +101 280.000 +102 130.700 +102 151.100 +103 164.200 +104 94.100 +104 153.100 +104 165.100 +105 164.600 +105 200.800 +105 288.500 +107 70.300 +107 186.000 +108 57.500 +108 69.100 +108 102.200 +109 131.800 +109 164.800 +109 290.800 +111 164.200 +111 265.800 +112 68.600 +112 81.700 +112 200.100 +113 69.900 +113 155.700 +113 244.000 +113 261.400 +114 217.700 +114 260.400 +115 96.300 +115 117.100 +115 184.700 +116 116.600 +116 202.000 +116 235.600 +117 82.300 +117 195.000 +117 244.500 +117 291.600 +118 131.700 +118 185.600 +119 58.500 +119 218.400 +120 92.400 +120 117.800 +120 218.800 +121 133.000 +121 144.000 +121 280.200 +123 185.300 +123 288.000 +124 164.700 +124 217.700 +124 235.600 +125 126.600 +125 201.800 +127 69.900 +127 102.600 +127 128.100 +127 140.400 +127 244.200 +128 151.200 +128 289.100 +129 52.600 +129 228.400 +129 244.600 +130 131.400 +130 186.100 +131 82.300 +131 291.200 +132 149.900 +132 185.900 +132 228.300 +133 81.600 +133 164.100 +134 92.600 +134 145.100 +134 201.500 +135 101.600 +135 261.800 +135 284.200 +135 291.200 +136 93.500 +136 130.400 +136 218.200 +137 164.300 +137 202.900 +137 218.100 +137 291.900 +138 146.500 +138 218.400 +138 279.600 +139 106.900 +139 187.100 +140 99.900 +140 126.200 +140 153.000 +140 288.700 +141 101.300 +141 185.700 +141 289.000 +142 125.400 +142 164.300 +142 290.500 +143 102.200 +143 115.200 +143 163.500 +144 68.700 +144 96.700 +144 164.300 +144 259.400 +144 279.700 +145 119.600 +145 280.900 +146 116.500 +147 117.100 +147 131.000 +147 164.700 +148 67.600 +148 128.100 +148 164.800 +148 187.200 +148 265.900 +148 291.200 +149 131.900 +149 185.900 +149 281.500 +150 218.300 +151 151.000 +151 201.300 +152 80.800 +152 164.000 +152 245.300 +153 55.400 +153 93.200 +153 164.700 +154 164.600 +154 218.300 +155 81.000 +155 99.700 +155 129.100 +155 164.300 +155 226.400 +156 164.800 +157 201.700 +157 244.900 +157 290.500 +158 96.200 +158 116.700 +158 218.000 +158 290.400 +159 69.800 +159 115.800 +159 164.500 +159 200.400 +160 67.500 +160 291.200 +162 67.600 +162 130.200 +162 165.200 +162 185.800 +163 164.100 +163 229.400 +163 266.000 +164 117.400 +164 263.400 +164 278.600 +165 140.500 +165 200.100 +166 96.300 +166 117.100 +168 127.400 +168 165.100 +168 228.500 +168 291.800 +169 187.000 +169 219.400 +170 102.500 +170 116.300 +170 164.800 +170 202.300 +170 279.100 +170 289.200 +171 259.600 +172 159.900 +172 185.500 +173 80.400 +173 187.100 +173 245.900 +174 117.400 +175 164.500 +175 185.200 +175 216.500 +177 164.000 +178 187.100 +178 265.700 +179 164.400 +180 243.800 +181 50.100 +181 130.700 +182 81.500 +182 140.000 +182 164.600 +182 218.400 +182 244.900 +182 265.800 +182 290.600 +183 106.800 +184 147.300 +184 187.100 +184 248.800 +185 94.100 +185 260.200 +185 279.700 +186 50.200 +186 96.800 +186 117.200 +186 186.100 +186 236.100 +186 280.000 +187 184.800 +188 57.900 +188 92.800 +188 106.700 +188 131.300 +188 147.500 +188 216.800 +188 280.300 +189 56.500 +189 164.900 +189 280.000 +190 101.700 +191 105.600 +191 266.000 +192 125.800 +192 218.500 +192 279.900 +193 133.600 +193 242.900 +193 266.100 +194 50.200 +194 244.900 +195 94.000 +195 131.800 +195 185.700 +195 288.800 +197 185.300 +198 218.800 +198 281.100 +199 127.500 +199 146.400 +200 186.200 +201 132.000 +201 202.900 +202 81.500 +202 266.100 +203 148.900 +203 163.400 +204 93.500 +204 202.100 +204 280.000 +206 96.400 +207 144.900 +208 65.600 +208 82.100 +208 114.200 +208 201.800 +208 289.300 +209 279.200 +210 126.300 +210 164.300 +211 142.300 +212 81.600 +212 109.000 +212 230.500 +213 101.200 +214 133.600 +215 92.900 +215 260.600 +215 291.900 +216 55.600 +216 164.300 +216 219.500 +216 235.200 +217 162.900 +217 265.800 +218 81.700 +218 101.400 +218 126.200 +218 148.800 +219 244.400 +219 291.900 +220 93.900 +220 116.300 +220 128.000 +221 50.800 +221 70.600 +221 265.800 +222 50.200 +222 81.700 +222 117.100 +222 290.500 +223 128.500 +223 152.100 +224 164.700 +225 108.100 +225 184.800 +225 219.400 +226 101.700 +226 140.000 +226 148.500 +226 185.400 +226 228.100 +227 81.900 +228 127.300 +229 143.600 +229 194.400 +229 229.400 +230 164.800 +231 59.200 +231 165.000 +232 98.100 +232 115.500 +232 141.100 +232 164.500 +232 187.000 +232 260.200 +233 83.000 +234 92.600 +234 102.300 +234 164.600 +234 218.400 +235 50.700 +235 265.900 +236 164.100 +236 245.200 +236 291.800 +237 107.600 +237 202.700 +238 164.300 +238 200.800 +239 96.400 +240 145.000 +240 185.600 +241 93.400 +241 127.500 +241 165.300 +242 114.900 +242 185.600 +243 92.700 +243 116.400 +245 57.700 +245 115.500 +245 145.300 +245 219.700 +245 255.300 +245 279.200 +246 81.600 +246 290.700 +247 291.200 +248 69.600 +248 124.600 +248 164.100 +248 201.200 +248 244.000 +248 288.300 +249 81.300 +249 131.600 +249 164.800 +249 278.000 +250 81.400 +250 114.200 +250 153.600 +250 187.500 +250 226.300 +251 217.100 +251 291.400 +252 69.200 +252 148.300 +252 187.200 +253 145.600 +254 280.500 +255 116.700 +255 244.700 +255 280.800 +256 93.300 +256 144.400 +256 201.800 +256 248.400 +257 80.700 +257 144.400 +257 280.000 +258 279.900 +259 96.000 +259 132.200 +259 291.200 +260 146.300 +260 198.400 +260 219.100 +261 81.700 +261 289.400 +262 291.200 +263 82.100 +263 187.200 +264 290.500 +265 93.000 +265 127.700 +266 66.500 +266 114.000 +266 145.800 +266 289.000 +267 217.800 +268 97.100 +268 147.700 +268 290.600 +269 119.200 +269 164.800 +269 227.900 +270 146.500 +271 218.200 +272 82.800 +272 159.200 +272 185.800 +272 223.200 +273 92.600 +274 108.000 +274 126.400 +274 164.400 +274 217.200 +274 266.000 +275 164.300 +275 281.400 +276 80.800 +276 123.700 +276 164.800 +276 291.600 +278 58.400 +278 164.400 +279 116.300 +279 184.900 +280 55.100 +280 266.100 +281 96.100 +282 93.100 +282 165.200 +282 260.200 +283 84.900 +283 164.700 +283 186.200 +283 258.300 +284 163.500 +285 55.700 +286 80.300 +286 152.200 +286 197.600 +287 127.400 +287 256.400 +288 144.600 +288 243.400 +289 105.400 +290 141.100 +291 67.500 +292 200.800 +293 127.100 +294 163.600 +294 266.000 +294 280.100 +295 115.900 +295 264.100 +296 118.600 +296 279.800 +297 185.700 +297 280.200 +298 142.600 +298 164.400 +298 266.000 +299 50.200 +299 131.200 +300 69.600 +300 94.000 +300 201.000 +301 65.800 +301 92.800 +301 290.600 +302 80.700 +302 116.100 +302 150.300 +302 244.800 +303 107.000 +303 184.800 +303 218.200 +304 117.500 +305 100.000 +305 202.000 +306 164.800 +307 107.700 +308 146.900 +309 164.500 +310 96.000 +310 185.600 +311 68.000 +311 218.300 +312 128.700 +312 164.600 +312 201.500 +313 92.300 +313 289.300 +314 219.600 +314 291.700 +315 141.300 +315 216.800 +316 164.200 +316 187.100 +316 244.800 +317 101.800 +317 127.500 +317 146.400 +317 216.600 +318 222.200 +319 290.800 +320 164.400 +320 230.700 +321 150.500 +321 217.800 +322 259.600 +323 67.900 +324 69.200 +324 81.700 +324 140.600 +324 218.500 +325 200.600 +326 185.900 +326 218.200 +327 186.900 +327 219.900 +327 291.500 +328 81.900 +328 117.600 +328 194.800 +329 69.700 +329 117.100 +329 201.700 +330 187.100 +330 194.800 +330 235.900 +331 100.000 +331 153.000 +331 264.300 +332 58.300 +332 187.200 +333 67.900 +333 102.100 +333 164.700 +333 226.500 +333 264.500 +334 94.100 +334 218.300 +335 114.700 +335 186.000 +335 202.000 +335 218.500 +335 244.900 +335 266.000 +336 164.900 +336 185.800 +336 280.500 +337 105.100 +337 126.700 +338 186.500 +338 212.300 +338 229.500 +339 69.400 +339 116.600 +339 146.300 +339 291.100 +340 61.900 +340 128.500 +340 165.000 +340 203.200 +340 215.100 +340 235.700 +340 291.200 +341 58.000 +341 144.100 +342 218.800 +344 92.800 +344 185.100 +346 101.400 +346 290.800 +347 217.500 +348 280.900 +349 291.700 +350 81.300 +350 96.400 +350 141.400 +350 219.200 +350 290.600 +351 164.400 +351 290.400 +352 107.300 +352 116.800 +352 184.600 +352 279.200 +353 68.100 +353 127.200 +353 218.100 +353 227.500 +353 247.600 +354 115.700 +354 141.300 +354 291.300 +355 92.400 +355 102.100 +355 187.100 +355 258.900 +356 113.800 +356 187.200 +356 266.100 +357 125.800 +358 79.500 +358 164.600 +359 141.000 +359 185.900 +360 244.900 +361 131.900 +362 81.500 +362 97.100 +362 102.100 +362 141.700 +363 82.000 +363 130.500 +363 186.100 +364 114.900 +364 144.800 +364 185.600 +364 226.300 +365 93.100 +365 236.200 +365 260.300 +366 219.000 +367 186.000 +367 219.600 +368 99.100 +368 260.600 +370 56.600 +371 93.600 +372 164.700 +372 201.800 +372 234.900 +372 291.200 +373 93.200 +373 144.300 +373 262.800 +374 164.400 +374 265.500 +374 291.700 +375 131.600 +375 201.400 +375 265.800 +375 288.800 +376 219.600 +376 231.000 +376 245.600 +376 287.800 +377 70.300 +377 116.900 +377 140.700 +378 123.800 +378 186.900 +379 164.400 +379 287.700 +380 162.200 +380 218.000 +380 277.200 +381 164.900 +381 291.800 +382 82.200 +382 106.800 +384 68.100 +384 153.700 +384 164.200 +384 218.500 +385 59.100 +385 93.000 +386 187.200 +388 81.000 +388 147.700 +388 164.200 +388 266.300 +388 290.500 +389 96.300 +389 201.100 +389 265.900 +390 117.400 +390 291.800 +391 93.100 +391 164.200 +391 217.900 +391 291.500 +392 144.800 +392 164.400 +392 260.700 +393 164.600 +393 218.000 +393 256.600 +394 100.000 +394 184.700 +394 245.200 +395 164.100 +396 117.700 +396 187.000 +397 81.400 +397 218.600 +397 279.300 +398 96.700 +398 164.600 +398 260.100 +399 70.500 +401 230.900 +402 187.000 +403 69.900 +403 105.300 +403 125.500 +403 164.900 +403 260.300 +404 164.900 +405 164.400 +406 81.700 +406 114.600 +406 265.700 +407 217.300 +409 102.300 +409 291.700 +410 200.100 +410 247.200 +411 153.700 +411 279.100 +412 116.900 +413 80.800 +413 107.700 +413 164.600 +413 200.900 +414 103.400 +414 164.600 +414 281.500 +415 83.000 +415 142.200 +415 228.800 +416 62.000 +416 130.400 +418 290.900 +419 117.300 +419 202.300 +419 265.600 +420 115.800 +420 149.900 +420 185.700 +420 217.800 +420 259.300 +421 125.000 +422 65.200 +422 153.100 +422 244.900 +423 67.600 +423 96.000 +423 164.700 +423 290.500 +424 227.600 +424 291.800 +425 126.400 +425 164.800 +426 116.600 +426 185.000 +426 289.200 +427 81.900 +427 107.000 +427 132.700 +427 186.300 +428 68.200 +428 266.200 +429 81.700 +430 81.900 +430 152.900 +430 165.600 +431 82.900 +431 115.700 +431 247.200 +432 218.600 +432 235.300 +433 56.700 +433 219.700 +434 126.800 +434 218.100 +434 242.200 +436 164.600 +437 115.500 +438 141.500 +438 149.900 +439 200.100 +439 217.200 +440 98.300 +441 244.900 +441 281.000 +442 114.400 +442 146.200 +442 227.300 +442 265.100 +443 101.900 +443 218.100 +444 101.100 +444 219.200 +445 97.600 +445 183.000 +445 217.900 +445 265.600 +446 117.900 +446 236.500 +447 114.600 +448 116.900 +448 163.700 +448 291.300 +449 217.600 +449 289.400 +450 101.100 +451 69.100 +452 99.700 +452 116.800 +452 185.000 +453 115.800 +453 165.000 +454 55.300 +454 68.300 +454 164.800 +455 56.600 +455 141.600 +455 218.900 +455 265.800 +456 54.400 +456 80.800 +456 105.500 +456 117.600 +456 164.700 +456 219.700 +457 185.000 +457 248.300 +457 290.900 +458 164.700 +458 279.500 +459 115.700 +459 131.500 +460 146.100 +460 247.300 +461 93.200 +461 184.800 +461 261.100 +461 265.900 +462 164.600 +462 232.700 +462 266.200 +464 81.800 +464 114.300 +464 163.500 +464 185.900 +464 264.300 +464 291.100 +465 184.800 +465 201.100 +465 230.800 +466 244.100 +467 106.800 +467 144.400 +468 82.800 +468 185.800 +468 290.700 +469 107.400 +469 200.200 +470 93.900 +470 146.400 +470 265.800 +471 163.600 +471 290.500 +472 186.400 +473 52.600 +473 68.100 +473 105.400 +474 107.600 +474 194.500 +474 266.400 +475 127.100 +476 145.200 +477 128.000 +478 117.300 +478 200.800 +478 218.400 +479 147.400 +479 165.300 +479 265.400 +480 144.100 +480 218.800 +481 93.700 +481 146.100 +481 164.700 +482 66.700 +482 164.400 +483 164.900 +484 71.000 +484 264.900 +485 128.700 +485 185.100 +485 291.200 +486 67.800 +486 102.200 +486 164.700 +486 187.000 +486 290.200 +487 131.600 +488 126.300 +489 164.300 +489 292.100 +490 82.100 +490 183.200 +490 190.400 +491 101.200 +491 148.000 +491 218.100 +492 82.900 +492 116.900 +492 152.600 +492 164.700 +492 289.300 +493 186.000 +493 219.400 +493 278.600 +494 187.200 +494 245.200 +496 128.000 +496 152.600 +497 102.100 +497 131.100 +498 117.000 +498 279.800 +499 116.100 +499 153.500 +499 198.600 +500 50.300 +500 202.200 +501 162.200 +501 265.900 +501 286.600 +502 78.500 +502 144.400 +502 227.800 +502 266.000 +503 81.200 +503 164.500 +504 102.000 +504 142.200 +504 265.700 +505 130.000 +505 185.600 +505 219.300 +506 124.000 +506 195.300 +507 132.800 +507 144.600 +508 127.400 +508 163.500 +508 186.100 +509 101.200 +509 164.500 +509 185.300 +510 164.700 +510 265.700 +511 64.600 +511 114.500 +512 244.100 +512 260.600 +513 164.700 +514 164.900 +515 143.300 +516 76.200 +516 119.700 +516 217.800 +516 291.600 +517 61.800 +517 152.400 +519 288.900 +520 93.700 +520 158.500 +521 103.100 +521 132.100 +522 92.800 +522 127.900 +523 67.700 +523 101.100 +523 117.000 +525 57.800 +525 164.500 +525 280.100 +527 80.100 +527 117.700 +528 218.400 +528 290.900 +529 190.000 +530 67.800 +531 164.500 +532 256.800 +532 288.400 +533 63.100 +533 141.500 +533 244.300 +533 289.100 +534 81.100 +534 96.300 +534 260.300 +534 289.100 +535 92.800 +535 128.900 +535 152.800 +535 215.500 +535 290.700 +536 93.100 +536 116.600 +538 117.100 +538 201.500 +538 247.200 +539 56.900 +539 131.900 +540 51.500 +540 102.300 +540 126.100 +541 93.000 +541 101.300 +541 132.900 +541 183.800 +542 67.500 +542 186.000 +542 280.800 +543 93.200 +543 131.000 +543 185.500 +544 194.300 +544 280.500 +545 107.100 +545 163.900 +545 265.900 +546 131.300 +546 219.500 +547 165.100 +547 228.700 +548 82.900 +548 187.100 +548 218.500 +548 265.800 +548 280.000 +549 132.300 +549 218.600 +550 110.400 +550 141.800 +550 245.400 +551 101.400 +551 144.600 +551 197.900 +552 145.000 +552 289.300 +553 186.100 +553 281.100 +554 80.900 +554 141.800 +554 187.300 +555 55.900 +555 128.500 +555 150.500 +555 278.000 +556 163.900 +556 185.700 +556 227.200 +556 290.900 +557 141.200 +557 186.000 +557 291.100 +558 92.700 +558 132.000 +558 202.200 +558 281.400 +559 185.900 +560 164.400 +560 291.400 +561 69.800 +561 96.200 +561 163.800 +562 165.500 +562 258.500 +563 89.100 +563 229.800 +564 187.300 +565 82.400 +565 126.000 +565 201.300 +565 235.300 +566 145.100 +567 92.700 +567 130.100 +567 145.100 +567 164.800 +568 244.200 +570 69.800 +570 164.700 +570 260.300 +570 289.900 +571 144.100 +571 279.100 +572 164.200 +572 195.000 +573 101.900 +573 164.400 +573 291.400 +574 93.500 +574 247.400 +574 280.200 +575 125.900 +575 164.500 +576 164.100 +577 93.700 +577 202.700 +578 102.200 +578 194.800 +578 290.600 +579 117.700 +579 185.900 +579 243.600 +580 284.700 +581 164.800 +581 266.200 +582 94.000 +582 108.400 +583 99.900 +584 96.300 +584 145.400 +584 156.700 +584 219.400 +585 188.400 +586 186.400 +586 280.000 +587 180.700 +587 244.500 +588 100.900 +588 202.400 +588 219.100 +589 130.700 +589 184.900 +590 62.200 +590 144.700 +590 219.500 +591 92.700 +591 117.200 +591 231.200 +591 291.600 +592 113.300 +592 280.700 +593 185.800 +593 219.800 +594 57.400 +594 164.800 +595 100.200 +595 116.400 +595 260.200 +596 69.700 +596 93.900 +596 117.200 +596 218.200 +597 69.600 +597 99.300 +597 122.600 +597 131.700 +598 102.100 +598 156.300 +598 219.500 +600 99.000 +600 116.500 +601 132.000 +601 288.700 +602 99.900 +602 144.200 +602 164.600 +602 280.700 +602 292.100 +603 69.500 +603 115.400 +603 218.100 +603 235.800 +603 289.100 +604 95.800 +604 256.600 +604 280.600 +605 141.400 +605 165.000 +605 202.900 +605 245.700 +605 288.800 +606 93.500 +606 165.200 +606 185.600 +607 93.900 +607 164.200 +607 234.700 +607 291.700 +608 68.400 +608 144.200 +608 185.300 +609 130.800 +609 243.200 +609 289.400 +610 91.700 +610 116.300 +610 245.200 +611 116.000 +611 163.700 +612 266.000 +613 144.600 +613 229.000 +614 81.800 +615 89.000 +615 132.300 +615 281.200 +615 290.500 +616 81.600 +616 184.900 +616 244.400 +616 280.600 +616 291.600 +619 116.100 +619 186.400 +619 265.700 +620 243.100 +620 280.600 +621 260.800 +622 93.100 +622 291.700 +623 245.700 +625 50.700 +625 82.000 +625 217.700 +625 264.500 +626 102.700 +626 164.300 +626 241.300 +626 265.600 +627 56.600 +627 130.100 +628 144.500 +628 163.900 +631 93.300 +631 265.800 +631 290.600 +632 58.500 +632 106.300 +632 116.400 +632 153.900 +632 235.000 +633 218.200 +633 288.500 +634 288.400 +635 81.000 +635 107.800 +635 144.100 +636 93.600 +636 231.000 +636 258.600 +637 67.200 +637 164.500 +637 186.000 +637 219.700 +637 244.800 +637 283.400 +638 80.100 +638 144.000 +638 183.900 +638 227.300 +638 290.500 +639 185.600 +639 266.000 +640 185.700 +640 275.200 +642 217.700 +643 142.200 +643 202.400 +644 260.400 +644 290.900 +645 161.800 +645 291.900 +646 202.900 +647 146.500 +648 97.600 +648 163.700 +649 164.400 +649 219.200 +649 291.100 +650 92.800 +650 243.900 +650 287.800 +651 51.100 +651 106.900 +651 218.600 +651 257.500 +651 290.500 +652 67.300 +652 235.200 +654 164.600 +654 187.100 +655 69.600 +655 101.500 +655 147.100 +655 260.500 +655 279.600 +656 65.800 +656 218.700 +657 266.300 +657 291.500 +658 219.700 +660 98.700 +660 128.700 +660 217.800 +660 280.800 +661 185.200 +662 91.700 +662 164.500 +662 266.200 +663 186.100 +664 201.900 +664 247.300 +665 56.500 +665 81.900 +665 146.400 +666 115.400 +666 128.900 +666 163.900 +667 57.900 +667 165.300 +668 92.800 +668 117.100 +668 144.700 +668 184.200 +669 164.400 +670 81.700 +670 148.700 +670 216.800 +670 256.000 +671 128.400 +671 187.000 +671 286.900 +672 56.000 +672 259.700 +673 146.200 +674 126.200 +675 94.000 +675 146.800 +675 202.400 +675 245.200 +676 82.800 +676 96.600 +676 130.800 +676 165.000 +676 217.900 +676 288.800 +677 164.600 +678 71.700 +678 81.600 +678 114.500 +678 186.800 +678 288.000 +679 230.700 +679 291.500 +681 130.200 +682 69.700 +682 90.100 +682 186.100 +683 186.700 +684 79.200 +685 164.300 +685 248.500 +686 81.800 +686 187.200 +686 288.500 +687 281.500 +688 92.400 +688 266.200 +689 81.000 +689 223.900 +690 57.800 +690 81.600 +690 97.500 +690 117.300 +690 129.000 +690 153.200 +691 218.200 +692 82.000 +692 132.800 +692 184.800 +692 237.400 +692 263.900 +693 97.100 +693 143.900 +693 165.300 +694 228.500 +694 280.600 +695 99.800 +695 217.000 +695 279.200 +696 185.600 +697 80.700 +697 159.700 +698 69.700 +698 186.100 +698 219.300 +699 285.500 +700 81.300 +700 104.400 +700 150.000 +701 80.600 +703 81.900 +703 144.300 +704 114.300 +704 127.900 +704 185.300 +704 219.400 +705 265.900 +707 91.700 +707 218.300 +708 98.700 +708 117.500 +708 281.100 +709 71.400 +709 81.500 +710 69.200 +710 117.600 +710 147.000 +710 164.700 +710 218.200 +711 132.900 +711 219.400 +712 80.300 +712 164.800 +712 245.800 +713 70.800 +714 164.700 +714 218.300 +715 244.500 +716 80.300 +716 162.700 +716 186.200 +716 229.000 +717 253.800 +718 145.600 +718 219.500 +719 146.000 +719 260.600 +720 116.900 +720 164.600 +720 200.400 +720 235.400 +720 255.100 +720 290.700 +721 128.200 +721 245.200 +721 290.900 +723 184.400 +724 186.900 +724 218.000 +726 153.500 +726 164.800 +727 107.700 +728 63.100 +728 80.600 +728 164.600 +728 219.800 +728 260.600 +728 290.800 +729 185.700 +730 80.800 +731 285.500 +731 291.700 +732 244.300 +733 81.900 +733 245.400 +734 81.100 +734 145.100 +734 260.400 +735 162.300 +735 186.700 +736 185.200 +736 288.600 +737 100.400 +738 132.200 +739 116.700 +740 130.400 +740 260.100 +741 164.600 +741 217.300 +741 265.900 +742 81.100 +742 115.900 +742 184.100 +742 265.900 +742 288.000 +743 79.200 +743 218.300 +744 164.700 +744 281.400 +745 101.300 +745 260.600 +745 280.000 +746 57.500 +746 70.800 +746 276.800 +747 101.200 +747 158.100 +748 116.600 +748 132.300 +749 61.100 +750 70.000 +750 164.600 +750 217.600 +751 127.100 +751 164.100 +751 203.000 +752 81.600 +752 165.000 +752 258.500 +753 69.300 +754 88.500 +754 164.400 +754 200.800 +754 290.600 +755 80.500 +755 114.000 +755 164.900 +755 201.300 +755 279.900 +756 56.900 +756 164.200 +756 279.900 +757 93.900 +757 164.600 +757 277.500 +758 201.600 +758 244.800 +759 101.400 +759 116.400 +759 164.500 +759 183.900 +759 218.700 +759 276.900 +760 67.400 +760 219.400 +760 291.400 +761 92.900 +761 291.400 +763 127.800 +763 186.100 +764 50.300 +764 127.200 +764 144.300 +764 185.800 +764 260.400 +765 69.800 +765 164.900 +765 202.100 +765 290.600 +766 139.600 +766 201.100 +767 185.200 +767 231.000 +767 290.800 +768 225.700 +769 70.700 +769 164.700 +770 164.200 +770 259.700 +771 260.600 +773 101.400 +773 158.600 +775 164.000 +775 187.100 +776 164.500 +776 184.800 +777 56.600 +777 82.200 +777 115.700 +777 280.600 +778 101.200 +778 145.500 +778 185.700 +779 117.400 +779 185.700 +781 96.200 +781 101.100 +781 131.800 +781 144.600 +781 164.400 +782 115.400 +782 144.100 +783 57.700 +783 128.600 +783 164.200 +784 164.700 +784 202.300 +784 245.200 +785 69.400 +785 116.000 +785 213.300 +786 147.400 +786 186.700 +786 218.000 +787 126.500 +787 265.400 +788 70.000 +788 146.000 +788 165.100 +789 245.300 +790 69.200 +790 101.300 +790 156.600 +791 93.800 +792 93.800 +792 148.500 +792 164.700 +792 202.200 +792 259.500 +793 106.900 +793 184.500 +793 290.500 +795 91.200 +795 116.000 +795 184.400 +795 265.100 +797 144.900 +798 100.300 +798 164.200 +798 289.400 +799 92.700 +799 110.900 +800 187.000 +800 288.800 +801 201.100 +801 291.400 +802 130.500 +802 164.500 +802 291.700 +803 55.600 +803 92.100 +803 219.700 +804 279.000 +806 97.200 +806 194.600 +806 244.600 +806 290.400 +807 164.200 +807 184.300 +807 290.700 +808 82.000 +808 149.100 +808 164.700 +808 185.800 +809 101.600 +809 116.400 +809 150.100 +809 163.700 +809 220.700 +810 88.800 +811 66.400 +811 116.800 +811 244.800 +811 280.100 +812 66.200 +812 107.600 +812 162.100 +812 255.700 +812 291.600 +813 229.500 +814 113.800 +815 96.200 +815 243.900 +816 66.500 +816 219.600 +817 67.600 +817 82.900 +817 131.300 +817 185.800 +817 227.700 +817 274.100 +818 55.900 +818 91.700 +818 117.200 +818 289.400 +820 147.100 +820 184.900 +820 291.900 +821 54.500 +821 128.600 +821 164.300 +821 244.100 +822 101.800 +823 103.600 +824 93.900 +824 218.600 +825 93.200 +825 164.600 +825 230.000 +825 260.200 +826 147.000 +826 164.300 +826 187.400 +826 201.900 +826 280.000 +827 82.300 +827 141.800 +827 219.300 +828 218.300 +828 245.200 +828 265.800 +830 116.700 +830 153.600 +830 165.700 +830 265.800 +831 244.500 +832 71.800 +832 81.900 +832 265.700 +832 291.400 +833 184.400 +834 93.200 +834 148.000 +834 164.700 +834 186.900 +835 96.100 +835 132.300 +835 145.300 +835 185.000 +836 129.900 +836 164.700 +836 217.900 +837 102.100 +837 280.800 +838 143.900 +838 280.000 +839 106.700 +839 162.200 +839 266.100 +840 117.000 +840 202.200 +841 229.700 +842 163.500 +842 184.800 +843 164.700 +843 266.000 +844 225.900 +844 243.800 +845 218.400 +846 96.700 +846 128.400 +846 187.300 +846 245.100 +846 266.000 +848 50.600 +848 162.800 +848 247.200 +848 260.000 +849 164.100 +849 279.100 +849 291.600 +850 220.900 +850 244.900 +851 82.200 +851 127.900 +851 266.200 +852 106.800 +852 291.400 +853 117.200 +853 131.000 +853 185.700 +853 229.700 +853 291.300 +854 96.500 +854 112.900 +855 144.100 +855 218.500 +856 101.600 +856 163.500 +856 218.300 +857 82.200 +857 281.300 +858 75.900 +858 186.000 +858 218.500 +859 124.500 +859 165.000 +859 266.200 +860 93.100 +860 164.500 +860 199.900 +860 279.500 +861 279.300 +861 291.800 +863 57.900 +863 164.400 +863 265.000 +864 164.300 +864 201.700 +864 279.800 +865 93.900 +865 265.900 +866 99.700 +866 185.500 +867 70.600 +867 281.300 +868 67.900 +868 281.300 +869 67.900 +869 165.000 +869 218.000 +870 82.700 +870 201.500 +870 219.700 +871 82.000 +871 291.200 +872 81.900 +872 117.400 +872 266.200 +873 116.100 +873 255.700 +874 228.000 +875 228.700 +875 251.900 +876 236.100 +877 101.200 +877 219.700 +879 80.600 +879 256.800 +879 289.200 +880 106.900 +880 219.600 +881 164.700 +881 201.300 +881 244.800 +882 165.500 +882 219.300 +883 50.200 +883 102.200 +883 131.900 +884 80.400 +884 163.700 +884 200.100 +884 219.400 +884 290.400 +885 184.000 +886 96.700 +886 126.100 +887 108.000 +888 70.100 +888 218.600 +889 228.600 +890 116.400 +890 130.000 +890 164.600 +891 92.400 +891 153.500 +891 186.100 +892 260.100 +893 124.200 +893 186.700 +894 81.600 +894 117.100 +894 164.000 +895 107.200 +895 117.400 +895 165.100 +895 291.500 +896 69.500 +896 117.000 +896 245.400 +896 291.900 +897 119.100 +897 185.800 +897 218.200 +898 69.000 +898 200.600 +898 290.100 +899 218.100 +899 281.000 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_1_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_1_i_pop.dat new file mode 100644 index 000000000..da4f35016 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_1_i_pop.dat @@ -0,0 +1,522 @@ +sender time_ms +900 116.400 +900 162.000 +901 93.500 +901 160.500 +902 265.800 +902 290.500 +903 96.300 +903 113.100 +903 164.300 +903 201.700 +904 57.700 +904 266.000 +905 115.900 +905 164.600 +905 200.600 +906 202.000 +906 279.700 +907 235.800 +908 80.900 +908 164.700 +909 141.400 +909 227.100 +910 94.400 +910 164.600 +910 217.400 +910 236.500 +911 58.400 +911 266.400 +912 81.100 +912 101.700 +913 128.700 +913 164.700 +914 59.700 +914 108.100 +914 277.700 +914 291.800 +915 82.200 +916 130.400 +917 113.300 +917 164.600 +917 247.100 +917 291.100 +918 81.900 +918 219.700 +919 182.900 +919 219.600 +920 57.800 +920 165.000 +922 50.600 +922 144.400 +922 164.200 +922 218.500 +922 287.800 +923 81.400 +923 160.100 +923 202.400 +923 228.200 +924 164.100 +924 186.500 +924 217.300 +924 264.700 +925 66.400 +925 80.800 +925 291.500 +926 164.800 +926 202.000 +927 158.400 +927 186.000 +927 244.200 +928 152.300 +928 202.100 +929 148.500 +929 279.600 +930 164.600 +932 150.200 +932 278.400 +933 113.800 +933 203.000 +933 265.100 +934 51.700 +934 184.800 +935 81.900 +935 102.000 +935 202.800 +936 96.200 +936 146.700 +938 92.800 +938 280.100 +939 145.700 +939 194.000 +939 220.500 +940 163.800 +940 279.800 +941 130.100 +942 69.400 +942 117.800 +942 280.200 +943 116.500 +943 219.300 +944 184.400 +945 185.200 +946 289.100 +947 68.100 +947 148.800 +947 218.400 +947 229.900 +947 266.000 +948 164.800 +948 279.500 +949 97.500 +949 202.200 +950 70.400 +950 184.600 +950 217.800 +951 147.500 +951 201.100 +951 265.400 +952 116.700 +952 131.900 +952 164.400 +952 198.600 +953 69.000 +954 101.200 +955 99.700 +955 164.800 +955 218.300 +955 279.100 +956 116.600 +956 265.800 +957 101.700 +957 185.200 +958 81.400 +959 164.400 +959 203.000 +959 219.600 +959 291.600 +960 132.900 +960 164.900 +961 126.300 +961 228.500 +962 143.700 +963 107.400 +963 164.200 +963 201.800 +964 164.200 +964 187.200 +964 218.700 +965 96.300 +965 218.200 +965 280.500 +966 81.200 +966 186.000 +966 244.400 +966 289.900 +967 58.000 +967 96.700 +968 145.000 +969 281.200 +970 116.900 +971 98.700 +972 244.500 +972 265.500 +972 291.200 +973 152.600 +973 219.400 +973 244.200 +973 291.600 +974 134.500 +975 163.800 +975 200.000 +975 248.200 +975 265.800 +976 69.500 +976 93.100 +976 126.400 +976 185.000 +976 202.100 +976 218.100 +977 164.500 +978 279.300 +979 82.400 +979 143.600 +979 235.900 +979 260.300 +980 101.900 +980 218.200 +981 107.100 +981 140.200 +981 163.900 +981 265.900 +981 289.700 +982 93.200 +982 127.300 +982 164.600 +983 164.200 +984 155.200 +984 165.000 +984 289.300 +985 236.400 +986 116.500 +986 281.900 +987 164.400 +987 288.400 +988 116.200 +988 260.200 +989 131.200 +989 164.600 +989 201.100 +989 260.400 +990 244.700 +991 80.900 +991 140.400 +991 164.700 +991 186.300 +991 219.100 +991 265.500 +991 291.300 +992 101.200 +992 264.900 +993 101.200 +993 144.600 +995 162.400 +996 58.300 +996 165.300 +996 280.000 +997 93.300 +997 200.900 +998 82.100 +998 115.800 +999 102.600 +999 266.200 +1001 81.600 +1002 81.700 +1002 152.100 +1002 266.000 +1003 52.100 +1003 93.800 +1003 164.900 +1003 228.100 +1004 134.300 +1004 258.800 +1004 288.700 +1005 218.300 +1006 185.800 +1006 244.900 +1007 164.200 +1008 247.400 +1009 164.400 +1009 258.200 +1010 106.800 +1010 164.200 +1010 245.500 +1010 279.700 +1011 81.800 +1011 93.500 +1011 165.400 +1011 237.100 +1012 290.800 +1013 279.700 +1014 98.600 +1014 117.700 +1014 165.400 +1015 164.200 +1016 116.700 +1017 121.200 +1017 164.000 +1018 81.500 +1018 256.300 +1018 277.700 +1019 67.800 +1019 99.000 +1019 244.100 +1019 290.300 +1020 69.800 +1020 101.700 +1020 219.300 +1020 290.200 +1021 101.400 +1021 201.700 +1022 82.300 +1022 116.100 +1022 164.600 +1022 290.900 +1023 95.900 +1023 131.500 +1023 164.700 +1023 265.700 +1024 99.400 +1024 202.200 +1024 244.400 +1025 202.700 +1025 266.000 +1026 58.200 +1026 217.900 +1026 280.800 +1027 96.400 +1027 277.300 +1028 57.900 +1028 68.300 +1028 201.400 +1029 93.700 +1029 108.700 +1029 186.000 +1030 245.100 +1031 69.300 +1032 131.900 +1032 184.400 +1032 199.600 +1032 291.600 +1033 69.700 +1033 92.300 +1033 159.200 +1033 184.900 +1033 247.100 +1033 281.300 +1035 115.200 +1036 70.700 +1036 101.100 +1036 127.200 +1037 219.700 +1038 93.000 +1038 117.000 +1038 219.600 +1039 187.100 +1039 280.100 +1040 184.600 +1041 114.000 +1041 235.200 +1041 289.700 +1042 70.200 +1042 288.400 +1043 93.300 +1043 200.800 +1044 164.600 +1044 220.000 +1044 246.800 +1046 69.600 +1046 187.200 +1046 247.700 +1047 218.600 +1047 235.000 +1047 245.200 +1048 164.200 +1048 265.400 +1049 127.700 +1049 141.100 +1050 80.800 +1050 96.200 +1050 218.600 +1051 185.000 +1051 290.600 +1052 163.800 +1052 202.200 +1053 57.900 +1053 148.900 +1053 184.200 +1053 201.900 +1053 280.600 +1054 115.800 +1055 153.400 +1055 164.400 +1055 256.800 +1055 290.600 +1056 117.700 +1057 164.000 +1057 185.300 +1057 227.100 +1058 148.800 +1058 185.200 +1059 259.300 +1060 117.100 +1060 230.900 +1060 244.600 +1061 70.700 +1061 106.600 +1061 141.300 +1061 218.100 +1062 70.200 +1062 290.500 +1063 117.400 +1063 185.100 +1064 131.500 +1065 116.800 +1066 163.700 +1066 185.900 +1066 266.000 +1066 288.500 +1067 93.300 +1068 82.500 +1069 66.600 +1069 164.700 +1069 200.200 +1069 235.800 +1070 116.400 +1070 145.000 +1070 164.800 +1070 186.900 +1071 69.100 +1071 117.000 +1071 164.600 +1071 289.100 +1072 117.400 +1074 93.300 +1074 150.000 +1074 185.800 +1074 218.000 +1075 164.800 +1075 217.000 +1075 288.400 +1076 163.100 +1078 68.400 +1078 116.100 +1078 164.700 +1078 266.200 +1079 116.900 +1080 105.200 +1080 185.600 +1081 113.900 +1081 144.600 +1081 158.600 +1081 280.700 +1082 89.300 +1082 127.900 +1082 153.200 +1082 218.100 +1083 152.100 +1085 81.600 +1085 117.400 +1085 257.200 +1086 164.700 +1086 201.600 +1086 236.100 +1087 58.000 +1087 132.300 +1087 146.100 +1087 228.700 +1087 256.300 +1088 93.800 +1088 164.400 +1088 217.700 +1088 265.600 +1088 291.200 +1089 152.000 +1090 51.100 +1090 256.200 +1091 144.700 +1091 228.400 +1091 244.700 +1092 153.400 +1092 201.800 +1093 200.200 +1093 243.700 +1095 100.500 +1095 246.700 +1096 56.200 +1097 81.600 +1097 266.100 +1098 152.400 +1098 290.600 +1099 164.300 +1100 116.200 +1100 257.800 +1101 106.800 +1101 127.900 +1101 229.400 +1102 71.600 +1102 88.100 +1102 128.900 +1102 143.900 +1102 164.200 +1102 265.800 +1103 57.700 +1103 128.200 +1103 187.000 +1103 280.200 +1104 164.700 +1104 218.600 +1104 266.200 +1105 164.600 +1105 218.200 +1106 126.700 +1106 144.300 +1106 219.700 +1107 50.400 +1107 289.000 +1108 130.000 +1108 144.300 +1108 184.800 +1108 218.200 +1108 265.900 +1109 281.000 +1110 163.800 +1111 80.700 +1111 164.500 +1111 201.300 +1112 265.000 +1113 290.300 +1114 288.900 +1115 80.100 +1115 147.000 +1115 202.300 +1115 256.700 +1116 185.300 +1116 265.800 +1118 106.700 +1118 116.600 +1118 130.400 +1118 184.800 +1118 235.000 +1120 128.900 +1121 70.000 +1121 187.300 +1121 216.600 +1121 244.800 +1122 69.500 +1122 125.900 +1122 142.100 +1123 164.700 +1123 265.800 +1124 128.400 +1124 201.400 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_2_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_2_e_pop.dat new file mode 100644 index 000000000..0840ae315 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_2_e_pop.dat @@ -0,0 +1,2136 @@ +sender time_ms +1 278.300 +1 291.000 +2 69.400 +2 266.100 +3 55.700 +3 164.100 +3 290.200 +4 108.200 +4 161.800 +4 219.200 +5 54.200 +6 70.600 +7 130.300 +7 146.700 +7 280.800 +7 291.700 +9 82.300 +9 186.100 +10 82.300 +10 144.600 +12 129.800 +12 285.800 +13 258.300 +13 289.800 +14 104.600 +14 114.100 +14 185.200 +15 82.900 +16 217.900 +16 245.900 +17 233.900 +18 70.800 +18 124.000 +18 201.700 +19 152.400 +19 218.200 +20 69.600 +20 96.000 +20 114.000 +20 151.400 +20 230.900 +20 291.600 +21 80.900 +21 243.600 +22 93.700 +22 164.700 +23 99.700 +23 244.300 +24 81.700 +24 185.000 +24 280.100 +25 93.200 +25 106.800 +25 280.300 +26 218.800 +26 265.700 +26 291.300 +27 128.500 +28 92.700 +28 144.500 +28 218.300 +29 82.300 +29 144.900 +29 291.600 +30 68.600 +30 105.100 +30 127.300 +30 243.200 +31 163.200 +33 152.900 +33 263.400 +34 81.700 +34 125.400 +34 219.300 +35 69.500 +35 164.700 +36 254.900 +37 112.700 +37 184.900 +38 165.000 +38 265.800 +40 106.800 +41 57.600 +41 164.600 +41 185.800 +42 50.700 +42 98.200 +42 290.100 +43 93.600 +43 186.100 +43 258.400 +44 201.300 +44 244.500 +45 265.500 +46 218.000 +46 291.300 +47 132.900 +47 280.600 +48 164.000 +48 200.100 +48 291.300 +49 116.100 +49 184.100 +49 266.000 +49 291.100 +50 81.800 +50 115.200 +50 131.500 +50 151.400 +50 218.300 +50 260.800 +51 69.500 +51 145.100 +51 202.300 +52 164.500 +52 200.500 +52 265.200 +53 151.000 +53 291.500 +54 165.200 +54 218.200 +55 245.900 +56 81.800 +56 117.600 +56 279.800 +57 93.400 +57 127.500 +57 186.100 +58 101.000 +59 164.600 +60 123.800 +60 163.600 +60 218.000 +61 256.500 +62 146.400 +62 165.000 +62 287.800 +63 69.800 +63 288.300 +64 165.300 +64 218.500 +65 218.800 +66 202.400 +66 218.700 +66 265.200 +68 81.800 +68 203.000 +68 291.600 +69 92.800 +70 146.200 +70 184.800 +71 103.000 +71 130.700 +71 289.900 +72 116.200 +72 279.700 +73 81.400 +74 131.800 +74 164.200 +75 153.500 +75 186.000 +75 288.600 +76 80.400 +76 260.000 +77 116.100 +78 50.700 +78 56.400 +78 81.800 +78 117.900 +78 150.200 +78 162.400 +80 81.600 +80 94.000 +80 144.300 +82 51.100 +82 116.500 +82 281.000 +83 149.200 +83 229.400 +84 82.100 +84 143.700 +84 185.400 +84 244.900 +85 81.700 +85 287.900 +86 68.500 +86 101.400 +87 69.800 +87 217.700 +88 93.900 +88 228.200 +88 244.000 +88 290.500 +89 164.300 +90 219.500 +92 201.300 +92 252.100 +93 259.500 +93 290.800 +94 220.900 +95 127.200 +95 185.900 +96 82.300 +96 142.000 +96 164.700 +96 197.800 +96 280.100 +97 82.100 +97 101.200 +97 164.500 +98 101.700 +98 128.800 +98 164.600 +98 185.000 +98 280.700 +100 144.700 +100 199.900 +101 54.900 +101 141.600 +101 164.300 +101 185.400 +101 227.800 +102 81.600 +102 259.900 +103 59.500 +103 102.400 +103 165.300 +103 266.200 +103 291.900 +104 68.800 +104 99.900 +104 128.200 +105 141.100 +105 265.900 +106 158.800 +106 243.700 +106 290.500 +107 101.200 +107 184.400 +107 278.700 +109 107.000 +109 162.400 +110 56.600 +110 70.200 +110 260.600 +111 146.400 +111 280.100 +112 82.100 +112 164.200 +112 202.200 +113 67.400 +113 130.100 +114 56.100 +114 144.700 +114 184.500 +115 56.700 +115 164.200 +115 260.400 +116 260.400 +117 219.400 +117 265.800 +118 244.500 +119 290.600 +120 70.500 +120 217.800 +120 291.200 +121 93.900 +121 101.300 +122 81.600 +122 265.800 +123 54.700 +123 109.100 +124 290.100 +125 81.800 +125 185.700 +125 265.900 +126 117.200 +126 227.800 +127 133.100 +127 158.300 +128 164.700 +128 218.300 +129 58.000 +129 259.200 +130 125.600 +130 291.800 +131 81.700 +131 218.200 +132 164.200 +133 202.200 +133 260.300 +134 57.700 +134 146.100 +134 287.700 +135 186.300 +136 144.800 +136 164.500 +136 219.600 +136 289.500 +137 116.200 +137 164.700 +137 290.700 +138 92.600 +138 148.600 +140 56.000 +140 152.300 +140 164.500 +141 116.000 +142 201.100 +142 290.200 +143 154.500 +143 279.400 +144 290.600 +145 291.300 +146 70.400 +146 129.800 +146 165.500 +146 218.400 +147 69.500 +147 144.600 +147 197.200 +147 288.400 +148 290.300 +149 57.800 +149 93.300 +150 127.900 +150 245.000 +151 99.800 +151 163.900 +151 228.300 +151 257.900 +152 62.000 +152 118.500 +152 187.500 +153 102.200 +153 144.100 +154 244.900 +157 131.700 +157 279.800 +158 132.000 +158 165.200 +158 187.200 +158 235.800 +158 291.600 +159 117.700 +159 200.900 +159 219.700 +159 291.500 +160 81.700 +160 116.600 +160 164.700 +161 101.000 +161 130.900 +161 256.500 +161 266.100 +162 228.500 +162 258.700 +163 82.700 +163 131.200 +163 185.900 +163 246.300 +163 291.800 +164 56.400 +164 164.500 +165 146.800 +166 55.200 +166 144.500 +166 216.000 +166 291.300 +167 106.900 +167 184.300 +167 287.600 +168 183.100 +169 117.400 +169 185.700 +169 217.600 +170 70.200 +170 101.900 +170 127.900 +171 78.400 +171 96.000 +172 265.900 +173 58.800 +173 117.000 +173 290.000 +174 164.700 +174 187.200 +175 70.000 +175 116.900 +176 54.800 +176 152.900 +176 165.400 +176 227.500 +178 160.500 +178 244.900 +179 97.200 +180 266.100 +180 291.700 +181 93.100 +182 56.400 +182 100.000 +182 117.300 +182 245.000 +183 81.100 +183 218.800 +184 117.700 +184 186.000 +185 245.500 +186 50.200 +186 244.500 +187 55.000 +187 93.900 +187 144.400 +187 164.400 +188 131.600 +188 165.000 +188 218.600 +189 55.200 +189 185.200 +190 96.500 +190 144.500 +190 185.800 +190 288.800 +191 186.100 +192 186.000 +193 69.800 +193 124.600 +193 165.400 +193 229.400 +193 259.200 +194 68.300 +194 164.400 +195 217.400 +196 81.300 +196 217.800 +197 53.600 +197 116.700 +197 186.900 +197 236.400 +197 266.000 +197 288.100 +198 93.900 +198 144.500 +198 245.200 +199 108.500 +200 184.500 +200 218.700 +200 265.700 +201 128.700 +201 139.100 +201 218.800 +201 289.000 +202 126.800 +202 148.000 +202 160.500 +202 186.800 +203 105.000 +203 131.900 +204 69.400 +204 144.800 +204 164.900 +204 227.600 +205 117.400 +205 164.000 +206 217.800 +206 291.300 +207 130.100 +207 218.100 +207 248.100 +207 290.500 +208 185.900 +208 285.100 +209 164.600 +210 146.000 +210 186.100 +211 101.700 +211 184.900 +211 290.500 +212 81.400 +212 126.200 +212 289.200 +213 55.600 +213 101.300 +213 185.600 +214 217.900 +215 227.400 +215 245.900 +216 101.500 +216 116.200 +216 290.400 +217 216.300 +217 229.100 +218 69.900 +218 132.600 +218 164.900 +218 218.100 +218 291.100 +219 141.700 +220 96.400 +220 219.800 +220 278.900 +221 82.900 +221 116.300 +221 131.200 +221 164.600 +221 260.200 +223 56.700 +224 164.600 +224 218.100 +225 259.600 +225 280.200 +226 165.200 +227 81.300 +227 148.600 +227 281.400 +228 116.500 +228 128.500 +228 202.700 +229 93.500 +229 218.800 +230 131.800 +231 69.900 +231 201.900 +232 80.500 +232 290.700 +233 244.100 +234 117.100 +235 164.400 +235 219.900 +236 144.900 +236 185.600 +236 218.000 +237 67.500 +237 185.700 +238 266.200 +238 290.500 +239 164.900 +239 219.600 +239 237.500 +239 265.900 +240 230.600 +240 265.300 +240 288.700 +241 244.100 +242 80.300 +242 117.200 +242 201.500 +242 243.500 +243 57.000 +243 69.800 +243 186.000 +244 162.400 +244 184.100 +244 218.100 +245 115.500 +246 164.300 +246 201.300 +246 280.200 +247 202.500 +248 94.000 +248 163.500 +249 96.500 +249 258.000 +249 279.700 +250 148.400 +251 81.800 +251 163.800 +251 242.300 +251 281.700 +252 114.300 +252 159.700 +252 291.100 +253 131.300 +253 148.700 +253 164.500 +254 266.200 +255 164.500 +255 279.700 +255 291.300 +256 93.800 +256 258.300 +257 68.500 +257 219.400 +258 163.800 +260 79.100 +260 99.500 +260 144.700 +262 93.300 +262 113.500 +262 164.600 +262 201.100 +262 291.200 +263 158.300 +263 291.400 +264 81.300 +264 107.600 +264 218.600 +265 184.600 +265 245.400 +265 280.100 +266 117.200 +266 145.000 +266 218.200 +266 241.500 +267 195.400 +268 52.500 +268 256.700 +269 81.500 +269 185.200 +269 244.400 +270 93.200 +270 116.400 +271 81.800 +271 117.100 +272 95.900 +272 164.400 +272 217.900 +273 106.700 +274 80.600 +274 102.000 +274 165.700 +274 257.300 +274 291.700 +275 145.100 +275 200.300 +275 218.500 +276 164.600 +277 58.100 +277 81.800 +277 99.000 +277 123.900 +277 164.500 +277 248.100 +278 165.000 +278 279.300 +279 164.500 +280 52.000 +280 201.600 +280 226.500 +281 93.100 +282 116.400 +283 117.100 +283 185.900 +283 291.000 +284 99.600 +284 184.900 +284 291.400 +285 106.800 +285 290.900 +286 96.100 +286 128.900 +287 93.600 +287 165.200 +287 200.400 +287 265.700 +288 165.300 +288 276.500 +289 116.500 +289 219.600 +289 281.000 +290 70.400 +290 185.500 +290 219.700 +290 231.000 +291 165.200 +291 281.200 +292 130.400 +292 218.200 +293 116.900 +293 280.800 +294 144.300 +295 102.300 +295 116.700 +296 292.000 +297 115.300 +298 101.500 +298 164.500 +298 279.800 +299 69.900 +300 67.400 +300 90.900 +300 148.700 +300 229.400 +301 67.900 +301 165.200 +301 231.100 +302 164.600 +303 164.700 +303 186.800 +303 265.300 +305 115.400 +306 131.300 +306 146.400 +306 218.400 +306 281.400 +306 290.800 +307 163.500 +307 217.900 +307 288.800 +308 141.900 +308 148.500 +308 202.600 +308 279.900 +309 164.600 +309 185.800 +309 278.900 +310 68.300 +310 124.200 +310 146.400 +311 81.800 +311 247.300 +312 81.900 +312 291.700 +313 94.100 +313 291.800 +314 132.000 +314 280.800 +315 58.300 +315 81.300 +315 187.000 +315 243.600 +316 58.500 +316 290.700 +317 164.600 +317 219.400 +318 219.600 +319 56.500 +319 93.200 +319 266.100 +320 92.700 +320 219.500 +320 243.800 +320 290.800 +321 107.100 +321 218.000 +322 101.200 +322 127.700 +322 199.000 +322 290.900 +323 200.300 +323 278.300 +323 290.700 +324 55.800 +324 185.800 +325 81.800 +325 164.600 +326 57.600 +326 94.100 +326 131.500 +327 99.800 +327 184.200 +327 264.000 +328 96.700 +328 183.200 +328 218.700 +329 116.800 +329 219.300 +329 265.800 +330 99.800 +330 108.300 +330 117.300 +330 165.100 +330 218.400 +330 245.800 +330 281.000 +331 62.200 +331 128.800 +331 144.700 +331 187.100 +332 52.100 +332 81.700 +332 95.800 +332 218.500 +332 290.700 +333 202.600 +333 218.200 +334 263.900 +335 56.800 +335 121.900 +335 164.300 +336 55.700 +336 105.100 +336 130.200 +336 280.400 +337 81.200 +337 198.600 +338 132.600 +338 260.600 +338 280.300 +339 54.800 +339 70.100 +339 217.900 +340 144.900 +340 245.000 +341 187.100 +342 81.700 +342 128.800 +342 164.200 +342 185.500 +343 163.700 +344 81.700 +344 131.600 +344 185.600 +345 149.600 +345 266.200 +345 281.100 +346 131.700 +346 144.200 +347 80.100 +347 106.500 +348 164.600 +348 186.000 +349 115.600 +349 260.300 +350 80.700 +350 164.500 +350 217.900 +350 289.100 +351 69.600 +351 164.200 +351 219.700 +353 202.700 +354 68.400 +354 101.500 +354 126.800 +354 201.300 +354 246.800 +354 280.300 +355 81.600 +355 202.900 +355 260.900 +356 92.000 +356 128.600 +356 263.800 +358 70.800 +358 96.000 +358 140.800 +358 185.900 +358 227.600 +359 185.300 +359 219.700 +359 289.200 +360 96.400 +360 200.900 +360 219.700 +360 261.900 +360 266.500 +362 183.600 +362 260.400 +362 289.200 +363 67.600 +363 82.000 +363 265.100 +364 153.200 +364 218.200 +365 201.800 +365 279.800 +366 82.800 +366 100.500 +366 126.900 +367 289.200 +368 81.800 +368 114.600 +368 220.100 +368 290.700 +369 97.000 +369 245.700 +370 132.500 +370 218.100 +370 291.800 +371 51.100 +371 70.200 +372 68.400 +372 117.400 +372 289.400 +373 62.500 +374 81.700 +374 104.300 +374 145.000 +374 244.400 +375 93.800 +376 155.200 +377 69.100 +377 81.600 +377 150.500 +377 219.600 +378 164.400 +378 264.900 +379 65.000 +379 81.000 +379 102.200 +379 124.500 +379 219.700 +379 264.800 +379 289.200 +380 126.100 +380 144.500 +380 291.600 +381 163.500 +381 217.200 +382 93.800 +383 163.400 +383 187.200 +383 290.900 +384 187.000 +385 164.400 +385 227.000 +386 93.300 +386 159.500 +387 92.300 +387 128.700 +387 185.600 +387 257.400 +388 130.000 +388 186.800 +389 70.700 +389 153.500 +389 218.200 +391 117.700 +391 139.600 +391 164.600 +391 185.200 +391 233.800 +392 142.300 +392 165.100 +392 202.800 +392 244.900 +393 82.000 +393 164.400 +394 79.200 +394 100.500 +394 144.100 +394 163.000 +395 68.600 +395 164.200 +395 265.900 +396 69.100 +397 148.500 +398 96.100 +398 133.000 +398 163.800 +398 202.700 +398 244.300 +398 291.300 +399 132.200 +399 186.000 +399 216.800 +399 244.400 +399 265.800 +399 290.500 +400 145.800 +400 183.800 +401 219.300 +402 164.800 +402 266.300 +403 101.200 +403 125.600 +403 164.400 +403 217.300 +406 218.000 +406 290.600 +407 82.100 +407 116.700 +407 130.300 +407 184.300 +407 245.200 +408 100.200 +408 184.800 +408 288.300 +409 71.600 +409 96.200 +409 186.100 +409 245.600 +410 266.400 +412 69.900 +412 81.700 +412 117.000 +412 148.400 +413 52.300 +413 117.700 +413 164.600 +413 217.600 +413 265.800 +414 163.900 +414 219.200 +414 265.800 +415 69.700 +415 102.400 +415 218.200 +415 291.600 +416 67.800 +416 290.700 +417 245.200 +417 290.800 +418 226.100 +418 281.700 +419 164.300 +419 218.900 +420 116.700 +420 164.700 +421 116.300 +421 163.900 +421 291.400 +422 101.400 +422 145.000 +422 256.400 +423 201.500 +423 217.500 +424 100.200 +424 116.900 +424 130.500 +424 280.300 +425 164.400 +425 281.000 +426 99.300 +426 116.800 +426 164.500 +427 186.200 +427 259.900 +427 291.600 +428 144.800 +428 229.400 +429 114.500 +430 164.500 +430 218.600 +431 184.500 +431 257.300 +431 290.800 +432 99.900 +432 184.600 +433 216.300 +434 81.900 +435 165.100 +436 101.200 +436 126.400 +436 202.000 +437 132.500 +437 291.000 +438 70.000 +440 187.400 +440 202.000 +440 264.800 +441 81.900 +441 152.000 +441 185.600 +442 66.600 +442 102.300 +442 186.200 +443 115.900 +443 244.900 +443 291.500 +444 50.800 +444 80.800 +444 200.100 +444 266.700 +444 289.400 +445 184.600 +445 219.500 +446 128.500 +447 113.000 +447 245.900 +448 116.500 +448 245.300 +449 100.200 +449 147.700 +449 163.400 +449 186.600 +450 141.300 +450 218.000 +450 258.800 +451 105.100 +451 116.400 +451 164.700 +451 263.900 +451 288.300 +452 70.500 +452 146.800 +452 266.100 +453 164.000 +453 248.200 +453 290.500 +454 80.500 +455 164.400 +455 186.700 +455 219.000 +456 106.700 +456 117.700 +456 152.300 +457 60.000 +457 80.000 +457 266.100 +458 96.200 +458 217.700 +459 62.700 +459 81.900 +459 260.300 +460 57.100 +460 116.800 +460 288.700 +461 70.500 +461 100.000 +461 128.200 +461 201.900 +462 68.100 +462 226.200 +463 69.300 +463 80.900 +463 117.600 +463 140.600 +463 164.700 +463 200.200 +465 200.700 +465 219.200 +466 95.900 +466 202.700 +466 280.700 +467 159.600 +467 200.900 +467 287.600 +468 116.400 +469 56.300 +469 253.000 +469 276.900 +470 96.300 +470 164.900 +470 200.900 +471 55.400 +471 127.300 +471 219.700 +471 291.200 +472 148.900 +472 162.700 +472 185.900 +472 289.400 +473 108.000 +473 164.800 +474 116.600 +474 153.400 +475 164.900 +475 200.400 +475 291.600 +476 165.100 +476 265.900 +477 113.500 +477 183.900 +477 244.800 +478 130.200 +478 203.400 +478 217.600 +478 278.400 +479 81.400 +479 281.300 +480 151.500 +481 81.700 +482 256.900 +484 164.400 +484 200.900 +485 260.000 +486 132.100 +486 218.100 +487 69.600 +487 144.200 +487 164.500 +487 187.200 +488 59.000 +489 69.300 +489 96.600 +489 184.200 +489 281.500 +490 165.500 +490 185.800 +491 138.600 +492 101.300 +492 219.700 +492 246.900 +493 67.700 +493 93.900 +494 116.900 +494 265.600 +494 291.700 +495 102.200 +495 164.300 +495 291.700 +496 91.800 +497 185.000 +497 289.100 +498 139.600 +498 162.200 +498 185.300 +498 291.700 +499 165.100 +499 219.200 +500 101.400 +500 186.100 +500 227.600 +501 99.400 +501 145.300 +501 281.100 +502 116.700 +502 280.700 +503 56.500 +503 116.300 +503 259.600 +503 280.900 +504 106.800 +505 50.300 +505 70.800 +505 235.000 +506 81.200 +506 186.000 +507 184.700 +508 130.200 +508 184.300 +508 201.000 +509 186.100 +509 291.100 +510 127.800 +510 218.100 +510 245.500 +510 291.700 +511 183.900 +511 217.100 +511 264.500 +512 100.000 +512 105.700 +513 186.900 +513 260.500 +515 164.600 +516 219.700 +517 99.500 +517 115.900 +517 151.100 +517 187.300 +517 260.600 +517 279.600 +518 96.200 +519 184.600 +519 203.100 +519 290.800 +520 92.000 +520 164.400 +520 289.900 +521 152.500 +521 277.700 +522 114.900 +522 186.000 +523 81.900 +523 148.300 +523 243.700 +523 260.400 +524 146.300 +524 164.700 +524 186.100 +524 259.400 +525 94.000 +525 281.300 +526 93.300 +526 116.000 +526 266.200 +526 291.600 +527 186.600 +528 186.000 +528 289.400 +529 70.000 +529 164.100 +529 217.700 +530 56.600 +530 186.800 +531 217.600 +531 245.500 +531 279.100 +532 64.800 +532 161.800 +532 185.500 +532 290.900 +533 164.200 +533 199.700 +533 281.100 +534 184.700 +534 265.700 +535 141.900 +535 164.300 +536 115.800 +537 101.500 +537 164.800 +537 200.800 +538 116.400 +538 288.900 +540 52.300 +540 69.100 +540 185.000 +540 275.800 +541 116.200 +542 131.900 +542 148.900 +542 281.600 +543 186.300 +543 263.900 +544 93.700 +544 144.800 +544 280.900 +545 68.000 +545 291.200 +546 144.700 +547 80.800 +547 94.000 +547 260.000 +548 93.700 +548 186.100 +549 91.000 +549 127.900 +549 219.300 +550 164.600 +551 87.900 +551 264.600 +551 291.800 +552 203.000 +552 219.300 +552 245.700 +553 144.700 +553 150.000 +553 164.600 +553 229.400 +553 291.300 +554 290.400 +555 291.200 +557 81.000 +557 144.700 +558 55.400 +558 128.400 +558 217.700 +558 247.100 +558 265.900 +559 81.600 +559 164.600 +559 217.900 +559 245.200 +560 67.900 +560 185.200 +561 161.500 +562 69.700 +562 288.800 +563 101.400 +563 116.500 +564 93.100 +564 148.500 +564 165.100 +565 218.100 +566 101.500 +566 187.200 +567 80.800 +568 165.000 +568 185.900 +568 280.800 +569 141.100 +569 164.100 +569 219.200 +570 218.300 +571 81.000 +571 132.100 +571 218.300 +571 259.100 +572 148.600 +572 164.300 +572 202.100 +573 93.300 +573 165.400 +573 218.400 +573 290.700 +574 68.600 +574 114.300 +574 141.300 +574 164.900 +575 264.900 +576 104.700 +576 202.100 +577 127.600 +578 53.200 +578 101.900 +579 81.300 +579 121.500 +580 127.600 +580 163.800 +580 200.900 +580 288.900 +581 114.400 +581 164.400 +581 291.300 +582 81.000 +582 132.500 +582 202.400 +583 164.800 +583 185.000 +583 265.200 +584 116.500 +584 184.100 +584 247.300 +585 81.000 +585 281.400 +586 52.300 +586 69.000 +586 108.300 +586 117.300 +587 101.800 +587 127.900 +587 185.600 +587 216.500 +587 281.000 +588 245.600 +590 51.800 +590 164.000 +591 164.500 +591 244.800 +592 57.900 +593 145.300 +594 164.800 +594 186.200 +594 229.400 +595 146.400 +595 164.700 +595 197.300 +595 246.800 +596 83.000 +596 260.000 +597 100.100 +598 116.800 +598 159.700 +598 186.600 +598 218.000 +598 260.600 +599 99.700 +599 131.500 +599 164.500 +599 256.400 +600 202.000 +601 101.600 +601 186.100 +603 265.800 +604 101.100 +604 130.700 +605 96.600 +605 185.600 +606 101.300 +606 164.300 +606 260.700 +607 100.000 +607 151.700 +607 164.700 +607 252.100 +608 260.000 +609 82.000 +609 163.300 +610 69.700 +610 101.300 +610 126.400 +610 184.900 +610 281.100 +611 187.400 +611 286.400 +612 81.900 +612 116.200 +612 164.800 +612 217.400 +612 279.500 +613 55.800 +613 80.500 +613 143.300 +614 69.400 +614 185.700 +615 105.700 +615 164.400 +615 218.300 +615 291.500 +616 201.400 +616 259.500 +616 281.100 +616 291.400 +617 68.700 +617 106.900 +617 164.700 +618 93.100 +618 164.400 +618 202.400 +618 256.500 +618 290.600 +619 116.600 +620 117.500 +620 164.300 +620 192.300 +620 201.200 +621 97.000 +621 164.300 +622 107.200 +622 164.900 +623 93.200 +623 185.200 +623 281.300 +624 50.400 +624 164.300 +625 55.800 +625 165.000 +626 50.700 +626 81.400 +626 127.400 +626 145.200 +626 185.300 +626 227.500 +627 218.100 +627 290.600 +628 141.300 +629 68.300 +629 218.500 +629 265.200 +630 52.600 +630 227.400 +631 57.200 +631 81.600 +631 144.800 +631 185.700 +631 202.200 +632 97.300 +633 243.100 +634 81.600 +634 116.000 +634 145.200 +634 219.500 +635 217.300 +635 280.100 +636 93.600 +636 114.100 +636 122.600 +636 162.900 +636 278.800 +637 130.300 +638 66.300 +638 107.700 +638 186.500 +639 67.700 +639 114.900 +639 132.200 +639 256.500 +639 288.600 +640 185.700 +641 81.400 +641 104.600 +641 148.100 +641 164.500 +641 219.700 +642 106.400 +643 70.400 +643 116.700 +643 187.000 +644 70.000 +644 144.500 +644 290.500 +645 93.900 +645 116.100 +645 138.300 +645 146.300 +645 184.100 +645 291.100 +647 107.600 +647 126.200 +647 290.300 +648 81.500 +648 218.000 +648 291.700 +649 81.700 +649 164.400 +649 185.700 +650 69.900 +650 165.300 +650 185.100 +650 200.500 +650 219.100 +650 244.200 +651 164.600 +652 152.200 +652 244.000 +652 266.000 +655 92.600 +655 265.800 +656 94.000 +656 218.000 +656 263.100 +657 69.900 +658 164.400 +658 218.400 +658 279.100 +659 56.100 +659 80.800 +659 128.700 +659 218.200 +660 56.600 +660 117.100 +663 164.700 +664 291.300 +665 130.000 +665 291.800 +666 114.700 +667 82.800 +667 164.200 +667 260.700 +668 117.900 +668 148.000 +668 186.800 +669 82.300 +669 260.000 +670 81.900 +670 201.600 +671 93.800 +671 114.700 +671 279.000 +672 114.700 +672 198.700 +672 260.400 +673 93.200 +673 199.800 +674 58.000 +674 80.600 +674 96.300 +674 117.000 +674 186.800 +674 279.100 +675 81.700 +675 165.000 +675 187.400 +676 156.200 +676 216.600 +676 290.700 +677 92.300 +677 186.700 +677 279.900 +679 129.000 +679 162.700 +679 218.400 +680 146.900 +680 245.500 +681 144.600 +681 164.300 +681 186.000 +681 291.400 +682 281.100 +683 116.500 +684 219.700 +686 130.700 +686 165.200 +686 228.000 +688 185.100 +689 99.800 +690 81.500 +690 124.500 +691 185.200 +692 94.000 +692 163.900 +692 228.300 +693 57.600 +693 117.100 +694 187.100 +694 218.300 +694 289.000 +695 68.200 +695 164.800 +695 291.800 +696 82.500 +696 115.800 +696 148.200 +696 162.000 +697 80.700 +697 114.400 +697 245.600 +698 131.500 +699 50.500 +699 266.100 +700 144.800 +700 160.800 +701 96.300 +701 164.500 +701 236.100 +701 260.700 +702 69.300 +702 93.300 +704 83.400 +704 164.500 +704 217.900 +704 291.500 +705 162.900 +705 201.200 +706 117.200 +707 93.900 +707 101.300 +707 291.400 +709 59.500 +709 96.900 +709 185.600 +709 260.300 +709 279.800 +710 164.700 +710 201.600 +711 68.100 +711 81.700 +711 101.200 +712 101.400 +713 50.100 +713 116.600 +713 132.400 +713 265.000 +714 81.600 +714 141.300 +714 186.100 +714 280.000 +715 50.200 +715 80.600 +715 186.600 +715 265.800 +716 107.600 +716 142.600 +716 216.400 +716 290.400 +717 96.400 +717 290.700 +718 96.600 +718 164.600 +718 257.200 +718 279.700 +719 58.000 +719 165.100 +719 186.100 +720 69.600 +721 116.100 +722 164.300 +723 266.100 +724 126.400 +724 218.200 +725 288.300 +726 81.700 +726 115.900 +726 217.900 +727 91.000 +727 161.700 +728 262.500 +729 70.200 +729 144.800 +730 100.200 +731 67.300 +731 101.100 +731 143.900 +731 185.100 +731 281.500 +732 185.300 +732 266.100 +732 280.000 +733 93.300 +733 117.400 +733 163.800 +734 67.700 +734 93.900 +734 164.500 +734 218.300 +735 100.400 +735 164.700 +736 129.600 +736 184.200 +736 243.600 +736 280.200 +737 116.600 +737 277.700 +738 147.300 +738 244.500 +739 96.900 +739 102.400 +739 218.300 +739 243.900 +740 164.100 +740 219.600 +741 81.000 +741 116.800 +741 185.500 +741 253.800 +742 159.000 +742 164.600 +742 280.400 +742 290.900 +743 81.500 +743 116.000 +744 58.000 +744 186.900 +745 186.300 +746 141.200 +746 186.100 +746 265.900 +747 140.200 +747 164.000 +747 244.400 +748 281.600 +749 116.800 +749 163.900 +749 245.000 +750 126.500 +750 280.700 +752 79.400 +752 101.100 +752 130.500 +752 213.700 +753 69.400 +753 144.900 +754 131.300 +754 218.200 +755 164.800 +755 217.700 +755 280.900 +756 201.900 +757 164.700 +757 291.200 +758 245.100 +759 245.900 +761 101.400 +762 82.600 +762 117.000 +762 243.200 +762 290.800 +763 81.700 +763 152.600 +763 164.800 +764 144.500 +764 164.400 +764 244.400 +765 261.800 +766 68.300 +766 102.200 +767 93.100 +767 164.600 +767 200.100 +767 218.000 +767 247.100 +769 69.700 +769 116.600 +770 185.500 +771 142.600 +771 146.600 +771 185.000 +771 244.200 +772 115.000 +773 106.400 +773 164.400 +773 228.500 +774 51.000 +774 116.900 +774 290.800 +775 50.300 +775 69.100 +775 217.800 +775 290.300 +776 116.500 +777 128.000 +778 81.400 +779 82.100 +780 266.100 +781 93.300 +781 164.700 +781 244.700 +782 164.500 +782 202.100 +783 266.000 +784 164.400 +785 102.700 +785 112.700 +785 126.300 +785 164.700 +785 218.700 +786 67.900 +786 116.800 +786 145.600 +786 217.100 +786 245.200 +786 265.100 +787 128.100 +787 164.600 +787 279.500 +788 164.800 +788 218.300 +789 219.700 +789 245.000 +790 68.600 +790 116.500 +790 197.000 +790 290.900 +791 164.100 +791 186.500 +792 184.300 +792 290.500 +793 81.600 +793 164.600 +793 218.200 +794 96.900 +794 235.900 +794 280.700 +795 113.800 +795 265.800 +796 81.700 +796 117.600 +797 244.200 +798 55.800 +798 245.300 +798 283.900 +799 100.000 +799 153.600 +799 245.100 +799 291.300 +800 132.200 +800 200.200 +800 265.700 +801 288.600 +802 201.200 +802 288.300 +803 68.300 +803 147.800 +803 185.100 +803 290.700 +804 219.300 +805 82.200 +805 102.000 +805 164.600 +805 235.700 +805 266.100 +805 278.200 +806 132.200 +806 184.700 +807 108.000 +807 140.800 +807 159.300 +807 260.300 +808 81.700 +808 128.000 +808 218.400 +808 235.600 +808 289.800 +809 164.900 +809 226.600 +810 245.300 +810 266.100 +811 93.300 +811 146.700 +811 218.600 +812 116.200 +812 186.000 +812 288.900 +813 101.500 +813 147.000 +813 164.900 +814 144.100 +814 218.300 +814 278.700 +815 123.700 +815 159.900 +815 290.900 +817 277.100 +818 69.900 +818 185.300 +818 291.400 +819 97.900 +819 144.200 +819 164.500 +820 56.000 +820 233.900 +821 185.200 +822 278.000 +823 67.500 +823 128.600 +823 218.000 +823 265.100 +824 218.500 +825 164.700 +825 265.400 +826 57.400 +826 115.800 +826 257.800 +826 289.200 +827 57.900 +827 144.300 +827 164.500 +827 290.600 +828 244.000 +828 287.600 +829 100.600 +829 106.600 +829 164.700 +829 243.100 +829 291.500 +830 81.900 +830 130.700 +832 185.800 +833 69.200 +833 116.800 +833 290.700 +834 55.200 +834 116.800 +834 258.300 +834 288.500 +835 141.500 +835 202.600 +836 165.300 +836 290.700 +837 57.600 +837 69.800 +837 158.700 +837 200.300 +838 257.200 +839 99.300 +839 144.800 +839 263.400 +839 287.200 +840 200.800 +841 218.300 +841 265.700 +841 291.800 +842 184.800 +843 128.700 +843 186.000 +844 164.400 +844 245.200 +845 100.500 +845 185.700 +846 117.300 +848 80.600 +848 131.900 +848 164.400 +848 185.600 +849 109.300 +849 164.500 +849 288.000 +850 66.800 +850 102.100 +850 185.800 +851 96.300 +852 144.700 +852 202.600 +853 164.900 +854 265.800 +855 131.800 +855 277.100 +856 70.100 +856 183.400 +856 260.500 +857 131.300 +857 165.500 +857 219.800 +858 185.900 +858 202.600 +859 146.600 +860 80.700 +860 127.700 +860 144.200 +861 124.700 +861 130.500 +861 162.500 +861 202.500 +861 226.500 +861 290.100 +862 291.200 +863 104.800 +863 197.600 +863 217.500 +864 82.600 +864 142.800 +864 218.300 +865 56.100 +865 201.000 +865 228.700 +865 288.700 +866 99.400 +867 101.300 +867 126.400 +868 99.700 +868 117.300 +868 131.700 +868 164.500 +869 164.600 +869 244.200 +871 91.400 +871 124.200 +871 164.300 +872 185.600 +873 57.700 +873 164.500 +874 185.600 +874 265.200 +875 69.400 +875 116.600 +875 186.000 +875 218.300 +878 141.600 +879 186.000 +880 150.300 +880 186.300 +880 279.300 +881 93.100 +881 231.000 +882 80.900 +882 98.500 +882 151.100 +883 108.100 +883 140.600 +883 263.900 +884 68.500 +884 127.500 +885 94.900 +885 144.400 +885 164.000 +885 289.200 +886 186.300 +886 219.800 +887 93.400 +887 201.500 +888 69.600 +888 185.200 +889 164.500 +890 144.300 +891 246.600 +891 264.200 +891 280.500 +892 116.400 +892 245.500 +893 281.200 +894 187.300 +896 116.800 +896 216.800 +896 245.900 +896 278.600 +897 259.800 +898 262.800 +898 291.600 +899 52.600 +899 80.700 +899 185.600 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_2_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_2_i_pop.dat new file mode 100644 index 000000000..27d2b63a6 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_2_i_pop.dat @@ -0,0 +1,539 @@ +sender time_ms +900 165.000 +900 219.600 +900 259.900 +900 291.700 +901 219.300 +901 280.800 +902 127.100 +902 288.300 +903 185.900 +903 245.000 +903 265.800 +904 106.800 +904 184.600 +905 82.200 +905 152.700 +907 81.800 +907 125.800 +907 184.100 +907 216.700 +909 81.400 +909 219.100 +910 102.100 +910 132.100 +911 264.800 +911 291.700 +912 108.700 +913 99.700 +914 131.200 +914 144.900 +917 81.800 +917 106.700 +917 116.500 +918 82.200 +918 235.900 +918 288.300 +919 57.100 +919 118.100 +919 144.800 +920 70.100 +920 92.200 +920 244.000 +921 164.100 +922 124.500 +922 184.500 +922 263.500 +923 291.000 +924 68.200 +924 116.600 +926 165.000 +928 56.500 +928 184.200 +928 244.400 +929 243.000 +930 127.900 +931 82.500 +931 133.600 +932 185.200 +933 130.200 +934 106.500 +934 291.300 +935 201.300 +935 240.300 +935 260.400 +936 92.900 +936 116.400 +936 163.900 +937 80.400 +937 107.800 +937 185.700 +938 184.100 +939 144.800 +939 184.300 +939 200.100 +940 60.800 +940 102.200 +940 113.700 +940 131.100 +940 186.000 +941 164.900 +942 202.900 +942 236.000 +943 132.200 +944 56.000 +944 228.600 +945 93.800 +945 217.900 +945 281.200 +946 69.700 +946 126.100 +946 291.800 +947 187.200 +948 289.000 +949 83.000 +949 164.900 +949 185.800 +949 219.700 +950 81.900 +950 96.100 +950 184.900 +950 229.800 +951 127.400 +951 164.300 +952 93.700 +952 150.300 +952 185.800 +953 265.000 +954 81.900 +954 164.900 +954 218.000 +954 266.400 +954 289.100 +955 102.600 +955 116.400 +955 160.100 +955 265.900 +956 131.900 +956 164.600 +956 265.200 +957 92.900 +957 143.700 +958 185.000 +959 291.000 +960 96.700 +960 117.800 +961 217.200 +962 107.300 +962 291.000 +963 101.900 +963 164.600 +963 220.100 +963 290.700 +964 83.000 +964 116.200 +965 93.900 +965 130.400 +965 266.100 +966 279.800 +967 143.800 +968 117.300 +968 146.100 +968 164.900 +968 265.400 +968 290.700 +969 56.000 +969 126.000 +969 291.300 +970 188.400 +970 278.500 +970 291.800 +971 93.000 +971 117.000 +971 185.100 +971 290.800 +972 102.300 +972 287.800 +973 70.600 +973 131.300 +973 247.200 +973 290.700 +974 201.300 +974 224.600 +974 291.600 +975 127.400 +975 144.900 +975 218.200 +976 150.200 +976 244.800 +977 69.500 +977 102.200 +977 163.900 +978 99.800 +978 201.300 +978 266.200 +979 108.300 +979 164.700 +979 233.800 +979 266.200 +980 68.200 +980 116.500 +980 164.300 +980 245.200 +981 107.100 +981 164.600 +981 265.800 +982 66.000 +982 266.000 +983 164.400 +983 201.500 +984 131.800 +984 164.100 +984 200.800 +985 133.700 +985 164.400 +985 256.800 +985 291.600 +986 165.200 +986 201.500 +986 281.200 +987 101.700 +987 117.100 +987 236.200 +987 279.800 +988 200.800 +988 243.900 +989 185.600 +989 291.000 +990 116.400 +991 144.500 +991 290.700 +992 70.800 +992 101.200 +992 130.700 +992 149.700 +992 243.700 +993 123.200 +993 164.600 +993 201.600 +995 217.900 +995 280.200 +996 101.200 +997 116.900 +997 141.400 +997 237.000 +998 289.200 +999 80.700 +999 116.700 +999 245.400 +1000 144.500 +1000 219.600 +1001 132.800 +1001 187.300 +1001 218.600 +1001 263.200 +1001 279.900 +1002 81.000 +1002 116.100 +1002 291.700 +1003 164.000 +1003 244.700 +1003 266.200 +1004 116.600 +1004 200.600 +1005 116.700 +1005 165.100 +1005 290.400 +1006 82.000 +1006 244.800 +1006 279.700 +1008 93.700 +1008 124.900 +1008 185.000 +1009 149.800 +1009 218.700 +1009 265.700 +1010 69.300 +1010 80.600 +1010 202.400 +1010 265.500 +1011 80.700 +1011 132.300 +1011 234.400 +1012 244.000 +1013 81.600 +1013 164.600 +1013 236.000 +1015 164.300 +1015 243.800 +1016 93.300 +1016 101.700 +1016 184.800 +1017 117.300 +1017 164.800 +1017 185.800 +1017 218.000 +1018 116.600 +1019 150.600 +1019 164.700 +1019 218.600 +1020 280.500 +1021 201.400 +1021 245.800 +1022 113.500 +1022 164.400 +1022 291.400 +1023 163.200 +1023 244.700 +1023 279.900 +1024 81.100 +1024 164.800 +1024 285.600 +1025 126.300 +1025 144.500 +1025 200.500 +1025 284.400 +1025 291.200 +1026 50.100 +1026 100.200 +1026 139.700 +1026 218.100 +1026 290.200 +1027 146.500 +1027 219.400 +1027 234.900 +1028 108.200 +1028 291.200 +1029 66.500 +1029 98.700 +1029 115.800 +1029 159.100 +1029 165.400 +1029 291.600 +1030 99.900 +1030 217.700 +1030 260.300 +1031 265.800 +1032 92.600 +1032 144.900 +1032 217.300 +1032 236.100 +1033 130.200 +1033 164.700 +1033 247.300 +1034 164.500 +1034 198.700 +1035 69.200 +1035 280.300 +1036 56.700 +1036 101.300 +1036 244.800 +1036 281.000 +1037 185.800 +1037 219.600 +1037 290.800 +1038 57.800 +1038 117.500 +1038 164.100 +1038 228.200 +1038 291.900 +1039 198.500 +1040 69.600 +1040 184.200 +1040 246.200 +1041 99.900 +1041 164.700 +1042 81.800 +1042 116.400 +1042 164.000 +1042 280.100 +1042 291.500 +1043 291.500 +1044 185.900 +1044 229.600 +1044 257.200 +1045 150.300 +1045 290.400 +1047 164.600 +1047 291.500 +1048 185.100 +1048 217.800 +1049 117.700 +1049 244.900 +1050 70.300 +1050 202.000 +1050 289.100 +1051 91.900 +1051 164.600 +1051 202.400 +1051 244.500 +1052 126.100 +1052 163.200 +1052 243.000 +1052 247.800 +1052 280.000 +1053 65.300 +1053 82.100 +1053 124.100 +1053 245.500 +1054 227.500 +1054 266.200 +1055 117.200 +1055 218.000 +1056 102.200 +1056 120.200 +1056 147.000 +1056 187.200 +1056 290.600 +1057 126.500 +1058 68.100 +1059 81.400 +1059 125.900 +1059 164.600 +1059 245.200 +1059 267.000 +1060 218.100 +1061 187.200 +1062 82.000 +1062 185.700 +1063 67.700 +1065 163.900 +1065 279.900 +1066 71.100 +1066 116.100 +1066 131.300 +1066 187.000 +1066 264.400 +1067 67.600 +1067 93.700 +1068 94.000 +1069 164.900 +1070 116.800 +1070 164.700 +1070 279.200 +1071 116.400 +1072 101.100 +1073 128.500 +1074 108.700 +1074 130.800 +1074 219.600 +1074 280.100 +1075 164.300 +1075 185.500 +1076 291.600 +1077 193.900 +1078 186.300 +1079 81.500 +1080 93.500 +1080 186.800 +1081 163.400 +1082 160.400 +1082 202.300 +1083 69.900 +1083 229.600 +1083 244.000 +1084 216.300 +1084 291.600 +1085 266.400 +1086 95.200 +1086 133.700 +1086 257.000 +1087 57.500 +1087 201.600 +1087 281.100 +1088 69.700 +1088 119.000 +1089 117.100 +1089 151.300 +1089 165.100 +1089 244.100 +1090 94.000 +1090 101.300 +1090 164.500 +1090 290.700 +1091 81.700 +1091 92.600 +1091 102.600 +1091 117.100 +1091 164.800 +1091 291.500 +1092 164.500 +1092 265.600 +1092 289.300 +1093 141.900 +1093 185.900 +1093 245.800 +1094 164.200 +1094 218.200 +1094 265.800 +1095 131.300 +1095 165.100 +1095 187.200 +1095 202.000 +1096 131.400 +1096 185.100 +1096 236.400 +1097 125.800 +1098 141.700 +1099 158.600 +1099 218.200 +1100 69.900 +1100 164.700 +1101 99.600 +1101 216.600 +1101 231.000 +1102 153.600 +1102 280.700 +1103 106.300 +1103 265.500 +1104 107.700 +1104 127.900 +1104 243.400 +1105 54.400 +1105 93.000 +1105 164.500 +1106 57.600 +1106 107.700 +1106 164.800 +1107 80.700 +1108 96.100 +1108 101.400 +1108 164.700 +1109 132.200 +1109 164.800 +1109 280.500 +1110 144.800 +1110 200.900 +1110 265.700 +1111 266.100 +1112 147.000 +1112 291.500 +1113 92.600 +1114 70.100 +1114 153.300 +1115 93.200 +1115 107.500 +1115 131.600 +1115 218.400 +1116 164.700 +1116 199.800 +1117 150.300 +1117 201.700 +1117 244.000 +1118 91.700 +1118 145.200 +1119 116.400 +1119 291.400 +1120 185.600 +1120 288.200 +1121 185.200 +1122 96.600 +1122 192.900 +1122 224.200 +1122 281.000 +1123 82.900 +1123 228.000 +1124 55.200 +1124 82.900 +1124 129.900 +1124 187.300 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_3_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_3_e_pop.dat new file mode 100644 index 000000000..05bb33252 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_3_e_pop.dat @@ -0,0 +1,2104 @@ +sender time_ms +0 144.700 +0 200.100 +0 235.300 +0 279.700 +1 245.500 +2 101.600 +2 117.200 +2 186.200 +2 288.600 +3 164.500 +3 244.200 +4 105.900 +4 117.500 +5 132.700 +5 144.400 +6 217.400 +7 81.600 +7 143.300 +7 185.600 +7 265.200 +7 291.700 +8 116.100 +8 152.500 +9 81.200 +9 219.600 +10 106.900 +10 130.300 +10 144.300 +10 218.200 +12 185.100 +12 266.200 +13 132.500 +13 152.900 +13 185.900 +14 144.800 +15 129.800 +15 186.100 +15 288.500 +16 164.700 +17 107.900 +17 291.100 +18 81.900 +18 202.200 +19 92.300 +19 117.500 +19 164.600 +20 57.700 +20 117.500 +20 219.800 +21 82.100 +21 288.300 +22 164.500 +22 290.900 +23 68.300 +23 186.900 +24 151.800 +24 245.600 +25 99.900 +25 129.600 +25 291.600 +26 218.300 +26 279.700 +27 80.300 +27 165.300 +27 256.500 +28 152.000 +28 163.700 +29 217.900 +30 69.800 +30 164.400 +30 266.600 +31 81.800 +32 71.200 +32 133.000 +32 213.000 +34 55.900 +34 141.800 +34 218.300 +34 265.700 +35 101.900 +35 159.700 +35 201.400 +36 124.600 +36 131.100 +36 265.900 +37 93.000 +37 162.200 +37 219.600 +38 219.100 +40 164.600 +41 82.900 +41 130.200 +41 185.000 +42 244.300 +42 291.700 +43 264.300 +44 116.800 +44 165.300 +45 97.900 +45 125.600 +45 243.500 +46 71.600 +46 126.700 +46 280.500 +47 164.500 +47 203.100 +48 116.800 +48 229.100 +49 58.600 +49 146.400 +49 280.000 +51 116.800 +51 164.200 +51 241.000 +52 128.700 +52 164.800 +52 200.800 +53 57.700 +53 116.100 +53 130.500 +53 145.300 +53 277.600 +54 101.400 +54 165.000 +55 128.000 +55 164.600 +55 291.800 +56 81.500 +57 81.500 +57 144.500 +59 114.000 +60 165.400 +60 280.300 +61 93.000 +61 241.900 +62 186.000 +62 218.600 +63 164.600 +63 185.800 +65 113.300 +65 165.300 +65 279.700 +66 52.600 +66 218.000 +67 146.100 +67 164.200 +67 279.800 +68 56.500 +68 143.800 +68 184.500 +68 219.700 +69 116.600 +69 148.700 +70 164.700 +71 50.200 +71 113.700 +71 164.500 +72 99.800 +72 151.300 +72 162.000 +73 69.700 +73 144.100 +74 68.500 +74 114.200 +74 198.800 +74 234.100 +74 264.700 +75 100.300 +75 116.200 +75 164.500 +75 186.900 +76 144.100 +77 81.800 +77 126.800 +77 218.300 +78 164.700 +78 279.200 +79 79.700 +79 217.800 +79 236.400 +79 277.900 +80 144.700 +81 81.600 +81 117.900 +81 291.200 +82 92.900 +82 164.200 +82 243.200 +83 80.900 +83 131.900 +83 291.000 +84 57.900 +84 218.200 +85 99.200 +85 194.700 +85 265.600 +86 106.300 +86 149.500 +86 235.800 +87 96.400 +87 128.400 +88 125.900 +88 266.200 +88 290.600 +89 157.500 +89 165.100 +89 184.900 +89 265.800 +90 162.100 +90 217.700 +90 244.300 +92 144.300 +92 219.600 +92 264.800 +93 164.700 +93 186.200 +93 218.500 +93 259.700 +94 116.600 +94 164.800 +94 266.300 +95 164.600 +96 139.600 +96 290.900 +97 114.000 +97 260.300 +97 279.400 +98 99.200 +98 219.500 +99 83.000 +99 152.800 +100 144.900 +101 228.600 +102 99.300 +102 124.100 +102 163.600 +102 243.900 +103 70.000 +103 99.600 +103 116.200 +103 131.400 +104 82.300 +104 164.300 +104 280.400 +105 102.500 +105 132.500 +105 164.400 +105 185.500 +105 291.600 +106 291.500 +107 92.800 +107 201.600 +108 217.500 +109 116.600 +110 95.900 +110 243.900 +111 144.700 +113 117.800 +113 146.200 +114 186.000 +114 280.800 +115 58.500 +115 93.900 +115 185.100 +115 245.400 +116 81.900 +116 119.300 +116 129.300 +116 290.600 +117 265.900 +118 290.700 +119 186.900 +119 202.200 +120 146.000 +120 163.900 +120 260.100 +120 288.200 +121 161.500 +121 202.300 +121 252.300 +122 113.100 +122 164.800 +123 186.000 +123 236.100 +124 219.300 +125 93.800 +125 163.500 +125 186.000 +125 290.700 +126 81.100 +126 132.900 +126 230.900 +127 67.700 +127 115.000 +127 290.700 +128 266.000 +129 117.700 +129 186.100 +129 278.800 +130 79.700 +130 128.200 +130 245.200 +131 64.600 +131 217.800 +131 292.100 +132 199.200 +132 247.000 +133 130.100 +133 144.800 +134 100.600 +134 117.200 +134 291.500 +135 199.600 +135 266.400 +136 163.800 +137 116.400 +137 265.900 +138 56.000 +138 164.500 +138 288.700 +139 127.900 +139 185.800 +139 244.400 +139 279.300 +140 92.700 +140 117.900 +140 144.700 +140 258.700 +141 82.300 +142 124.800 +142 186.900 +143 62.800 +143 216.300 +143 243.500 +144 80.200 +144 129.000 +144 146.200 +144 185.500 +144 265.800 +145 67.000 +145 82.000 +145 164.900 +146 116.600 +146 187.400 +146 260.100 +146 290.400 +147 69.700 +147 185.400 +148 114.700 +148 125.400 +148 165.000 +148 228.700 +149 82.400 +149 116.400 +149 165.300 +149 216.600 +149 266.100 +149 291.600 +150 263.700 +151 66.900 +152 69.300 +152 94.000 +153 93.700 +153 125.700 +153 186.000 +153 218.000 +154 112.300 +154 186.300 +154 218.400 +155 164.400 +156 144.900 +157 69.600 +157 153.800 +157 265.300 +158 52.500 +158 185.800 +158 247.300 +158 263.900 +159 82.000 +159 96.400 +160 81.700 +160 116.000 +160 144.600 +160 266.200 +161 78.800 +161 201.200 +162 111.000 +162 291.900 +163 99.100 +163 266.300 +164 165.400 +164 219.600 +165 164.600 +165 291.200 +166 82.900 +166 164.700 +166 235.800 +167 202.000 +169 100.100 +169 279.500 +170 52.600 +170 67.600 +170 201.700 +170 219.500 +171 187.200 +171 279.300 +172 81.700 +173 61.600 +173 102.500 +173 164.500 +173 279.300 +174 164.200 +175 68.900 +175 184.200 +175 266.000 +176 83.200 +176 144.100 +177 132.000 +177 218.300 +177 280.000 +178 280.500 +180 243.700 +181 144.300 +181 264.100 +182 82.000 +182 245.500 +183 219.700 +184 244.100 +187 126.400 +187 164.500 +187 289.500 +188 114.800 +188 235.800 +189 145.900 +190 50.200 +191 93.300 +191 117.600 +191 164.800 +192 164.300 +192 290.800 +193 258.500 +194 164.400 +194 185.900 +196 99.400 +196 218.100 +196 227.200 +197 92.000 +197 290.500 +198 217.900 +200 102.200 +200 144.900 +201 81.700 +201 164.800 +201 218.500 +201 244.500 +201 291.700 +202 165.100 +204 56.300 +204 164.500 +204 185.000 +205 243.400 +205 290.500 +207 50.300 +207 115.300 +207 152.200 +207 278.800 +207 289.100 +208 101.200 +208 279.700 +209 219.600 +210 128.100 +210 164.400 +212 69.300 +213 279.200 +214 112.900 +214 164.400 +214 228.700 +215 290.800 +216 96.600 +216 245.000 +217 160.300 +217 218.100 +218 131.800 +218 218.100 +219 164.600 +220 81.500 +220 244.700 +221 126.100 +221 292.000 +222 108.900 +222 203.300 +222 266.100 +223 144.200 +223 164.800 +223 215.200 +223 274.800 +224 114.400 +224 164.400 +225 81.500 +225 95.100 +225 115.800 +226 165.100 +227 133.700 +227 202.500 +228 280.200 +229 260.100 +230 219.400 +230 288.700 +231 52.300 +231 164.300 +232 71.300 +232 279.000 +232 291.200 +233 81.300 +233 97.000 +233 186.100 +234 79.000 +234 202.500 +234 244.000 +235 145.000 +235 184.400 +236 131.700 +237 100.500 +237 132.200 +237 185.800 +238 82.100 +238 184.300 +238 235.300 +239 81.300 +239 164.000 +239 246.000 +239 265.000 +239 291.400 +240 81.900 +240 160.400 +240 185.000 +240 245.000 +241 117.800 +241 183.900 +241 265.600 +241 291.200 +243 122.100 +243 165.000 +243 202.700 +244 245.100 +245 185.600 +245 223.500 +246 125.300 +246 291.200 +247 187.100 +247 202.800 +248 186.200 +249 50.300 +249 68.000 +249 164.200 +250 146.900 +251 101.800 +252 165.200 +252 280.000 +252 291.600 +253 185.400 +253 290.200 +254 79.700 +254 164.800 +255 69.600 +255 165.100 +256 259.300 +257 102.300 +257 116.400 +257 164.300 +258 164.700 +258 235.300 +259 93.800 +259 244.400 +259 279.200 +260 164.200 +260 186.100 +261 56.000 +261 245.100 +261 281.800 +262 164.500 +263 291.300 +264 81.600 +264 102.100 +264 187.300 +264 218.200 +265 116.800 +265 186.100 +265 281.100 +266 256.400 +266 290.400 +267 116.200 +267 185.700 +268 218.700 +268 291.200 +269 80.800 +269 144.100 +269 164.900 +269 201.100 +269 265.700 +269 291.000 +270 200.200 +270 219.400 +271 219.700 +272 132.200 +272 185.800 +272 219.300 +273 247.700 +273 260.200 +274 116.600 +275 164.600 +276 56.200 +276 106.800 +276 199.500 +276 259.600 +277 132.100 +277 162.800 +278 164.900 +279 82.400 +279 227.000 +280 102.200 +280 128.400 +280 164.400 +280 201.700 +281 50.300 +281 113.600 +281 124.600 +281 244.200 +282 70.500 +282 119.300 +282 130.000 +282 187.000 +282 218.000 +283 81.300 +283 245.300 +284 82.100 +284 140.600 +284 217.700 +284 244.900 +285 132.100 +285 187.200 +285 245.600 +286 107.100 +286 164.900 +286 186.200 +287 245.200 +288 71.000 +288 164.300 +288 244.800 +288 291.300 +289 81.100 +289 244.700 +290 82.200 +290 144.500 +291 116.400 +291 289.800 +292 117.800 +292 185.400 +293 53.300 +293 107.600 +294 107.100 +295 245.600 +295 280.400 +296 69.400 +296 144.100 +296 202.400 +297 144.900 +298 82.000 +298 99.900 +298 130.400 +298 218.100 +299 50.700 +301 71.400 +301 132.300 +302 258.700 +303 99.800 +303 219.700 +304 93.800 +305 198.100 +305 290.400 +306 55.600 +306 116.200 +306 162.900 +306 244.400 +306 289.100 +307 139.500 +307 164.700 +308 69.500 +308 125.500 +308 201.600 +308 244.400 +308 265.900 +309 116.600 +309 185.600 +309 265.400 +310 185.900 +311 186.000 +312 61.400 +312 81.200 +312 264.900 +313 185.300 +313 219.500 +313 280.000 +314 58.200 +314 128.300 +315 66.300 +315 126.200 +316 237.300 +316 253.100 +317 164.700 +317 201.200 +317 291.100 +318 125.500 +318 195.000 +318 218.000 +318 291.300 +320 164.700 +320 202.000 +320 219.100 +321 93.800 +321 140.900 +322 96.000 +323 117.500 +323 131.800 +323 258.400 +324 70.000 +324 122.600 +324 165.000 +325 115.700 +325 152.200 +325 164.400 +325 219.700 +325 263.800 +326 101.900 +326 245.300 +327 97.500 +327 218.300 +328 69.400 +328 187.300 +329 128.600 +329 164.300 +330 99.300 +330 144.400 +330 280.000 +331 164.400 +331 217.600 +331 264.100 +332 115.000 +332 279.300 +333 70.700 +333 219.300 +333 291.200 +334 55.000 +334 144.500 +335 125.400 +336 126.500 +336 200.800 +337 81.500 +337 281.400 +338 144.900 +338 281.400 +339 96.200 +339 135.900 +339 228.400 +339 244.300 +340 114.000 +340 244.400 +341 164.700 +342 260.500 +342 291.300 +343 122.500 +343 140.900 +343 264.600 +343 290.800 +344 108.200 +346 116.100 +346 150.500 +346 227.900 +346 289.200 +347 125.700 +347 184.500 +347 219.600 +348 244.700 +349 145.800 +349 164.700 +350 217.500 +351 81.800 +351 144.500 +351 165.200 +351 187.300 +352 105.200 +352 125.500 +352 164.500 +352 288.900 +353 184.700 +353 291.400 +354 68.500 +354 263.100 +355 54.300 +355 229.000 +356 69.400 +356 185.900 +356 264.700 +356 289.200 +357 107.900 +358 127.700 +359 70.000 +359 164.500 +359 185.200 +360 96.200 +360 159.800 +360 186.800 +361 58.800 +361 93.200 +361 113.700 +361 144.400 +361 164.800 +361 245.000 +362 56.600 +362 185.800 +363 185.400 +363 251.300 +363 265.000 +364 79.800 +364 218.300 +364 290.700 +365 92.800 +365 162.800 +367 82.000 +367 119.900 +367 161.300 +368 68.300 +368 131.600 +368 201.700 +368 235.100 +370 102.400 +370 124.500 +370 281.000 +371 98.600 +371 281.200 +373 127.000 +373 219.600 +373 265.700 +374 100.300 +374 133.500 +374 201.100 +374 219.600 +375 145.000 +375 185.900 +375 285.400 +376 116.600 +376 139.900 +376 245.100 +377 54.600 +377 64.500 +377 81.500 +377 164.500 +378 116.000 +378 187.200 +378 219.600 +379 57.400 +379 68.000 +379 125.700 +380 150.200 +380 164.400 +381 117.800 +381 217.300 +381 290.800 +382 93.400 +382 114.500 +382 127.900 +382 164.600 +382 219.400 +383 184.900 +383 265.700 +384 57.000 +384 96.300 +384 164.600 +384 228.600 +385 102.700 +385 163.000 +385 218.200 +385 290.900 +386 185.000 +386 265.700 +387 69.900 +388 164.600 +389 112.400 +389 290.600 +390 164.000 +390 184.400 +390 217.300 +391 185.200 +391 222.200 +392 81.400 +392 93.900 +392 131.700 +392 164.600 +392 226.200 +392 279.900 +393 164.200 +393 280.200 +394 93.300 +394 162.100 +394 200.900 +395 133.400 +396 96.400 +396 145.100 +396 187.300 +397 103.600 +397 146.400 +398 93.400 +398 116.600 +398 164.600 +399 245.700 +399 287.800 +400 93.200 +400 186.200 +400 202.800 +400 245.000 +401 93.800 +401 102.200 +401 183.400 +401 201.500 +401 227.700 +401 243.900 +402 244.500 +403 69.900 +403 144.900 +403 218.000 +403 260.600 +404 91.500 +404 144.600 +404 164.500 +404 218.200 +404 245.100 +404 265.600 +405 153.300 +405 266.000 +406 62.300 +406 145.900 +406 217.600 +406 264.800 +407 103.200 +407 116.400 +407 288.100 +408 108.400 +409 117.700 +409 200.300 +409 265.900 +410 219.400 +410 254.100 +412 132.700 +412 164.500 +412 219.400 +412 245.000 +413 219.300 +413 260.500 +413 289.100 +414 147.400 +414 158.400 +414 164.700 +415 81.600 +415 92.300 +415 266.000 +416 165.000 +416 186.900 +417 51.600 +417 116.700 +417 147.000 +417 243.900 +418 201.600 +419 81.600 +419 185.000 +420 291.800 +421 81.000 +421 141.200 +421 150.300 +421 280.400 +422 131.500 +423 185.800 +423 288.900 +424 116.100 +424 185.300 +425 151.900 +425 164.700 +426 245.200 +427 159.900 +427 291.300 +428 96.100 +428 164.200 +429 100.800 +429 116.200 +430 131.800 +430 185.800 +431 132.600 +431 184.300 +432 164.800 +432 291.500 +433 117.400 +433 243.700 +434 164.400 +435 101.200 +435 143.800 +435 185.200 +436 116.400 +436 164.800 +436 291.300 +437 57.000 +437 116.400 +437 148.600 +437 163.800 +437 186.200 +437 243.800 +438 152.700 +438 202.400 +439 81.400 +439 128.400 +439 194.700 +440 80.600 +440 186.300 +441 62.100 +441 81.000 +441 116.400 +441 202.300 +441 260.300 +441 289.600 +442 130.100 +442 199.500 +442 279.800 +443 70.400 +443 201.200 +444 100.900 +444 186.100 +444 291.000 +445 117.700 +445 280.900 +446 96.500 +446 133.200 +446 264.700 +447 108.100 +447 128.000 +448 55.700 +448 117.800 +448 185.200 +448 217.900 +448 291.500 +449 164.500 +450 56.100 +450 243.700 +450 281.000 +451 102.300 +451 279.900 +452 130.900 +452 164.200 +453 131.500 +453 185.700 +453 218.100 +454 185.700 +454 202.900 +454 245.200 +455 117.900 +455 163.700 +455 266.100 +455 290.300 +456 185.700 +456 259.800 +457 164.100 +458 55.400 +458 102.000 +458 147.900 +458 260.600 +459 101.300 +459 255.900 +460 93.100 +460 265.800 +461 71.100 +461 82.000 +461 124.800 +461 200.100 +461 266.100 +462 184.800 +462 243.000 +463 164.400 +463 219.600 +464 132.500 +464 164.500 +464 288.800 +465 70.200 +465 187.200 +465 217.900 +466 200.900 +467 94.000 +467 290.700 +468 57.500 +468 117.400 +468 187.200 +469 58.400 +469 117.900 +470 81.500 +470 126.800 +470 218.700 +470 290.900 +471 69.700 +471 164.700 +472 183.500 +472 258.200 +472 280.200 +473 88.900 +473 106.900 +473 164.600 +473 280.100 +474 96.800 +475 147.200 +475 164.400 +475 247.100 +476 96.100 +476 164.700 +476 217.600 +476 291.700 +477 282.700 +478 55.700 +478 93.400 +478 128.300 +478 218.300 +479 186.300 +480 93.000 +480 116.700 +481 117.300 +481 144.300 +481 184.900 +481 281.300 +482 55.500 +482 117.600 +482 165.200 +482 200.300 +483 152.900 +483 278.300 +484 81.300 +484 116.900 +484 217.800 +485 93.900 +485 116.900 +485 186.700 +485 245.300 +485 282.200 +486 132.400 +487 69.400 +487 259.400 +488 164.400 +489 244.400 +489 265.300 +490 107.300 +490 164.000 +491 164.700 +491 277.400 +492 225.800 +492 291.200 +493 101.200 +494 185.400 +495 55.900 +495 126.400 +495 189.200 +495 228.200 +496 70.300 +496 125.200 +496 187.100 +496 291.400 +497 70.900 +497 102.400 +497 263.100 +498 155.000 +499 200.500 +499 244.400 +500 243.300 +500 290.700 +501 113.900 +501 142.600 +501 291.200 +502 52.300 +502 117.900 +502 144.700 +502 235.100 +503 108.800 +503 116.500 +503 244.900 +503 290.600 +504 79.900 +504 187.200 +505 244.000 +506 245.700 +506 281.300 +507 80.500 +507 144.500 +508 185.700 +508 217.700 +509 95.900 +509 146.500 +509 185.100 +510 199.000 +511 187.100 +511 265.000 +512 102.100 +512 291.800 +513 90.900 +513 265.700 +514 80.700 +515 96.300 +515 197.400 +515 265.400 +516 259.800 +516 280.200 +517 126.400 +517 164.500 +517 187.100 +517 228.400 +518 182.900 +518 217.900 +519 164.000 +519 280.300 +520 107.000 +520 130.800 +520 229.700 +521 100.100 +522 72.000 +522 81.800 +522 107.300 +523 132.400 +523 144.800 +523 184.800 +524 108.400 +524 148.700 +524 164.000 +524 185.500 +525 67.900 +525 101.100 +525 144.900 +526 127.700 +526 164.400 +526 219.200 +526 245.500 +527 82.000 +527 112.900 +528 111.500 +529 97.600 +529 183.700 +530 132.300 +530 143.700 +531 202.100 +532 219.500 +533 226.100 +534 70.000 +534 99.900 +534 116.300 +534 128.000 +534 164.100 +535 114.200 +535 130.700 +535 260.300 +536 143.900 +537 51.100 +537 289.300 +538 165.300 +538 203.200 +539 77.900 +539 93.400 +539 164.900 +540 102.300 +540 244.600 +540 281.200 +541 69.800 +541 99.800 +541 164.500 +541 279.900 +542 101.100 +542 141.700 +543 160.800 +543 246.300 +544 99.700 +544 245.800 +545 260.400 +545 288.600 +546 79.000 +546 184.900 +546 290.300 +547 163.700 +547 288.700 +548 96.400 +548 217.600 +550 218.400 +551 265.700 +551 290.900 +552 93.200 +552 144.300 +552 201.600 +553 69.400 +554 57.400 +555 56.300 +555 131.300 +556 106.200 +556 185.800 +557 260.200 +558 186.000 +558 261.300 +559 95.700 +560 149.700 +560 184.400 +561 68.400 +561 187.100 +562 130.400 +562 291.100 +563 128.200 +563 163.400 +564 106.600 +564 200.700 +564 243.900 +565 187.100 +565 244.200 +566 233.600 +566 279.200 +567 52.100 +567 90.600 +567 118.000 +568 164.500 +569 201.800 +570 102.200 +570 148.600 +571 57.400 +571 218.400 +571 244.200 +572 81.700 +572 185.600 +572 259.700 +573 184.700 +573 266.000 +574 68.200 +574 81.900 +574 165.100 +574 243.700 +575 245.000 +576 165.400 +577 185.300 +578 96.200 +578 164.500 +579 52.400 +579 57.600 +579 101.200 +579 144.000 +579 164.600 +579 257.100 +580 114.200 +580 185.700 +581 56.200 +581 140.800 +581 164.700 +581 265.900 +583 118.800 +583 128.400 +583 163.200 +584 148.500 +584 165.400 +584 185.800 +584 229.600 +584 288.900 +585 116.100 +585 164.800 +585 200.700 +585 257.200 +586 184.500 +586 243.500 +587 65.300 +587 202.900 +587 218.300 +587 265.100 +589 219.900 +590 202.300 +591 291.300 +592 164.700 +592 218.200 +592 227.800 +593 128.500 +593 200.900 +594 150.400 +594 163.700 +594 290.600 +595 56.400 +595 147.200 +595 185.000 +596 101.500 +596 117.700 +596 201.600 +597 186.300 +598 50.800 +598 130.400 +598 164.800 +598 247.400 +598 280.300 +599 184.700 +600 69.500 +600 91.000 +600 131.700 +600 164.700 +600 244.400 +601 94.100 +601 185.800 +601 201.500 +601 280.600 +602 164.200 +603 130.900 +603 187.500 +603 202.100 +603 288.900 +604 66.500 +604 146.700 +605 67.300 +605 108.600 +605 144.300 +605 247.300 +606 82.000 +606 291.700 +607 81.700 +607 104.900 +608 141.100 +608 202.200 +609 115.400 +609 243.400 +609 280.500 +611 81.500 +611 163.300 +611 252.900 +612 51.100 +612 102.700 +612 184.000 +612 228.200 +612 280.700 +612 290.600 +613 280.200 +614 102.000 +614 130.800 +615 244.600 +616 56.900 +616 82.900 +616 106.800 +616 291.600 +617 81.900 +617 218.300 +618 219.500 +619 186.100 +619 218.700 +619 257.200 +620 81.800 +620 115.800 +620 165.300 +621 148.800 +622 82.300 +622 247.100 +622 260.100 +623 57.800 +623 185.000 +624 55.400 +624 82.300 +625 160.000 +626 128.500 +626 187.100 +626 280.700 +627 70.700 +627 132.300 +627 164.800 +627 280.800 +628 93.200 +628 132.100 +628 164.600 +628 185.800 +628 234.900 +628 281.300 +629 82.700 +629 117.000 +629 144.600 +629 219.500 +630 93.500 +630 164.800 +631 69.200 +631 82.100 +631 165.400 +631 244.800 +632 101.000 +632 218.100 +633 185.800 +633 243.700 +634 81.700 +634 291.400 +635 81.600 +635 164.100 +636 98.100 +636 117.400 +636 265.900 +636 279.000 +637 218.300 +638 127.600 +638 288.900 +639 92.600 +639 131.800 +639 164.500 +640 116.700 +640 131.100 +641 50.100 +641 83.100 +641 184.300 +642 105.700 +642 130.600 +642 283.100 +643 113.800 +644 82.300 +644 156.600 +644 219.600 +645 145.300 +645 164.400 +645 217.700 +646 161.500 +647 100.400 +648 164.400 +649 65.400 +649 117.100 +650 116.800 +650 144.300 +650 185.100 +651 117.300 +651 202.100 +652 218.100 +653 81.800 +653 102.000 +653 115.000 +654 219.300 +654 287.900 +655 112.400 +656 93.900 +656 184.900 +657 158.300 +657 290.300 +658 58.200 +658 81.800 +658 151.100 +658 164.500 +658 201.800 +658 279.900 +659 117.600 +659 164.600 +659 255.500 +660 81.500 +660 116.700 +660 291.300 +661 291.600 +662 100.100 +662 200.600 +663 96.300 +663 218.100 +663 264.500 +664 236.200 +664 259.900 +665 80.900 +665 199.000 +667 146.700 +667 162.000 +668 67.700 +668 109.900 +668 115.700 +668 202.100 +669 65.900 +669 93.000 +669 128.800 +669 165.000 +669 202.700 +670 50.600 +670 94.000 +671 70.000 +671 186.200 +671 218.000 +671 263.900 +672 216.800 +672 260.400 +673 100.400 +673 164.600 +673 244.300 +674 148.200 +674 247.300 +675 130.000 +675 145.800 +675 186.100 +676 116.100 +676 184.500 +676 280.700 +677 280.400 +678 144.700 +678 218.100 +679 57.500 +679 185.400 +679 226.500 +680 67.700 +680 184.700 +681 164.600 +682 258.800 +682 291.300 +683 100.200 +684 164.600 +684 219.700 +685 148.200 +685 185.700 +685 224.000 +685 266.100 +686 93.100 +686 99.300 +686 165.000 +686 202.700 +687 146.400 +687 218.300 +687 260.200 +688 57.800 +688 144.700 +688 219.600 +689 55.400 +689 144.400 +689 159.300 +689 200.900 +689 290.600 +690 56.500 +690 186.000 +691 164.800 +692 164.700 +693 106.800 +693 162.400 +694 133.200 +694 228.600 +695 52.100 +695 164.700 +695 192.300 +696 185.700 +696 202.100 +696 291.400 +697 229.300 +698 128.100 +698 281.000 +699 141.500 +699 164.900 +699 289.200 +700 67.300 +700 159.300 +701 68.200 +701 115.800 +701 130.000 +701 291.100 +702 164.300 +703 162.700 +704 69.500 +704 92.100 +705 81.500 +705 185.900 +705 218.800 +706 146.900 +706 281.000 +707 115.900 +707 160.600 +708 67.900 +708 91.400 +708 185.500 +709 81.700 +710 94.100 +710 130.600 +711 146.800 +711 202.000 +711 244.500 +713 128.100 +713 218.900 +714 117.500 +714 163.800 +714 284.200 +715 140.600 +715 165.200 +715 219.400 +715 244.400 +715 281.100 +716 68.400 +716 92.700 +716 219.700 +716 245.300 +717 68.600 +717 279.600 +718 81.800 +718 125.500 +718 259.500 +719 122.900 +719 164.100 +720 117.700 +720 164.000 +721 92.900 +721 150.000 +721 263.900 +722 117.500 +723 96.000 +723 150.100 +724 68.600 +724 290.800 +725 201.400 +726 70.800 +726 164.900 +726 228.500 +726 263.200 +728 93.200 +728 116.500 +728 185.500 +729 93.800 +729 146.300 +730 200.700 +730 217.900 +731 185.900 +732 186.200 +733 291.600 +734 290.300 +735 101.100 +735 164.800 +735 186.000 +735 217.200 +736 97.100 +736 130.900 +736 281.900 +739 52.000 +739 164.700 +740 81.400 +740 146.000 +740 165.000 +742 262.400 +743 117.100 +743 157.400 +743 281.300 +744 96.500 +745 52.200 +745 107.000 +745 116.700 +745 199.700 +746 56.700 +746 291.500 +747 116.500 +747 130.100 +748 103.000 +748 291.500 +749 164.500 +750 185.200 +751 82.200 +751 141.900 +751 150.200 +751 201.000 +752 102.100 +752 117.000 +752 164.000 +753 218.300 +753 259.900 +754 81.700 +754 159.200 +754 228.700 +754 280.600 +755 202.800 +755 229.300 +756 146.200 +757 117.100 +757 144.500 +758 291.800 +759 164.700 +759 201.700 +760 70.100 +760 152.800 +760 185.500 +761 165.700 +761 217.600 +762 69.500 +762 184.900 +762 228.600 +762 289.400 +763 279.200 +764 69.900 +765 99.000 +765 187.100 +765 201.600 +766 102.100 +767 163.800 +769 80.600 +769 98.800 +769 144.900 +770 131.300 +770 164.900 +770 184.300 +771 187.000 +772 202.300 +772 291.000 +773 200.100 +773 260.200 +773 281.200 +774 186.100 +774 280.100 +774 291.200 +775 50.300 +775 104.100 +775 116.500 +775 163.400 +775 185.500 +775 217.400 +777 218.600 +778 157.200 +778 245.000 +778 290.600 +779 54.600 +779 128.800 +779 187.000 +779 219.600 +780 81.200 +780 220.100 +781 82.000 +781 219.300 +782 98.500 +782 244.100 +782 290.300 +783 69.100 +783 109.100 +783 290.000 +784 116.700 +784 140.900 +784 187.600 +784 199.700 +784 260.600 +785 82.300 +785 148.200 +786 187.400 +786 199.900 +787 128.700 +788 164.400 +788 288.600 +789 102.300 +789 291.000 +790 116.300 +790 186.400 +791 113.500 +791 125.800 +791 219.700 +791 280.400 +792 65.500 +792 100.000 +792 116.800 +792 165.100 +792 198.600 +792 290.800 +793 100.200 +793 142.000 +793 218.500 +793 265.400 +794 116.500 +794 217.700 +795 218.200 +796 128.400 +796 183.000 +796 264.200 +796 281.500 +797 198.500 +798 117.100 +798 132.200 +798 164.500 +798 201.900 +799 265.200 +800 99.900 +800 141.000 +801 92.700 +801 220.100 +801 244.800 +802 202.100 +803 50.300 +803 82.100 +803 128.200 +803 164.800 +803 186.800 +803 218.300 +804 164.500 +804 244.800 +804 289.800 +805 116.000 +805 245.500 +805 287.400 +806 96.900 +806 118.000 +807 93.300 +807 278.400 +808 217.700 +808 260.100 +809 67.400 +809 82.600 +809 219.600 +809 244.000 +810 93.400 +810 260.500 +811 67.500 +812 183.900 +812 259.700 +813 126.400 +813 163.200 +813 279.700 +814 93.700 +815 88.500 +815 153.400 +816 164.800 +816 218.300 +816 289.500 +817 92.400 +817 164.600 +818 105.100 +818 130.800 +819 69.100 +819 158.900 +819 260.400 +820 219.400 +820 281.700 +820 291.800 +821 101.900 +822 116.100 +822 164.400 +822 257.000 +823 129.000 +824 146.300 +824 164.600 +824 202.300 +824 245.100 +825 164.200 +826 145.100 +826 164.400 +827 79.400 +827 94.000 +827 202.600 +827 277.900 +829 101.300 +829 126.900 +829 201.400 +829 289.200 +830 57.900 +830 128.500 +830 162.100 +830 186.700 +830 266.100 +831 81.700 +831 185.900 +832 131.700 +832 164.400 +833 64.800 +833 153.500 +833 164.800 +834 106.900 +834 280.600 +836 99.500 +836 164.700 +836 187.000 +836 219.400 +837 50.300 +837 66.400 +837 244.300 +838 104.700 +838 132.600 +838 186.100 +838 280.200 +839 218.200 +840 101.200 +840 161.600 +841 57.500 +841 127.700 +842 126.400 +842 165.300 +842 185.900 +843 100.000 +843 107.500 +843 146.500 +843 184.500 +843 228.400 +843 244.300 +844 187.000 +845 141.100 +846 50.800 +846 98.000 +846 290.900 +847 104.600 +847 185.900 +847 265.400 +848 164.600 +848 290.900 +849 126.300 +850 69.900 +850 144.700 +851 57.800 +851 164.500 +851 265.000 +851 280.700 +852 69.700 +852 102.300 +852 130.700 +852 266.000 +853 81.200 +853 219.700 +853 228.600 +853 260.400 +853 290.600 +854 99.400 +854 202.300 +854 266.000 +855 235.400 +856 70.300 +856 146.500 +856 254.700 +857 69.200 +857 164.700 +857 194.200 +857 202.000 +857 258.500 +858 106.700 +858 144.700 +859 117.200 +859 219.000 +860 202.900 +861 265.700 +863 101.300 +863 185.300 +864 81.600 +864 125.900 +864 245.500 +865 150.200 +865 185.500 +866 81.700 +866 200.400 +866 260.400 +867 263.800 +869 99.700 +869 143.900 +869 187.100 +870 102.500 +871 55.300 +871 127.400 +871 247.500 +871 290.900 +872 164.400 +872 187.100 +872 265.600 +873 81.500 +874 185.300 +875 82.000 +875 163.900 +875 260.300 +876 128.400 +876 165.400 +876 219.600 +876 265.600 +877 281.300 +878 117.600 +878 186.800 +879 116.200 +880 82.500 +880 144.600 +880 201.700 +881 144.200 +881 217.500 +881 287.500 +882 106.200 +882 217.400 +882 258.900 +883 164.600 +884 186.800 +884 228.000 +885 279.900 +885 291.600 +886 280.000 +887 67.300 +887 82.200 +887 126.200 +888 164.800 +888 201.300 +889 61.700 +889 203.200 +889 280.200 +890 186.600 +890 291.000 +891 102.100 +891 186.200 +892 67.700 +892 116.400 +892 164.000 +892 202.300 +892 259.900 +892 291.500 +893 291.500 +894 127.500 +895 131.700 +895 163.800 +896 144.300 +896 185.200 +897 185.800 +898 126.400 +898 144.800 +898 247.800 +899 101.500 +899 117.700 +899 219.400 +899 256.500 +899 288.100 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_3_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_3_i_pop.dat new file mode 100644 index 000000000..9267e5edd --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_3_i_pop.dat @@ -0,0 +1,540 @@ +sender time_ms +900 55.800 +900 99.800 +900 229.700 +902 163.900 +902 218.200 +903 69.500 +903 105.600 +903 281.800 +904 118.000 +904 144.400 +904 186.100 +905 164.800 +905 287.600 +906 85.600 +906 244.300 +907 68.600 +907 147.100 +907 186.100 +907 260.700 +908 244.400 +908 291.000 +909 81.400 +909 117.800 +909 219.700 +910 217.800 +910 245.500 +910 291.300 +911 124.600 +911 164.500 +911 216.600 +911 229.500 +913 66.500 +913 115.700 +913 185.800 +914 96.100 +914 202.600 +914 288.600 +915 51.000 +915 158.100 +916 290.800 +917 158.200 +917 244.300 +918 92.700 +918 127.100 +918 145.000 +919 81.100 +919 131.300 +920 219.100 +921 164.700 +922 107.300 +922 164.300 +922 260.300 +923 116.200 +923 185.600 +924 163.900 +924 201.500 +924 245.100 +925 100.200 +925 236.500 +926 95.700 +926 101.500 +926 158.300 +926 290.600 +927 82.000 +927 153.500 +928 52.700 +928 108.300 +929 114.300 +929 165.300 +929 265.700 +930 99.900 +930 144.900 +930 164.300 +930 217.500 +931 70.300 +931 106.200 +932 130.600 +932 281.200 +932 291.300 +933 281.100 +935 114.300 +936 151.900 +936 164.200 +938 116.000 +938 131.700 +938 183.200 +938 291.600 +939 164.000 +939 243.000 +940 116.100 +940 202.300 +940 264.900 +940 288.200 +941 55.300 +941 97.400 +941 142.100 +941 164.900 +941 202.400 +941 266.000 +942 125.800 +943 128.800 +944 92.900 +944 132.800 +944 229.500 +944 287.800 +945 127.500 +945 164.600 +946 163.900 +946 185.900 +946 218.000 +947 64.900 +947 127.400 +948 67.000 +948 217.700 +948 291.800 +950 114.900 +950 185.900 +950 228.500 +950 280.800 +951 164.600 +952 113.600 +952 165.500 +952 187.100 +953 218.200 +953 243.400 +953 291.700 +954 102.000 +954 128.000 +954 181.600 +955 141.600 +955 164.600 +955 266.400 +957 70.000 +957 244.800 +957 280.700 +958 291.300 +959 127.700 +959 201.400 +959 265.200 +959 287.900 +960 200.700 +961 201.500 +962 61.700 +962 69.600 +962 93.000 +962 102.200 +963 279.300 +964 71.500 +964 133.000 +964 201.500 +964 219.600 +965 291.300 +966 70.200 +966 83.100 +967 70.900 +967 93.600 +967 117.500 +967 150.300 +967 291.300 +968 82.000 +968 93.300 +968 218.200 +968 291.300 +969 193.900 +969 246.200 +970 146.100 +971 255.700 +972 66.200 +973 164.600 +974 105.900 +974 244.700 +975 82.000 +975 165.200 +975 197.300 +976 115.600 +976 143.300 +976 185.600 +976 235.900 +977 68.500 +977 140.900 +977 186.800 +978 288.700 +979 69.500 +979 150.300 +979 219.400 +979 291.300 +980 144.300 +980 185.000 +981 112.600 +981 265.600 +981 287.900 +982 93.300 +982 230.800 +983 131.900 +983 164.800 +984 81.900 +985 105.700 +985 187.300 +985 219.400 +985 228.500 +985 265.500 +986 115.600 +986 185.300 +987 96.500 +987 158.300 +987 185.600 +987 291.700 +988 69.100 +988 261.400 +989 82.000 +989 117.600 +990 92.400 +990 131.900 +990 183.700 +990 259.000 +991 82.100 +991 280.100 +992 278.700 +993 143.400 +993 265.600 +994 186.200 +994 260.100 +995 219.300 +995 277.700 +996 147.200 +996 218.300 +996 280.000 +997 99.400 +997 124.400 +997 164.600 +997 185.800 +998 218.700 +998 265.900 +999 291.300 +1000 80.400 +1000 113.400 +1000 144.900 +1000 218.300 +1001 265.900 +1002 106.900 +1002 185.900 +1002 244.300 +1003 164.200 +1003 230.900 +1004 75.200 +1004 117.600 +1004 202.500 +1005 81.400 +1005 164.400 +1005 266.000 +1006 50.500 +1006 100.400 +1006 140.600 +1007 116.600 +1008 164.200 +1008 244.600 +1009 82.700 +1009 244.700 +1010 125.300 +1010 152.700 +1010 201.500 +1010 217.700 +1010 237.000 +1010 280.000 +1011 185.500 +1011 291.000 +1012 100.700 +1013 80.100 +1014 55.900 +1014 79.200 +1014 184.300 +1015 164.600 +1015 185.600 +1016 146.500 +1016 185.300 +1016 280.200 +1017 164.600 +1017 202.000 +1018 81.500 +1018 132.500 +1018 201.500 +1018 280.600 +1019 50.400 +1020 164.600 +1020 187.400 +1021 81.900 +1021 93.800 +1021 125.600 +1021 164.700 +1021 202.800 +1022 265.700 +1023 152.600 +1023 197.200 +1023 219.600 +1024 234.900 +1025 102.200 +1025 164.300 +1025 187.200 +1025 202.900 +1026 115.700 +1026 280.000 +1027 184.200 +1027 217.900 +1028 123.800 +1028 219.600 +1028 282.300 +1029 80.600 +1029 185.700 +1030 51.400 +1030 164.700 +1031 116.000 +1031 164.500 +1032 82.300 +1033 101.900 +1033 108.300 +1033 130.400 +1033 164.500 +1033 236.000 +1034 81.700 +1034 96.700 +1034 228.300 +1034 280.500 +1035 117.100 +1035 164.400 +1036 69.400 +1036 96.600 +1036 234.900 +1037 236.300 +1038 164.000 +1039 69.600 +1039 162.900 +1039 287.900 +1040 99.000 +1040 187.200 +1040 201.000 +1040 291.200 +1041 186.200 +1041 281.800 +1042 257.800 +1043 56.400 +1043 116.100 +1043 218.700 +1043 260.800 +1043 280.300 +1044 93.000 +1045 162.300 +1045 185.600 +1045 202.500 +1045 229.600 +1046 68.000 +1046 116.000 +1046 183.400 +1046 290.900 +1048 131.900 +1048 281.300 +1049 184.900 +1050 109.200 +1051 102.400 +1051 147.100 +1051 200.700 +1051 219.600 +1051 242.800 +1052 80.500 +1052 290.700 +1053 101.800 +1054 96.400 +1054 117.200 +1055 194.300 +1055 202.700 +1055 228.200 +1055 290.400 +1056 152.400 +1056 266.000 +1056 280.000 +1057 93.900 +1057 186.100 +1057 265.100 +1058 244.200 +1060 164.800 +1060 245.100 +1061 149.800 +1061 164.400 +1061 218.100 +1062 144.500 +1062 244.000 +1063 202.300 +1063 289.200 +1064 245.400 +1065 79.200 +1065 165.200 +1065 218.800 +1066 81.800 +1066 127.900 +1066 164.600 +1067 129.000 +1067 164.900 +1067 186.000 +1067 228.100 +1067 280.500 +1067 291.400 +1068 148.900 +1068 288.700 +1069 144.800 +1069 219.700 +1069 247.000 +1069 259.800 +1069 290.900 +1070 81.700 +1070 184.300 +1070 258.900 +1072 164.300 +1072 265.500 +1073 164.900 +1073 202.000 +1074 106.800 +1074 142.000 +1074 244.700 +1074 280.100 +1075 291.800 +1076 217.600 +1077 186.900 +1077 290.700 +1078 235.100 +1079 57.900 +1079 93.800 +1079 141.000 +1079 185.400 +1080 159.000 +1080 245.600 +1081 82.200 +1081 130.600 +1081 231.100 +1081 290.700 +1082 57.200 +1082 185.600 +1082 289.300 +1083 164.600 +1083 219.400 +1083 244.000 +1084 126.000 +1084 165.100 +1085 99.600 +1085 108.100 +1085 290.800 +1086 56.500 +1086 116.800 +1086 164.600 +1087 130.000 +1087 165.000 +1087 246.200 +1087 290.900 +1089 101.700 +1089 128.500 +1089 201.700 +1089 291.000 +1090 81.800 +1090 140.400 +1090 185.400 +1090 244.400 +1091 114.200 +1091 185.400 +1091 280.200 +1092 116.600 +1092 187.300 +1092 291.800 +1093 71.000 +1093 117.400 +1093 131.800 +1093 146.000 +1093 290.200 +1094 101.100 +1094 116.500 +1094 245.000 +1095 92.900 +1096 50.100 +1096 154.200 +1096 164.400 +1097 93.800 +1097 114.600 +1097 185.700 +1097 265.700 +1098 58.300 +1099 144.200 +1099 219.600 +1100 132.100 +1100 202.100 +1101 217.200 +1102 69.300 +1102 82.100 +1102 117.400 +1102 245.800 +1102 291.200 +1103 99.900 +1103 200.300 +1104 218.200 +1104 252.400 +1105 107.700 +1105 263.500 +1106 81.400 +1106 236.500 +1108 185.200 +1108 246.800 +1108 265.700 +1109 201.900 +1110 81.500 +1110 132.700 +1110 165.200 +1110 201.500 +1111 82.000 +1111 278.200 +1113 218.600 +1115 57.500 +1115 96.400 +1115 265.700 +1116 93.200 +1116 149.800 +1116 201.200 +1116 291.400 +1117 127.500 +1118 289.100 +1119 202.500 +1119 277.600 +1119 290.300 +1120 186.100 +1120 261.700 +1120 265.600 +1121 82.500 +1121 187.000 +1122 131.700 +1122 202.300 +1122 291.800 +1123 98.600 +1123 113.400 +1123 164.500 +1123 186.000 +1123 216.800 +1123 244.500 +1123 290.400 +1124 81.600 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_4_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_4_e_pop.dat new file mode 100644 index 000000000..f7a2bbb1e --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_4_e_pop.dat @@ -0,0 +1,1984 @@ +sender time_ms +0 67.900 +0 126.600 +0 186.000 +0 217.800 +1 116.000 +1 290.600 +2 128.600 +2 291.900 +3 266.200 +3 291.400 +5 124.500 +5 245.400 +6 116.800 +6 291.700 +7 155.400 +7 164.500 +7 185.500 +7 279.200 +8 57.100 +8 124.800 +9 67.700 +9 185.600 +10 131.600 +10 185.300 +10 291.000 +11 57.100 +11 101.900 +11 114.400 +11 280.900 +12 96.400 +12 129.700 +12 185.400 +12 266.200 +13 184.500 +13 217.700 +13 290.400 +14 194.100 +15 247.400 +15 291.200 +16 52.800 +16 68.100 +16 281.300 +17 56.500 +17 144.900 +17 164.400 +17 288.400 +18 92.800 +18 164.700 +19 164.600 +20 107.500 +20 291.900 +21 165.100 +22 93.400 +22 201.100 +22 228.100 +22 281.200 +23 81.900 +23 102.400 +23 280.100 +24 291.800 +25 99.500 +25 116.000 +25 259.900 +26 164.400 +26 291.200 +28 163.300 +28 219.400 +29 152.500 +30 82.000 +30 186.900 +30 222.200 +30 291.400 +31 185.600 +32 69.200 +32 144.300 +32 218.000 +33 81.500 +33 139.600 +33 164.600 +33 279.800 +34 56.200 +34 187.000 +34 256.800 +35 98.500 +35 217.900 +35 266.000 +35 289.200 +36 92.800 +36 287.700 +37 69.800 +37 151.800 +38 116.800 +38 144.700 +38 164.200 +40 57.400 +40 101.700 +40 131.800 +40 164.600 +40 187.000 +40 279.100 +41 125.600 +41 235.700 +42 101.200 +42 291.300 +43 216.300 +43 260.100 +44 100.100 +44 164.500 +45 201.500 +45 291.700 +46 99.000 +46 117.000 +47 74.800 +47 115.800 +47 181.800 +47 200.600 +48 81.100 +48 131.300 +48 146.400 +48 164.800 +49 164.500 +49 290.900 +50 127.900 +50 245.200 +51 163.100 +52 260.400 +53 93.100 +53 185.700 +53 229.400 +53 291.600 +54 266.100 +55 147.400 +55 279.600 +56 161.700 +56 259.400 +57 165.000 +57 202.100 +57 246.600 +58 93.300 +58 114.200 +58 279.100 +59 94.000 +59 265.900 +60 104.700 +60 130.900 +60 281.300 +62 55.700 +62 96.900 +62 129.900 +62 281.000 +63 56.500 +63 219.900 +65 69.600 +65 163.900 +65 199.800 +66 228.200 +67 116.500 +67 201.000 +67 288.900 +68 93.400 +68 164.300 +68 291.200 +69 93.200 +70 81.600 +70 290.600 +71 58.700 +71 164.600 +71 291.500 +72 131.300 +72 280.100 +73 69.700 +73 96.400 +73 153.000 +73 260.400 +73 280.200 +74 68.100 +74 101.200 +74 182.000 +74 281.500 +75 202.700 +75 256.700 +75 288.700 +77 92.800 +77 245.100 +78 67.700 +78 185.400 +78 290.500 +79 145.900 +79 185.400 +79 266.000 +80 113.900 +80 164.600 +80 185.900 +80 244.300 +81 150.800 +82 132.400 +82 164.600 +82 291.100 +83 163.300 +83 199.900 +83 217.900 +84 99.300 +84 184.300 +84 287.100 +85 187.200 +86 186.300 +86 244.200 +87 69.700 +87 141.300 +88 187.300 +88 244.200 +88 289.300 +89 146.500 +90 280.900 +91 184.200 +91 291.000 +92 185.200 +93 107.400 +93 244.100 +94 116.000 +94 164.400 +94 219.400 +95 55.900 +95 81.600 +96 128.700 +96 147.100 +96 229.600 +97 92.100 +97 150.300 +97 201.700 +98 144.700 +98 187.000 +98 259.800 +99 70.100 +99 131.200 +100 164.600 +101 163.800 +101 201.400 +103 50.400 +103 81.400 +103 164.400 +103 288.400 +104 81.700 +104 93.000 +104 142.200 +104 185.000 +104 218.500 +104 287.100 +105 200.500 +106 116.500 +106 201.800 +107 144.800 +108 117.800 +108 219.700 +109 70.900 +109 164.200 +109 219.300 +110 107.200 +110 218.400 +112 68.000 +113 289.000 +114 99.700 +114 165.100 +114 185.700 +115 54.800 +115 186.100 +115 244.000 +115 291.800 +116 126.300 +116 145.800 +116 261.400 +117 124.800 +117 164.800 +118 248.300 +119 50.200 +119 185.700 +119 280.000 +120 67.900 +120 109.200 +120 164.900 +122 217.700 +124 128.000 +124 286.200 +125 164.800 +126 116.500 +126 164.700 +126 187.400 +126 259.900 +127 117.100 +128 117.800 +128 158.400 +128 279.300 +129 55.000 +129 129.600 +129 164.500 +130 101.000 +130 185.200 +130 266.000 +131 126.400 +132 117.100 +132 131.300 +133 165.100 +134 117.000 +135 82.100 +135 164.500 +135 219.600 +135 291.100 +136 81.500 +136 187.000 +136 281.000 +137 68.300 +137 92.500 +137 200.400 +137 290.000 +138 100.200 +138 165.100 +139 50.400 +139 219.200 +139 244.700 +139 288.500 +140 81.200 +141 67.600 +141 116.900 +142 185.900 +142 280.100 +143 186.200 +143 255.100 +144 69.800 +144 117.200 +144 219.600 +145 82.100 +145 111.500 +145 116.400 +146 101.300 +146 126.500 +146 142.500 +146 164.000 +146 187.300 +146 219.400 +147 164.700 +148 265.500 +149 105.900 +149 139.700 +149 202.200 +149 291.200 +150 80.900 +150 164.800 +150 218.000 +150 263.300 +150 291.700 +151 141.500 +151 235.700 +152 56.100 +152 96.600 +153 99.900 +153 186.100 +153 279.800 +154 185.700 +156 99.300 +156 132.500 +157 144.500 +158 150.100 +158 164.600 +159 81.800 +159 165.200 +160 185.400 +160 218.100 +161 165.600 +161 260.200 +161 291.700 +162 164.800 +163 94.100 +163 116.000 +163 184.400 +164 116.500 +164 162.900 +165 94.000 +165 185.100 +165 247.000 +166 68.400 +166 280.300 +167 52.100 +167 145.300 +167 244.500 +168 141.900 +168 281.300 +169 56.300 +169 131.100 +169 219.700 +170 50.600 +171 164.700 +172 67.600 +172 96.500 +172 164.600 +172 291.100 +173 93.200 +173 164.300 +174 117.100 +174 265.800 +175 70.000 +175 164.700 +175 285.400 +176 117.100 +176 150.300 +176 266.300 +177 185.700 +178 164.700 +178 245.200 +179 219.600 +180 277.800 +181 186.900 +182 165.100 +182 229.300 +183 164.800 +184 164.600 +185 81.000 +185 100.400 +185 183.100 +185 289.900 +186 55.500 +186 61.900 +186 218.300 +186 279.200 +186 291.700 +187 152.700 +187 277.300 +188 125.500 +190 165.200 +190 218.200 +190 285.200 +191 99.200 +191 219.600 +192 164.600 +192 185.600 +193 80.700 +193 102.300 +193 116.300 +193 185.900 +193 218.200 +194 52.600 +194 164.300 +194 202.700 +194 265.200 +194 279.600 +195 245.500 +197 259.900 +198 128.400 +199 130.000 +199 245.500 +200 148.300 +200 185.800 +201 145.200 +201 218.300 +201 289.000 +202 164.000 +202 228.400 +203 132.400 +203 164.600 +204 164.200 +206 57.300 +206 93.000 +206 146.500 +206 259.500 +207 69.600 +207 184.700 +208 164.600 +209 105.000 +209 201.500 +209 246.700 +210 57.500 +211 218.400 +211 281.200 +212 92.600 +212 164.600 +212 219.500 +213 185.600 +214 106.400 +214 123.800 +214 217.800 +214 288.600 +215 80.800 +215 291.300 +217 164.500 +217 266.500 +218 165.200 +219 55.500 +219 185.900 +221 201.100 +222 108.100 +222 132.300 +222 186.700 +223 199.200 +223 218.200 +223 280.600 +224 62.700 +224 116.700 +225 80.900 +225 289.300 +226 164.300 +226 290.700 +227 98.900 +227 265.900 +228 125.500 +228 165.100 +229 165.600 +230 81.000 +230 164.100 +230 201.400 +232 79.200 +232 186.000 +232 202.000 +233 163.500 +234 164.000 +234 202.300 +234 290.800 +235 80.600 +235 102.000 +235 245.500 +236 102.200 +236 117.300 +236 245.100 +237 117.000 +237 130.100 +238 143.100 +238 245.500 +238 289.300 +239 107.800 +240 102.100 +240 185.600 +240 220.700 +240 280.600 +241 131.200 +241 164.400 +242 70.500 +242 82.100 +242 145.100 +242 259.800 +242 289.100 +243 99.900 +243 186.400 +243 259.900 +244 55.400 +244 117.100 +244 164.600 +245 69.100 +245 290.400 +246 117.200 +246 290.700 +247 163.900 +247 185.800 +248 116.800 +249 244.500 +250 94.100 +250 116.300 +250 244.200 +251 82.500 +252 219.600 +253 81.800 +253 217.600 +254 70.300 +254 200.100 +255 102.300 +255 184.400 +255 288.300 +256 164.600 +257 116.700 +257 145.900 +257 165.700 +258 184.500 +258 281.200 +259 56.000 +259 113.600 +260 245.700 +260 265.900 +262 146.100 +262 202.800 +262 244.800 +263 80.500 +263 164.400 +263 226.800 +264 148.400 +264 260.400 +265 186.100 +265 224.700 +265 263.300 +266 93.300 +266 202.200 +266 279.800 +267 291.100 +269 281.000 +270 288.500 +271 108.300 +271 164.100 +271 186.100 +272 99.500 +272 146.600 +272 244.200 +273 68.100 +273 291.700 +274 116.200 +275 65.900 +275 99.700 +276 212.500 +277 100.100 +277 164.500 +277 244.000 +277 266.000 +278 216.900 +279 108.600 +279 218.300 +279 246.600 +280 264.900 +281 80.800 +281 96.700 +281 114.900 +281 132.700 +282 96.800 +282 116.500 +282 265.000 +282 290.400 +285 106.700 +286 81.400 +286 93.300 +286 279.900 +287 56.000 +287 164.500 +287 260.600 +288 81.800 +288 186.800 +289 133.100 +289 164.600 +290 141.100 +290 200.700 +291 115.800 +292 219.400 +292 290.500 +293 144.400 +293 164.600 +294 116.500 +294 164.200 +295 153.600 +295 291.500 +296 54.400 +296 164.300 +297 65.500 +297 186.700 +298 185.800 +300 96.900 +300 185.200 +300 201.400 +301 115.900 +301 244.300 +301 281.400 +302 65.300 +303 185.700 +303 290.700 +304 153.100 +305 185.200 +306 144.800 +307 280.100 +308 164.500 +309 228.700 +310 100.900 +310 187.300 +311 164.600 +312 218.400 +312 289.300 +313 80.600 +313 154.300 +313 244.900 +314 148.400 +314 247.900 +315 279.900 +316 65.000 +316 126.200 +316 280.000 +317 182.500 +317 202.400 +317 230.500 +318 144.500 +318 164.400 +318 200.800 +319 116.700 +319 147.700 +319 186.000 +319 280.600 +320 55.600 +321 150.000 +321 290.800 +322 234.000 +323 58.100 +323 68.900 +323 218.000 +323 291.900 +324 142.400 +325 82.400 +325 144.300 +325 185.300 +326 78.600 +327 81.900 +327 116.700 +328 127.700 +328 230.600 +328 265.000 +329 265.900 +330 147.100 +331 82.400 +331 263.400 +332 116.800 +333 185.100 +333 217.900 +333 245.100 +334 164.400 +335 114.700 +335 217.600 +336 81.400 +336 130.500 +337 81.700 +337 164.800 +338 116.700 +338 259.100 +339 116.400 +339 245.800 +339 291.700 +340 164.400 +340 281.200 +341 116.600 +341 140.900 +342 52.400 +342 277.900 +343 117.600 +343 186.200 +343 201.500 +344 116.800 +345 164.700 +345 200.500 +347 56.500 +347 184.800 +348 82.200 +348 279.800 +349 187.300 +350 245.600 +351 201.600 +351 265.700 +352 93.500 +352 114.300 +352 266.200 +353 50.800 +354 184.700 +354 218.100 +355 68.100 +355 164.500 +355 291.200 +356 116.200 +356 164.000 +356 219.700 +356 285.100 +357 88.700 +357 126.200 +357 164.700 +357 260.500 +357 265.900 +358 69.100 +358 130.300 +359 201.600 +360 81.600 +360 244.400 +362 147.200 +362 164.400 +362 241.600 +363 116.000 +363 164.600 +363 279.300 +363 291.800 +364 164.400 +366 93.200 +366 236.500 +366 280.100 +367 146.200 +368 112.900 +368 184.800 +368 266.000 +370 128.200 +370 186.300 +370 265.200 +371 68.100 +371 185.300 +371 237.400 +371 266.200 +372 265.700 +373 117.000 +373 164.400 +373 290.500 +374 164.700 +374 235.000 +375 116.400 +375 219.000 +376 81.900 +376 280.100 +377 184.100 +377 290.800 +378 162.100 +378 184.600 +378 200.900 +378 265.900 +379 218.000 +381 101.900 +381 162.600 +382 101.300 +382 165.400 +382 201.300 +382 255.000 +383 185.900 +384 70.800 +384 102.100 +384 158.500 +384 164.600 +385 80.500 +385 281.200 +386 82.400 +386 99.300 +386 260.400 +387 113.200 +387 163.400 +387 278.300 +388 116.800 +388 144.900 +389 55.500 +389 100.200 +389 288.300 +390 227.300 +390 246.900 +390 291.500 +391 100.100 +391 185.300 +391 291.600 +392 67.300 +392 127.700 +392 152.800 +393 144.700 +393 157.600 +393 164.700 +393 290.900 +394 116.300 +395 265.600 +396 244.200 +396 266.000 +397 67.600 +397 164.900 +397 184.900 +398 69.300 +398 116.700 +398 186.100 +400 185.900 +400 259.400 +401 291.700 +402 68.900 +402 164.600 +403 93.500 +404 91.800 +404 186.100 +405 124.200 +407 57.700 +407 164.400 +408 164.100 +408 279.700 +409 80.900 +409 128.900 +409 187.000 +410 50.300 +410 101.400 +410 144.600 +410 164.300 +411 127.400 +411 149.800 +411 185.600 +412 164.400 +412 223.900 +412 229.600 +413 81.900 +413 154.300 +413 200.100 +413 288.800 +414 99.200 +414 116.700 +415 185.700 +416 64.900 +416 244.500 +418 96.400 +419 132.300 +419 150.200 +419 264.900 +420 117.000 +420 164.600 +421 96.500 +421 245.100 +422 164.500 +423 62.500 +423 125.900 +424 70.600 +424 165.000 +424 203.400 +424 217.800 +425 164.300 +425 236.100 +426 50.100 +426 78.400 +426 102.100 +426 126.400 +426 243.600 +426 291.400 +427 185.100 +427 290.600 +428 81.600 +428 219.400 +429 121.700 +430 57.500 +430 109.200 +430 164.500 +431 102.100 +431 116.400 +431 164.500 +431 265.800 +432 116.700 +433 290.600 +434 227.900 +435 80.200 +436 144.500 +436 202.300 +436 229.700 +437 79.100 +437 101.800 +437 185.800 +437 228.600 +438 96.100 +438 165.300 +438 201.100 +439 94.000 +439 128.000 +439 152.900 +439 229.700 +440 55.800 +440 93.100 +440 183.500 +440 266.200 +441 52.200 +441 70.500 +441 96.200 +442 116.100 +442 185.700 +442 260.400 +444 71.300 +444 292.000 +445 151.100 +445 187.300 +445 202.800 +445 287.700 +446 117.000 +446 285.000 +447 164.500 +447 217.300 +447 291.000 +448 81.900 +448 142.000 +448 265.000 +448 290.700 +449 132.100 +449 200.800 +449 266.400 +450 194.600 +450 266.100 +451 261.400 +452 133.200 +452 150.200 +452 185.500 +453 97.600 +453 108.500 +453 158.200 +453 218.600 +453 291.900 +454 114.200 +454 129.200 +455 126.400 +455 185.900 +456 50.100 +456 163.900 +456 217.400 +457 68.500 +457 130.900 +458 68.100 +458 117.200 +458 202.700 +460 162.600 +460 265.700 +461 244.100 +461 266.800 +462 80.700 +462 185.300 +464 82.100 +464 126.200 +464 164.400 +464 202.100 +464 289.400 +465 66.200 +466 99.700 +466 218.100 +466 245.000 +466 291.200 +467 81.700 +467 266.100 +467 291.700 +468 101.100 +468 218.100 +469 69.900 +469 146.500 +469 164.500 +469 200.700 +469 266.200 +470 163.800 +471 164.500 +472 86.700 +473 52.700 +473 116.400 +473 218.200 +473 265.300 +474 69.800 +474 201.100 +474 290.700 +476 145.200 +476 185.100 +476 201.200 +477 67.600 +477 107.900 +477 150.300 +477 287.300 +478 164.800 +478 280.200 +479 164.800 +479 279.100 +481 82.000 +481 165.000 +482 82.400 +483 57.900 +483 118.100 +483 164.600 +483 257.800 +484 184.300 +484 194.700 +484 281.800 +486 81.400 +486 186.900 +486 281.100 +487 102.800 +487 129.400 +487 187.300 +487 202.000 +487 227.400 +488 165.100 +488 219.600 +488 279.600 +489 131.900 +489 148.200 +489 164.700 +491 116.500 +491 124.100 +492 65.100 +492 113.100 +492 164.100 +492 219.700 +493 69.600 +493 217.500 +494 69.500 +495 96.100 +495 132.900 +496 141.600 +496 186.000 +497 117.400 +497 165.400 +498 58.000 +498 116.900 +498 130.700 +498 281.100 +499 124.500 +499 165.300 +500 164.900 +500 266.200 +501 164.400 +501 291.300 +503 248.200 +504 50.100 +504 279.300 +505 102.600 +505 164.100 +505 286.300 +506 100.000 +506 217.500 +507 219.500 +507 244.900 +507 290.900 +508 278.900 +509 82.100 +509 107.500 +509 155.300 +510 69.500 +510 144.300 +511 128.800 +511 228.600 +511 264.900 +511 290.700 +513 97.000 +513 185.900 +513 245.400 +515 109.200 +515 186.900 +515 258.300 +516 131.900 +516 165.000 +516 291.200 +517 81.900 +517 163.000 +517 260.600 +518 59.100 +518 68.500 +518 101.600 +518 277.600 +520 66.200 +520 243.400 +521 164.300 +521 291.800 +522 80.100 +522 281.400 +524 102.000 +524 266.300 +524 281.100 +525 70.000 +525 128.200 +526 68.600 +526 187.300 +527 200.600 +527 287.000 +528 185.600 +528 266.100 +528 290.900 +529 101.600 +529 263.800 +530 266.000 +531 100.200 +531 111.500 +531 164.300 +531 218.200 +532 93.600 +532 146.100 +532 164.500 +532 246.000 +533 50.100 +533 66.300 +533 164.900 +535 217.400 +535 276.900 +535 291.500 +536 68.000 +536 100.100 +537 216.200 +537 291.800 +538 94.100 +538 202.300 +538 290.900 +539 289.100 +540 164.100 +540 185.500 +541 281.200 +542 203.100 +544 115.900 +544 218.100 +545 151.300 +545 160.500 +546 97.400 +546 141.500 +546 185.200 +546 219.200 +547 80.600 +547 164.400 +548 80.600 +548 186.000 +549 160.400 +550 70.600 +550 141.200 +551 56.000 +551 160.700 +551 219.600 +551 288.800 +552 244.400 +553 186.500 +553 265.700 +554 244.200 +554 278.100 +555 108.100 +555 116.300 +555 290.000 +556 144.900 +556 236.300 +557 144.300 +558 56.200 +558 81.400 +558 131.300 +558 291.100 +559 68.000 +559 185.800 +560 92.200 +560 116.700 +560 164.300 +561 80.700 +561 128.500 +561 185.600 +562 117.200 +562 218.200 +563 127.900 +563 144.500 +563 218.800 +563 256.800 +564 141.700 +564 185.700 +564 244.100 +565 82.900 +565 185.100 +566 256.200 +567 165.300 +567 264.100 +568 227.400 +568 280.300 +569 141.100 +569 152.400 +569 201.500 +569 245.700 +569 281.300 +570 81.500 +570 164.100 +570 236.400 +570 260.500 +570 279.700 +571 218.200 +572 69.700 +572 164.600 +574 82.700 +574 185.500 +575 131.900 +575 185.500 +575 264.300 +578 100.900 +578 200.800 +578 219.700 +579 70.000 +579 186.500 +580 67.800 +580 127.900 +581 186.000 +582 81.400 +582 128.600 +582 186.600 +583 93.800 +583 117.300 +583 265.400 +584 164.500 +584 291.500 +585 117.500 +586 116.800 +586 164.600 +587 149.900 +587 185.900 +587 291.700 +588 117.200 +588 164.600 +588 266.000 +589 99.300 +589 288.900 +590 81.600 +590 202.100 +593 146.700 +593 201.300 +593 288.800 +594 131.300 +594 266.100 +594 291.400 +595 82.800 +595 146.700 +595 164.600 +595 260.500 +596 114.800 +596 146.200 +596 236.300 +598 69.500 +598 117.900 +598 185.900 +599 184.300 +599 202.800 +601 85.600 +601 117.300 +601 164.300 +601 219.600 +601 290.000 +602 51.400 +602 165.300 +602 266.000 +603 185.500 +604 165.300 +605 81.300 +605 99.500 +605 185.800 +606 66.400 +606 101.700 +606 127.500 +606 150.000 +606 264.700 +607 99.900 +607 218.300 +607 265.300 +608 116.800 +608 184.700 +609 112.200 +610 93.500 +610 288.400 +611 164.700 +612 116.500 +612 185.200 +612 218.400 +613 132.500 +613 164.600 +613 291.600 +615 61.200 +615 100.000 +615 217.800 +615 291.600 +616 141.300 +616 227.300 +616 288.900 +617 163.800 +617 187.300 +617 288.100 +618 81.400 +618 116.300 +618 144.700 +618 185.300 +618 230.000 +619 102.000 +619 289.000 +620 186.200 +621 80.900 +622 184.800 +623 81.000 +624 113.700 +624 164.300 +624 186.000 +625 79.800 +627 237.200 +628 122.100 +628 198.900 +629 213.200 +631 107.600 +631 164.800 +632 144.800 +632 186.000 +633 55.700 +633 185.000 +633 194.700 +633 279.100 +634 185.600 +634 280.900 +636 116.500 +636 184.400 +637 57.900 +637 128.700 +637 164.100 +637 256.200 +638 79.400 +638 183.900 +638 218.500 +638 277.200 +639 69.400 +639 103.300 +639 144.300 +639 163.200 +639 228.400 +639 288.800 +640 93.300 +641 185.300 +642 101.700 +642 202.000 +643 82.100 +643 149.900 +643 164.100 +643 193.700 +643 202.200 +643 258.400 +644 194.500 +645 114.300 +645 228.500 +645 289.000 +646 131.700 +646 281.500 +647 69.800 +647 106.800 +647 218.500 +647 245.600 +648 144.800 +648 263.800 +648 280.400 +649 164.600 +649 187.200 +650 69.600 +650 116.400 +650 290.500 +651 144.700 +651 265.400 +652 71.600 +652 116.700 +652 165.500 +652 265.300 +653 117.300 +653 132.700 +653 185.000 +653 219.700 +653 291.400 +654 165.000 +655 80.700 +656 96.500 +656 218.600 +657 56.200 +657 162.000 +657 228.700 +658 116.200 +659 243.800 +659 276.900 +660 68.000 +660 128.200 +660 131.900 +661 107.900 +661 144.500 +661 165.700 +661 184.200 +661 201.300 +662 117.500 +662 144.600 +662 186.000 +662 218.100 +662 265.700 +662 290.700 +663 113.600 +664 146.500 +664 218.000 +665 164.600 +665 256.400 +666 108.200 +666 141.300 +667 93.200 +667 130.700 +667 245.300 +667 287.000 +668 187.300 +669 102.300 +670 164.100 +670 226.100 +671 94.000 +671 117.600 +671 134.300 +671 163.700 +671 291.800 +672 57.900 +672 152.900 +673 163.100 +673 281.300 +674 80.400 +674 101.300 +674 185.900 +675 68.000 +675 106.100 +675 280.300 +676 130.200 +676 164.700 +676 260.400 +679 99.400 +679 162.200 +680 164.400 +681 259.900 +682 101.900 +682 286.200 +683 50.900 +684 80.500 +684 279.700 +685 132.400 +685 228.300 +686 132.000 +686 159.400 +688 93.200 +688 184.900 +688 243.800 +689 153.800 +689 164.200 +690 93.600 +691 115.400 +692 142.100 +692 164.700 +692 186.900 +693 156.500 +693 165.000 +695 93.600 +695 165.200 +696 201.400 +697 184.400 +697 253.800 +697 266.200 +698 291.100 +699 164.400 +699 202.600 +700 92.400 +700 234.700 +701 116.400 +701 164.300 +702 80.200 +702 100.000 +702 228.700 +703 244.900 +703 277.400 +704 80.900 +704 219.600 +705 93.300 +705 117.700 +705 140.000 +705 185.700 +705 219.700 +706 55.800 +706 69.500 +706 186.000 +706 260.500 +707 102.100 +707 144.500 +707 186.200 +709 117.000 +709 287.200 +711 144.900 +711 288.900 +712 66.500 +712 100.300 +712 219.500 +713 144.400 +713 217.300 +713 291.800 +714 56.100 +714 117.100 +714 130.400 +714 164.700 +714 185.700 +715 55.700 +715 185.400 +716 164.600 +716 185.700 +716 261.100 +717 185.800 +717 256.000 +717 277.800 +718 91.700 +718 264.600 +719 186.800 +720 153.400 +721 115.300 +721 217.600 +721 279.500 +722 279.100 +723 164.800 +723 265.900 +723 289.100 +724 68.500 +724 200.000 +724 281.100 +725 81.300 +726 218.800 +726 228.700 +727 153.000 +728 124.800 +728 130.500 +728 150.200 +729 69.300 +729 245.700 +730 133.600 +730 185.800 +731 57.100 +731 93.800 +731 217.700 +731 291.500 +732 200.600 +732 265.400 +733 52.200 +733 281.200 +734 88.600 +734 144.500 +735 130.300 +735 201.600 +735 219.700 +736 107.300 +737 93.200 +737 151.200 +737 184.800 +738 266.000 +739 131.800 +739 164.500 +739 186.500 +739 219.500 +740 290.200 +741 100.100 +741 164.700 +741 186.900 +741 245.400 +742 92.500 +742 217.800 +742 290.900 +743 164.500 +743 217.800 +744 130.500 +744 144.600 +744 244.700 +744 265.700 +745 116.500 +745 152.700 +745 184.900 +746 69.600 +746 143.000 +746 278.000 +747 102.100 +748 101.000 +748 116.500 +748 152.400 +748 229.300 +750 153.000 +750 184.900 +751 143.900 +751 164.600 +751 185.600 +751 288.500 +752 184.800 +752 227.100 +752 280.600 +753 147.600 +753 227.700 +753 278.300 +754 123.800 +754 244.100 +754 280.200 +755 70.300 +755 114.300 +755 185.000 +756 116.000 +756 144.600 +757 144.900 +757 219.600 +758 114.900 +758 145.000 +758 153.600 +758 218.100 +758 266.000 +759 92.400 +759 281.500 +760 164.500 +760 244.500 +761 227.500 +761 236.300 +761 287.500 +762 69.500 +762 148.700 +762 164.700 +762 220.700 +763 100.200 +763 125.400 +763 164.600 +763 244.300 +764 218.000 +764 279.500 +765 112.200 +766 56.100 +766 70.200 +766 131.200 +766 150.000 +766 218.100 +766 265.900 +767 145.200 +767 164.600 +767 279.200 +768 94.000 +768 185.300 +768 265.600 +768 288.900 +769 130.800 +769 265.100 +769 292.200 +770 67.600 +770 218.500 +771 185.200 +771 258.500 +771 291.400 +772 132.600 +772 185.900 +772 237.300 +773 164.900 +773 265.800 +774 96.000 +775 93.800 +775 153.200 +776 132.000 +777 117.500 +777 201.600 +779 115.600 +779 144.400 +779 203.200 +779 263.600 +780 185.900 +781 81.800 +781 290.700 +783 151.100 +784 81.900 +784 266.000 +785 186.100 +785 279.900 +786 81.700 +786 185.500 +786 219.900 +786 291.900 +787 52.600 +787 144.200 +787 164.700 +787 280.400 +788 69.000 +788 101.800 +788 186.000 +789 69.800 +790 71.800 +790 81.000 +790 93.100 +790 105.700 +790 116.800 +790 164.800 +791 116.600 +791 164.000 +791 278.900 +792 90.900 +792 164.300 +792 247.800 +793 78.400 +793 145.700 +793 184.900 +793 217.700 +794 185.600 +794 217.400 +794 261.200 +795 164.600 +795 184.800 +796 131.900 +797 80.700 +797 164.300 +797 234.300 +798 131.000 +798 245.100 +800 127.900 +800 164.600 +800 185.800 +800 290.500 +801 50.200 +801 81.800 +801 102.300 +801 144.100 +801 150.000 +802 69.400 +802 236.100 +803 92.100 +803 164.500 +803 243.900 +803 278.700 +803 291.600 +804 115.800 +805 69.300 +805 127.700 +805 187.400 +806 244.500 +806 265.600 +807 144.500 +807 156.100 +808 101.100 +808 128.200 +811 164.000 +811 185.900 +812 92.900 +812 227.900 +812 291.700 +813 93.100 +813 145.800 +813 217.400 +813 266.000 +814 164.400 +815 57.800 +815 81.400 +816 131.000 +817 50.300 +817 108.300 +819 50.300 +819 82.700 +819 218.400 +820 125.500 +820 146.300 +820 185.300 +820 290.500 +821 56.600 +821 260.200 +822 130.100 +822 146.600 +823 149.800 +823 244.000 +824 200.000 +824 232.600 +824 288.500 +826 165.300 +826 280.800 +827 131.500 +827 164.400 +827 282.800 +827 291.800 +828 101.800 +828 107.300 +828 141.600 +828 185.600 +829 101.800 +829 144.600 +829 265.200 +830 244.800 +831 81.100 +831 113.000 +831 140.300 +831 151.400 +831 217.900 +831 233.200 +831 244.500 +832 164.700 +832 266.100 +832 288.600 +833 56.000 +833 144.700 +833 235.200 +834 108.300 +834 183.200 +834 218.300 +835 184.900 +836 68.800 +836 130.900 +837 69.600 +837 187.100 +837 278.800 +838 66.400 +838 264.000 +838 291.600 +839 100.100 +839 291.400 +840 217.800 +841 164.200 +841 260.200 +842 58.000 +842 80.700 +842 164.900 +842 201.600 +842 245.500 +842 291.700 +843 183.400 +844 247.300 +846 127.900 +846 164.400 +846 217.600 +848 183.100 +848 289.100 +849 116.300 +849 281.200 +849 291.600 +850 98.600 +850 128.500 +851 187.200 +851 291.000 +852 107.000 +852 290.800 +853 202.000 +853 219.500 +854 69.900 +854 93.300 +856 122.200 +857 113.800 +857 128.200 +857 163.200 +857 274.200 +858 164.200 +859 93.500 +859 260.100 +860 127.100 +860 186.200 +860 291.100 +861 81.700 +861 243.000 +862 144.600 +862 156.400 +863 68.100 +863 218.000 +864 81.400 +865 57.100 +865 146.500 +866 130.800 +866 184.600 +866 218.200 +867 60.600 +867 69.700 +867 117.700 +867 164.800 +867 218.000 +868 65.800 +868 93.300 +868 201.000 +869 66.400 +869 116.100 +869 185.800 +870 70.600 +870 279.800 +871 116.300 +872 198.700 +872 279.500 +873 162.600 +873 259.100 +873 288.700 +874 69.600 +875 144.800 +876 115.700 +876 218.200 +877 105.900 +878 185.700 +879 67.300 +879 143.700 +879 185.000 +880 146.100 +880 165.200 +880 291.800 +882 80.200 +883 117.900 +883 129.800 +884 92.800 +884 185.100 +884 278.100 +885 58.000 +885 164.600 +886 142.100 +886 158.300 +886 202.700 +886 244.300 +886 291.400 +887 184.400 +887 230.700 +888 186.000 +888 265.300 +889 99.400 +889 114.200 +889 164.200 +889 291.600 +890 57.500 +890 219.800 +891 57.600 +891 230.900 +891 245.600 +892 79.700 +892 280.000 +893 164.300 +893 185.800 +893 218.600 +894 99.900 +894 244.100 +894 265.200 +895 165.000 +896 96.200 +896 102.100 +896 147.200 +897 69.400 +897 144.100 +897 245.400 +899 116.800 +899 218.900 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_4_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_4_i_pop.dat new file mode 100644 index 000000000..3e0e3a3b0 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_4_i_pop.dat @@ -0,0 +1,530 @@ +sender time_ms +900 200.700 +900 226.100 +901 144.100 +901 184.900 +902 164.100 +902 185.800 +902 245.800 +903 107.000 +903 163.900 +903 185.300 +904 219.600 +904 245.900 +905 96.600 +905 219.400 +906 140.800 +906 164.200 +906 186.800 +906 265.900 +907 164.000 +907 201.600 +908 81.500 +910 184.400 +910 227.200 +910 288.100 +911 80.600 +912 144.600 +912 218.700 +913 164.600 +913 187.200 +915 280.400 +916 144.700 +916 155.200 +916 280.200 +917 104.100 +917 128.600 +917 164.400 +917 227.200 +918 186.200 +918 279.700 +919 141.400 +919 164.400 +919 202.000 +919 291.900 +920 125.300 +921 81.700 +921 217.300 +921 259.800 +922 68.500 +922 193.300 +922 202.400 +922 219.700 +923 95.900 +923 187.000 +923 279.800 +924 112.800 +924 236.200 +924 289.000 +925 202.100 +925 244.300 +925 266.200 +926 68.000 +927 164.600 +927 218.200 +928 82.200 +928 128.500 +928 141.500 +928 254.300 +929 98.900 +929 132.700 +929 164.500 +929 244.000 +930 185.600 +931 82.000 +931 114.500 +931 165.000 +932 131.400 +933 116.400 +933 164.600 +934 54.800 +934 125.800 +934 163.500 +934 260.100 +935 116.300 +935 184.900 +935 235.900 +936 117.100 +936 164.600 +936 227.600 +937 50.900 +937 145.700 +937 185.700 +938 82.000 +938 201.700 +938 244.500 +939 164.500 +940 218.000 +940 291.400 +941 117.500 +941 141.700 +941 260.100 +941 291.300 +942 66.400 +943 109.000 +943 164.800 +943 245.200 +943 278.400 +944 164.200 +944 218.200 +945 201.900 +945 218.000 +946 186.200 +946 202.700 +946 247.300 +947 114.400 +948 92.500 +949 164.700 +950 290.400 +951 57.200 +951 164.800 +951 281.400 +952 117.300 +952 143.700 +952 201.600 +952 247.200 +953 69.300 +953 202.000 +953 259.900 +954 52.500 +954 82.200 +954 228.000 +955 99.000 +955 144.700 +955 290.800 +956 219.700 +956 281.400 +957 247.100 +957 259.200 +958 56.600 +958 93.900 +958 291.400 +959 56.800 +959 116.600 +959 145.000 +960 69.300 +960 145.100 +960 164.400 +961 69.600 +961 117.600 +961 185.000 +961 218.100 +962 96.000 +962 185.800 +962 220.100 +963 279.300 +964 144.700 +964 290.900 +965 102.400 +965 291.700 +966 187.200 +967 185.800 +967 288.900 +968 217.900 +969 219.200 +969 278.800 +970 184.500 +972 93.900 +972 290.500 +973 57.900 +973 229.600 +974 146.900 +974 245.300 +975 115.000 +975 128.500 +975 159.900 +976 94.100 +976 116.800 +977 116.200 +978 68.200 +978 131.200 +979 99.200 +979 127.400 +979 152.400 +979 184.700 +979 219.600 +980 51.000 +980 140.600 +980 184.700 +982 187.300 +982 265.300 +983 126.600 +983 229.600 +983 276.200 +984 186.200 +984 291.600 +985 291.700 +986 156.500 +986 164.900 +986 201.900 +986 290.400 +987 96.700 +989 100.100 +989 144.300 +990 287.500 +991 83.100 +991 279.600 +992 101.900 +993 56.500 +993 164.200 +993 287.900 +994 81.800 +995 56.700 +995 81.800 +995 114.900 +995 229.700 +995 260.300 +996 93.600 +996 132.100 +996 201.500 +997 117.500 +998 81.100 +998 247.400 +999 244.500 +999 281.400 +1000 164.600 +1001 108.000 +1001 125.400 +1001 185.300 +1001 245.500 +1001 290.100 +1002 61.700 +1002 117.800 +1002 278.600 +1003 128.800 +1004 185.700 +1004 245.900 +1005 219.000 +1006 279.600 +1008 128.800 +1008 145.800 +1008 266.100 +1009 165.400 +1009 185.800 +1009 201.100 +1010 69.100 +1010 116.600 +1010 187.200 +1010 218.300 +1010 281.600 +1011 50.400 +1011 131.800 +1011 165.000 +1011 187.100 +1011 194.500 +1012 131.000 +1012 164.300 +1012 244.200 +1013 132.400 +1013 218.000 +1013 265.200 +1014 58.400 +1014 128.400 +1014 146.400 +1014 202.600 +1014 290.100 +1015 144.000 +1015 187.200 +1015 244.300 +1015 288.600 +1016 101.200 +1017 127.100 +1018 101.600 +1018 247.200 +1019 69.700 +1019 128.800 +1019 193.700 +1020 290.100 +1021 79.200 +1022 132.100 +1022 164.200 +1023 81.400 +1023 139.200 +1023 164.800 +1023 219.400 +1023 265.100 +1024 69.300 +1024 145.800 +1024 291.300 +1025 107.700 +1025 152.300 +1025 164.700 +1026 96.800 +1026 116.600 +1026 291.700 +1027 69.600 +1027 278.100 +1028 185.800 +1028 265.900 +1030 141.700 +1030 163.800 +1031 92.700 +1031 131.600 +1031 164.400 +1032 70.500 +1032 164.900 +1032 220.600 +1032 243.300 +1033 58.300 +1033 70.300 +1033 131.100 +1033 185.900 +1033 265.700 +1034 131.800 +1035 57.800 +1035 96.300 +1035 130.300 +1035 197.000 +1035 244.200 +1036 50.900 +1036 154.700 +1036 185.500 +1037 81.700 +1037 140.500 +1037 217.800 +1038 219.200 +1039 128.900 +1039 163.800 +1039 243.600 +1040 164.400 +1040 246.000 +1040 256.500 +1042 82.000 +1042 279.700 +1043 290.800 +1044 116.200 +1045 218.100 +1046 92.500 +1046 102.300 +1046 153.600 +1046 165.200 +1047 165.100 +1047 187.100 +1047 291.700 +1048 107.500 +1048 184.900 +1048 218.200 +1048 260.500 +1049 93.200 +1049 164.500 +1049 185.700 +1050 130.400 +1050 212.400 +1050 279.200 +1051 116.800 +1051 266.300 +1051 290.700 +1052 108.000 +1052 147.200 +1052 164.700 +1052 262.500 +1052 281.100 +1053 56.600 +1053 66.800 +1053 164.100 +1053 279.100 +1054 67.800 +1054 115.900 +1054 184.800 +1054 264.900 +1055 81.900 +1055 144.300 +1055 219.200 +1055 284.000 +1056 218.400 +1057 116.900 +1057 145.000 +1057 201.300 +1058 183.900 +1058 266.000 +1059 81.500 +1059 291.700 +1060 259.600 +1061 81.000 +1061 128.600 +1061 164.500 +1061 291.200 +1062 164.300 +1062 226.900 +1062 288.700 +1063 98.400 +1063 259.300 +1064 69.800 +1064 146.600 +1064 218.200 +1065 110.100 +1065 116.300 +1065 130.700 +1065 245.600 +1066 101.600 +1066 265.900 +1067 51.000 +1067 265.700 +1069 184.600 +1069 217.200 +1070 69.200 +1070 148.800 +1071 101.900 +1071 164.500 +1072 108.300 +1072 281.600 +1073 186.100 +1074 67.700 +1074 100.100 +1074 279.100 +1076 99.600 +1076 153.000 +1076 292.000 +1077 106.900 +1078 117.700 +1078 219.500 +1078 289.800 +1079 187.000 +1080 55.000 +1080 70.600 +1080 185.600 +1080 244.400 +1080 260.400 +1081 106.700 +1081 164.500 +1081 265.700 +1082 153.500 +1082 187.100 +1083 116.500 +1083 230.800 +1083 259.100 +1084 116.800 +1085 217.800 +1085 260.400 +1086 107.100 +1086 164.900 +1086 281.100 +1087 50.200 +1087 157.600 +1087 184.800 +1088 131.100 +1088 201.700 +1088 236.500 +1088 282.000 +1089 101.600 +1089 151.100 +1090 57.600 +1090 212.600 +1090 280.300 +1091 116.300 +1091 185.600 +1091 258.500 +1092 131.300 +1092 255.400 +1093 69.500 +1093 101.300 +1094 244.300 +1095 229.400 +1096 107.900 +1096 197.500 +1096 266.400 +1097 70.200 +1097 116.000 +1098 93.100 +1098 163.600 +1098 291.800 +1100 116.700 +1101 149.800 +1101 185.900 +1101 255.800 +1102 80.900 +1102 164.400 +1102 186.000 +1102 291.900 +1103 81.600 +1103 93.200 +1103 243.400 +1104 57.600 +1104 163.500 +1105 80.800 +1105 164.800 +1105 219.300 +1105 244.900 +1106 81.200 +1106 164.500 +1107 81.700 +1107 130.500 +1108 117.200 +1108 202.700 +1108 291.300 +1109 147.400 +1109 164.900 +1109 185.600 +1109 244.100 +1109 279.300 +1110 81.800 +1110 144.300 +1110 200.500 +1111 91.300 +1111 202.200 +1111 280.800 +1112 81.500 +1113 69.800 +1114 55.900 +1114 148.900 +1114 164.500 +1115 144.100 +1115 184.400 +1116 125.800 +1117 117.700 +1117 147.600 +1117 219.800 +1117 230.900 +1117 266.500 +1118 69.300 +1119 61.700 +1119 81.400 +1119 146.100 +1119 165.100 +1119 264.500 +1120 116.500 +1120 289.200 +1121 94.000 +1121 130.400 +1123 217.800 +1124 218.000 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_5_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_5_e_pop.dat new file mode 100644 index 000000000..459a74159 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_5_e_pop.dat @@ -0,0 +1,2019 @@ +sender time_ms +0 116.200 +0 165.200 +1 82.000 +1 185.300 +2 101.300 +2 131.800 +2 164.000 +2 279.000 +3 57.300 +3 108.100 +3 185.900 +3 265.900 +4 56.700 +5 164.800 +6 143.500 +7 163.700 +7 260.400 +8 125.000 +9 67.500 +9 104.500 +9 164.900 +10 186.500 +10 256.500 +11 81.100 +11 164.700 +12 80.500 +12 93.300 +12 165.000 +12 290.700 +13 117.200 +13 219.500 +13 289.000 +14 90.800 +14 127.800 +14 163.800 +14 218.700 +14 291.300 +15 69.100 +15 117.200 +16 70.100 +16 92.900 +16 144.500 +16 186.000 +16 265.500 +17 164.700 +18 57.900 +18 130.100 +18 164.000 +18 217.600 +18 290.600 +19 164.600 +19 279.800 +20 103.400 +20 217.400 +22 82.200 +22 202.700 +22 277.400 +24 65.100 +24 81.500 +24 133.500 +24 146.500 +25 117.100 +25 164.400 +26 253.900 +27 164.300 +27 201.800 +27 245.000 +28 101.400 +28 244.100 +29 100.400 +29 245.900 +30 185.800 +31 92.800 +31 218.000 +32 81.800 +32 107.600 +32 185.800 +33 291.000 +34 117.300 +34 229.300 +35 130.200 +36 184.900 +37 127.800 +38 152.300 +38 201.900 +39 219.800 +39 245.300 +40 93.400 +40 164.400 +40 244.900 +41 101.600 +41 164.500 +41 186.700 +42 196.900 +42 290.900 +43 165.100 +43 219.600 +44 55.200 +44 118.000 +44 131.900 +45 184.200 +46 165.000 +47 98.000 +47 132.200 +47 185.200 +47 201.500 +48 126.300 +49 132.500 +50 164.600 +50 219.700 +51 68.400 +51 92.800 +51 290.700 +52 262.500 +53 116.700 +53 164.500 +53 187.100 +53 259.200 +54 114.200 +55 265.900 +56 184.300 +57 118.000 +57 185.400 +57 279.100 +59 81.700 +59 202.600 +59 219.700 +60 185.700 +61 115.500 +62 185.200 +63 115.900 +64 100.300 +64 164.400 +64 186.100 +64 244.000 +64 279.900 +65 164.800 +65 264.600 +66 162.700 +67 70.200 +67 184.800 +67 244.800 +68 116.200 +68 164.600 +68 287.400 +69 82.300 +69 132.200 +69 278.600 +70 91.700 +70 144.700 +71 263.300 +72 102.200 +72 291.700 +73 153.400 +73 230.900 +73 260.400 +73 290.800 +74 56.500 +74 290.900 +75 153.600 +75 282.100 +76 82.300 +76 106.700 +76 164.300 +76 187.100 +77 69.500 +77 186.100 +77 231.200 +77 245.200 +78 81.200 +78 162.700 +78 266.400 +79 70.300 +79 244.100 +80 202.800 +80 243.900 +81 97.000 +81 116.700 +81 277.700 +82 78.700 +82 142.000 +83 57.400 +83 164.500 +83 291.700 +84 69.500 +84 99.900 +84 132.800 +84 163.900 +84 217.100 +85 96.500 +85 116.700 +85 184.400 +86 129.800 +86 163.600 +86 244.100 +87 131.000 +87 280.000 +88 69.300 +88 93.800 +88 164.700 +89 186.300 +89 219.500 +90 185.700 +91 57.200 +91 117.200 +91 256.500 +92 164.000 +92 224.000 +93 244.000 +93 260.400 +94 81.600 +94 228.300 +94 281.200 +95 131.100 +95 185.200 +95 219.700 +95 279.700 +96 100.200 +96 164.300 +97 164.300 +98 99.400 +98 228.200 +99 163.600 +99 201.700 +100 245.700 +100 266.300 +100 291.400 +101 260.100 +102 198.500 +103 69.300 +103 164.300 +104 56.000 +104 201.200 +104 235.400 +104 245.500 +105 144.700 +105 288.600 +106 83.400 +106 201.400 +107 92.000 +107 186.400 +107 230.700 +108 51.700 +108 141.800 +109 55.300 +109 92.700 +110 152.300 +111 81.500 +111 184.200 +112 69.600 +112 82.100 +112 202.500 +112 280.400 +112 290.900 +114 228.600 +114 290.700 +115 164.300 +115 279.900 +116 92.900 +116 132.000 +117 93.500 +117 279.000 +118 82.200 +118 201.200 +118 260.700 +119 92.800 +119 116.300 +119 164.300 +119 201.200 +120 98.900 +120 124.400 +121 51.900 +121 144.400 +121 185.300 +122 164.600 +123 126.100 +123 146.500 +124 69.900 +124 281.100 +125 67.300 +125 145.100 +125 261.900 +126 126.100 +126 164.400 +126 186.800 +126 281.200 +127 186.000 +127 218.300 +128 100.100 +128 108.400 +128 142.300 +128 164.600 +129 144.700 +129 228.100 +129 245.300 +130 116.800 +130 148.400 +131 56.600 +131 148.300 +131 186.900 +132 228.800 +132 279.500 +133 132.000 +133 164.600 +133 281.300 +134 93.300 +134 218.100 +134 291.800 +135 82.100 +135 164.400 +136 81.900 +136 201.700 +136 259.200 +137 108.300 +137 159.400 +137 201.700 +138 69.200 +138 108.300 +139 185.500 +140 244.100 +141 184.900 +142 201.400 +142 245.500 +143 160.200 +143 201.600 +144 127.900 +144 186.100 +145 200.900 +146 130.300 +146 242.500 +146 265.300 +147 69.300 +147 131.100 +147 289.100 +148 116.300 +149 219.400 +150 117.400 +150 192.700 +150 218.100 +150 266.000 +151 124.200 +151 150.400 +152 164.500 +152 186.000 +153 144.500 +153 185.200 +154 69.700 +154 112.600 +155 99.000 +155 117.500 +156 99.500 +156 187.300 +156 218.100 +157 185.600 +157 265.900 +158 100.400 +158 126.200 +158 187.100 +160 140.600 +160 185.600 +161 93.800 +161 164.600 +162 116.500 +162 144.700 +162 219.200 +163 186.500 +164 116.400 +165 57.300 +165 67.500 +165 144.200 +165 243.600 +165 291.800 +166 56.800 +166 145.900 +166 227.500 +166 291.200 +167 93.400 +168 93.200 +168 132.000 +168 164.700 +169 101.300 +169 164.500 +170 66.800 +170 243.300 +170 291.700 +171 146.200 +171 164.400 +171 184.500 +172 93.100 +173 184.100 +173 265.700 +174 117.100 +174 201.600 +175 116.700 +175 265.800 +176 99.800 +176 201.600 +176 280.400 +177 69.300 +177 130.900 +178 116.600 +178 142.900 +179 70.600 +179 93.400 +179 164.600 +180 80.700 +180 93.000 +180 133.500 +181 69.800 +181 113.200 +181 186.000 +181 200.900 +182 243.900 +182 280.200 +183 69.800 +183 187.100 +183 229.700 +183 288.900 +184 70.500 +184 124.300 +184 145.100 +185 100.800 +185 117.300 +185 279.300 +186 185.800 +188 78.800 +188 186.000 +190 68.600 +190 165.000 +191 184.900 +192 67.900 +192 87.200 +193 164.700 +193 218.600 +193 290.700 +194 230.800 +195 164.600 +196 164.200 +196 219.600 +196 280.000 +197 99.300 +197 108.400 +197 164.300 +197 201.100 +197 217.700 +197 280.500 +198 133.800 +198 243.600 +199 165.700 +199 244.500 +200 100.100 +200 217.600 +201 69.300 +201 130.300 +201 164.200 +201 246.600 +201 266.300 +202 185.800 +202 219.500 +203 69.900 +203 219.600 +204 79.100 +204 93.000 +205 69.600 +206 185.500 +206 279.900 +207 57.800 +207 106.700 +207 117.100 +207 184.600 +208 127.600 +208 184.300 +209 144.600 +209 266.300 +210 260.300 +210 286.300 +211 108.600 +211 266.100 +212 82.000 +212 164.600 +212 185.800 +213 83.100 +213 145.200 +213 244.100 +214 133.000 +215 131.000 +216 78.600 +216 114.400 +216 165.000 +216 229.700 +217 216.400 +217 281.300 +218 69.600 +218 291.300 +219 164.700 +219 290.400 +220 70.200 +220 164.900 +221 69.300 +221 117.000 +221 266.100 +221 287.800 +222 93.800 +222 124.300 +222 130.200 +222 144.700 +223 128.100 +223 185.100 +223 256.100 +224 165.200 +225 187.200 +226 165.400 +226 201.400 +226 229.900 +226 290.200 +227 217.800 +227 289.500 +228 201.500 +228 265.700 +229 81.600 +229 165.300 +229 187.100 +230 146.600 +230 164.100 +230 218.000 +231 95.900 +233 145.100 +233 218.200 +234 164.500 +234 186.100 +234 291.100 +235 57.900 +235 71.000 +235 131.100 +235 165.100 +236 164.300 +236 186.700 +237 117.600 +237 187.100 +237 279.300 +238 94.100 +238 128.600 +238 202.500 +238 290.500 +240 130.700 +241 105.400 +242 164.600 +243 246.700 +244 70.200 +244 218.200 +244 265.800 +245 165.300 +245 278.300 +246 68.500 +247 93.900 +247 116.200 +247 275.000 +248 82.200 +249 185.300 +249 263.700 +250 185.900 +251 115.400 +251 164.600 +252 52.600 +252 115.400 +253 93.600 +253 202.000 +253 266.000 +254 69.300 +254 185.200 +255 290.300 +256 116.900 +257 70.800 +258 127.400 +258 227.500 +259 78.400 +259 147.200 +259 247.400 +260 58.000 +260 164.100 +260 289.900 +261 107.000 +261 244.000 +262 57.500 +262 184.900 +262 245.200 +263 128.200 +263 184.900 +263 197.400 +263 235.800 +263 265.700 +264 216.600 +264 228.500 +265 102.300 +265 145.800 +266 97.200 +267 165.200 +268 148.500 +268 244.300 +268 291.700 +269 81.400 +269 96.800 +269 128.600 +270 187.200 +271 70.300 +271 218.200 +271 256.700 +272 131.600 +272 187.300 +273 116.200 +273 132.600 +273 290.500 +275 197.500 +276 92.900 +276 114.300 +276 152.800 +277 101.500 +277 200.800 +277 279.500 +278 163.700 +278 185.700 +279 100.400 +279 201.100 +279 229.500 +280 200.900 +280 266.300 +280 291.300 +281 101.800 +281 185.700 +282 265.900 +283 81.000 +284 80.400 +284 148.100 +284 244.100 +285 81.900 +285 101.900 +286 153.700 +286 218.300 +287 81.400 +287 116.800 +287 165.600 +287 244.400 +288 92.600 +288 128.600 +289 93.100 +289 115.800 +289 185.100 +289 279.400 +291 245.100 +292 116.900 +292 290.700 +294 57.800 +294 128.200 +294 144.800 +295 201.900 +295 219.600 +296 163.700 +297 101.200 +297 165.000 +298 88.300 +298 102.100 +299 152.900 +299 290.800 +300 55.700 +300 93.800 +300 220.000 +301 186.000 +301 217.200 +301 288.100 +302 69.400 +302 144.100 +302 218.100 +302 244.900 +302 291.500 +303 150.800 +303 184.300 +303 226.800 +304 70.400 +304 244.400 +305 281.300 +305 291.700 +307 164.400 +307 200.100 +307 265.100 +308 98.300 +308 116.200 +308 218.200 +308 288.400 +309 50.600 +309 127.800 +309 144.500 +309 197.500 +309 229.500 +309 260.400 +310 69.300 +310 82.300 +310 186.400 +310 259.600 +311 65.900 +311 99.900 +311 117.100 +312 68.100 +312 164.100 +312 244.200 +313 245.900 +314 81.900 +314 144.300 +314 266.100 +314 289.500 +315 217.900 +316 50.200 +316 144.800 +316 183.800 +316 245.300 +317 67.600 +317 106.900 +317 126.800 +317 150.000 +317 184.800 +318 57.400 +318 96.800 +319 236.300 +320 141.100 +320 288.700 +321 56.400 +321 218.400 +322 71.400 +322 165.800 +322 185.800 +324 81.800 +324 126.300 +324 164.000 +324 201.300 +324 218.700 +325 96.200 +325 116.800 +326 94.000 +326 127.500 +327 80.700 +327 227.500 +328 81.600 +328 101.300 +328 131.900 +328 185.300 +329 133.000 +329 201.100 +329 245.200 +330 218.000 +330 237.600 +331 114.400 +331 164.500 +331 265.700 +332 70.600 +332 229.300 +332 265.400 +332 290.000 +333 68.500 +333 164.600 +333 219.500 +333 265.800 +334 98.400 +334 130.400 +334 187.100 +334 201.400 +335 105.200 +335 117.200 +336 94.000 +336 109.000 +336 144.300 +336 163.800 +336 290.000 +337 101.000 +338 128.800 +338 186.100 +338 280.000 +339 101.800 +339 130.500 +339 217.700 +339 291.100 +340 92.900 +340 148.500 +340 164.900 +340 228.200 +341 146.500 +342 116.800 +342 145.000 +342 247.400 +343 67.600 +343 106.900 +343 164.600 +344 141.500 +344 185.700 +344 245.200 +345 93.400 +346 69.800 +346 117.000 +346 217.900 +346 288.700 +347 126.100 +347 150.800 +347 164.600 +347 290.200 +348 67.800 +348 117.500 +350 94.100 +350 164.800 +351 79.400 +351 100.000 +351 164.100 +351 259.500 +352 218.800 +352 257.400 +352 281.000 +352 291.200 +354 218.300 +354 253.900 +355 69.200 +355 116.700 +356 81.800 +356 132.600 +357 164.500 +357 217.600 +358 219.300 +358 245.500 +359 69.300 +359 186.700 +360 69.600 +360 164.200 +360 219.100 +360 229.600 +360 291.700 +361 108.600 +361 185.700 +361 217.800 +362 91.800 +362 106.900 +362 140.300 +362 201.900 +363 94.000 +363 152.600 +363 218.400 +363 280.500 +364 102.100 +364 219.600 +365 116.900 +365 290.900 +367 107.000 +367 185.600 +367 291.300 +368 152.300 +368 265.800 +369 260.700 +370 102.700 +370 164.200 +370 244.200 +371 56.600 +371 116.200 +371 228.200 +371 258.300 +372 164.200 +372 236.000 +373 69.100 +373 104.900 +373 184.300 +375 101.500 +375 126.000 +375 164.500 +375 200.200 +376 141.500 +376 201.800 +377 90.800 +377 185.200 +378 129.900 +378 244.500 +379 164.900 +380 80.900 +380 248.300 +381 117.000 +381 164.500 +382 81.900 +382 107.900 +382 164.300 +382 230.900 +382 290.600 +383 150.200 +383 218.400 +383 266.000 +384 164.600 +384 185.700 +384 219.400 +384 291.300 +385 71.700 +385 117.400 +385 165.100 +385 219.200 +385 228.400 +386 241.900 +387 100.900 +387 260.500 +388 245.400 +389 67.300 +389 92.900 +390 117.900 +390 165.200 +391 164.000 +392 164.700 +392 266.000 +393 280.100 +394 81.800 +394 290.600 +395 291.600 +396 218.100 +397 130.400 +397 291.200 +398 68.400 +398 80.800 +398 244.100 +399 70.400 +399 129.800 +400 147.800 +400 280.600 +401 123.300 +403 185.600 +404 164.600 +404 254.700 +405 82.000 +406 132.700 +406 164.500 +406 187.400 +406 230.900 +407 69.700 +407 101.600 +407 162.500 +407 245.700 +408 81.300 +408 150.500 +409 107.400 +409 116.300 +410 187.100 +411 124.400 +411 158.700 +411 225.900 +411 281.300 +412 164.300 +413 93.700 +413 101.300 +413 186.800 +413 236.200 +413 259.700 +414 131.000 +414 250.700 +414 290.800 +415 70.700 +415 218.300 +415 266.100 +416 130.700 +416 265.100 +416 281.500 +417 69.900 +417 96.700 +417 216.600 +418 165.000 +418 199.900 +419 128.100 +419 163.200 +419 185.600 +419 266.100 +421 131.500 +421 184.400 +422 152.400 +422 265.900 +423 92.900 +424 107.300 +424 164.400 +424 218.300 +425 144.500 +425 184.300 +425 224.000 +425 280.300 +428 69.800 +428 126.300 +428 148.200 +428 265.800 +429 185.300 +430 202.200 +431 91.700 +431 140.400 +431 215.700 +431 287.700 +432 131.800 +432 157.000 +432 246.300 +433 106.900 +433 289.100 +434 148.600 +434 164.800 +434 265.900 +434 291.300 +435 81.400 +435 164.600 +436 81.600 +436 243.500 +436 280.300 +437 93.900 +437 100.000 +437 164.800 +438 185.900 +439 116.500 +439 291.000 +440 67.900 +440 266.000 +441 281.200 +442 163.900 +442 186.200 +442 260.200 +444 266.000 +445 124.300 +445 247.800 +445 263.300 +446 92.500 +446 187.100 +446 256.000 +447 144.800 +448 164.500 +448 288.000 +449 185.900 +449 234.500 +449 291.500 +450 52.300 +451 56.100 +451 81.400 +451 131.100 +452 131.700 +452 184.500 +453 265.100 +454 161.600 +454 260.100 +454 291.800 +455 185.800 +456 184.200 +457 132.100 +458 218.300 +458 265.700 +459 139.300 +459 164.900 +459 219.200 +459 245.900 +460 118.700 +460 130.100 +462 93.700 +462 101.700 +462 201.500 +463 101.400 +463 145.900 +463 165.400 +463 248.400 +463 291.300 +464 69.700 +464 144.700 +464 288.600 +465 82.800 +465 244.200 +465 277.400 +466 62.500 +467 164.400 +468 57.200 +468 81.700 +468 146.100 +469 228.000 +470 116.600 +471 81.600 +471 115.000 +471 165.000 +471 184.300 +471 219.600 +471 244.700 +471 290.700 +472 152.900 +473 100.300 +473 164.500 +473 218.600 +474 90.700 +474 266.500 +475 113.400 +475 228.300 +476 227.900 +477 152.100 +477 279.700 +477 291.400 +478 236.400 +478 290.500 +480 144.600 +480 152.400 +480 245.100 +481 186.000 +481 202.400 +481 281.100 +482 127.200 +482 245.900 +483 93.400 +484 164.400 +486 69.700 +486 139.100 +487 219.400 +489 108.100 +489 247.300 +489 291.700 +490 116.100 +490 198.500 +490 279.800 +491 107.400 +491 163.600 +491 185.200 +491 265.900 +493 57.300 +494 186.300 +495 70.000 +495 115.800 +495 202.200 +496 55.500 +497 164.100 +498 81.400 +498 102.100 +499 106.200 +500 81.000 +500 146.600 +500 260.400 +501 143.600 +501 266.000 +502 80.900 +502 106.400 +502 185.200 +503 58.300 +503 80.600 +503 101.400 +504 69.400 +504 150.100 +504 161.300 +504 183.700 +505 116.800 +506 290.500 +507 145.000 +508 130.900 +508 183.700 +509 107.900 +509 201.200 +509 224.600 +510 131.100 +510 164.500 +510 202.300 +511 93.800 +511 128.700 +511 162.900 +512 144.700 +512 187.200 +512 260.000 +513 93.600 +513 102.400 +514 81.100 +515 81.700 +515 117.600 +516 131.500 +516 163.800 +517 94.000 +517 164.500 +517 233.600 +517 245.000 +519 154.800 +521 117.100 +521 281.100 +522 52.600 +522 144.900 +522 287.200 +523 117.300 +523 164.500 +523 248.200 +523 281.300 +524 80.800 +524 131.600 +524 145.700 +524 280.400 +525 100.300 +525 164.600 +526 93.000 +526 246.800 +527 55.500 +527 92.100 +527 164.600 +527 277.800 +529 131.500 +529 237.400 +530 126.500 +531 144.100 +531 217.200 +531 279.000 +532 219.300 +533 68.300 +533 92.900 +533 131.900 +533 185.200 +533 201.700 +533 290.800 +534 164.900 +535 164.800 +536 99.100 +536 145.200 +536 224.300 +537 164.600 +537 290.600 +538 70.400 +538 94.100 +538 218.100 +538 281.100 +539 164.600 +539 256.300 +540 164.700 +540 184.900 +540 201.600 +540 218.100 +541 81.000 +541 201.500 +541 257.700 +542 116.500 +542 132.600 +543 68.100 +543 106.900 +543 265.900 +543 289.000 +544 280.300 +545 185.800 +546 244.800 +547 117.100 +547 139.700 +547 217.900 +547 234.500 +548 107.800 +548 229.000 +548 247.400 +548 280.200 +549 266.100 +550 68.900 +550 124.700 +550 144.400 +550 281.400 +552 186.900 +553 82.200 +553 114.200 +554 96.100 +554 113.600 +555 116.900 +555 184.000 +556 281.100 +557 184.900 +558 81.400 +559 186.500 +559 245.500 +560 70.300 +560 281.000 +561 93.200 +561 164.400 +562 56.300 +562 104.700 +562 150.300 +562 164.200 +562 187.300 +563 220.500 +564 200.600 +564 265.600 +565 131.400 +565 291.500 +566 69.000 +566 219.200 +567 96.700 +567 164.900 +568 219.600 +569 81.500 +569 117.200 +569 289.200 +570 81.700 +570 116.000 +571 117.800 +571 128.200 +571 280.500 +572 201.400 +572 280.000 +572 291.600 +573 144.500 +574 148.500 +575 100.100 +575 164.700 +575 219.600 +575 245.100 +575 291.500 +576 164.900 +576 275.000 +577 70.700 +577 101.400 +577 120.000 +578 202.000 +580 125.900 +580 199.800 +581 217.500 +582 108.400 +582 143.900 +582 227.100 +583 164.400 +584 67.500 +584 117.200 +584 164.700 +585 96.800 +585 165.000 +585 201.600 +585 219.200 +586 116.200 +586 152.200 +586 259.900 +586 290.500 +587 67.900 +587 164.700 +588 200.200 +588 265.800 +589 151.200 +589 201.700 +589 259.500 +590 114.700 +590 117.100 +590 142.100 +590 218.200 +590 245.400 +591 185.200 +591 291.800 +592 52.100 +592 81.900 +592 141.500 +592 202.400 +592 265.900 +592 290.200 +593 59.300 +593 99.800 +594 164.700 +594 266.200 +595 202.000 +595 290.200 +596 125.500 +596 164.800 +596 248.300 +597 163.800 +597 186.800 +597 201.500 +597 255.000 +597 288.800 +598 81.800 +598 219.600 +599 57.400 +599 105.600 +599 131.300 +599 244.500 +600 56.500 +600 106.600 +600 182.700 +602 81.900 +602 96.300 +603 164.600 +603 186.900 +604 82.000 +604 144.700 +604 184.900 +604 291.900 +605 164.600 +606 164.600 +607 81.300 +607 101.900 +607 107.900 +607 164.700 +608 70.300 +609 82.000 +609 139.800 +609 218.400 +609 243.700 +610 128.900 +611 183.800 +612 96.400 +612 116.100 +612 287.800 +613 117.300 +613 163.900 +614 58.200 +614 113.900 +614 185.600 +614 280.100 +615 132.700 +616 116.500 +616 217.600 +618 131.900 +618 202.200 +619 50.900 +619 127.400 +619 164.500 +620 69.500 +620 105.000 +620 165.300 +621 107.300 +621 198.500 +622 68.300 +622 92.900 +622 132.000 +622 164.500 +623 92.500 +623 218.400 +624 57.900 +624 235.600 +625 52.100 +625 116.800 +625 202.400 +627 108.900 +627 126.200 +627 185.100 +627 245.700 +628 243.600 +629 146.500 +629 244.500 +630 69.500 +630 125.200 +630 185.200 +631 164.400 +631 184.200 +631 229.700 +631 265.800 +632 164.700 +632 260.800 +632 281.300 +633 101.900 +633 162.100 +633 185.100 +634 256.600 +636 100.000 +636 148.600 +636 289.200 +637 68.000 +637 164.300 +637 219.600 +637 243.800 +638 117.400 +639 245.200 +640 132.600 +640 145.900 +640 266.800 +641 67.400 +641 201.100 +641 217.700 +642 184.400 +642 265.600 +643 148.700 +643 164.600 +643 289.200 +644 164.600 +644 201.700 +644 235.600 +644 288.800 +645 185.200 +645 245.000 +646 54.000 +646 164.800 +646 244.500 +646 263.700 +647 164.500 +647 280.600 +647 291.100 +648 291.000 +649 211.100 +650 163.900 +651 126.100 +651 288.000 +652 151.200 +653 184.300 +654 226.100 +654 277.900 +655 185.000 +655 217.500 +655 291.800 +656 164.800 +656 217.700 +657 243.600 +658 140.600 +658 200.400 +659 117.500 +660 117.900 +661 93.900 +661 107.000 +661 245.300 +662 217.700 +662 256.700 +663 117.200 +663 185.600 +663 235.500 +664 202.300 +664 279.700 +665 93.600 +665 260.200 +667 82.300 +667 244.200 +668 69.800 +668 109.000 +668 219.600 +668 290.200 +669 99.200 +670 102.000 +670 265.700 +671 99.500 +672 114.800 +672 164.400 +672 219.600 +672 279.300 +673 184.600 +674 265.000 +675 184.900 +675 245.700 +676 220.000 +677 120.200 +678 93.300 +678 108.100 +678 279.400 +680 117.600 +680 202.200 +681 164.300 +681 264.000 +682 67.200 +683 104.300 +683 217.800 +684 101.700 +684 185.100 +684 291.700 +685 65.700 +685 96.200 +685 131.400 +685 218.300 +686 81.600 +686 164.600 +686 186.700 +687 117.500 +688 130.600 +688 163.000 +688 186.100 +688 263.100 +689 93.200 +689 164.800 +690 62.200 +691 165.200 +691 184.500 +691 200.800 +692 130.400 +692 253.300 +692 289.100 +693 131.900 +693 201.700 +694 266.400 +695 117.200 +695 163.100 +695 235.000 +696 80.800 +696 116.800 +696 130.900 +696 164.300 +696 291.500 +697 56.300 +697 144.400 +697 260.600 +698 50.100 +698 144.800 +699 164.600 +701 217.700 +702 57.400 +702 80.700 +702 185.800 +702 219.800 +703 185.700 +703 219.600 +703 260.300 +704 153.600 +705 50.800 +705 132.100 +705 165.000 +706 81.300 +706 198.900 +706 218.300 +707 184.700 +707 277.400 +708 67.800 +708 144.800 +708 216.100 +710 108.300 +710 185.100 +710 219.700 +711 94.000 +711 125.800 +711 164.500 +713 265.800 +714 82.100 +714 218.200 +714 235.800 +714 291.500 +715 116.400 +716 130.200 +716 164.300 +716 185.000 +717 80.200 +717 93.700 +717 116.200 +717 152.300 +717 244.400 +718 144.300 +718 185.700 +719 55.500 +719 153.400 +719 265.600 +720 108.000 +721 164.900 +722 102.400 +722 146.200 +722 152.200 +722 185.600 +722 198.200 +722 291.700 +723 81.900 +723 217.500 +724 116.300 +725 202.300 +725 281.300 +726 69.600 +726 131.700 +726 187.200 +726 291.400 +727 164.800 +727 185.700 +727 245.200 +728 219.800 +730 150.000 +730 226.000 +731 187.100 +732 116.700 +732 229.100 +732 291.200 +733 57.800 +733 96.800 +733 150.000 +734 281.100 +735 93.600 +735 150.100 +735 260.400 +736 78.500 +736 107.200 +736 131.100 +737 101.700 +737 244.900 +738 141.000 +738 184.700 +738 280.400 +739 80.900 +739 146.500 +740 113.300 +740 140.500 +740 163.100 +741 100.000 +741 277.500 +742 116.400 +742 217.600 +742 288.600 +743 116.100 +743 164.400 +743 187.300 +743 201.900 +744 152.500 +745 164.600 +745 186.800 +746 98.800 +746 106.600 +746 117.000 +747 259.900 +748 114.100 +749 92.100 +749 291.400 +751 81.000 +751 141.900 +751 243.800 +752 288.600 +753 82.900 +753 228.400 +754 82.700 +754 132.700 +754 144.800 +755 126.600 +756 147.600 +756 185.600 +757 218.100 +757 288.700 +758 219.500 +758 259.600 +759 117.400 +759 164.500 +760 186.400 +760 220.400 +761 290.200 +762 131.300 +762 201.100 +762 259.900 +762 279.100 +763 164.500 +764 230.800 +765 153.400 +766 128.300 +766 244.600 +767 81.000 +768 164.500 +769 67.400 +769 150.200 +769 187.200 +769 244.400 +770 164.700 +770 252.700 +771 187.000 +771 202.000 +772 116.000 +772 131.100 +773 141.200 +773 184.800 +773 278.700 +774 96.500 +774 151.900 +774 194.800 +774 264.800 +774 290.200 +775 185.100 +775 266.000 +776 117.000 +776 290.500 +777 184.900 +778 96.400 +778 116.200 +779 164.400 +780 115.000 +780 201.900 +781 115.900 +781 202.600 +782 93.500 +782 131.700 +782 194.400 +782 242.300 +783 131.300 +783 185.900 +784 80.300 +784 288.700 +785 113.700 +785 164.400 +786 81.100 +786 101.200 +786 117.900 +786 153.600 +786 185.400 +786 265.500 +787 96.600 +787 159.200 +788 99.500 +788 227.500 +789 266.000 +790 100.000 +790 144.800 +790 164.800 +791 70.900 +791 233.000 +792 159.800 +792 228.100 +794 67.400 +794 107.100 +794 131.100 +795 266.200 +796 56.000 +796 163.400 +796 186.900 +796 202.300 +796 291.500 +797 291.700 +798 82.000 +799 144.900 +799 185.400 +800 54.900 +800 150.600 +800 219.400 +801 93.100 +801 185.500 +802 184.700 +803 131.400 +803 164.600 +803 183.900 +805 93.700 +805 164.500 +806 117.100 +806 145.900 +806 218.000 +806 242.500 +806 291.200 +807 186.600 +808 69.800 +808 100.100 +808 218.300 +809 107.000 +810 93.100 +810 116.500 +811 116.800 +811 164.900 +811 228.700 +812 55.800 +812 186.300 +813 93.600 +813 164.000 +813 187.400 +813 244.600 +814 83.200 +814 147.700 +814 280.000 +815 200.900 +816 201.400 +816 221.000 +817 52.800 +817 116.500 +817 164.400 +817 185.600 +818 290.200 +819 116.500 +819 185.900 +819 245.400 +820 65.500 +820 80.500 +822 164.500 +823 93.500 +823 102.200 +823 148.400 +823 228.200 +824 56.100 +824 114.500 +825 69.700 +825 185.600 +827 202.300 +827 279.400 +828 82.000 +828 117.300 +828 201.300 +829 68.200 +829 124.600 +829 164.300 +830 100.100 +830 164.300 +830 244.800 +831 54.900 +831 106.500 +831 147.100 +831 160.500 +831 219.700 +832 132.000 +832 164.300 +833 126.300 +833 164.000 +833 201.500 +834 201.800 +834 281.300 +836 131.600 +836 164.600 +836 247.200 +837 218.100 +837 291.400 +838 104.400 +838 184.400 +839 102.200 +839 185.800 +839 213.600 +840 114.700 +840 164.700 +840 217.800 +840 253.400 +841 218.100 +843 185.300 +843 201.100 +844 102.300 +844 164.600 +845 164.300 +845 289.100 +846 70.300 +846 126.500 +846 144.300 +847 68.200 +847 119.300 +847 186.000 +847 201.000 +847 247.900 +848 131.900 +848 165.000 +848 200.100 +849 164.500 +850 146.300 +850 164.500 +851 184.800 +852 144.800 +853 67.900 +853 101.700 +853 116.400 +853 289.900 +854 69.600 +854 107.600 +854 218.200 +854 289.200 +855 186.100 +855 202.800 +855 244.000 +856 185.700 +856 247.100 +857 70.400 +857 82.000 +857 164.200 +858 96.000 +858 112.600 +858 266.000 +859 57.800 +859 103.400 +859 117.100 +859 150.200 +859 218.300 +860 100.700 +860 186.000 +861 113.600 +861 164.500 +861 289.700 +862 67.900 +863 236.200 +863 255.200 +864 57.200 +864 187.000 +864 216.300 +864 266.200 +865 187.100 +866 162.200 +866 186.400 +866 244.600 +867 81.900 +867 117.100 +868 93.800 +868 218.700 +869 164.600 +870 81.600 +870 164.900 +870 201.900 +871 185.500 +872 101.400 +872 164.600 +873 67.200 +873 291.300 +874 80.200 +874 182.700 +874 280.800 +875 164.600 +875 220.400 +876 80.900 +876 151.800 +876 236.300 +876 290.600 +877 95.400 +877 100.100 +877 126.100 +878 68.600 +878 96.900 +878 124.200 +878 164.300 +879 164.600 +880 50.500 +880 156.300 +880 164.700 +880 280.500 +880 291.000 +881 71.700 +882 113.900 +883 145.600 +883 185.000 +883 244.000 +885 69.600 +885 164.900 +885 263.900 +886 113.700 +886 221.800 +886 280.000 +887 259.900 +888 108.100 +888 126.500 +888 258.400 +889 54.900 +889 94.100 +889 164.400 +889 257.500 +889 265.900 +890 92.600 +890 107.300 +890 148.500 +890 201.500 +891 116.600 +891 164.500 +892 256.700 +894 161.700 +894 187.100 +894 264.800 +894 291.800 +895 127.300 +896 164.500 +896 186.900 +896 260.300 +897 70.100 +897 119.500 +897 186.000 +898 99.500 +898 145.200 +898 202.500 +899 116.700 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_5_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_5_i_pop.dat new file mode 100644 index 000000000..4410d316e --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_5_i_pop.dat @@ -0,0 +1,500 @@ +sender time_ms +900 147.200 +901 130.000 +902 69.400 +902 116.200 +902 164.200 +902 290.700 +903 50.600 +903 163.400 +904 147.500 +904 183.600 +904 265.300 +905 80.200 +905 258.900 +905 281.200 +906 260.500 +907 81.700 +907 144.600 +907 164.700 +907 240.600 +908 126.500 +908 163.900 +908 185.600 +908 218.900 +908 278.400 +909 54.500 +910 157.100 +910 226.000 +911 70.000 +911 124.700 +911 164.200 +912 96.300 +914 144.200 +914 197.500 +915 198.700 +915 218.400 +916 68.500 +916 107.900 +916 163.400 +917 81.000 +917 140.700 +917 151.300 +917 245.300 +917 266.000 +918 93.800 +918 266.000 +919 99.900 +919 144.000 +919 280.300 +920 164.800 +921 290.600 +922 185.800 +922 244.300 +922 265.900 +923 68.300 +923 164.600 +923 201.900 +923 257.000 +924 164.600 +924 187.200 +925 52.700 +925 165.400 +925 260.500 +925 290.900 +926 279.900 +927 219.800 +927 289.200 +928 105.200 +928 127.300 +928 184.800 +928 244.500 +929 164.700 +929 186.300 +929 219.600 +930 92.500 +930 99.900 +930 291.500 +931 198.100 +931 218.200 +932 93.300 +932 162.800 +932 199.000 +933 128.800 +933 263.600 +934 70.100 +934 115.800 +935 55.900 +935 115.200 +935 236.100 +935 291.500 +936 164.700 +936 195.300 +937 115.900 +937 164.400 +938 61.700 +938 97.000 +938 290.600 +939 200.100 +940 235.500 +940 260.600 +941 100.200 +941 186.100 +941 245.900 +942 164.300 +943 164.800 +943 202.100 +943 290.500 +944 218.200 +945 164.600 +946 56.400 +947 69.800 +947 117.400 +947 139.700 +947 164.500 +947 217.400 +948 51.800 +948 81.300 +949 119.200 +949 130.400 +949 219.500 +949 245.400 +950 81.500 +951 146.500 +952 212.000 +953 107.900 +953 146.700 +953 164.900 +953 280.600 +954 52.200 +954 153.500 +954 236.200 +954 280.100 +955 115.600 +956 253.600 +957 67.100 +957 96.300 +957 116.900 +957 244.400 +958 226.000 +959 101.300 +959 165.500 +959 185.900 +959 217.700 +960 52.400 +960 117.000 +960 218.800 +961 81.800 +961 185.700 +961 276.800 +962 127.800 +962 163.000 +962 265.700 +963 164.700 +964 117.300 +964 164.900 +965 141.900 +965 280.400 +966 131.700 +967 116.800 +967 184.600 +968 236.300 +969 57.300 +969 164.900 +969 247.300 +969 291.000 +970 165.300 +970 219.600 +970 253.500 +971 82.000 +971 115.800 +971 144.800 +971 164.700 +972 164.100 +972 217.200 +973 80.800 +973 131.800 +974 164.300 +975 101.200 +975 128.600 +975 165.300 +975 185.500 +976 81.800 +976 164.500 +978 81.800 +978 102.100 +979 164.300 +979 219.400 +979 248.300 +980 68.000 +980 127.800 +980 217.500 +981 117.400 +981 186.100 +981 280.300 +982 163.600 +982 185.900 +983 165.300 +983 185.900 +983 281.200 +984 99.000 +984 124.900 +984 185.000 +984 281.200 +984 290.800 +985 103.100 +985 185.900 +985 229.500 +986 218.200 +987 144.500 +987 164.500 +987 291.100 +988 152.200 +989 106.900 +989 163.100 +989 263.600 +990 81.800 +990 93.000 +990 145.000 +991 65.400 +991 114.800 +991 287.200 +992 69.800 +992 292.000 +994 96.400 +994 114.300 +994 218.600 +995 124.600 +995 128.900 +996 101.100 +996 165.400 +996 245.000 +998 96.900 +998 164.600 +998 228.500 +1000 150.200 +1000 164.900 +1000 185.800 +1000 219.400 +1002 81.900 +1002 164.600 +1003 106.800 +1003 164.900 +1003 185.800 +1003 265.800 +1004 150.200 +1004 219.700 +1004 290.200 +1006 140.200 +1006 185.900 +1006 219.700 +1007 100.700 +1008 164.600 +1009 116.000 +1009 260.100 +1010 164.600 +1010 266.000 +1011 108.400 +1012 266.500 +1013 163.100 +1014 68.200 +1014 101.300 +1014 148.900 +1014 281.500 +1015 93.100 +1015 164.600 +1015 218.100 +1015 291.600 +1016 70.700 +1016 96.100 +1016 165.100 +1016 291.300 +1019 55.800 +1019 92.700 +1019 218.300 +1019 262.500 +1020 69.700 +1020 185.400 +1020 218.500 +1020 279.900 +1021 290.700 +1022 128.000 +1022 187.200 +1022 243.900 +1022 279.200 +1023 145.400 +1023 185.100 +1024 69.100 +1024 101.900 +1025 130.400 +1025 185.900 +1026 229.700 +1026 265.900 +1027 52.500 +1027 144.800 +1027 164.600 +1027 291.000 +1028 201.700 +1029 144.700 +1029 201.700 +1030 70.600 +1030 164.700 +1030 289.000 +1031 144.300 +1031 218.200 +1032 100.000 +1032 201.000 +1032 280.700 +1033 164.400 +1033 244.500 +1034 116.300 +1036 58.300 +1036 81.800 +1038 68.000 +1038 132.000 +1038 255.800 +1040 100.100 +1042 279.300 +1044 228.300 +1045 141.000 +1046 101.900 +1047 106.800 +1047 164.700 +1048 185.900 +1048 245.400 +1048 291.800 +1049 164.400 +1050 82.000 +1050 164.300 +1051 92.900 +1051 144.900 +1051 259.500 +1052 132.800 +1053 57.500 +1053 82.000 +1053 216.700 +1054 131.800 +1054 202.200 +1054 266.000 +1054 291.400 +1055 185.700 +1055 290.600 +1056 202.300 +1057 146.200 +1057 200.500 +1057 265.700 +1058 96.700 +1058 126.400 +1058 164.200 +1058 185.800 +1058 278.200 +1059 69.700 +1059 102.200 +1059 144.700 +1059 185.700 +1060 116.700 +1060 144.100 +1060 217.800 +1060 290.900 +1061 185.700 +1061 201.100 +1062 69.200 +1062 127.500 +1062 164.800 +1062 245.500 +1062 266.300 +1063 100.800 +1063 116.800 +1063 164.400 +1063 202.100 +1063 234.800 +1064 289.200 +1065 219.600 +1066 202.900 +1067 145.800 +1067 279.900 +1068 291.600 +1069 265.900 +1070 81.500 +1070 107.800 +1070 153.200 +1071 80.400 +1071 187.200 +1072 69.500 +1072 116.500 +1072 291.500 +1073 258.800 +1073 266.300 +1073 291.400 +1074 200.300 +1075 164.400 +1076 67.700 +1076 183.800 +1076 187.100 +1077 245.500 +1077 281.200 +1078 228.400 +1078 266.000 +1080 93.700 +1081 99.700 +1081 117.700 +1081 289.100 +1083 69.700 +1083 101.600 +1083 131.400 +1083 230.900 +1083 266.000 +1084 291.200 +1085 114.900 +1085 259.900 +1086 129.800 +1086 165.300 +1087 93.700 +1088 99.700 +1088 164.100 +1089 265.700 +1091 217.200 +1091 247.400 +1092 57.600 +1092 67.400 +1092 93.100 +1092 131.000 +1092 252.800 +1092 288.500 +1093 145.500 +1093 227.400 +1093 245.700 +1094 68.300 +1094 229.400 +1095 186.300 +1096 132.800 +1096 165.100 +1096 225.700 +1096 244.100 +1096 291.400 +1097 82.000 +1097 184.100 +1098 116.800 +1098 219.200 +1099 71.300 +1099 164.400 +1099 291.000 +1100 164.500 +1100 254.900 +1101 159.300 +1101 244.900 +1103 141.500 +1103 245.800 +1104 155.500 +1104 202.900 +1105 79.400 +1105 140.600 +1105 217.800 +1106 69.200 +1106 87.400 +1106 146.500 +1106 245.800 +1106 260.400 +1107 81.300 +1107 146.500 +1107 164.300 +1107 265.400 +1107 290.500 +1108 102.000 +1108 145.100 +1109 185.700 +1109 201.500 +1109 280.100 +1110 59.000 +1110 164.700 +1110 253.800 +1111 132.400 +1111 165.000 +1111 186.500 +1112 93.600 +1112 116.200 +1112 165.100 +1113 147.500 +1113 164.300 +1114 102.400 +1115 148.400 +1115 202.200 +1115 244.600 +1115 288.900 +1116 218.400 +1117 92.400 +1117 144.200 +1117 259.500 +1119 115.600 +1120 106.900 +1120 116.600 +1120 217.700 +1121 164.100 +1121 228.000 +1121 245.200 +1123 126.500 +1123 152.000 +1123 164.600 +1124 69.200 +1124 164.200 +1124 186.000 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_6_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_6_e_pop.dat new file mode 100644 index 000000000..16e4ca77e --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_6_e_pop.dat @@ -0,0 +1,2082 @@ +sender time_ms +0 81.800 +0 260.500 +1 69.700 +1 82.200 +1 93.500 +1 202.000 +2 243.800 +2 291.700 +3 82.000 +3 265.900 +3 280.100 +4 55.500 +4 101.200 +5 92.900 +5 164.700 +5 264.100 +5 288.000 +6 102.200 +6 116.600 +7 80.000 +7 116.700 +8 69.600 +8 143.600 +8 296.800 +9 50.100 +9 186.900 +10 50.500 +10 96.200 +10 131.800 +10 266.100 +10 281.100 +11 101.900 +11 164.200 +12 104.400 +12 116.000 +12 185.100 +13 95.800 +13 127.300 +13 185.000 +14 164.500 +15 100.900 +15 144.600 +15 165.300 +15 184.700 +16 96.700 +16 126.300 +16 202.200 +16 243.900 +17 218.500 +17 265.900 +18 164.200 +18 200.100 +19 96.700 +19 114.300 +19 184.900 +19 279.800 +20 81.700 +20 114.600 +20 130.400 +21 100.100 +21 259.900 +21 291.100 +22 144.800 +23 81.700 +24 52.700 +24 202.400 +25 66.500 +25 219.700 +26 103.900 +26 185.400 +27 131.000 +27 184.900 +27 230.900 +27 265.700 +28 290.900 +29 93.900 +29 124.900 +29 280.600 +30 146.000 +30 185.200 +31 163.900 +32 59.000 +32 116.900 +32 244.100 +33 101.700 +33 145.100 +33 245.500 +34 114.300 +35 55.400 +35 186.100 +36 131.900 +36 164.800 +37 165.500 +37 265.500 +38 64.500 +38 280.900 +39 187.400 +39 259.300 +40 101.700 +40 130.400 +40 217.900 +40 243.900 +41 128.700 +41 236.000 +42 93.100 +42 164.700 +43 141.900 +44 69.200 +44 114.200 +44 164.300 +46 93.800 +46 185.000 +46 218.500 +46 245.100 +46 290.900 +47 126.300 +47 291.400 +48 290.700 +49 65.800 +49 187.300 +49 201.900 +50 100.300 +50 117.800 +51 164.700 +51 218.400 +52 126.100 +52 131.700 +52 164.500 +53 164.400 +53 201.600 +53 291.300 +54 82.000 +54 131.900 +54 228.600 +54 291.100 +55 101.600 +55 119.600 +55 162.500 +55 291.300 +56 131.300 +57 68.100 +57 218.000 +58 144.100 +59 99.000 +59 218.300 +60 149.700 +61 185.200 +61 201.900 +61 245.700 +62 116.500 +62 163.000 +62 186.000 +62 218.000 +62 291.000 +64 116.400 +64 164.400 +64 266.000 +65 99.100 +66 57.700 +66 117.400 +66 218.000 +67 185.200 +67 257.700 +68 52.500 +68 80.800 +68 164.600 +69 103.500 +69 117.600 +69 244.900 +69 280.300 +70 219.000 +71 185.700 +71 256.700 +72 97.100 +72 117.900 +72 129.500 +72 164.000 +73 69.500 +73 109.100 +73 150.100 +74 80.900 +74 244.900 +75 146.400 +75 164.900 +75 231.200 +76 55.800 +76 82.500 +76 162.700 +76 202.400 +76 288.600 +77 93.900 +78 80.500 +78 127.300 +78 190.600 +78 217.800 +78 243.300 +79 127.800 +79 165.000 +79 218.200 +80 187.000 +80 219.200 +82 185.500 +82 219.700 +82 278.800 +82 291.800 +84 185.800 +84 219.700 +85 163.600 +85 245.900 +85 259.700 +85 291.500 +86 246.100 +87 117.500 +87 164.600 +88 164.300 +88 217.300 +88 291.900 +89 242.100 +90 130.400 +91 82.600 +91 117.100 +91 291.600 +92 57.500 +92 115.900 +92 184.400 +92 201.600 +92 219.600 +93 81.700 +93 147.800 +93 266.000 +95 265.900 +95 291.900 +96 164.700 +97 165.100 +97 218.300 +97 243.700 +98 82.000 +98 164.800 +98 227.500 +99 62.500 +99 244.700 +100 69.700 +100 93.400 +100 164.900 +100 245.400 +101 124.900 +101 146.500 +101 164.600 +101 260.400 +102 259.600 +102 291.800 +103 99.900 +103 144.900 +104 69.700 +104 164.000 +105 101.900 +105 290.000 +106 144.600 +106 264.700 +107 80.900 +108 126.300 +108 201.900 +109 81.400 +109 132.500 +109 184.700 +109 244.100 +110 116.500 +110 122.200 +111 144.500 +111 260.100 +112 165.000 +112 243.400 +113 100.600 +113 260.200 +114 118.000 +114 164.200 +114 187.300 +114 247.200 +115 280.800 +116 164.500 +117 243.800 +119 69.100 +119 164.400 +119 203.000 +120 291.800 +121 117.200 +121 164.800 +121 217.100 +122 290.300 +125 102.500 +125 145.700 +125 281.100 +126 56.700 +127 102.000 +127 244.900 +127 291.000 +128 158.600 +129 101.800 +129 164.400 +129 291.100 +130 69.200 +130 115.500 +131 81.600 +131 132.300 +131 201.600 +132 151.700 +132 186.800 +133 98.300 +133 186.100 +133 245.300 +133 277.800 +135 94.000 +135 117.200 +135 187.200 +135 290.700 +136 185.500 +137 201.700 +138 202.500 +139 131.800 +139 165.700 +139 184.300 +140 132.800 +140 158.900 +142 280.500 +143 184.900 +143 279.100 +144 92.800 +144 164.300 +144 218.100 +144 290.200 +145 116.700 +145 289.100 +146 81.100 +146 99.300 +146 148.800 +146 219.300 +147 131.500 +147 287.300 +148 200.500 +148 244.400 +149 152.600 +149 291.100 +150 146.300 +150 230.600 +150 266.200 +151 164.700 +151 264.100 +152 81.400 +152 164.800 +152 281.000 +154 55.800 +154 101.300 +154 164.700 +154 217.700 +155 157.700 +155 244.500 +155 280.400 +156 102.100 +156 126.200 +156 200.700 +156 263.500 +157 164.300 +158 161.900 +158 216.300 +158 278.900 +159 101.300 +159 219.500 +160 132.000 +160 245.800 +160 279.400 +161 79.900 +161 117.600 +161 159.000 +162 181.800 +163 93.500 +163 164.600 +164 81.200 +165 82.100 +165 129.100 +165 148.100 +165 202.100 +165 245.400 +167 164.600 +168 81.800 +168 219.100 +168 291.500 +169 50.200 +169 69.000 +169 82.300 +171 164.500 +171 263.100 +172 164.500 +173 117.800 +173 164.600 +173 196.800 +174 217.600 +175 151.800 +175 164.400 +175 266.000 +176 116.900 +176 140.300 +176 165.000 +176 187.100 +176 244.100 +177 93.300 +177 105.900 +177 128.700 +177 164.900 +177 225.700 +178 108.100 +178 145.900 +178 165.300 +179 116.200 +179 144.500 +179 165.400 +179 281.400 +180 55.800 +180 99.800 +180 245.000 +181 185.100 +181 217.100 +182 81.800 +182 101.000 +182 144.000 +182 185.200 +182 280.200 +182 291.300 +183 68.400 +183 155.400 +183 164.700 +183 260.800 +184 81.200 +184 231.000 +184 280.400 +184 288.600 +185 131.700 +185 185.400 +186 116.100 +187 58.000 +187 245.000 +187 261.100 +188 50.400 +188 219.400 +188 244.400 +190 116.800 +190 164.400 +190 228.200 +191 113.500 +191 144.100 +191 164.700 +192 153.800 +193 57.100 +193 101.900 +193 165.200 +195 144.800 +195 165.100 +195 219.300 +196 65.700 +196 164.900 +197 164.400 +197 200.600 +198 185.000 +198 201.200 +198 218.000 +199 107.300 +199 117.800 +199 164.600 +199 244.800 +200 185.600 +201 217.700 +202 66.300 +202 164.600 +202 256.800 +202 290.500 +204 101.300 +205 56.900 +205 71.300 +205 201.900 +205 219.500 +206 121.800 +206 164.600 +206 264.700 +206 286.000 +207 69.800 +207 100.600 +208 69.600 +208 164.000 +208 216.700 +208 242.700 +209 114.500 +209 132.500 +209 150.100 +209 162.600 +209 185.900 +209 291.300 +210 185.500 +210 217.500 +210 256.900 +210 288.900 +211 164.000 +211 218.200 +211 290.600 +212 130.300 +213 115.900 +213 144.400 +213 194.700 +214 118.000 +215 69.200 +215 117.700 +215 164.400 +215 244.100 +215 279.900 +216 101.500 +217 116.200 +217 219.300 +218 81.600 +218 184.700 +219 217.900 +220 108.200 +221 144.600 +221 183.500 +221 218.500 +222 67.500 +223 82.600 +223 146.000 +223 187.300 +223 218.400 +223 281.200 +224 55.400 +224 152.100 +225 93.900 +226 245.600 +227 216.800 +228 217.400 +229 51.700 +229 290.400 +231 55.400 +231 93.100 +231 216.400 +232 99.300 +232 132.700 +233 131.900 +234 81.500 +234 117.100 +234 243.400 +234 279.200 +235 81.700 +235 116.000 +235 265.700 +236 164.600 +237 144.500 +237 185.100 +237 241.800 +238 98.200 +238 102.300 +238 164.700 +239 56.800 +239 279.200 +240 201.300 +240 290.600 +241 96.800 +241 101.600 +241 185.300 +241 219.500 +241 266.500 +242 280.100 +244 71.800 +244 148.500 +245 125.400 +245 164.500 +245 219.200 +246 94.000 +246 186.800 +247 81.900 +247 185.000 +248 93.200 +248 108.200 +248 185.500 +248 256.800 +248 287.900 +249 70.900 +249 96.100 +249 185.800 +249 291.000 +250 102.200 +250 158.500 +250 218.300 +251 56.500 +251 69.500 +251 186.000 +252 124.800 +253 82.000 +253 94.200 +253 130.300 +253 164.200 +253 218.400 +253 266.000 +254 81.200 +254 110.400 +254 132.600 +254 164.600 +255 185.800 +255 244.300 +256 118.900 +256 163.700 +256 288.600 +258 186.100 +258 291.200 +259 69.900 +259 117.400 +259 163.800 +259 184.800 +259 202.000 +259 281.000 +260 128.700 +260 150.100 +260 280.500 +261 266.500 +262 51.200 +262 93.600 +262 187.400 +263 56.100 +263 69.800 +263 186.000 +264 93.500 +264 114.300 +264 148.700 +264 164.300 +264 280.800 +265 113.900 +265 186.000 +268 128.100 +268 185.700 +268 202.600 +268 244.900 +269 69.000 +269 165.800 +269 281.100 +270 116.700 +270 277.300 +271 96.300 +271 106.800 +271 217.500 +271 253.700 +271 275.800 +272 290.100 +273 105.400 +273 219.700 +273 244.800 +274 200.800 +275 80.500 +275 164.800 +275 203.200 +275 219.700 +276 243.900 +276 285.600 +277 164.400 +277 218.000 +277 259.800 +278 140.300 +278 266.100 +279 80.300 +279 116.700 +281 50.100 +281 96.700 +281 257.000 +283 116.900 +283 164.500 +284 266.000 +284 290.900 +285 164.800 +285 218.500 +286 291.400 +287 69.900 +287 185.400 +287 219.600 +287 256.300 +288 116.800 +288 217.700 +288 265.900 +289 107.700 +289 218.200 +290 244.700 +292 57.600 +292 117.100 +292 186.000 +292 219.500 +292 279.700 +293 164.500 +293 236.300 +294 96.000 +294 217.600 +295 187.100 +295 201.700 +296 116.600 +296 184.600 +297 106.900 +297 128.700 +297 219.300 +297 279.800 +298 93.900 +298 116.500 +299 125.800 +299 262.800 +300 164.600 +300 200.800 +301 218.200 +301 244.900 +302 184.800 +302 219.600 +303 70.300 +303 153.000 +304 96.500 +304 145.900 +304 193.700 +304 289.700 +305 68.400 +305 164.300 +305 228.200 +306 57.600 +306 93.900 +306 184.400 +307 82.100 +307 114.800 +307 260.400 +308 132.000 +309 83.000 +309 101.300 +309 140.200 +309 184.000 +309 228.300 +310 95.600 +310 128.100 +310 291.800 +311 79.500 +311 164.200 +311 219.600 +311 236.200 +311 276.500 +312 92.900 +312 144.500 +312 279.500 +313 82.600 +313 114.200 +314 102.500 +314 116.100 +314 164.200 +314 200.900 +314 219.600 +314 245.000 +314 266.100 +316 80.800 +316 164.700 +316 219.500 +317 265.800 +318 70.700 +318 79.100 +318 141.800 +318 164.100 +318 219.400 +319 129.400 +320 186.400 +323 101.300 +323 164.100 +324 164.900 +324 265.400 +325 69.900 +325 214.900 +325 266.000 +326 130.400 +326 141.300 +327 103.600 +327 117.700 +328 71.200 +328 281.200 +329 106.500 +329 164.400 +329 244.900 +330 114.500 +331 288.600 +332 117.000 +332 245.900 +333 132.300 +333 202.000 +333 265.000 +333 291.200 +334 94.000 +334 165.500 +334 244.100 +335 291.700 +336 93.100 +337 145.500 +337 186.600 +338 93.300 +338 277.000 +339 93.500 +339 218.200 +340 96.600 +340 145.200 +340 201.200 +340 291.700 +341 186.000 +342 164.900 +342 230.600 +343 82.200 +343 98.700 +345 114.500 +345 165.100 +345 263.800 +346 290.600 +347 185.700 +347 245.300 +348 117.600 +348 144.900 +348 184.500 +348 218.300 +348 277.100 +349 117.200 +349 185.000 +349 245.800 +350 96.800 +350 150.100 +350 164.700 +350 245.300 +351 148.500 +351 202.800 +352 70.200 +352 117.700 +352 218.400 +352 244.800 +353 81.400 +353 92.900 +353 116.200 +353 150.000 +353 266.000 +354 126.200 +354 260.500 +355 51.000 +355 117.500 +355 219.500 +356 130.500 +356 202.400 +357 201.700 +357 237.400 +358 100.500 +358 107.100 +358 290.400 +359 115.800 +359 287.800 +360 70.100 +360 131.500 +361 116.500 +361 187.200 +362 126.600 +362 218.500 +363 81.900 +363 164.200 +363 185.500 +363 288.600 +364 247.100 +365 103.800 +365 164.400 +365 218.000 +366 117.000 +366 281.100 +367 202.600 +367 219.700 +369 51.700 +369 102.400 +369 117.400 +369 164.700 +369 259.600 +369 289.900 +370 218.200 +371 228.400 +371 290.800 +372 99.900 +372 164.300 +372 201.100 +373 164.000 +373 289.900 +375 201.500 +376 81.200 +378 107.000 +378 186.200 +379 101.200 +379 234.800 +379 260.400 +380 93.800 +380 201.000 +381 81.700 +381 107.700 +381 164.700 +381 201.000 +381 245.900 +383 79.600 +383 113.500 +383 186.700 +383 287.200 +384 265.900 +385 116.500 +385 132.000 +386 291.600 +387 68.400 +387 164.700 +388 145.900 +389 158.500 +389 185.100 +389 218.200 +389 226.900 +390 57.700 +390 114.900 +390 147.300 +390 290.700 +391 184.200 +391 290.400 +392 150.400 +393 98.400 +393 102.200 +393 236.000 +394 69.000 +394 117.200 +394 245.800 +395 153.400 +395 260.400 +396 163.900 +396 288.700 +397 54.600 +397 146.900 +397 266.000 +399 218.600 +401 144.700 +401 256.600 +401 288.900 +402 164.400 +402 291.500 +403 101.600 +403 125.700 +403 147.600 +403 184.200 +403 230.400 +404 57.800 +404 219.800 +405 151.900 +405 201.500 +405 219.500 +405 266.100 +406 131.100 +407 100.200 +407 200.300 +407 219.100 +408 109.100 +408 164.200 +408 218.200 +410 156.600 +410 217.800 +411 116.500 +411 164.200 +411 202.800 +411 263.800 +412 163.900 +412 280.000 +413 130.500 +413 144.500 +413 185.700 +414 101.000 +415 114.100 +415 142.300 +415 200.100 +415 217.800 +416 144.700 +416 201.800 +416 219.000 +417 81.900 +417 164.500 +418 70.100 +418 100.800 +418 257.100 +419 144.200 +419 217.200 +419 291.000 +420 260.100 +421 99.900 +421 144.100 +421 183.100 +421 288.700 +422 107.400 +422 265.900 +423 129.100 +425 164.700 +425 247.300 +425 281.200 +426 102.600 +426 144.100 +426 291.600 +427 94.000 +427 164.900 +428 291.000 +429 69.800 +429 185.700 +429 265.900 +430 69.500 +430 164.100 +430 281.600 +431 69.700 +431 117.700 +432 93.700 +432 247.900 +433 93.300 +433 164.500 +433 198.700 +433 224.400 +434 68.200 +435 164.500 +436 66.000 +436 245.500 +437 101.500 +437 131.800 +438 132.800 +438 243.200 +439 93.600 +439 132.600 +439 184.900 +439 288.700 +442 81.600 +442 100.200 +442 185.100 +442 200.300 +443 80.800 +443 290.000 +444 106.900 +444 116.700 +444 265.600 +445 163.200 +445 227.700 +446 95.000 +446 202.000 +446 281.200 +447 81.900 +447 184.900 +448 66.500 +448 277.700 +449 89.100 +449 116.500 +450 99.100 +450 162.900 +450 186.900 +450 260.800 +450 279.700 +451 96.900 +451 185.300 +451 217.500 +451 278.900 +452 164.500 +452 187.100 +453 164.500 +453 290.600 +454 141.400 +455 121.300 +455 200.700 +456 81.900 +456 165.000 +456 201.800 +456 266.100 +457 224.500 +457 290.700 +458 92.700 +458 185.600 +459 219.000 +459 280.500 +460 81.800 +460 245.400 +461 69.400 +461 143.900 +463 198.900 +463 254.900 +463 288.800 +464 58.200 +464 164.500 +464 219.600 +465 164.100 +465 291.600 +466 246.000 +467 218.400 +467 289.300 +468 100.400 +468 162.800 +468 202.600 +468 259.200 +469 56.400 +470 245.500 +470 290.500 +471 69.600 +471 132.800 +472 50.700 +472 68.900 +472 81.300 +472 185.100 +473 164.200 +474 82.100 +474 125.800 +474 164.600 +475 71.900 +475 129.700 +475 219.400 +476 266.200 +477 104.400 +477 202.000 +477 244.700 +478 279.800 +479 202.100 +480 117.700 +480 163.800 +480 244.800 +481 201.800 +481 291.700 +482 162.600 +483 201.100 +484 164.100 +485 185.000 +487 81.200 +488 114.400 +488 291.900 +489 153.000 +489 165.500 +489 185.500 +490 106.800 +490 117.400 +491 62.100 +491 228.300 +492 116.000 +493 165.300 +493 219.600 +493 244.900 +493 263.300 +494 261.200 +495 69.200 +495 82.300 +496 102.500 +496 153.200 +496 279.900 +496 291.900 +497 81.600 +497 131.900 +497 164.600 +497 244.000 +497 281.300 +498 236.200 +499 58.300 +499 163.900 +499 201.000 +499 290.700 +500 116.000 +501 117.500 +501 130.600 +501 164.500 +501 218.200 +502 80.900 +503 56.100 +503 108.300 +503 159.400 +503 291.800 +504 66.700 +504 164.500 +504 185.600 +505 53.200 +505 126.200 +505 164.900 +506 123.800 +506 184.700 +507 132.500 +507 291.100 +508 94.000 +508 218.600 +508 288.100 +509 290.600 +510 52.600 +510 113.600 +510 291.600 +512 92.700 +512 280.100 +513 288.900 +514 128.700 +514 217.800 +515 202.000 +515 235.900 +516 106.500 +516 147.100 +516 218.600 +517 116.600 +517 243.900 +518 57.500 +518 288.800 +519 148.400 +519 202.600 +520 58.100 +520 99.700 +520 244.300 +521 164.500 +521 227.900 +521 243.500 +521 277.100 +522 217.600 +522 254.600 +522 288.500 +524 216.600 +524 290.800 +525 69.600 +527 144.400 +527 266.000 +528 164.400 +529 148.400 +529 164.200 +530 141.400 +530 164.700 +531 55.700 +531 164.500 +531 291.300 +532 55.900 +532 96.700 +532 164.700 +532 200.900 +533 99.900 +533 130.700 +534 184.600 +534 279.600 +535 91.500 +535 218.000 +536 60.400 +536 81.300 +536 95.900 +536 244.900 +536 279.700 +538 67.100 +538 127.300 +539 217.800 +540 121.900 +541 185.100 +541 209.900 +541 280.200 +542 81.900 +543 229.900 +544 132.300 +544 146.400 +544 218.500 +545 92.900 +545 102.200 +545 244.000 +546 93.600 +546 280.300 +547 58.000 +547 164.200 +548 164.800 +549 158.600 +549 186.000 +549 219.300 +549 290.900 +550 164.500 +550 290.000 +551 102.700 +551 164.500 +552 92.100 +552 101.900 +552 165.100 +552 257.000 +552 279.600 +553 244.400 +553 291.800 +554 101.200 +554 287.900 +555 132.600 +555 198.000 +556 81.700 +556 102.000 +556 202.400 +556 244.200 +557 81.800 +557 115.700 +557 164.600 +557 200.600 +558 151.300 +558 164.300 +558 185.900 +558 201.200 +559 117.500 +559 147.700 +559 186.000 +559 227.100 +559 256.700 +560 186.200 +560 266.200 +560 288.800 +562 66.500 +562 82.500 +562 187.200 +562 218.200 +562 279.500 +563 92.600 +563 230.800 +563 259.300 +564 50.100 +564 81.900 +564 131.400 +564 245.000 +566 185.000 +566 245.600 +567 157.700 +567 289.300 +568 81.100 +568 117.200 +568 164.900 +569 99.700 +569 116.800 +570 81.200 +570 245.300 +570 290.800 +571 125.400 +571 187.300 +571 219.600 +571 256.700 +572 142.200 +572 164.400 +572 229.600 +572 281.400 +573 86.300 +573 93.400 +573 219.200 +573 280.500 +574 152.400 +574 164.900 +574 264.900 +575 202.100 +575 236.000 +576 218.800 +576 245.900 +576 262.300 +577 92.300 +577 128.700 +578 94.100 +578 142.100 +578 257.500 +579 164.400 +579 218.300 +579 266.200 +580 163.800 +580 200.500 +581 149.000 +581 230.900 +582 163.300 +583 290.800 +584 185.700 +585 50.400 +585 218.200 +586 81.000 +586 142.200 +586 184.600 +586 219.600 +587 101.200 +587 164.600 +588 80.700 +588 265.000 +589 256.500 +589 290.800 +591 68.200 +591 279.500 +592 163.900 +593 81.900 +593 100.000 +594 258.600 +595 82.100 +595 265.500 +596 291.600 +597 164.400 +598 117.100 +598 245.100 +599 219.300 +599 247.200 +599 290.600 +600 71.200 +600 101.200 +600 144.100 +600 164.500 +600 243.800 +601 70.300 +601 117.000 +601 198.700 +602 144.500 +603 144.200 +603 201.200 +604 92.400 +604 101.400 +604 219.300 +605 116.900 +605 277.300 +607 143.600 +607 260.000 +607 290.600 +608 65.000 +608 113.400 +608 202.900 +608 218.600 +608 265.900 +609 69.400 +609 114.100 +610 100.500 +610 185.300 +610 245.000 +611 100.000 +611 164.600 +611 279.800 +611 291.400 +612 244.200 +612 291.700 +613 128.700 +613 144.500 +613 201.300 +613 290.200 +614 114.000 +614 164.700 +614 242.500 +614 281.100 +615 186.100 +615 245.200 +616 115.500 +616 144.600 +616 202.000 +617 162.400 +618 101.300 +618 146.400 +619 94.100 +619 245.000 +620 81.500 +620 164.200 +620 217.500 +621 99.200 +621 131.500 +621 144.400 +621 164.100 +621 219.300 +622 164.400 +622 217.500 +623 50.400 +623 127.400 +623 280.000 +625 80.800 +625 116.500 +625 217.900 +625 237.700 +626 81.800 +626 259.900 +627 67.400 +627 99.300 +627 187.200 +629 69.800 +629 96.700 +629 216.900 +630 144.800 +630 186.900 +631 245.600 +632 127.400 +632 146.300 +632 162.500 +633 186.100 +633 243.900 +634 58.500 +634 117.700 +634 186.000 +634 247.500 +635 280.000 +637 146.000 +637 219.300 +637 291.800 +638 107.200 +638 164.600 +638 288.400 +640 91.700 +640 125.900 +640 185.700 +641 164.200 +641 291.500 +643 81.600 +643 219.600 +643 260.500 +644 164.300 +645 279.800 +645 291.400 +646 200.100 +646 246.000 +647 164.500 +648 201.600 +648 289.100 +649 229.700 +650 67.400 +650 101.400 +650 165.200 +650 186.800 +650 219.600 +650 290.600 +651 68.000 +651 144.900 +651 278.300 +652 81.700 +652 107.700 +652 144.900 +652 164.800 +653 101.100 +653 202.200 +653 247.400 +653 285.500 +653 291.600 +654 93.200 +654 128.600 +654 164.500 +655 219.300 +655 260.100 +656 92.600 +656 100.200 +656 116.900 +656 276.800 +657 81.900 +657 101.100 +657 130.400 +657 164.500 +657 291.200 +658 80.600 +659 81.400 +659 186.500 +660 164.800 +660 279.900 +661 201.100 +663 99.800 +664 50.100 +664 117.400 +664 164.300 +665 81.800 +665 93.000 +665 130.000 +665 186.100 +666 165.000 +667 59.400 +668 117.700 +669 82.000 +669 185.100 +670 186.100 +670 200.900 +671 94.100 +671 244.300 +672 164.800 +672 218.000 +673 101.400 +673 150.500 +674 66.400 +674 130.500 +674 164.400 +675 187.000 +675 244.700 +676 184.900 +676 287.000 +677 93.000 +677 144.700 +678 82.200 +678 101.200 +678 163.900 +679 186.100 +679 244.400 +680 116.500 +680 201.500 +680 291.000 +681 164.000 +681 279.900 +683 219.500 +684 184.600 +684 244.100 +685 69.700 +685 145.500 +685 266.100 +686 50.600 +686 185.200 +686 219.700 +688 68.400 +688 96.600 +688 219.600 +689 164.500 +689 244.300 +690 219.400 +690 244.900 +690 277.400 +691 186.100 +691 219.500 +691 291.500 +692 114.300 +692 157.000 +692 202.400 +693 93.800 +693 219.400 +694 102.200 +694 144.700 +694 219.700 +695 140.800 +695 185.900 +695 244.800 +695 266.100 +696 96.400 +696 263.800 +697 107.000 +697 201.100 +697 245.000 +698 117.600 +699 102.200 +699 216.900 +699 281.300 +700 107.700 +700 165.000 +701 186.900 +702 101.700 +702 116.400 +703 82.000 +703 265.700 +704 69.800 +704 81.400 +704 127.100 +704 184.300 +705 68.800 +706 99.500 +706 165.100 +706 199.000 +706 245.100 +707 87.900 +707 100.100 +707 202.300 +707 231.200 +707 245.500 +708 127.600 +708 218.000 +708 259.900 +708 291.700 +709 165.200 +709 236.500 +710 96.700 +710 291.600 +711 279.600 +712 82.000 +712 100.200 +712 104.200 +712 184.200 +712 200.200 +712 218.000 +713 237.500 +714 116.900 +714 131.400 +714 218.500 +714 244.900 +715 116.600 +716 218.000 +717 186.100 +718 70.100 +718 115.700 +718 281.400 +719 187.100 +720 59.400 +721 96.200 +721 114.400 +721 165.200 +721 264.800 +722 50.600 +722 124.600 +722 291.500 +724 100.500 +724 164.400 +724 184.400 +725 92.900 +725 164.100 +725 266.100 +725 291.500 +726 116.500 +726 219.700 +727 81.800 +727 131.100 +727 164.900 +727 186.500 +728 104.000 +728 164.100 +728 243.000 +729 158.800 +729 164.700 +730 107.100 +730 165.400 +730 263.700 +731 56.400 +731 164.800 +731 280.100 +731 291.400 +732 93.100 +732 131.200 +732 185.300 +733 125.900 +734 96.300 +734 236.300 +735 218.000 +736 130.300 +736 245.000 +737 131.100 +737 245.200 +737 265.900 +737 279.700 +738 115.700 +738 164.500 +738 266.100 +739 69.400 +739 101.100 +739 146.200 +739 164.300 +739 200.900 +740 81.900 +740 113.000 +740 279.900 +741 52.000 +741 116.700 +741 163.900 +741 291.900 +742 106.900 +742 129.000 +742 147.200 +742 228.400 +742 265.600 +743 80.500 +743 141.300 +743 194.200 +744 56.300 +744 99.200 +744 124.600 +745 69.800 +745 127.800 +745 279.800 +746 186.000 +746 197.900 +746 291.600 +747 219.100 +748 86.600 +748 233.600 +748 281.900 +750 164.400 +751 116.700 +752 93.100 +752 105.100 +752 116.400 +752 186.100 +753 130.300 +754 163.000 +755 81.900 +755 165.100 +755 226.100 +756 217.400 +757 66.800 +757 92.400 +757 150.100 +758 96.200 +758 164.400 +759 69.100 +759 105.700 +759 113.700 +760 148.200 +760 244.400 +761 68.400 +761 225.800 +762 94.000 +762 165.000 +763 158.500 +763 199.100 +764 150.700 +764 164.500 +765 66.500 +765 186.600 +765 216.900 +766 185.700 +767 68.800 +767 97.100 +767 187.100 +767 217.800 +768 159.200 +768 201.800 +768 226.500 +769 69.000 +769 163.900 +769 235.900 +770 108.600 +770 184.900 +770 245.000 +771 185.000 +771 291.300 +772 163.800 +772 201.600 +773 116.900 +773 153.600 +773 185.800 +773 202.200 +773 260.200 +774 70.200 +774 164.400 +774 219.700 +776 116.500 +776 163.200 +776 244.200 +776 291.700 +777 69.400 +777 117.200 +777 185.100 +777 290.900 +778 150.400 +778 260.600 +779 149.600 +780 281.500 +781 128.700 +781 164.500 +781 231.000 +782 164.900 +782 202.600 +783 201.600 +784 146.500 +784 235.400 +785 124.700 +785 153.500 +785 164.200 +785 201.200 +785 266.300 +785 281.200 +786 81.700 +786 243.000 +787 52.200 +788 184.800 +788 291.500 +789 227.900 +789 245.900 +790 201.000 +790 288.400 +791 100.100 +791 164.700 +792 145.500 +792 185.800 +793 164.700 +794 65.600 +794 103.000 +794 182.400 +795 93.900 +795 131.800 +795 165.000 +795 291.200 +796 259.900 +796 291.800 +797 152.800 +797 164.500 +798 99.800 +798 165.600 +799 91.400 +799 131.700 +799 163.000 +799 236.000 +800 145.900 +800 276.500 +801 153.600 +802 164.500 +802 292.000 +803 116.800 +804 256.500 +804 290.700 +805 81.000 +805 145.200 +805 164.500 +805 186.800 +806 164.000 +806 218.000 +807 65.500 +807 217.500 +808 217.000 +808 247.200 +809 81.200 +809 94.000 +809 116.600 +809 130.000 +809 218.300 +810 116.800 +811 245.100 +811 279.900 +812 96.400 +812 218.400 +812 244.100 +813 51.400 +813 146.200 +813 257.500 +814 161.700 +814 244.400 +815 164.700 +815 219.400 +815 291.500 +816 141.900 +817 130.100 +817 164.500 +818 162.800 +819 131.300 +819 184.800 +820 244.100 +820 291.800 +821 70.000 +821 117.200 +822 69.100 +822 164.600 +822 260.100 +823 51.700 +823 115.600 +823 183.000 +823 262.600 +824 69.300 +824 185.800 +825 185.800 +826 69.600 +826 106.900 +826 164.200 +826 259.400 +827 147.200 +827 164.900 +827 185.800 +827 218.100 +827 280.200 +828 69.700 +828 99.100 +828 185.800 +830 80.700 +830 164.300 +831 103.200 +832 70.600 +833 164.900 +834 117.800 +835 93.000 +835 115.900 +835 164.500 +835 185.900 +835 229.600 +836 57.900 +837 54.000 +837 117.400 +837 164.300 +837 256.800 +838 93.900 +838 265.600 +839 54.100 +839 103.100 +839 147.200 +839 186.000 +839 217.900 +839 266.700 +840 57.400 +840 99.600 +840 164.300 +840 185.000 +841 162.500 +841 227.400 +841 255.700 +842 96.200 +842 150.700 +842 162.100 +842 186.600 +842 260.400 +843 126.400 +843 202.200 +843 281.400 +844 244.700 +844 278.800 +845 57.200 +845 217.500 +845 280.000 +845 290.600 +846 184.500 +847 66.000 +847 217.700 +847 245.300 +848 130.600 +849 58.000 +849 127.500 +849 164.600 +849 185.000 +849 200.700 +849 291.500 +850 93.800 +850 153.500 +850 291.300 +851 50.400 +851 101.200 +851 144.500 +851 221.200 +851 228.300 +851 281.200 +852 100.400 +852 130.100 +852 218.200 +853 82.000 +853 260.300 +854 185.800 +855 95.800 +855 201.700 +856 92.700 +856 113.700 +856 164.700 +856 247.700 +857 290.400 +858 290.600 +859 52.500 +859 82.300 +860 201.000 +861 55.100 +861 107.700 +861 281.100 +862 161.800 +862 218.000 +862 261.400 +862 279.900 +863 131.600 +863 164.600 +864 94.000 +864 131.500 +865 93.800 +865 164.300 +866 164.700 +866 243.900 +868 184.800 +868 244.500 +868 265.100 +869 184.900 +869 236.400 +870 128.500 +870 216.900 +871 131.900 +872 260.400 +872 278.800 +875 116.200 +875 165.000 +876 80.900 +876 117.400 +876 141.600 +876 291.400 +878 93.600 +878 240.900 +878 288.200 +879 102.100 +879 148.700 +879 164.300 +880 144.600 +880 184.900 +882 131.800 +882 202.300 +882 264.200 +882 290.800 +883 51.600 +883 150.500 +883 164.900 +883 219.500 +884 59.400 +884 82.000 +884 217.900 +885 107.900 +885 288.700 +886 163.100 +886 260.700 +886 291.500 +888 101.200 +888 202.200 +890 91.800 +890 116.200 +890 130.400 +890 165.400 +890 245.400 +890 278.200 +891 117.100 +891 291.200 +895 265.900 +896 164.700 +896 279.500 +897 57.500 +897 164.400 +897 231.000 +897 288.900 +899 260.400 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_6_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_6_i_pop.dat new file mode 100644 index 000000000..441b13362 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_6_i_pop.dat @@ -0,0 +1,526 @@ +sender time_ms +900 69.800 +900 116.500 +900 291.600 +901 185.800 +901 202.600 +901 244.200 +902 165.700 +903 148.500 +903 185.100 +903 281.100 +904 101.400 +904 264.700 +905 61.200 +905 70.100 +905 82.600 +905 185.500 +905 290.400 +906 50.300 +906 70.000 +906 186.300 +906 280.600 +907 101.300 +907 163.800 +907 217.900 +907 226.700 +907 290.600 +908 50.200 +908 218.400 +910 116.900 +910 164.300 +910 185.900 +910 218.100 +911 289.300 +912 93.800 +913 103.800 +913 131.900 +913 201.500 +915 81.600 +915 263.900 +916 65.000 +916 101.700 +916 185.000 +916 279.600 +917 80.900 +917 91.800 +917 116.400 +917 165.200 +917 198.000 +917 290.300 +918 65.700 +920 132.700 +920 185.500 +921 91.600 +921 153.600 +921 185.700 +921 265.900 +923 80.800 +923 231.100 +924 104.700 +924 144.700 +925 102.200 +925 164.800 +926 116.200 +926 184.700 +926 265.100 +927 144.400 +927 164.200 +927 219.500 +928 65.000 +928 96.400 +928 147.400 +928 184.900 +929 144.400 +929 185.100 +930 116.900 +930 164.600 +930 212.200 +930 265.500 +931 96.300 +931 133.300 +931 183.700 +931 244.400 +932 96.900 +932 116.400 +932 139.600 +932 243.900 +933 141.200 +933 202.600 +934 132.900 +934 200.000 +934 221.600 +934 227.100 +934 266.000 +934 291.000 +935 70.800 +935 153.600 +935 186.100 +935 228.200 +935 287.900 +937 280.600 +938 164.100 +939 95.900 +939 130.700 +939 187.200 +939 260.300 +939 291.200 +940 218.200 +940 265.500 +941 68.200 +941 92.900 +941 287.600 +942 67.300 +943 98.900 +943 201.700 +943 244.100 +943 259.900 +944 164.900 +945 93.500 +945 117.300 +945 266.300 +947 97.100 +947 125.700 +947 185.000 +948 116.600 +948 164.400 +948 260.200 +949 131.900 +949 265.700 +950 152.500 +950 243.700 +951 100.400 +951 146.500 +951 164.900 +952 281.400 +953 51.800 +953 164.800 +954 131.100 +954 244.900 +955 81.600 +955 131.900 +955 185.900 +955 291.700 +956 114.400 +956 184.600 +956 219.700 +957 50.100 +957 81.600 +957 186.000 +957 291.300 +958 55.400 +958 126.300 +958 164.600 +959 116.500 +959 260.500 +960 67.700 +960 122.400 +960 152.900 +960 217.600 +960 290.800 +961 148.700 +961 290.200 +962 67.800 +963 124.000 +964 125.000 +964 164.600 +966 79.500 +966 144.500 +966 218.100 +967 68.300 +967 185.900 +968 116.300 +968 145.900 +968 290.900 +969 93.300 +969 126.300 +969 289.200 +970 164.600 +970 186.800 +970 279.100 +971 50.600 +971 185.400 +971 288.900 +972 250.800 +972 291.000 +973 144.500 +974 57.000 +974 132.300 +974 164.500 +974 229.700 +975 126.600 +975 201.800 +975 290.700 +976 107.300 +977 218.300 +979 164.300 +979 244.600 +980 164.900 +980 201.100 +980 260.000 +981 96.400 +981 164.800 +983 146.500 +984 117.900 +984 164.300 +984 235.700 +986 56.600 +986 245.800 +987 186.000 +987 218.300 +987 290.500 +988 69.700 +990 81.700 +990 116.400 +990 201.300 +991 133.700 +992 52.500 +992 144.300 +992 200.500 +992 218.000 +992 291.800 +993 164.600 +993 280.000 +994 93.400 +995 218.600 +995 286.300 +996 101.200 +996 218.200 +998 219.300 +1000 80.800 +1000 131.800 +1000 164.000 +1000 194.500 +1000 219.500 +1001 144.600 +1001 164.600 +1001 218.100 +1002 279.900 +1003 280.200 +1004 81.800 +1004 101.000 +1004 163.100 +1005 51.100 +1005 93.300 +1005 186.900 +1005 218.200 +1005 244.400 +1005 291.800 +1006 92.700 +1006 163.800 +1006 290.700 +1007 102.300 +1008 81.400 +1008 164.300 +1009 100.700 +1009 116.400 +1009 280.400 +1010 103.900 +1010 143.100 +1010 164.700 +1011 116.600 +1011 164.700 +1011 185.900 +1012 146.500 +1013 149.900 +1014 107.700 +1014 253.700 +1016 128.800 +1016 186.400 +1017 70.700 +1017 236.000 +1018 116.800 +1018 276.800 +1019 185.800 +1020 67.600 +1020 81.800 +1020 244.400 +1021 106.900 +1022 69.800 +1023 185.700 +1023 247.400 +1023 278.900 +1025 81.600 +1025 104.500 +1025 146.300 +1025 218.400 +1025 265.000 +1025 290.800 +1026 281.000 +1027 291.200 +1029 80.700 +1029 245.800 +1030 165.000 +1030 279.900 +1031 67.500 +1031 70.600 +1031 99.700 +1031 132.100 +1031 144.700 +1031 164.900 +1031 242.900 +1031 279.900 +1032 81.200 +1032 141.900 +1032 164.200 +1032 185.800 +1033 71.800 +1033 164.600 +1033 198.800 +1033 280.300 +1034 260.200 +1035 261.300 +1035 279.600 +1036 100.000 +1036 280.000 +1037 100.600 +1037 164.500 +1038 126.400 +1038 200.900 +1039 62.000 +1039 128.600 +1040 99.900 +1041 96.100 +1041 164.200 +1041 186.100 +1042 144.700 +1042 185.800 +1043 158.600 +1044 185.000 +1044 265.800 +1045 227.900 +1046 153.200 +1046 164.700 +1047 164.900 +1047 279.900 +1048 202.400 +1049 68.000 +1049 164.700 +1049 229.800 +1050 113.600 +1050 145.900 +1051 186.100 +1051 219.400 +1052 164.300 +1053 95.800 +1053 116.600 +1053 164.700 +1054 67.700 +1054 201.500 +1054 291.700 +1055 164.400 +1056 96.200 +1056 187.000 +1057 81.700 +1058 244.400 +1058 260.500 +1059 77.700 +1059 129.800 +1059 164.300 +1059 184.600 +1059 244.700 +1059 290.400 +1060 56.300 +1060 81.500 +1060 125.400 +1060 164.900 +1060 257.300 +1061 93.300 +1061 186.100 +1062 91.800 +1062 164.400 +1062 245.300 +1063 55.700 +1063 82.100 +1063 148.300 +1063 244.000 +1064 153.300 +1064 162.200 +1064 218.300 +1065 57.900 +1065 80.800 +1065 95.400 +1065 219.700 +1065 266.100 +1066 66.400 +1066 218.000 +1067 70.000 +1067 94.700 +1067 164.300 +1068 217.600 +1069 218.100 +1070 92.500 +1071 100.000 +1071 164.500 +1071 218.000 +1071 291.800 +1072 55.000 +1072 185.300 +1072 244.200 +1073 67.800 +1073 116.900 +1073 265.600 +1074 93.900 +1074 115.100 +1075 201.100 +1075 290.800 +1076 131.800 +1076 150.900 +1076 280.000 +1077 265.800 +1078 146.400 +1078 288.300 +1079 218.000 +1080 81.400 +1080 164.500 +1080 291.500 +1081 77.900 +1081 219.700 +1081 265.800 +1082 51.900 +1082 141.300 +1083 153.100 +1083 197.500 +1084 56.400 +1084 185.000 +1084 266.100 +1085 57.200 +1085 187.000 +1085 201.700 +1086 93.400 +1086 290.300 +1087 107.100 +1088 164.600 +1088 229.800 +1089 69.100 +1089 83.000 +1089 114.400 +1089 164.600 +1090 115.800 +1090 291.800 +1091 146.100 +1091 185.800 +1092 114.100 +1092 290.800 +1093 165.500 +1093 202.200 +1094 245.100 +1094 266.100 +1095 82.700 +1095 93.300 +1095 117.100 +1095 130.500 +1095 218.400 +1095 244.700 +1096 55.800 +1096 106.700 +1096 117.200 +1096 162.100 +1096 246.100 +1097 70.400 +1097 185.100 +1097 228.500 +1098 68.800 +1098 122.700 +1098 185.300 +1098 219.700 +1098 257.000 +1099 69.800 +1099 117.600 +1099 201.600 +1099 288.900 +1100 56.400 +1100 164.300 +1100 218.100 +1101 265.400 +1102 92.600 +1102 100.300 +1102 113.400 +1102 130.900 +1102 185.700 +1102 279.100 +1103 68.800 +1103 116.500 +1104 186.100 +1105 146.000 +1106 93.900 +1106 164.300 +1106 184.200 +1107 81.900 +1108 165.100 +1108 217.300 +1109 67.000 +1109 114.900 +1109 164.400 +1109 201.800 +1109 243.700 +1111 230.400 +1111 291.200 +1112 101.700 +1112 245.100 +1113 82.200 +1113 217.900 +1113 291.100 +1114 71.100 +1114 131.900 +1115 69.700 +1116 132.100 +1116 184.800 +1117 68.200 +1117 185.800 +1117 263.400 +1119 117.300 +1119 152.000 +1119 291.100 +1120 80.100 +1120 131.700 +1121 81.100 +1121 259.900 +1121 280.500 +1122 100.000 +1122 132.600 +1122 202.000 +1122 244.500 +1123 291.800 +1124 69.800 +1124 128.600 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_7_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_7_e_pop.dat new file mode 100644 index 000000000..d5cd3fe3c --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_7_e_pop.dat @@ -0,0 +1,2119 @@ +sender time_ms +0 265.900 +1 82.200 +1 128.100 +1 164.600 +1 219.900 +1 257.200 +2 124.200 +2 163.600 +2 185.400 +3 106.800 +3 149.900 +3 164.800 +4 291.500 +5 144.600 +5 195.100 +5 219.200 +6 101.400 +6 164.700 +6 245.900 +7 69.900 +7 96.100 +8 80.900 +8 117.200 +9 202.400 +10 127.400 +10 247.000 +11 228.900 +11 291.200 +13 114.800 +15 69.400 +15 93.900 +15 262.700 +16 184.700 +16 200.600 +16 243.300 +17 101.300 +17 182.100 +18 93.900 +18 126.200 +18 150.400 +19 144.900 +19 265.900 +20 164.800 +20 219.600 +20 244.300 +20 280.700 +21 81.500 +21 164.600 +21 217.700 +22 125.900 +23 164.600 +23 201.700 +23 266.000 +24 93.100 +24 218.000 +25 144.200 +25 260.500 +27 164.600 +27 194.700 +27 254.000 +28 70.000 +28 116.200 +28 164.500 +30 78.900 +30 131.900 +30 245.900 +31 162.600 +31 288.300 +32 108.100 +32 130.000 +33 145.100 +33 164.400 +33 280.100 +33 291.000 +34 244.900 +35 116.400 +35 144.600 +36 131.400 +36 182.500 +36 217.000 +37 60.900 +37 143.400 +37 244.300 +38 127.800 +39 195.000 +39 288.100 +40 52.300 +40 148.600 +40 164.600 +41 81.900 +41 164.500 +42 186.000 +42 227.700 +42 289.200 +43 131.400 +44 50.100 +44 184.600 +44 226.300 +44 242.500 +45 54.800 +45 185.300 +45 244.600 +46 93.100 +46 132.000 +46 243.800 +47 94.100 +47 125.600 +48 81.500 +48 128.600 +48 279.000 +50 245.300 +50 279.200 +51 93.500 +51 164.600 +51 215.400 +52 50.100 +52 107.100 +52 144.500 +52 184.400 +52 291.800 +53 81.900 +53 147.000 +53 202.800 +54 99.600 +54 108.000 +54 202.000 +54 217.800 +55 69.200 +55 99.100 +55 108.500 +55 200.300 +55 245.200 +55 263.900 +55 291.400 +56 163.800 +57 164.500 +57 216.500 +58 185.000 +58 219.300 +59 79.200 +59 101.400 +59 146.300 +59 164.600 +59 218.700 +59 266.000 +60 165.200 +61 69.600 +61 107.100 +61 217.800 +61 279.400 +62 90.900 +62 218.500 +63 187.200 +64 55.600 +64 67.600 +64 82.000 +64 187.300 +64 260.000 +65 289.100 +67 116.700 +67 185.500 +68 101.200 +68 116.000 +68 259.400 +69 79.900 +69 186.100 +70 218.500 +71 81.200 +71 159.700 +72 56.200 +72 92.600 +72 131.700 +74 124.200 +74 185.900 +75 101.300 +75 164.100 +76 164.300 +76 217.500 +76 277.100 +77 219.200 +78 93.400 +79 291.900 +80 146.100 +80 164.200 +80 291.800 +81 163.900 +81 185.600 +82 201.800 +82 246.200 +83 150.100 +83 184.300 +83 265.600 +84 94.200 +84 116.600 +84 185.500 +84 219.600 +84 288.800 +85 56.600 +85 144.700 +85 164.400 +85 218.500 +87 95.300 +88 116.300 +88 151.800 +89 81.800 +89 164.700 +89 185.000 +91 102.600 +91 164.800 +92 116.900 +92 164.500 +92 246.000 +93 93.900 +94 54.400 +94 97.900 +94 218.300 +95 70.900 +95 291.000 +96 164.500 +96 199.100 +96 224.400 +97 67.200 +97 131.100 +97 200.900 +98 217.700 +99 164.700 +99 245.300 +100 102.100 +100 132.100 +100 187.200 +101 96.000 +101 185.100 +102 144.600 +102 164.600 +103 57.400 +103 266.200 +104 80.700 +104 130.800 +104 266.000 +105 186.100 +105 259.200 +105 280.300 +106 116.100 +106 164.100 +106 185.800 +106 201.000 +108 93.900 +108 290.600 +109 93.700 +109 144.500 +109 227.500 +110 163.700 +111 144.400 +112 289.000 +113 59.100 +113 218.200 +113 278.400 +115 82.000 +115 185.700 +115 291.700 +116 67.000 +116 117.700 +116 185.000 +116 218.300 +117 57.300 +118 50.200 +118 141.000 +118 164.500 +118 279.500 +119 164.800 +120 187.200 +121 100.000 +121 201.600 +122 50.300 +122 92.800 +122 187.100 +123 164.700 +124 115.700 +124 164.500 +124 218.000 +124 266.000 +125 57.400 +125 156.400 +125 243.300 +125 277.700 +125 291.300 +126 68.400 +126 141.700 +126 156.600 +126 280.300 +127 107.700 +127 164.400 +128 81.000 +128 185.500 +128 276.300 +130 104.500 +130 116.700 +131 127.400 +131 289.500 +132 67.400 +132 94.000 +133 108.000 +133 131.800 +133 186.600 +134 68.300 +134 107.200 +134 152.800 +134 164.400 +134 200.800 +134 291.400 +135 187.200 +136 56.800 +136 82.600 +136 164.400 +136 186.800 +136 218.100 +138 55.300 +138 70.000 +138 79.700 +138 146.400 +138 165.800 +138 201.600 +138 219.600 +139 102.200 +139 142.100 +139 165.200 +139 217.700 +140 164.900 +140 186.400 +140 265.800 +141 244.100 +143 201.800 +144 79.600 +144 144.400 +144 280.100 +146 70.600 +146 90.500 +146 185.100 +147 55.500 +147 93.700 +147 218.500 +148 126.300 +148 164.200 +149 66.300 +149 125.000 +149 164.600 +150 101.400 +150 184.900 +151 80.900 +151 164.700 +152 141.900 +153 99.600 +153 124.200 +154 68.000 +154 126.200 +154 244.200 +154 266.000 +155 92.100 +155 100.300 +155 117.400 +155 218.100 +156 116.900 +156 164.100 +157 228.400 +158 116.800 +158 164.400 +159 95.600 +159 200.600 +160 164.900 +160 186.200 +161 81.700 +161 116.400 +161 145.300 +161 201.600 +161 218.200 +161 280.100 +162 117.000 +162 257.300 +163 70.800 +163 200.800 +163 266.100 +164 226.300 +165 133.500 +165 164.700 +165 202.100 +166 70.100 +166 82.500 +166 186.100 +168 70.900 +168 107.700 +169 66.300 +169 144.500 +170 69.600 +170 126.000 +170 150.000 +170 164.600 +170 243.500 +170 290.700 +171 55.200 +171 113.600 +171 184.800 +172 164.200 +172 244.700 +172 288.900 +174 152.600 +174 291.900 +175 96.100 +175 150.300 +175 165.500 +175 244.500 +176 82.100 +176 150.800 +176 290.200 +177 93.800 +177 280.400 +178 81.800 +179 51.900 +179 69.600 +180 67.700 +180 244.600 +181 183.100 +181 278.800 +182 102.300 +183 101.400 +183 164.300 +183 245.400 +184 164.600 +185 146.200 +185 280.600 +186 160.200 +186 218.500 +186 245.400 +186 290.700 +187 280.000 +188 116.200 +188 290.600 +189 68.000 +189 102.100 +189 114.600 +189 164.600 +189 225.800 +190 102.600 +190 200.000 +190 246.700 +190 265.000 +191 67.700 +191 105.000 +191 123.600 +192 197.500 +192 265.700 +193 70.000 +193 116.600 +193 245.700 +193 279.200 +194 125.600 +194 158.800 +194 200.500 +195 236.500 +196 116.300 +197 82.000 +197 141.600 +197 244.400 +198 164.400 +198 247.200 +199 130.700 +199 164.700 +199 218.100 +199 260.300 +199 279.300 +200 68.400 +200 164.100 +201 80.700 +201 130.300 +201 140.300 +201 161.800 +202 54.700 +202 100.200 +202 186.300 +202 254.400 +203 80.700 +203 130.000 +203 288.800 +204 202.700 +205 115.500 +205 253.300 +206 116.600 +207 131.200 +207 219.400 +207 261.200 +208 202.600 +209 128.400 +209 236.000 +210 93.800 +210 202.100 +210 235.700 +210 266.100 +211 56.800 +211 116.300 +211 291.100 +212 70.700 +212 129.200 +212 218.000 +213 150.200 +213 164.600 +213 201.200 +214 52.500 +214 82.000 +214 201.900 +214 245.200 +214 279.900 +216 52.500 +216 82.900 +216 164.800 +216 244.400 +217 105.800 +217 201.500 +217 243.500 +217 288.800 +218 93.000 +218 115.400 +218 147.900 +218 164.700 +218 265.900 +219 92.200 +219 124.600 +219 266.100 +220 56.000 +221 55.400 +221 164.600 +221 198.800 +222 186.800 +222 290.700 +223 125.700 +223 164.100 +223 201.700 +223 280.700 +224 116.800 +224 141.500 +224 260.800 +224 289.000 +225 96.900 +225 200.600 +225 290.500 +226 50.800 +226 68.700 +226 128.300 +226 153.600 +226 254.900 +227 65.900 +227 128.100 +228 132.700 +228 187.200 +228 218.600 +228 266.100 +229 164.400 +229 185.000 +230 81.600 +230 219.700 +231 132.800 +231 164.300 +231 200.200 +232 54.900 +232 218.200 +232 280.000 +233 56.500 +234 146.600 +234 185.900 +234 266.000 +235 107.200 +235 144.500 +235 291.000 +236 55.800 +236 164.700 +236 200.100 +236 266.000 +237 68.300 +237 96.400 +237 132.100 +237 201.600 +239 102.100 +239 114.200 +239 244.900 +240 117.100 +240 164.300 +240 219.700 +241 117.300 +241 163.800 +242 99.900 +242 125.400 +242 218.100 +243 70.000 +243 127.100 +243 244.300 +244 143.700 +244 161.900 +244 291.200 +245 202.000 +246 244.600 +247 257.200 +247 280.500 +248 96.700 +248 119.300 +248 130.600 +249 185.200 +249 244.800 +250 127.800 +251 68.500 +251 218.000 +251 280.200 +252 236.000 +253 164.300 +253 243.800 +254 132.100 +254 164.500 +254 219.600 +256 244.000 +257 92.600 +257 162.800 +257 185.200 +258 117.300 +258 202.500 +258 260.100 +259 56.300 +259 138.700 +259 164.400 +259 219.500 +260 147.200 +260 164.900 +260 229.800 +261 67.700 +261 96.100 +261 152.900 +261 187.100 +261 279.200 +263 201.200 +263 217.800 +263 291.800 +264 244.600 +264 265.200 +265 101.100 +266 152.100 +266 217.800 +267 67.800 +267 185.900 +267 291.600 +268 93.700 +269 82.400 +269 131.600 +270 81.800 +271 101.200 +271 131.600 +271 145.000 +271 184.300 +272 230.600 +272 266.100 +273 82.200 +273 128.100 +274 126.000 +275 185.100 +275 290.000 +276 150.100 +277 116.400 +277 245.800 +278 96.300 +278 126.300 +278 163.300 +278 266.100 +279 94.000 +279 219.500 +279 265.900 +280 164.800 +281 57.100 +281 79.700 +281 198.000 +283 81.700 +283 146.400 +283 165.300 +283 254.400 +284 66.500 +284 152.400 +284 279.400 +285 117.200 +285 187.000 +285 290.800 +286 260.500 +288 265.200 +288 288.900 +289 114.200 +289 217.700 +291 81.900 +292 81.600 +292 101.100 +292 164.700 +292 287.200 +293 124.800 +293 287.700 +294 69.600 +294 94.000 +294 132.000 +294 185.200 +295 50.500 +295 122.000 +295 245.000 +296 81.500 +296 187.000 +296 244.600 +297 56.700 +297 145.400 +298 71.000 +298 128.600 +299 70.500 +299 265.100 +300 81.700 +300 141.100 +301 184.800 +301 260.200 +301 289.400 +302 101.200 +302 117.000 +302 132.000 +302 163.900 +302 187.200 +303 101.700 +303 202.700 +303 244.400 +304 81.200 +304 184.200 +304 243.500 +305 165.200 +306 81.800 +306 265.700 +307 277.200 +308 91.400 +308 158.700 +308 290.300 +309 51.800 +309 78.500 +309 164.200 +310 117.500 +311 125.500 +312 100.300 +312 265.100 +313 102.300 +313 116.700 +313 145.000 +314 56.200 +314 99.400 +315 281.300 +316 69.600 +316 115.600 +316 219.300 +317 202.700 +318 150.400 +318 164.200 +319 106.600 +319 117.000 +319 141.200 +319 156.100 +319 219.300 +320 69.900 +320 130.900 +320 145.200 +320 164.900 +320 247.300 +321 228.500 +321 243.900 +321 281.100 +322 144.400 +323 139.200 +323 186.100 +323 229.100 +323 278.200 +323 291.300 +324 185.700 +324 202.000 +324 220.600 +324 265.800 +325 52.600 +325 164.900 +326 81.900 +326 218.200 +327 81.500 +327 107.100 +327 144.800 +327 256.900 +328 69.700 +328 99.900 +328 125.300 +328 217.600 +329 164.500 +329 202.400 +330 144.500 +331 125.800 +331 201.800 +331 266.100 +332 98.900 +332 257.400 +332 290.700 +333 131.900 +334 187.000 +334 219.700 +334 291.700 +335 67.200 +335 163.800 +335 218.000 +335 280.000 +336 117.900 +336 148.500 +336 164.600 +336 185.800 +337 140.700 +337 186.700 +337 289.100 +338 116.300 +338 291.600 +339 55.600 +339 266.000 +339 291.200 +340 126.900 +341 70.300 +341 144.600 +341 164.400 +341 279.800 +342 80.900 +342 185.900 +343 202.100 +343 227.600 +343 280.000 +344 82.000 +344 261.500 +345 67.200 +345 116.700 +345 147.100 +345 164.400 +345 187.400 +347 186.200 +348 153.700 +348 165.200 +348 291.300 +349 66.100 +349 116.000 +349 266.000 +349 281.200 +350 131.200 +350 164.400 +350 236.300 +350 263.200 +351 185.300 +352 163.800 +352 259.900 +353 80.300 +353 130.600 +353 164.900 +354 93.600 +354 129.400 +354 219.300 +354 259.500 +355 153.100 +356 69.400 +356 113.800 +356 217.900 +356 290.800 +357 69.100 +357 99.700 +357 125.700 +358 70.100 +358 82.600 +358 164.600 +358 198.600 +359 218.000 +360 124.400 +360 244.600 +362 235.300 +363 108.900 +363 186.900 +363 218.800 +364 117.100 +365 69.300 +365 93.300 +365 131.600 +365 232.300 +366 247.500 +366 288.800 +367 144.500 +367 184.300 +367 234.700 +368 54.800 +368 164.000 +368 245.300 +370 187.300 +371 80.900 +371 95.900 +371 101.900 +372 229.700 +373 116.400 +373 164.400 +374 165.400 +374 228.400 +375 108.300 +375 291.900 +376 66.400 +376 93.800 +376 116.500 +376 165.200 +376 281.600 +377 106.700 +377 186.800 +377 228.200 +378 281.400 +379 102.800 +379 115.300 +379 164.700 +380 202.400 +380 260.800 +381 80.500 +381 101.300 +381 144.600 +381 218.300 +382 81.100 +382 148.700 +382 218.000 +383 219.700 +384 260.600 +384 290.300 +385 93.800 +385 165.000 +385 244.200 +385 266.200 +386 93.300 +387 201.700 +387 281.100 +388 106.400 +388 146.200 +388 289.200 +389 61.700 +389 129.900 +389 185.600 +390 71.100 +390 243.000 +391 69.300 +391 124.400 +391 290.400 +392 116.500 +393 116.100 +394 101.600 +394 244.300 +395 114.500 +396 126.400 +396 164.700 +397 185.200 +397 228.000 +398 66.300 +398 93.000 +399 253.900 +399 280.500 +400 197.700 +400 231.000 +401 183.800 +402 290.800 +403 145.400 +403 287.900 +404 100.000 +404 200.800 +404 291.300 +405 260.200 +406 141.600 +406 186.000 +407 128.200 +407 185.700 +407 217.900 +407 245.800 +408 164.500 +408 265.700 +409 113.000 +409 163.600 +409 219.600 +410 101.200 +410 164.600 +411 150.100 +412 164.400 +413 94.000 +413 115.800 +413 155.800 +413 164.300 +413 218.200 +413 230.500 +414 82.000 +414 101.300 +414 217.600 +414 279.200 +415 219.700 +415 291.300 +416 81.500 +416 164.500 +416 186.000 +416 201.700 +417 56.000 +417 244.900 +418 93.700 +419 54.700 +419 163.900 +419 228.800 +420 131.600 +420 144.200 +420 245.400 +421 165.000 +422 219.400 +423 128.900 +423 146.200 +424 132.800 +424 279.900 +426 82.900 +426 186.200 +426 280.600 +428 164.400 +428 217.900 +430 197.800 +430 218.700 +430 245.300 +432 164.000 +433 117.900 +434 50.200 +434 71.500 +434 126.900 +434 187.400 +434 245.800 +434 266.100 +435 96.500 +435 128.300 +435 148.800 +435 229.200 +436 107.900 +436 187.200 +437 93.100 +437 164.700 +437 237.400 +438 69.300 +439 99.900 +439 201.200 +439 244.100 +439 291.600 +440 102.000 +440 163.800 +440 219.500 +441 164.700 +442 147.800 +442 164.800 +442 185.900 +442 279.200 +443 163.900 +444 227.800 +445 163.400 +446 245.200 +447 53.300 +447 163.800 +447 185.800 +448 144.000 +448 245.800 +449 57.000 +449 109.300 +450 81.500 +450 105.400 +450 153.100 +450 291.500 +451 165.400 +452 128.600 +452 185.900 +452 266.100 +453 130.200 +453 187.100 +453 201.900 +453 228.400 +454 145.500 +454 159.800 +455 50.200 +455 67.200 +456 107.100 +457 128.100 +457 164.800 +457 202.100 +457 291.000 +458 81.900 +458 133.600 +459 217.400 +460 97.200 +460 147.300 +461 69.800 +461 99.700 +461 140.400 +461 278.000 +462 98.900 +462 107.400 +462 164.400 +463 114.700 +463 201.600 +463 286.800 +464 54.900 +464 70.800 +464 218.300 +464 278.800 +465 55.200 +465 69.700 +465 199.800 +466 93.500 +466 187.300 +466 198.700 +468 131.800 +468 164.500 +468 289.400 +469 69.700 +470 141.800 +470 219.700 +471 81.600 +471 291.200 +472 106.700 +472 164.800 +472 219.400 +473 164.800 +473 243.900 +474 217.800 +474 244.900 +474 279.700 +475 164.100 +475 219.600 +475 245.200 +476 58.100 +476 69.600 +476 164.700 +476 218.300 +476 265.900 +477 126.100 +477 144.900 +477 266.300 +478 164.900 +478 288.700 +479 101.400 +479 290.900 +480 148.500 +480 244.300 +481 130.400 +481 182.600 +482 202.000 +483 163.800 +484 164.500 +485 57.700 +485 162.700 +486 68.600 +486 164.700 +486 186.800 +486 291.300 +487 101.500 +487 165.300 +487 187.300 +487 201.900 +487 217.600 +487 280.000 +488 132.000 +490 266.200 +491 69.500 +491 144.200 +491 164.200 +492 116.500 +492 153.300 +492 260.600 +493 144.200 +494 69.800 +494 116.400 +494 140.100 +494 164.500 +495 217.900 +495 265.300 +496 148.800 +496 163.900 +496 290.500 +497 200.300 +498 83.000 +498 115.200 +498 218.100 +499 147.100 +499 163.800 +499 185.600 +499 218.700 +500 159.600 +500 291.600 +501 116.900 +501 147.300 +501 218.400 +502 80.700 +504 66.300 +504 290.600 +505 131.700 +505 148.200 +505 244.300 +506 265.800 +507 69.300 +507 185.800 +507 202.700 +508 57.500 +508 101.300 +508 164.700 +509 69.800 +509 144.000 +509 218.200 +510 50.500 +510 117.400 +510 164.700 +510 225.700 +511 218.800 +513 150.200 +513 217.200 +514 200.900 +515 82.000 +515 201.700 +515 265.600 +516 164.900 +516 266.100 +519 255.600 +520 184.900 +520 243.800 +520 265.700 +521 200.500 +521 244.300 +521 288.800 +522 185.900 +522 260.200 +523 101.400 +523 144.700 +523 164.600 +523 187.100 +523 291.000 +524 58.400 +524 92.900 +524 127.500 +524 185.400 +525 81.700 +525 129.100 +525 185.000 +525 218.600 +526 116.500 +526 260.600 +527 69.800 +527 126.500 +527 219.500 +527 289.700 +528 144.700 +528 185.700 +528 218.300 +528 281.200 +529 185.000 +529 200.600 +530 128.300 +530 150.600 +530 185.000 +530 202.400 +530 222.900 +531 93.400 +532 116.700 +533 81.000 +533 96.100 +534 202.900 +534 288.500 +536 54.900 +536 164.700 +538 52.100 +538 68.000 +538 246.900 +539 105.400 +540 186.000 +540 291.300 +542 116.600 +543 153.400 +543 186.000 +543 285.500 +543 291.400 +544 132.500 +546 116.500 +546 132.700 +546 153.400 +546 164.700 +546 202.400 +546 263.500 +547 290.900 +548 76.900 +548 117.700 +548 146.000 +548 164.600 +548 219.500 +549 164.800 +549 289.300 +550 164.500 +551 117.300 +551 244.900 +551 265.100 +551 290.600 +553 141.300 +553 280.800 +554 187.300 +554 202.100 +554 277.300 +556 117.100 +557 152.500 +558 144.500 +559 109.000 +559 186.200 +560 164.700 +560 202.200 +560 228.100 +560 265.000 +561 81.000 +561 127.900 +561 140.700 +561 244.300 +562 260.800 +564 164.600 +564 218.500 +564 260.200 +564 290.000 +565 151.900 +565 185.900 +565 287.400 +567 116.500 +567 185.900 +568 257.100 +569 164.000 +569 245.700 +569 290.800 +570 165.200 +572 80.400 +572 96.700 +572 230.800 +572 277.400 +573 70.700 +573 92.700 +573 156.800 +573 291.700 +574 70.700 +574 150.400 +574 291.400 +575 93.900 +575 162.800 +575 265.800 +576 265.600 +577 131.300 +577 164.200 +577 186.400 +578 131.500 +579 68.200 +579 96.500 +579 101.900 +579 186.100 +579 289.100 +580 132.100 +580 219.700 +581 108.300 +581 164.900 +582 102.000 +582 279.000 +583 99.300 +583 108.100 +583 144.700 +583 186.100 +584 50.100 +584 82.500 +584 106.900 +584 127.700 +584 149.200 +585 92.300 +585 117.600 +585 157.800 +585 227.500 +586 126.000 +586 247.000 +587 51.900 +587 144.400 +587 202.200 +588 55.900 +588 76.500 +588 140.900 +588 279.900 +589 144.800 +589 202.100 +590 132.500 +590 265.900 +591 183.900 +591 201.100 +591 266.000 +592 114.700 +592 148.000 +592 184.500 +592 218.700 +593 202.400 +594 82.000 +594 200.700 +594 245.900 +595 164.700 +595 265.400 +595 291.700 +596 216.600 +596 242.200 +596 291.100 +597 96.200 +597 218.300 +598 118.000 +598 130.300 +598 217.700 +599 50.600 +599 80.900 +599 164.300 +599 219.700 +600 50.100 +600 69.600 +600 147.700 +600 244.100 +600 279.900 +601 148.800 +603 80.200 +603 164.300 +604 130.300 +604 164.800 +604 228.600 +605 67.900 +605 102.100 +605 291.600 +606 101.800 +606 147.000 +607 241.800 +609 164.600 +609 185.600 +610 57.200 +610 126.200 +610 219.500 +610 280.100 +610 291.300 +611 51.500 +611 116.600 +611 164.500 +611 281.000 +612 150.400 +612 165.300 +612 244.600 +613 153.300 +613 265.900 +614 57.900 +614 82.400 +614 163.900 +615 144.100 +615 185.600 +616 81.600 +616 116.000 +617 239.100 +618 164.000 +618 198.900 +618 256.000 +619 117.100 +619 130.800 +619 279.300 +620 80.700 +620 107.100 +620 290.400 +621 57.400 +621 81.800 +621 117.400 +621 202.300 +622 81.400 +623 126.600 +623 291.100 +624 163.700 +625 144.400 +625 217.900 +625 291.700 +626 144.400 +626 258.800 +627 128.700 +628 164.500 +629 94.000 +629 244.600 +630 69.600 +630 117.600 +630 185.600 +630 253.900 +630 278.900 +631 70.500 +631 97.600 +631 200.300 +631 221.000 +631 237.000 +632 131.400 +633 97.100 +634 114.300 +635 92.800 +635 219.500 +636 160.200 +636 243.900 +637 69.500 +637 216.900 +637 281.700 +638 114.300 +638 145.000 +638 165.300 +638 291.300 +639 97.500 +639 291.800 +640 97.700 +640 217.400 +641 128.000 +641 218.800 +641 291.500 +642 266.300 +643 106.800 +643 163.900 +644 148.600 +644 201.700 +644 228.600 +645 130.000 +645 265.100 +646 184.600 +647 96.600 +647 187.100 +647 219.600 +648 116.000 +648 145.400 +648 164.600 +648 260.400 +649 259.900 +649 290.800 +650 56.000 +650 218.300 +650 263.000 +652 67.400 +652 131.200 +652 202.500 +652 288.800 +653 164.500 +653 278.500 +654 104.400 +654 116.700 +654 147.200 +655 200.800 +655 291.600 +656 186.600 +656 288.600 +657 164.600 +657 187.100 +657 218.000 +657 281.200 +658 147.900 +658 291.800 +659 91.000 +659 116.900 +659 244.300 +660 99.800 +660 117.100 +660 164.000 +660 218.100 +660 265.500 +660 291.300 +661 218.100 +661 278.400 +662 228.400 +662 264.900 +663 81.500 +663 125.900 +663 185.200 +664 164.700 +665 82.400 +665 164.900 +665 291.400 +666 164.400 +666 256.900 +667 141.200 +668 101.200 +668 165.100 +668 291.300 +669 56.100 +669 164.800 +670 164.400 +671 153.100 +671 201.300 +672 144.500 +672 186.400 +672 291.800 +673 123.500 +673 165.100 +674 93.600 +674 164.400 +674 290.700 +675 55.200 +675 245.200 +676 130.000 +676 164.700 +676 199.100 +677 107.100 +677 266.000 +678 265.600 +678 288.300 +679 164.500 +680 164.200 +681 291.600 +682 145.000 +682 200.800 +683 65.700 +683 116.500 +683 125.600 +683 280.000 +684 80.800 +684 101.500 +684 164.400 +684 201.500 +684 226.500 +684 266.400 +685 219.800 +686 164.300 +686 243.200 +687 80.700 +687 201.600 +687 218.000 +688 128.000 +689 201.500 +689 280.300 +690 218.000 +691 164.200 +691 186.900 +691 217.700 +691 228.000 +692 113.800 +692 243.200 +693 100.300 +694 146.500 +694 202.000 +695 69.400 +695 98.900 +696 164.400 +696 244.600 +696 281.200 +697 217.700 +698 117.800 +698 129.500 +698 291.800 +699 80.800 +699 119.500 +699 131.200 +699 217.900 +699 280.300 +700 127.700 +701 69.600 +701 201.900 +702 95.800 +702 105.000 +703 147.100 +703 198.000 +704 81.200 +704 164.800 +704 218.900 +706 67.700 +706 145.300 +706 164.600 +706 201.700 +707 125.600 +707 185.600 +707 219.700 +708 93.100 +708 266.200 +709 128.300 +709 165.100 +710 117.100 +710 244.600 +711 80.100 +711 130.400 +711 280.100 +712 117.300 +712 223.800 +713 98.700 +713 106.800 +713 263.700 +714 80.600 +714 117.900 +714 185.900 +714 201.300 +715 145.000 +715 185.300 +715 260.200 +716 82.100 +716 184.600 +717 152.100 +718 164.200 +718 185.300 +719 202.700 +719 227.800 +720 56.500 +720 201.100 +721 81.700 +721 162.800 +721 218.000 +722 144.700 +722 219.600 +723 67.600 +723 93.000 +723 219.100 +723 256.200 +724 92.700 +724 151.200 +724 235.800 +724 244.300 +724 260.300 +725 92.500 +725 146.500 +725 165.500 +725 247.600 +726 55.200 +726 127.800 +726 219.200 +726 236.300 +727 265.300 +728 116.000 +728 162.900 +728 231.200 +729 141.200 +729 164.700 +729 202.300 +729 244.100 +730 185.400 +730 280.200 +731 140.600 +731 200.800 +731 280.900 +731 291.100 +732 160.400 +732 218.000 +732 291.600 +733 141.800 +733 220.800 +733 245.400 +733 259.200 +734 152.200 +734 165.700 +734 185.400 +734 291.600 +735 70.700 +735 117.800 +735 145.300 +735 187.100 +736 152.200 +736 201.100 +736 219.500 +737 185.800 +737 288.200 +740 124.400 +741 146.100 +742 109.000 +742 165.300 +742 290.800 +743 50.100 +743 81.700 +743 260.500 +744 218.800 +744 227.500 +744 290.300 +745 51.000 +745 146.500 +745 291.200 +746 184.600 +746 287.900 +747 79.700 +747 164.600 +747 202.300 +747 218.400 +748 100.000 +748 184.000 +748 218.400 +748 290.300 +749 106.700 +749 164.900 +749 244.400 +749 280.600 +751 81.500 +751 164.200 +751 215.500 +752 56.000 +752 114.600 +752 260.100 +752 279.800 +753 115.200 +753 216.200 +754 67.400 +754 145.600 +754 219.500 +754 281.100 +755 101.300 +755 217.400 +755 234.700 +755 291.500 +756 107.500 +756 164.800 +757 164.700 +758 91.300 +758 128.600 +759 116.700 +759 184.800 +760 125.600 +760 258.400 +761 218.100 +761 257.100 +761 277.700 +762 56.700 +763 185.300 +763 245.000 +764 50.100 +764 289.900 +765 125.500 +766 185.600 +766 244.800 +766 265.600 +767 130.400 +767 164.200 +767 279.100 +768 127.900 +768 144.900 +769 80.600 +770 164.500 +771 140.600 +771 279.500 +771 291.700 +772 80.700 +772 134.300 +772 197.600 +772 211.900 +773 57.800 +774 260.100 +775 260.300 +776 164.600 +776 198.700 +777 66.200 +777 100.100 +777 139.500 +778 186.000 +778 286.400 +779 70.200 +779 131.700 +780 164.900 +780 202.500 +780 281.300 +781 81.500 +781 164.500 +781 201.500 +781 219.200 +781 290.800 +782 93.700 +782 114.000 +782 162.400 +783 59.500 +783 228.300 +784 108.600 +785 235.100 +786 201.000 +787 57.400 +787 165.700 +788 141.300 +789 58.200 +789 90.900 +789 140.500 +789 217.500 +789 262.500 +790 81.400 +790 184.700 +790 199.800 +790 280.300 +792 162.500 +792 186.000 +793 96.200 +793 144.500 +793 236.300 +793 279.100 +794 92.700 +795 107.400 +795 164.600 +796 92.800 +796 164.400 +797 113.500 +797 164.500 +798 65.400 +798 280.500 +799 58.200 +799 164.600 +799 289.100 +800 81.100 +800 144.300 +801 101.300 +801 116.600 +801 226.600 +802 102.400 +802 163.500 +803 101.300 +803 144.800 +803 184.800 +804 288.900 +805 164.600 +805 217.900 +805 244.400 +806 71.700 +806 112.900 +806 200.800 +807 82.500 +807 132.100 +807 164.500 +807 218.200 +808 140.900 +809 259.200 +809 280.800 +810 96.400 +810 104.800 +810 290.700 +812 164.400 +812 202.000 +813 165.000 +814 78.500 +814 218.000 +815 184.800 +816 164.400 +816 278.000 +817 266.300 +819 101.200 +819 117.800 +819 278.900 +820 93.700 +821 216.100 +822 80.800 +822 218.200 +822 259.900 +822 281.200 +823 165.000 +823 217.900 +823 291.800 +825 97.000 +825 122.300 +825 279.400 +826 153.300 +827 130.900 +827 279.200 +828 184.600 +829 144.700 +830 113.300 +830 185.900 +831 164.100 +832 95.900 +832 291.200 +833 150.000 +834 114.800 +834 244.700 +834 259.600 +835 116.600 +835 266.100 +835 291.300 +836 59.300 +836 185.600 +836 244.100 +837 116.400 +837 164.500 +838 69.600 +839 244.100 +840 144.600 +841 81.100 +841 117.500 +841 164.600 +841 202.800 +842 144.300 +842 245.400 +844 144.900 +845 68.100 +845 107.000 +845 281.000 +846 100.000 +846 152.900 +846 164.600 +846 217.800 +847 55.700 +847 164.600 +848 70.500 +848 117.300 +848 144.400 +848 256.100 +849 57.300 +849 93.000 +849 126.300 +850 61.600 +850 185.700 +851 69.500 +851 132.100 +851 144.800 +851 228.400 +851 244.700 +852 128.800 +852 150.200 +852 163.700 +852 218.100 +852 287.500 +853 69.800 +853 120.300 +853 148.200 +853 186.800 +854 93.600 +854 244.600 +854 279.600 +855 92.200 +855 184.100 +855 219.200 +856 70.700 +856 93.300 +856 165.000 +857 107.000 +857 288.600 +858 69.900 +858 217.400 +859 57.500 +859 70.700 +859 116.200 +859 134.000 +859 144.400 +860 245.100 +861 152.600 +861 185.200 +861 265.700 +862 185.800 +862 218.100 +862 265.400 +863 280.900 +864 185.100 +864 245.200 +865 218.400 +866 80.500 +866 153.000 +867 78.500 +867 132.400 +867 158.500 +867 185.200 +867 202.100 +867 248.000 +867 266.300 +868 264.900 +869 82.200 +869 147.000 +869 164.700 +869 218.700 +869 265.700 +870 116.900 +870 218.200 +870 291.200 +871 144.200 +871 164.800 +871 219.100 +872 82.200 +872 101.600 +872 202.100 +872 279.700 +873 69.600 +873 164.200 +873 290.400 +874 69.600 +874 82.300 +874 142.600 +874 162.700 +874 288.800 +875 219.600 +876 164.100 +877 280.000 +878 227.900 +878 259.200 +878 266.200 +878 288.900 +879 219.100 +880 165.300 +881 50.600 +881 131.300 +881 148.700 +881 164.300 +881 201.900 +881 245.200 +881 280.600 +883 93.700 +883 164.400 +883 266.000 +885 68.000 +885 105.200 +885 145.300 +885 291.800 +886 96.500 +886 144.800 +886 262.500 +887 83.000 +887 97.200 +887 164.700 +888 69.700 +888 91.600 +888 185.200 +888 281.200 +889 82.000 +889 130.700 +890 150.400 +890 187.100 +891 57.500 +891 117.600 +891 245.600 +891 288.600 +892 70.800 +892 144.600 +892 186.700 +892 202.100 +892 291.700 +893 105.500 +893 128.700 +895 117.000 +895 185.600 +896 218.200 +896 291.600 +897 200.400 +897 266.000 +898 265.800 +899 165.600 +899 219.000 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_7_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_7_i_pop.dat new file mode 100644 index 000000000..3a35a4e64 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_7_i_pop.dat @@ -0,0 +1,548 @@ +sender time_ms +900 57.900 +900 219.700 +900 264.800 +901 81.700 +901 114.600 +901 164.600 +901 219.500 +901 291.400 +902 101.800 +902 118.700 +902 291.400 +903 92.300 +904 115.600 +904 128.600 +905 69.400 +906 81.300 +906 185.800 +907 140.800 +907 164.400 +907 259.900 +908 69.300 +908 93.200 +908 218.800 +908 264.500 +908 290.700 +909 81.000 +909 186.000 +910 186.200 +911 281.400 +912 202.700 +912 280.500 +913 145.200 +913 185.400 +913 202.600 +913 218.500 +913 260.700 +914 164.600 +914 217.400 +915 186.200 +916 114.300 +916 140.100 +917 201.200 +917 266.200 +918 68.400 +918 128.200 +918 291.800 +919 164.600 +919 244.200 +919 280.600 +920 245.200 +921 57.200 +921 69.900 +921 129.900 +922 153.200 +922 280.600 +923 144.700 +923 288.600 +924 164.100 +924 257.100 +924 290.800 +925 219.300 +926 288.400 +927 185.900 +928 55.400 +928 92.600 +928 125.200 +928 164.600 +928 218.100 +929 80.500 +929 278.700 +929 291.400 +931 102.200 +931 280.600 +931 291.200 +932 83.000 +932 130.100 +932 291.600 +933 164.300 +933 203.000 +934 64.800 +934 164.400 +935 71.600 +935 164.400 +936 104.600 +936 132.700 +936 164.900 +936 259.000 +936 291.700 +937 124.900 +937 244.800 +938 202.000 +939 243.900 +940 93.300 +942 117.000 +942 164.300 +942 218.100 +943 165.000 +944 144.900 +944 164.900 +945 130.600 +945 260.600 +946 94.000 +946 218.800 +946 265.900 +948 67.500 +949 61.900 +949 81.500 +949 184.900 +949 218.100 +950 200.700 +950 277.200 +951 69.800 +951 107.100 +951 186.000 +951 255.000 +951 290.900 +952 121.100 +952 150.300 +953 56.400 +953 164.200 +953 200.100 +954 98.800 +955 117.200 +955 243.700 +955 265.800 +955 291.000 +956 92.500 +956 117.100 +956 144.400 +956 164.900 +956 228.600 +956 265.800 +957 163.700 +957 241.600 +957 280.500 +958 126.100 +958 219.500 +958 289.200 +959 142.100 +959 227.200 +960 68.100 +960 129.500 +960 164.500 +960 197.700 +961 68.700 +961 126.700 +961 164.300 +961 280.700 +962 80.900 +962 100.300 +962 164.400 +962 228.500 +963 115.900 +963 201.100 +963 291.100 +964 185.200 +964 260.500 +965 265.000 +965 280.100 +966 99.800 +966 114.100 +966 201.400 +966 243.800 +966 287.300 +968 80.100 +968 117.700 +969 101.100 +969 163.800 +969 279.200 +970 92.700 +970 199.800 +970 281.200 +971 164.200 +971 218.100 +972 128.500 +972 164.900 +972 259.300 +973 116.600 +973 150.500 +973 201.900 +974 51.400 +974 62.100 +974 80.300 +974 164.700 +974 200.200 +975 81.800 +975 262.900 +975 288.900 +976 107.800 +976 165.100 +976 243.400 +976 291.200 +977 70.600 +977 163.300 +977 259.700 +978 159.500 +978 182.800 +978 266.200 +979 130.300 +979 164.600 +980 106.700 +980 164.100 +980 291.000 +982 127.500 +983 164.800 +984 70.800 +984 260.100 +984 280.500 +985 58.700 +985 80.700 +985 112.400 +985 164.200 +985 187.100 +985 244.200 +985 262.400 +986 202.000 +986 281.200 +987 185.600 +988 101.100 +988 116.500 +988 244.000 +988 260.000 +989 69.800 +989 126.100 +990 82.100 +990 150.100 +990 201.700 +990 291.700 +991 81.700 +991 247.300 +992 107.100 +993 164.800 +993 259.700 +994 158.700 +994 165.000 +994 229.600 +995 57.000 +995 93.100 +995 101.500 +995 116.000 +995 131.300 +996 100.900 +996 164.400 +996 252.000 +996 259.100 +997 96.100 +997 101.900 +997 127.900 +997 144.500 +997 237.600 +998 164.800 +998 255.700 +999 184.200 +999 218.400 +999 289.400 +1000 146.200 +1000 264.900 +1000 291.000 +1001 92.900 +1001 131.700 +1001 265.900 +1002 266.000 +1003 140.800 +1003 164.500 +1003 228.300 +1003 278.900 +1004 277.600 +1004 291.600 +1005 77.900 +1005 164.600 +1005 186.700 +1005 260.300 +1007 116.800 +1007 144.400 +1007 243.900 +1008 101.300 +1009 93.300 +1009 116.400 +1009 185.000 +1009 236.300 +1010 117.600 +1010 202.000 +1011 96.600 +1011 158.000 +1011 184.900 +1012 187.000 +1012 289.300 +1013 132.700 +1013 148.500 +1013 291.500 +1015 81.500 +1015 163.300 +1016 131.900 +1017 81.500 +1017 92.700 +1017 291.800 +1018 265.900 +1019 185.600 +1019 291.100 +1020 106.900 +1020 130.900 +1021 51.800 +1021 148.700 +1021 185.000 +1021 229.500 +1022 80.700 +1022 203.200 +1022 236.300 +1022 281.300 +1023 57.400 +1023 131.400 +1023 153.100 +1023 164.700 +1023 186.700 +1023 217.800 +1023 260.400 +1025 69.400 +1025 164.400 +1026 165.100 +1026 187.400 +1026 201.300 +1027 67.100 +1027 81.200 +1027 163.800 +1028 165.400 +1028 201.300 +1028 277.500 +1029 117.700 +1029 152.800 +1029 187.000 +1030 70.800 +1030 144.800 +1030 186.300 +1030 217.000 +1030 290.600 +1031 54.600 +1031 104.200 +1031 217.600 +1032 101.500 +1032 164.600 +1032 256.400 +1033 69.500 +1033 92.800 +1033 127.300 +1033 164.600 +1033 242.500 +1033 291.000 +1034 116.900 +1034 185.000 +1035 107.700 +1035 260.500 +1036 91.000 +1036 150.400 +1036 200.700 +1037 102.100 +1038 117.600 +1039 81.400 +1039 201.100 +1040 140.900 +1040 245.000 +1041 67.600 +1041 280.700 +1042 70.400 +1042 164.900 +1042 219.400 +1043 81.500 +1043 185.600 +1044 130.800 +1044 164.300 +1045 151.300 +1045 164.600 +1046 92.500 +1046 183.800 +1047 247.300 +1048 124.300 +1048 290.700 +1049 81.600 +1049 113.400 +1049 145.300 +1049 164.300 +1049 290.600 +1050 164.300 +1051 147.100 +1051 266.300 +1052 146.500 +1052 187.200 +1052 201.600 +1052 289.700 +1053 69.700 +1053 211.300 +1053 266.000 +1054 61.700 +1054 124.300 +1055 164.200 +1055 185.700 +1056 69.800 +1056 164.400 +1056 218.700 +1056 290.300 +1057 92.400 +1057 114.300 +1058 152.900 +1058 217.800 +1058 278.300 +1059 116.500 +1059 217.700 +1060 69.000 +1060 117.200 +1060 141.900 +1060 218.000 +1060 243.900 +1061 218.200 +1061 281.300 +1062 94.000 +1062 105.400 +1062 244.300 +1063 116.200 +1063 184.500 +1064 145.900 +1065 81.700 +1066 103.100 +1066 291.100 +1067 117.300 +1067 165.000 +1068 156.300 +1068 198.800 +1068 259.600 +1069 57.900 +1069 263.000 +1070 164.300 +1071 80.700 +1071 200.800 +1071 243.500 +1071 291.800 +1072 186.100 +1072 218.000 +1073 70.400 +1073 245.400 +1074 152.300 +1074 164.300 +1074 219.300 +1075 80.600 +1075 200.200 +1076 280.100 +1077 165.000 +1077 201.300 +1077 260.500 +1079 101.200 +1079 132.100 +1080 69.700 +1080 116.500 +1080 145.000 +1082 56.900 +1082 116.300 +1082 163.000 +1082 291.300 +1083 219.400 +1083 279.600 +1084 93.800 +1085 235.900 +1086 70.500 +1087 81.600 +1087 119.000 +1087 147.100 +1087 227.000 +1088 164.700 +1089 130.700 +1089 164.600 +1091 130.300 +1091 153.000 +1092 80.900 +1092 132.700 +1092 144.800 +1092 186.900 +1092 244.200 +1093 186.100 +1094 81.700 +1094 200.100 +1094 260.200 +1095 69.200 +1095 100.200 +1095 185.400 +1095 219.300 +1096 79.100 +1096 131.400 +1096 186.000 +1097 164.700 +1097 200.900 +1098 125.600 +1098 290.000 +1099 144.600 +1099 186.000 +1100 52.100 +1100 144.600 +1101 152.800 +1101 247.600 +1101 291.400 +1102 92.500 +1102 127.800 +1102 201.900 +1103 94.200 +1103 264.800 +1104 52.100 +1104 216.700 +1105 66.200 +1105 219.300 +1107 67.800 +1107 145.200 +1107 219.500 +1108 60.900 +1108 184.600 +1108 201.700 +1109 164.400 +1110 184.600 +1111 164.600 +1111 291.800 +1112 116.300 +1112 187.300 +1112 243.700 +1114 56.600 +1114 126.300 +1114 200.600 +1114 217.500 +1114 266.000 +1115 99.800 +1115 144.300 +1115 245.000 +1117 54.500 +1117 144.300 +1118 126.300 +1118 144.000 +1119 68.100 +1119 117.200 +1119 226.600 +1119 245.200 +1120 164.200 +1120 219.700 +1121 69.700 +1121 165.000 +1121 202.000 +1121 257.100 +1122 290.600 +1123 64.900 +1123 164.700 +1123 187.000 +1124 116.500 +1124 164.200 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_8_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_8_e_pop.dat new file mode 100644 index 000000000..1db3f4a07 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_8_e_pop.dat @@ -0,0 +1,2093 @@ +sender time_ms +0 87.300 +0 291.600 +1 122.700 +2 141.700 +2 182.900 +2 218.000 +3 116.400 +3 243.300 +4 80.900 +4 146.300 +4 266.000 +5 117.700 +5 126.400 +5 184.800 +6 164.400 +7 244.000 +7 291.300 +9 200.800 +9 235.900 +10 123.600 +10 147.600 +10 218.200 +10 266.400 +11 100.000 +11 164.300 +11 290.700 +12 101.000 +12 185.300 +13 93.600 +13 202.000 +13 228.500 +14 52.600 +15 80.200 +15 144.600 +15 185.200 +16 57.700 +16 289.200 +17 289.100 +18 165.400 +18 278.200 +19 81.600 +19 128.300 +19 165.000 +19 186.900 +20 145.600 +20 265.000 +21 101.700 +21 158.100 +21 245.800 +22 116.300 +22 153.600 +22 184.700 +22 280.500 +24 125.800 +24 164.600 +24 187.400 +24 199.000 +26 68.300 +26 291.500 +27 164.400 +27 219.600 +28 70.000 +28 164.000 +28 290.700 +29 81.700 +29 102.200 +29 266.200 +29 291.200 +30 93.300 +30 185.300 +30 290.200 +31 110.200 +31 235.300 +31 262.300 +32 81.000 +32 265.400 +34 150.000 +34 164.100 +34 218.500 +35 81.700 +35 200.700 +35 219.500 +35 280.200 +36 87.100 +37 82.500 +37 112.700 +38 70.700 +38 186.000 +39 81.900 +39 162.800 +39 218.300 +39 260.500 +40 67.300 +40 185.200 +40 265.700 +41 81.600 +41 132.000 +42 50.200 +42 92.600 +42 127.700 +43 54.900 +43 132.800 +43 217.300 +43 255.700 +44 163.500 +45 116.000 +45 150.300 +45 218.100 +45 245.100 +46 164.700 +46 218.500 +47 144.700 +47 165.000 +47 246.100 +48 127.900 +48 141.700 +48 185.600 +48 288.400 +49 52.400 +49 144.900 +49 186.100 +49 220.600 +49 229.500 +50 93.100 +50 164.500 +51 106.900 +51 116.900 +51 185.900 +51 288.800 +52 82.000 +52 164.700 +53 113.600 +53 187.100 +54 81.500 +54 186.200 +54 219.800 +55 80.100 +55 185.200 +57 185.800 +57 244.500 +57 289.400 +58 56.500 +58 105.400 +58 116.700 +58 163.500 +59 108.300 +59 165.000 +59 259.700 +61 244.900 +61 291.000 +63 65.400 +63 92.900 +63 219.300 +64 88.000 +65 81.200 +65 219.700 +68 134.200 +68 184.900 +68 217.300 +69 163.500 +69 260.400 +70 230.200 +70 266.000 +71 184.500 +72 131.600 +72 183.100 +73 165.100 +73 185.400 +74 96.600 +74 146.600 +74 217.500 +75 263.700 +77 150.000 +77 164.600 +77 265.800 +78 164.700 +78 217.400 +79 61.000 +79 114.100 +79 221.500 +79 290.900 +80 67.300 +80 132.700 +81 186.200 +82 202.400 +83 93.500 +83 116.700 +83 184.100 +84 66.400 +84 100.100 +84 115.700 +84 164.600 +84 197.900 +84 280.600 +85 185.400 +85 291.600 +86 144.900 +86 242.100 +86 290.700 +87 131.600 +87 265.900 +88 184.800 +88 260.100 +89 201.700 +89 290.900 +90 187.100 +90 243.800 +91 255.500 +92 164.300 +92 231.100 +93 93.500 +94 217.800 +94 281.300 +95 141.900 +95 164.300 +95 187.300 +96 56.400 +96 81.500 +96 101.600 +96 200.800 +97 148.300 +97 164.600 +98 55.100 +98 149.000 +98 164.200 +98 219.600 +98 291.000 +99 54.200 +99 219.600 +99 257.300 +100 127.300 +100 164.100 +101 56.400 +101 96.900 +101 128.500 +101 164.100 +102 81.700 +102 218.600 +102 244.200 +103 218.300 +104 101.100 +104 164.700 +104 186.100 +105 116.300 +105 244.200 +106 81.700 +106 101.600 +106 125.700 +106 185.100 +107 102.200 +107 116.700 +108 130.200 +109 199.800 +109 244.300 +109 288.500 +110 159.700 +111 144.200 +111 217.700 +111 265.900 +112 81.700 +112 163.600 +113 57.500 +113 99.800 +113 126.100 +113 164.600 +113 220.100 +114 81.900 +114 185.900 +115 164.300 +115 185.900 +115 219.500 +116 259.100 +116 280.100 +117 165.200 +117 291.800 +118 128.900 +118 165.000 +119 81.800 +119 185.900 +119 291.500 +120 69.700 +120 117.400 +122 81.900 +122 247.100 +123 77.300 +123 99.800 +123 131.400 +124 80.700 +124 244.400 +125 116.000 +125 265.700 +126 289.500 +127 116.700 +127 185.500 +128 66.500 +128 81.400 +128 201.500 +128 289.700 +129 81.400 +129 219.500 +129 245.200 +129 281.400 +130 124.400 +130 142.600 +130 244.300 +131 164.800 +131 218.200 +131 291.300 +132 147.200 +133 146.000 +133 217.300 +134 107.900 +134 117.400 +134 164.900 +135 187.100 +135 229.300 +135 280.100 +136 144.000 +137 81.700 +137 108.000 +137 291.900 +138 144.100 +138 266.000 +139 54.300 +139 128.000 +139 146.300 +139 164.300 +139 265.700 +140 92.700 +140 128.600 +140 201.600 +141 80.400 +141 103.900 +141 266.300 +142 164.700 +142 201.600 +142 290.700 +143 165.400 +143 185.400 +143 291.800 +144 163.400 +145 117.100 +145 184.800 +145 265.000 +145 277.700 +146 164.400 +147 164.500 +147 201.800 +148 218.600 +149 81.800 +149 108.300 +149 277.900 +150 101.900 +151 96.600 +151 105.600 +151 163.600 +152 217.700 +153 94.000 +153 164.100 +153 201.900 +153 265.900 +154 69.300 +154 104.900 +154 151.700 +154 228.600 +155 155.400 +155 220.100 +156 163.300 +157 81.700 +157 165.000 +157 266.000 +158 146.300 +158 265.700 +158 281.300 +159 69.800 +159 212.900 +160 93.200 +160 116.300 +161 185.300 +165 81.500 +165 117.200 +165 229.800 +167 217.900 +167 291.200 +169 165.200 +169 185.900 +169 253.900 +169 290.200 +170 114.100 +171 70.400 +171 102.200 +172 78.900 +172 260.600 +174 153.300 +175 81.500 +175 130.900 +175 164.700 +175 201.600 +176 263.600 +176 281.400 +176 288.400 +177 100.000 +177 201.100 +177 259.800 +178 81.800 +178 117.200 +178 185.800 +179 82.000 +179 102.500 +179 157.300 +179 219.300 +179 235.300 +179 266.000 +180 263.200 +180 291.500 +181 68.200 +181 201.000 +181 218.900 +181 290.500 +182 50.300 +182 82.600 +182 130.200 +182 244.900 +183 130.600 +183 202.700 +183 244.200 +184 93.100 +184 128.200 +184 219.600 +185 106.900 +185 159.200 +186 116.400 +186 154.800 +186 187.300 +189 70.700 +189 164.200 +189 194.800 +190 139.600 +190 260.400 +190 265.700 +191 187.300 +191 280.200 +192 99.500 +192 187.200 +193 70.400 +193 101.700 +193 144.400 +193 185.900 +194 104.600 +194 115.600 +194 165.000 +194 246.700 +195 80.100 +195 128.500 +195 218.400 +196 152.500 +196 266.300 +197 57.900 +197 164.800 +197 186.800 +197 291.400 +198 218.100 +198 289.100 +199 131.100 +199 185.000 +201 100.000 +201 163.900 +202 80.300 +202 187.000 +203 69.100 +203 117.100 +203 163.900 +203 243.400 +204 146.600 +204 164.400 +204 219.500 +205 93.400 +205 184.700 +206 116.400 +206 280.700 +207 81.300 +207 114.300 +207 164.000 +207 263.400 +208 164.500 +208 257.300 +208 281.000 +209 164.500 +209 187.300 +210 266.100 +210 280.700 +210 291.600 +211 131.800 +212 129.200 +212 144.200 +212 244.900 +213 115.800 +213 164.500 +213 245.500 +214 82.800 +214 149.900 +214 245.000 +215 163.500 +215 219.600 +216 99.100 +216 144.000 +216 260.200 +217 90.300 +217 164.700 +218 81.400 +218 114.100 +218 141.700 +218 185.000 +219 80.800 +221 112.800 +221 236.000 +222 116.700 +222 131.900 +222 164.500 +222 218.700 +223 55.800 +223 101.100 +223 184.900 +223 289.500 +224 80.900 +224 127.900 +224 244.900 +224 265.800 +226 186.100 +226 230.800 +226 244.900 +227 162.600 +227 185.200 +229 201.300 +229 289.400 +230 116.800 +230 164.500 +230 218.100 +232 140.900 +232 164.100 +232 244.800 +232 280.000 +233 82.000 +233 218.000 +233 290.700 +234 79.200 +234 95.800 +234 100.800 +235 202.800 +236 128.200 +236 131.400 +236 185.200 +237 125.700 +237 164.200 +237 228.000 +237 288.700 +238 82.700 +239 201.900 +239 281.200 +240 217.800 +240 289.300 +241 164.600 +241 235.800 +241 290.700 +242 69.100 +242 265.100 +243 83.000 +243 202.300 +244 186.000 +244 219.400 +245 217.700 +246 55.300 +246 144.500 +246 287.400 +247 130.300 +249 187.200 +249 218.000 +249 289.200 +250 99.600 +250 201.700 +251 104.000 +251 117.900 +251 128.200 +251 152.900 +253 108.600 +253 132.600 +253 185.300 +254 130.000 +254 165.000 +254 218.000 +255 291.200 +256 101.800 +256 156.800 +256 164.800 +256 186.000 +256 291.200 +257 79.600 +257 142.100 +257 253.700 +258 124.800 +258 144.300 +258 237.200 +259 81.500 +259 141.100 +259 280.400 +260 117.000 +260 164.800 +260 187.200 +261 154.200 +261 243.800 +262 164.600 +262 187.300 +262 218.100 +263 119.200 +263 164.000 +263 259.400 +264 126.500 +264 146.800 +264 244.200 +264 280.800 +264 291.700 +265 164.500 +266 141.900 +267 58.200 +267 140.200 +267 258.600 +268 50.200 +268 150.400 +268 219.700 +269 153.800 +270 82.100 +270 164.400 +271 123.600 +271 217.900 +271 257.700 +272 96.300 +272 132.500 +272 164.400 +272 185.500 +272 263.300 +273 115.700 +274 164.700 +274 185.800 +274 218.000 +275 129.700 +276 106.900 +276 147.600 +276 164.600 +276 290.700 +277 163.400 +277 200.800 +277 218.700 +277 244.600 +277 291.300 +278 152.400 +278 187.100 +278 243.400 +278 281.300 +279 244.300 +279 289.700 +280 80.900 +280 117.000 +280 164.400 +280 263.500 +281 236.300 +282 265.700 +283 216.300 +284 153.200 +284 164.600 +285 69.700 +285 280.200 +286 291.400 +287 281.200 +288 57.600 +288 97.000 +288 280.200 +288 291.100 +289 94.000 +289 108.100 +289 290.800 +290 80.400 +290 183.900 +290 218.100 +291 69.700 +291 141.600 +291 279.800 +292 96.200 +292 114.600 +292 164.700 +292 247.300 +293 52.900 +293 68.200 +293 106.100 +293 199.500 +294 265.500 +295 100.900 +295 200.200 +295 218.300 +295 291.500 +296 142.100 +296 201.700 +296 247.100 +297 70.800 +297 164.600 +297 234.100 +298 289.800 +299 265.700 +300 100.100 +300 218.000 +300 231.200 +301 56.400 +302 52.400 +302 81.500 +303 128.700 +303 147.300 +304 124.600 +304 164.400 +304 266.300 +305 116.500 +305 201.700 +306 185.000 +306 260.400 +307 101.200 +307 187.100 +307 245.300 +308 70.300 +308 186.000 +309 92.100 +309 164.600 +309 219.500 +310 80.600 +310 107.000 +311 93.100 +312 117.000 +312 165.600 +312 218.900 +312 285.600 +313 97.500 +313 185.600 +314 68.300 +315 151.900 +315 203.000 +315 223.900 +315 266.000 +316 72.100 +316 128.200 +316 164.200 +316 184.600 +316 243.800 +317 96.600 +317 131.800 +317 144.400 +317 164.600 +317 217.900 +318 218.000 +319 117.300 +319 128.800 +320 117.100 +320 265.500 +321 126.400 +321 164.900 +321 290.800 +322 81.200 +322 186.100 +322 219.400 +322 260.300 +322 280.000 +323 69.500 +323 116.300 +324 81.700 +324 116.100 +324 165.200 +324 291.200 +325 93.500 +325 236.100 +325 280.700 +326 218.300 +326 265.900 +327 81.500 +328 218.200 +328 256.600 +328 280.000 +329 186.600 +329 291.500 +330 92.500 +330 164.900 +330 186.000 +330 218.100 +331 56.500 +331 201.600 +331 244.800 +331 291.600 +333 185.400 +333 218.100 +333 288.300 +334 101.500 +334 266.000 +335 100.300 +335 280.700 +336 107.100 +336 246.200 +336 281.300 +337 82.400 +337 289.300 +338 80.700 +338 116.800 +338 141.800 +338 165.300 +339 81.000 +339 260.500 +340 116.700 +341 114.300 +341 130.200 +341 244.400 +342 130.500 +342 244.200 +342 260.200 +342 290.700 +343 159.800 +344 69.700 +344 147.500 +344 159.500 +344 186.800 +344 279.600 +345 81.500 +345 164.000 +346 125.400 +346 164.600 +346 218.300 +346 281.000 +347 116.600 +347 131.800 +347 201.600 +347 289.800 +348 164.300 +348 255.000 +348 280.300 +349 128.600 +350 187.100 +350 202.900 +350 228.600 +351 117.100 +351 186.400 +352 69.300 +352 185.300 +352 218.400 +353 55.700 +353 81.400 +353 291.300 +354 81.900 +354 187.500 +354 200.000 +355 105.000 +355 266.400 +356 220.400 +357 56.000 +357 117.900 +357 163.200 +357 266.200 +358 66.000 +358 290.700 +359 92.600 +359 144.600 +359 185.200 +359 219.700 +359 266.300 +360 117.200 +360 159.000 +360 266.100 +361 164.500 +361 290.900 +362 132.700 +362 219.000 +363 81.500 +363 144.600 +364 82.000 +364 117.100 +364 144.100 +364 202.300 +364 263.900 +365 92.900 +365 106.700 +366 111.100 +366 183.500 +366 218.100 +367 66.200 +367 80.300 +367 96.900 +367 165.000 +367 266.000 +368 217.300 +369 59.300 +369 141.700 +370 162.500 +370 218.200 +371 164.600 +371 287.100 +373 164.200 +373 201.700 +373 280.900 +374 106.800 +374 145.700 +374 163.800 +374 266.000 +375 185.300 +375 279.000 +376 143.600 +376 280.500 +377 185.000 +377 265.000 +379 132.400 +379 146.500 +380 81.600 +380 144.300 +380 164.300 +381 82.000 +381 141.900 +381 150.300 +381 278.300 +382 218.100 +382 243.800 +382 291.500 +383 80.200 +383 266.000 +384 92.600 +384 116.500 +384 164.500 +384 244.800 +385 102.600 +385 218.300 +386 69.700 +387 116.800 +387 131.900 +387 236.100 +387 263.500 +388 146.000 +388 202.000 +388 290.800 +389 93.900 +389 117.400 +389 164.600 +390 81.800 +390 121.500 +390 164.600 +390 201.900 +390 244.900 +390 287.300 +391 68.300 +391 289.100 +392 115.400 +392 200.800 +392 246.300 +393 218.000 +393 259.500 +394 126.400 +394 163.800 +395 244.300 +396 117.100 +396 263.400 +397 57.100 +397 92.100 +397 150.200 +397 219.500 +398 116.200 +398 280.500 +399 247.100 +399 265.800 +400 116.800 +400 241.400 +400 287.800 +401 57.500 +401 187.200 +401 227.700 +402 164.300 +402 289.100 +403 108.800 +403 216.100 +405 80.600 +405 165.200 +406 144.300 +406 289.500 +407 116.300 +407 130.300 +407 164.900 +407 228.400 +407 291.700 +408 218.600 +408 291.400 +409 217.900 +410 101.200 +410 164.600 +410 217.800 +411 185.900 +411 265.900 +412 144.400 +412 185.400 +412 217.700 +412 291.800 +413 260.600 +413 288.900 +414 107.500 +414 290.600 +415 102.800 +415 202.100 +416 67.500 +416 92.300 +416 163.700 +416 291.600 +417 81.500 +417 131.600 +417 200.000 +417 280.500 +418 93.500 +418 202.600 +418 288.900 +419 69.800 +419 144.600 +420 50.500 +420 81.600 +420 108.800 +421 227.500 +421 247.900 +422 185.800 +422 219.000 +422 278.300 +423 165.100 +423 266.000 +424 82.100 +424 185.700 +424 290.400 +425 217.700 +426 116.600 +426 131.900 +426 164.000 +427 101.900 +427 144.800 +428 201.200 +428 231.000 +428 291.000 +429 108.300 +429 146.200 +429 279.200 +430 115.200 +430 285.600 +431 56.500 +431 140.900 +431 163.700 +431 266.000 +432 141.500 +432 243.300 +433 185.800 +434 164.100 +434 201.300 +435 164.800 +435 185.900 +436 69.300 +436 264.700 +437 101.200 +437 185.500 +438 132.000 +439 55.400 +439 93.900 +439 130.100 +439 150.200 +440 101.500 +440 185.300 +442 69.700 +442 100.700 +442 113.500 +442 219.300 +443 81.800 +443 96.800 +443 129.200 +443 185.600 +444 248.400 +444 262.900 +445 82.600 +446 93.300 +446 107.100 +446 185.000 +447 144.500 +447 218.100 +448 164.600 +448 185.700 +448 244.900 +448 281.300 +449 130.300 +449 244.300 +450 70.200 +450 266.200 +451 144.200 +451 217.800 +451 281.900 +452 245.100 +452 259.100 +453 290.800 +454 143.800 +454 280.600 +455 144.800 +455 259.400 +457 69.500 +457 164.500 +457 227.600 +458 130.200 +459 93.500 +459 200.600 +460 80.900 +460 219.400 +460 280.200 +461 185.500 +461 280.700 +462 99.800 +462 163.900 +463 93.900 +463 131.900 +464 165.200 +464 219.000 +465 117.200 +465 162.900 +466 100.100 +466 164.700 +466 245.200 +467 80.900 +467 127.400 +467 185.900 +468 128.700 +468 186.100 +468 279.900 +469 95.900 +469 146.400 +470 144.600 +471 80.900 +471 126.200 +471 185.800 +471 266.200 +472 69.700 +472 184.100 +472 218.000 +473 144.600 +473 185.100 +474 152.400 +474 185.500 +474 245.200 +475 115.700 +475 153.200 +476 164.900 +477 82.200 +477 164.400 +479 100.200 +479 185.800 +479 219.500 +480 202.600 +480 260.400 +482 164.500 +482 187.300 +483 70.400 +483 128.300 +483 291.700 +484 81.400 +484 164.900 +485 218.200 +485 287.900 +486 71.300 +487 52.700 +488 291.700 +489 68.000 +489 80.800 +489 185.600 +490 164.600 +490 266.200 +491 128.500 +492 67.600 +492 106.800 +492 265.000 +493 96.100 +493 165.300 +494 117.400 +494 244.100 +497 101.400 +497 236.100 +498 69.600 +500 164.700 +500 215.800 +501 185.700 +502 52.700 +502 57.800 +502 160.100 +502 266.200 +504 57.900 +504 164.300 +504 279.100 +505 92.600 +506 67.700 +506 128.200 +506 281.200 +507 83.200 +507 92.900 +508 70.400 +508 142.400 +508 201.200 +508 290.700 +510 99.500 +510 185.000 +510 219.800 +510 265.800 +511 64.200 +511 69.500 +511 164.600 +511 186.000 +512 100.000 +512 185.600 +512 266.200 +513 130.400 +514 198.400 +514 244.600 +514 279.600 +515 82.900 +515 116.900 +515 146.000 +516 69.500 +516 116.000 +516 153.600 +517 152.900 +517 163.500 +518 245.600 +519 117.000 +519 164.800 +520 80.700 +520 107.000 +520 131.800 +520 185.800 +520 236.300 +521 67.800 +521 291.900 +522 106.700 +522 165.200 +524 84.500 +524 255.800 +526 80.700 +526 159.100 +526 186.800 +526 218.600 +526 266.000 +526 279.900 +526 291.700 +527 164.700 +528 69.900 +528 116.700 +528 186.000 +528 279.000 +529 82.100 +529 125.500 +529 165.100 +529 242.900 +530 99.800 +531 200.900 +532 81.500 +532 107.000 +532 165.200 +532 185.800 +532 219.500 +533 61.000 +533 217.900 +534 261.300 +535 102.300 +536 67.300 +536 218.000 +537 164.600 +538 201.400 +538 261.500 +539 69.700 +539 137.300 +539 164.500 +539 225.500 +540 67.400 +540 218.100 +541 93.000 +541 291.400 +542 81.700 +543 132.000 +543 198.300 +544 201.300 +545 114.200 +546 99.400 +546 164.700 +546 219.000 +548 164.800 +549 198.200 +549 263.200 +550 132.000 +550 201.600 +550 280.800 +551 164.600 +551 290.900 +552 108.800 +552 186.200 +552 281.700 +553 114.200 +553 240.400 +554 55.100 +554 144.400 +554 185.300 +555 165.700 +555 201.700 +555 263.900 +556 81.400 +556 201.900 +558 116.900 +558 132.500 +558 164.600 +558 185.400 +559 266.000 +560 68.100 +561 58.300 +561 81.600 +561 164.000 +561 185.500 +561 213.000 +561 244.700 +562 194.000 +562 276.900 +562 289.100 +563 217.900 +563 290.800 +564 81.600 +564 117.000 +564 197.300 +564 218.000 +566 194.700 +566 219.600 +566 281.200 +567 70.900 +567 96.300 +567 187.000 +567 219.700 +567 244.200 +568 186.200 +569 81.900 +569 244.300 +569 288.500 +570 186.300 +571 68.000 +571 198.800 +572 110.300 +572 219.600 +572 245.000 +572 290.300 +573 144.200 +573 164.100 +574 164.600 +574 290.600 +576 71.000 +576 265.400 +577 93.200 +577 162.300 +578 82.700 +578 125.600 +579 81.900 +579 131.800 +579 199.600 +579 290.600 +580 186.000 +581 70.200 +581 164.900 +581 217.100 +584 81.900 +585 201.100 +585 266.000 +586 146.500 +586 164.700 +587 90.700 +587 217.700 +587 235.000 +588 125.000 +589 69.500 +589 92.600 +589 161.500 +590 126.900 +591 93.200 +592 92.900 +592 201.100 +592 246.300 +592 288.100 +593 81.600 +593 117.200 +593 134.100 +593 279.100 +594 82.500 +594 255.800 +594 290.600 +595 69.500 +595 185.500 +596 107.700 +596 217.800 +596 245.700 +597 198.300 +597 246.000 +598 51.700 +598 113.600 +598 165.100 +599 185.800 +599 291.400 +600 93.500 +600 185.200 +600 245.100 +601 162.200 +601 218.100 +601 265.300 +602 117.700 +602 126.000 +602 288.700 +603 184.900 +604 101.400 +604 164.700 +604 197.100 +605 102.100 +605 219.200 +605 244.100 +605 290.400 +606 68.300 +606 153.400 +607 116.300 +607 132.400 +608 101.400 +608 126.400 +608 163.600 +608 198.900 +609 93.700 +609 164.400 +609 260.800 +610 81.500 +610 164.500 +611 101.200 +611 200.200 +612 81.400 +612 218.400 +612 289.100 +613 55.900 +613 71.000 +613 201.800 +614 153.600 +614 184.300 +614 228.300 +614 245.000 +614 266.000 +615 80.400 +615 187.100 +615 242.000 +615 262.900 +616 218.000 +617 114.500 +617 131.200 +619 101.200 +619 218.000 +620 141.100 +621 265.800 +622 185.900 +622 244.500 +623 116.900 +623 144.700 +623 200.500 +623 224.100 +623 265.900 +623 280.000 +625 228.400 +625 260.300 +625 285.300 +627 132.300 +627 164.900 +627 202.100 +627 266.100 +627 291.300 +628 108.000 +628 116.500 +628 244.700 +628 266.300 +628 289.100 +629 145.100 +629 186.300 +629 197.100 +630 185.900 +631 164.200 +632 100.500 +632 185.400 +633 67.800 +633 90.600 +633 102.300 +633 121.600 +633 236.100 +634 164.600 +634 245.900 +635 164.900 +635 186.100 +635 261.500 +635 280.600 +636 184.200 +636 260.500 +637 130.700 +637 144.400 +637 186.100 +637 217.900 +638 164.700 +638 200.600 +639 92.400 +639 159.500 +640 218.000 +640 259.900 +640 291.600 +642 93.800 +642 202.500 +644 99.400 +644 164.500 +644 202.100 +644 218.000 +645 96.400 +645 141.800 +645 186.000 +645 279.800 +646 132.300 +646 185.400 +646 255.400 +646 290.400 +647 124.200 +648 164.800 +648 229.200 +648 265.900 +649 82.700 +649 116.300 +650 201.400 +650 278.100 +651 77.300 +651 185.900 +651 260.500 +652 70.200 +652 117.100 +652 153.000 +652 185.900 +653 55.900 +653 117.500 +653 281.100 +654 81.700 +654 165.200 +654 265.800 +654 288.600 +655 279.400 +656 117.300 +657 113.800 +657 200.800 +657 291.500 +658 107.200 +658 224.800 +658 265.500 +659 69.700 +659 146.500 +660 106.800 +660 185.200 +661 62.600 +661 99.800 +661 187.100 +661 218.200 +662 96.300 +663 67.700 +663 114.000 +664 106.600 +664 126.300 +665 158.300 +665 243.600 +666 106.400 +666 198.100 +667 81.200 +667 101.200 +668 132.200 +668 287.500 +669 128.200 +669 288.400 +670 58.200 +670 150.300 +670 185.600 +670 261.800 +671 93.100 +672 218.800 +673 51.000 +673 80.900 +673 266.100 +674 116.600 +674 165.000 +674 186.100 +674 201.700 +675 163.600 +675 219.600 +675 290.600 +676 95.800 +676 117.200 +676 164.500 +679 146.300 +680 113.400 +681 81.600 +681 146.000 +681 184.000 +681 228.700 +681 247.000 +682 69.400 +684 164.400 +685 132.400 +686 247.200 +687 150.900 +687 164.600 +688 116.500 +688 291.700 +690 226.000 +691 96.400 +691 126.400 +691 291.900 +692 67.600 +692 164.400 +692 289.800 +693 117.300 +694 243.700 +695 52.300 +695 117.700 +695 164.300 +696 81.100 +696 117.100 +696 186.700 +696 266.200 +697 69.200 +697 186.100 +697 285.600 +698 128.600 +698 184.500 +698 217.700 +699 81.500 +699 146.800 +699 266.300 +699 291.700 +700 198.400 +701 50.700 +701 128.700 +702 164.700 +703 165.400 +703 199.700 +703 236.100 +704 101.400 +705 220.000 +705 291.600 +706 164.000 +706 186.100 +706 266.000 +707 92.200 +707 116.700 +707 184.900 +707 218.000 +707 243.900 +708 101.100 +708 225.800 +708 278.700 +709 148.600 +709 164.500 +709 248.300 +709 279.800 +710 68.100 +711 99.100 +711 164.400 +711 185.600 +711 260.300 +712 68.100 +712 102.300 +712 246.900 +713 67.700 +714 117.900 +715 144.700 +716 92.500 +716 117.100 +716 185.700 +716 202.700 +717 131.400 +718 186.100 +718 265.700 +719 116.700 +719 144.400 +719 186.200 +720 93.900 +720 244.800 +721 114.200 +721 261.900 +722 164.700 +722 278.900 +723 133.200 +724 71.600 +724 82.000 +724 116.500 +724 150.300 +724 245.000 +725 279.100 +726 65.500 +726 219.400 +726 266.100 +726 281.300 +727 81.400 +727 219.700 +728 93.000 +728 164.500 +730 185.200 +731 165.100 +731 201.600 +732 94.000 +732 165.300 +733 280.400 +734 140.700 +734 164.600 +736 115.800 +737 132.500 +737 185.800 +737 257.100 +738 53.000 +738 80.600 +738 184.400 +739 125.800 +739 291.100 +741 70.000 +741 81.900 +741 163.300 +741 265.900 +742 147.400 +743 279.200 +744 94.000 +745 78.600 +745 164.800 +746 236.300 +747 81.400 +747 141.000 +747 164.600 +747 201.000 +748 288.800 +749 291.700 +750 163.800 +750 202.200 +751 132.200 +751 185.900 +751 280.800 +752 96.700 +752 149.900 +752 222.700 +753 219.100 +753 259.800 +754 106.400 +754 201.400 +754 281.100 +755 117.900 +755 141.500 +755 164.700 +755 186.400 +755 263.500 +756 81.000 +756 164.600 +756 291.600 +757 69.000 +757 288.100 +758 150.200 +759 80.500 +759 219.800 +762 55.200 +762 140.900 +762 187.400 +762 231.100 +763 116.400 +763 145.300 +763 165.300 +763 185.800 +763 217.600 +763 257.100 +763 280.300 +764 66.600 +764 201.500 +765 54.900 +765 94.000 +765 159.900 +766 99.500 +766 185.300 +767 69.700 +767 202.900 +768 277.600 +769 280.100 +770 96.600 +770 218.200 +771 126.700 +771 164.400 +771 244.000 +772 116.700 +772 164.800 +772 243.900 +772 260.000 +773 56.300 +773 101.400 +773 114.400 +773 130.000 +773 231.000 +774 100.100 +774 164.400 +775 100.100 +775 115.800 +775 218.700 +776 92.200 +776 116.600 +776 142.000 +776 266.200 +776 291.300 +777 68.700 +777 235.300 +778 155.000 +778 287.900 +779 164.500 +780 126.100 +780 201.700 +780 218.800 +781 116.500 +781 164.900 +782 70.000 +782 149.000 +782 164.200 +783 131.300 +783 246.400 +784 81.800 +784 110.300 +784 233.400 +784 289.300 +785 126.100 +785 185.100 +787 116.100 +788 102.400 +788 185.600 +789 101.800 +789 244.400 +790 99.900 +790 218.400 +791 81.900 +791 164.400 +791 245.200 +792 81.600 +792 121.800 +792 159.000 +793 66.300 +793 265.800 +794 108.200 +794 185.800 +794 288.900 +795 81.900 +795 100.900 +795 186.400 +796 56.500 +796 202.700 +797 153.200 +797 164.400 +797 291.700 +798 289.200 +799 103.700 +799 116.600 +799 186.000 +799 281.500 +800 52.500 +800 146.500 +801 101.200 +801 259.800 +802 69.700 +802 164.400 +803 102.200 +803 144.800 +803 291.000 +804 200.600 +804 264.200 +805 66.400 +805 81.100 +805 185.700 +805 254.400 +806 117.100 +806 164.700 +806 290.700 +807 186.200 +808 117.900 +808 165.200 +808 219.600 +809 92.800 +809 164.900 +809 217.700 +809 260.500 +809 289.300 +810 164.800 +811 56.500 +811 245.200 +812 185.200 +813 77.800 +814 50.100 +814 279.700 +815 50.600 +815 80.500 +815 106.800 +815 141.500 +815 152.800 +815 185.500 +815 245.300 +816 131.100 +817 153.300 +817 227.700 +818 81.400 +818 96.300 +818 226.800 +819 146.400 +820 258.300 +821 55.400 +821 93.400 +821 116.700 +821 291.000 +822 68.600 +822 107.200 +822 115.200 +822 219.100 +823 96.600 +823 131.300 +823 184.700 +824 164.700 +825 164.800 +825 218.100 +826 52.500 +827 218.800 +827 260.800 +828 108.100 +828 144.200 +828 288.300 +829 113.400 +829 218.500 +829 291.900 +831 69.600 +831 185.000 +832 128.600 +832 143.700 +832 218.100 +833 131.800 +833 265.600 +834 164.200 +834 279.500 +835 99.700 +835 291.500 +836 164.400 +836 281.200 +837 100.200 +837 184.300 +838 99.900 +838 129.800 +838 185.800 +839 93.000 +839 163.900 +839 202.600 +840 164.800 +840 187.100 +840 228.300 +840 281.200 +841 184.800 +841 260.300 +842 81.900 +842 201.900 +842 260.300 +843 281.400 +844 165.300 +844 244.000 +845 69.800 +846 68.100 +846 126.000 +846 219.500 +847 81.000 +847 219.600 +848 68.300 +848 159.100 +848 200.200 +848 289.800 +850 131.400 +850 236.300 +851 100.000 +851 260.900 +852 99.300 +852 129.900 +852 164.000 +852 291.100 +853 128.500 +853 164.500 +853 291.300 +854 245.600 +854 290.900 +855 92.800 +855 148.300 +856 104.700 +856 219.700 +857 116.600 +858 144.400 +859 80.100 +859 153.300 +859 229.600 +859 259.800 +860 113.500 +860 226.600 +861 126.800 +861 288.700 +863 97.600 +863 260.400 +863 279.700 +864 131.500 +864 164.800 +865 146.500 +865 186.100 +866 164.400 +866 202.100 +866 263.800 +866 280.000 +867 50.100 +867 93.600 +867 117.100 +867 143.100 +867 219.700 +868 57.500 +868 83.100 +868 101.600 +868 260.100 +869 112.500 +869 150.300 +870 99.000 +871 185.500 +872 144.400 +872 218.500 +872 289.000 +873 80.200 +873 105.700 +874 69.600 +874 217.900 +875 101.800 +875 126.400 +875 200.400 +875 235.300 +876 201.600 +876 259.700 +877 201.200 +877 280.600 +878 70.700 +878 80.600 +878 117.100 +878 146.200 +878 290.900 +879 93.300 +880 81.800 +880 186.000 +881 100.200 +881 245.900 +881 290.700 +882 147.800 +882 185.800 +883 185.200 +883 194.900 +883 227.800 +883 279.500 +884 144.600 +884 265.700 +885 96.300 +885 164.700 +885 201.700 +885 279.200 +886 82.000 +886 164.500 +886 217.800 +886 290.900 +887 114.300 +888 164.800 +889 280.500 +890 70.900 +891 71.500 +891 288.900 +892 106.800 +892 163.700 +893 107.600 +893 187.100 +893 260.300 +894 99.900 +894 164.300 +894 259.600 +895 98.900 +895 130.000 +895 236.000 +897 51.300 +897 247.000 +898 90.700 +898 130.900 +898 164.500 +899 145.800 +899 186.900 +899 265.400 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_8_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_8_i_pop.dat new file mode 100644 index 000000000..7d049558d --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_8_i_pop.dat @@ -0,0 +1,513 @@ +sender time_ms +900 108.200 +900 156.900 +900 218.100 +900 236.000 +901 96.800 +901 164.700 +901 186.900 +901 218.100 +901 265.900 +902 259.400 +902 287.700 +903 69.700 +903 92.200 +903 219.400 +904 164.300 +904 200.100 +904 265.200 +905 125.500 +906 117.300 +906 164.400 +906 259.300 +907 82.200 +907 116.600 +908 67.000 +908 91.800 +908 101.200 +909 289.100 +910 81.900 +910 164.800 +910 228.700 +911 59.600 +911 141.600 +911 202.000 +911 245.400 +912 56.800 +912 128.300 +912 219.400 +912 231.100 +912 260.600 +912 290.700 +913 116.300 +913 201.900 +913 290.800 +914 82.000 +914 164.400 +914 244.300 +915 187.000 +916 184.600 +916 226.800 +917 164.300 +917 280.500 +919 82.300 +919 138.000 +919 187.300 +919 219.600 +919 260.300 +920 132.400 +921 128.900 +921 291.700 +922 131.400 +922 247.300 +923 81.500 +923 116.500 +923 186.000 +924 69.700 +924 100.100 +924 152.800 +926 165.000 +926 291.200 +927 185.900 +927 281.200 +928 131.500 +928 185.300 +928 218.100 +929 291.800 +930 245.000 +930 263.500 +931 131.700 +931 164.800 +932 266.100 +933 164.500 +934 95.300 +934 184.600 +934 291.700 +935 116.800 +935 164.500 +935 291.800 +936 164.900 +936 187.200 +937 107.300 +937 153.300 +938 70.300 +938 81.800 +938 127.900 +938 229.400 +939 70.800 +939 113.400 +939 164.600 +940 81.100 +940 154.000 +940 164.600 +940 216.800 +940 281.300 +941 50.200 +941 164.400 +941 244.500 +942 91.900 +942 127.300 +942 163.500 +942 260.400 +943 128.600 +944 202.100 +945 185.500 +945 257.200 +945 264.700 +945 281.500 +945 287.400 +946 102.400 +946 131.900 +946 164.500 +946 193.700 +946 219.300 +947 108.700 +947 247.600 +948 185.100 +949 100.100 +949 280.400 +950 260.400 +951 218.100 +952 219.700 +953 114.500 +953 279.900 +955 108.000 +955 148.500 +955 164.800 +955 279.100 +955 290.700 +956 96.900 +956 144.400 +956 265.300 +957 185.800 +957 247.200 +957 264.800 +958 165.200 +959 164.500 +960 74.200 +960 260.000 +961 116.500 +961 164.700 +962 163.800 +962 244.600 +963 82.300 +963 217.800 +964 164.600 +964 219.600 +965 184.700 +966 96.000 +966 164.300 +966 265.800 +968 97.600 +968 144.500 +969 69.700 +969 117.000 +969 150.100 +969 185.200 +970 71.300 +970 219.300 +970 266.100 +971 82.100 +971 147.200 +971 280.700 +972 80.700 +972 164.200 +972 291.600 +973 132.800 +973 187.000 +974 184.300 +974 217.600 +975 145.700 +975 199.300 +976 55.300 +976 152.100 +976 187.200 +976 244.700 +977 68.500 +977 128.300 +977 164.900 +977 280.600 +978 68.100 +978 162.700 +979 56.000 +979 220.000 +979 279.800 +980 130.100 +980 186.600 +981 67.300 +981 218.100 +981 256.700 +982 212.700 +982 265.600 +983 101.300 +984 144.100 +984 187.100 +984 236.000 +985 185.200 +985 201.800 +986 80.400 +986 218.100 +987 281.400 +988 81.700 +988 219.800 +989 202.200 +990 70.600 +990 219.300 +990 244.800 +990 278.900 +992 236.300 +993 101.300 +993 164.500 +993 290.400 +994 92.900 +994 116.400 +994 184.600 +994 291.700 +995 100.300 +995 132.200 +995 217.700 +995 256.300 +995 291.000 +996 116.400 +996 256.200 +996 291.600 +997 187.100 +997 228.200 +998 55.100 +998 165.000 +1000 116.500 +1000 164.500 +1000 216.900 +1000 228.300 +1000 291.600 +1001 117.300 +1002 218.400 +1003 260.400 +1004 70.500 +1004 290.500 +1007 201.800 +1007 264.400 +1009 68.300 +1009 184.500 +1009 291.300 +1010 81.000 +1010 185.400 +1010 265.100 +1011 52.300 +1011 201.600 +1013 82.300 +1013 228.100 +1014 74.800 +1014 159.000 +1014 186.900 +1014 218.800 +1015 82.100 +1015 290.200 +1016 100.400 +1017 141.100 +1017 247.300 +1018 164.500 +1018 218.200 +1018 251.900 +1018 280.400 +1019 144.000 +1019 164.900 +1020 93.100 +1020 161.400 +1021 140.700 +1021 164.600 +1021 217.600 +1023 55.000 +1024 290.600 +1025 108.900 +1025 193.700 +1025 278.900 +1026 65.800 +1026 101.500 +1026 117.800 +1026 164.100 +1026 194.800 +1027 56.000 +1027 147.200 +1028 112.800 +1028 265.100 +1029 143.500 +1029 163.800 +1030 144.500 +1030 247.300 +1031 52.100 +1031 113.900 +1031 164.500 +1031 228.600 +1032 51.100 +1032 228.500 +1032 260.300 +1033 259.500 +1034 218.300 +1034 256.300 +1034 265.600 +1036 211.700 +1036 291.300 +1037 55.800 +1037 265.500 +1038 69.800 +1038 114.100 +1038 163.800 +1038 198.500 +1038 228.300 +1038 279.900 +1039 70.100 +1039 88.800 +1040 116.500 +1040 164.700 +1041 108.900 +1041 200.300 +1041 229.700 +1043 93.500 +1043 245.200 +1043 266.300 +1044 68.500 +1044 185.000 +1044 201.800 +1044 266.000 +1045 130.200 +1045 164.700 +1045 280.300 +1046 117.900 +1046 128.400 +1047 187.200 +1047 218.000 +1047 281.600 +1048 118.100 +1048 164.400 +1048 290.700 +1049 93.900 +1049 228.300 +1050 102.000 +1050 185.800 +1052 194.100 +1053 69.100 +1053 157.100 +1053 259.900 +1054 164.300 +1054 290.700 +1055 81.600 +1055 201.500 +1056 165.400 +1056 186.900 +1056 201.200 +1056 244.100 +1057 164.600 +1057 217.900 +1057 265.900 +1058 197.400 +1059 200.100 +1059 247.000 +1059 290.400 +1060 131.900 +1061 107.700 +1061 194.800 +1061 233.600 +1062 69.600 +1062 93.700 +1062 133.500 +1062 165.400 +1062 184.500 +1063 147.500 +1063 185.800 +1063 218.200 +1064 69.700 +1064 127.900 +1064 164.400 +1064 279.800 +1065 218.200 +1066 105.500 +1067 69.500 +1067 164.800 +1068 83.100 +1068 164.100 +1068 184.900 +1068 218.500 +1069 81.500 +1069 116.200 +1069 160.400 +1070 186.300 +1070 260.200 +1071 55.100 +1071 69.700 +1071 280.100 +1072 101.400 +1072 291.800 +1073 183.400 +1073 280.400 +1074 56.400 +1074 126.400 +1075 97.500 +1075 218.500 +1076 56.600 +1076 131.300 +1077 81.800 +1077 107.500 +1077 231.100 +1079 164.300 +1079 185.900 +1079 218.400 +1081 103.000 +1081 117.700 +1082 259.500 +1082 289.100 +1083 153.000 +1084 164.700 +1085 164.900 +1085 217.900 +1086 117.900 +1086 148.100 +1086 186.700 +1086 291.700 +1087 164.900 +1087 200.900 +1087 219.700 +1088 80.600 +1089 99.800 +1089 184.300 +1089 279.100 +1090 159.300 +1090 201.800 +1091 70.600 +1091 116.900 +1091 184.600 +1091 259.600 +1092 52.800 +1092 70.400 +1092 116.100 +1092 246.000 +1092 265.600 +1093 164.600 +1093 266.200 +1094 81.400 +1094 132.300 +1094 200.900 +1094 219.700 +1095 164.000 +1095 245.300 +1097 92.500 +1098 50.200 +1098 69.400 +1098 81.900 +1098 117.000 +1099 132.300 +1099 165.000 +1099 185.700 +1100 57.700 +1100 101.400 +1100 116.400 +1100 264.700 +1102 104.600 +1102 164.900 +1102 228.000 +1103 164.400 +1103 185.300 +1104 69.600 +1104 113.400 +1104 131.000 +1106 143.500 +1106 265.800 +1106 291.300 +1108 132.600 +1108 185.900 +1108 288.000 +1109 56.100 +1109 117.300 +1109 217.700 +1110 66.500 +1110 116.500 +1110 216.400 +1110 260.300 +1111 149.700 +1111 291.400 +1112 69.500 +1112 144.400 +1112 186.200 +1113 148.700 +1113 185.200 +1115 144.400 +1116 81.400 +1116 96.400 +1116 244.500 +1117 81.400 +1117 193.900 +1118 92.900 +1118 163.700 +1118 266.000 +1118 291.200 +1119 100.800 +1120 185.200 +1121 50.100 +1121 185.300 +1121 199.300 +1122 144.400 +1122 184.300 +1123 109.400 +1123 164.600 +1123 219.300 +1124 164.700 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_9_e_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_9_e_pop.dat new file mode 100644 index 000000000..64961fae1 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_9_e_pop.dat @@ -0,0 +1,2071 @@ +sender time_ms +0 81.000 +0 160.600 +1 57.100 +1 129.100 +1 164.800 +1 247.000 +1 279.900 +2 184.800 +2 200.000 +2 265.800 +3 279.800 +4 219.700 +5 164.500 +6 164.200 +8 93.500 +8 144.400 +8 163.900 +9 93.300 +9 131.800 +9 150.200 +10 150.400 +10 200.400 +10 245.300 +10 265.100 +11 93.100 +11 164.600 +12 94.000 +12 117.800 +12 201.200 +14 218.100 +15 81.600 +15 144.500 +16 116.500 +16 227.000 +17 145.400 +17 184.900 +17 279.300 +18 125.200 +18 144.700 +18 218.400 +18 265.900 +18 291.500 +19 201.200 +19 244.400 +20 144.700 +20 164.500 +20 289.400 +21 260.500 +22 218.700 +22 291.400 +23 81.600 +23 217.300 +24 81.400 +24 144.300 +25 126.700 +26 77.500 +26 93.400 +26 148.300 +26 259.200 +27 70.400 +28 280.000 +28 291.300 +29 117.100 +29 260.700 +30 105.300 +30 116.800 +30 219.400 +31 89.300 +31 164.200 +31 259.600 +32 92.800 +32 116.500 +32 131.700 +32 244.400 +33 128.000 +33 218.100 +33 291.700 +34 107.000 +34 252.200 +36 93.800 +36 130.600 +36 260.600 +37 58.700 +37 70.600 +37 116.600 +37 164.700 +38 92.100 +38 128.700 +38 218.200 +38 260.000 +39 99.900 +39 128.600 +40 106.800 +40 131.700 +41 82.800 +41 92.500 +42 144.000 +42 291.300 +43 96.900 +43 131.600 +44 219.600 +45 164.400 +46 164.200 +47 57.600 +47 91.800 +47 200.500 +47 278.300 +48 161.900 +48 218.200 +48 291.600 +49 69.700 +49 96.500 +49 133.500 +49 164.700 +49 219.700 +50 55.400 +50 125.800 +50 200.100 +52 132.200 +52 245.100 +53 185.800 +54 117.800 +54 144.800 +55 93.500 +56 57.800 +56 93.200 +56 117.800 +56 149.300 +57 130.200 +58 160.200 +58 218.000 +59 130.400 +59 185.100 +60 185.800 +61 79.900 +61 93.300 +61 116.600 +61 144.400 +61 162.900 +61 256.200 +62 102.700 +62 125.800 +63 69.500 +63 93.400 +63 279.600 +64 217.000 +64 266.700 +65 101.000 +65 123.100 +65 127.800 +66 132.100 +66 185.200 +67 218.800 +67 289.100 +68 93.700 +68 131.700 +69 127.900 +69 260.600 +70 52.200 +70 68.600 +70 92.100 +70 164.600 +70 291.300 +71 70.400 +71 128.600 +72 116.200 +72 184.900 +73 283.200 +73 290.600 +74 161.700 +76 82.900 +76 116.100 +76 164.500 +76 248.000 +77 81.900 +77 130.700 +77 146.500 +77 164.800 +78 127.200 +79 99.800 +79 164.200 +79 229.700 +80 186.900 +80 200.600 +80 280.000 +81 102.100 +81 164.100 +82 162.700 +82 184.700 +82 245.200 +83 82.300 +83 99.100 +84 66.700 +84 184.800 +84 218.100 +85 115.600 +85 144.600 +85 159.600 +85 186.400 +85 245.200 +86 91.900 +86 146.100 +86 148.400 +86 266.300 +86 291.400 +88 81.700 +88 236.200 +89 123.600 +90 165.100 +90 202.600 +91 183.600 +91 265.600 +91 280.000 +92 219.700 +92 278.600 +93 164.200 +93 228.600 +94 187.200 +94 245.300 +95 69.200 +95 101.000 +95 218.100 +96 101.800 +96 117.200 +97 68.400 +98 50.300 +98 198.400 +98 291.700 +99 52.500 +99 127.500 +99 144.600 +99 265.900 +100 50.400 +100 132.100 +100 186.900 +100 234.100 +100 278.200 +100 290.900 +102 132.200 +103 52.200 +103 81.400 +103 130.900 +103 164.800 +103 244.000 +104 67.500 +104 219.700 +105 185.800 +106 184.200 +107 201.800 +108 110.500 +108 184.400 +108 266.200 +109 130.800 +109 219.700 +110 290.900 +111 202.100 +111 279.100 +112 144.200 +112 184.700 +112 219.400 +112 289.200 +113 184.700 +113 218.000 +114 164.600 +114 218.100 +115 164.900 +115 245.300 +115 280.700 +116 115.800 +116 281.500 +117 146.900 +117 226.400 +117 244.500 +117 260.300 +118 291.600 +119 81.700 +119 102.100 +119 164.600 +119 228.200 +120 80.800 +120 164.100 +121 133.600 +121 186.300 +121 244.400 +122 101.500 +122 131.100 +122 163.800 +122 255.800 +123 186.100 +123 244.500 +124 126.500 +124 165.400 +124 260.400 +124 287.900 +125 186.400 +126 144.600 +127 219.300 +128 130.000 +128 164.800 +128 184.700 +128 228.000 +128 266.000 +129 52.400 +129 82.100 +129 96.800 +129 117.900 +129 266.100 +130 96.300 +130 218.100 +130 280.500 +131 69.600 +131 291.400 +132 82.200 +132 133.200 +132 217.000 +132 246.000 +132 291.200 +133 116.900 +133 217.600 +133 247.500 +134 164.600 +134 219.400 +135 164.700 +136 68.500 +136 185.800 +136 217.900 +136 291.700 +137 81.900 +137 147.800 +137 258.400 +138 71.200 +138 263.100 +139 81.000 +139 114.400 +139 218.000 +140 265.900 +140 287.800 +141 116.100 +141 201.800 +142 123.800 +142 185.300 +142 201.500 +142 265.700 +143 164.500 +143 289.800 +144 164.000 +144 244.800 +144 278.300 +145 187.300 +146 96.400 +146 217.500 +147 107.000 +147 127.100 +147 266.400 +148 218.200 +148 231.000 +149 186.800 +149 219.500 +149 279.700 +150 95.900 +150 219.700 +151 186.000 +152 99.900 +152 164.400 +152 217.700 +153 92.200 +153 165.200 +154 65.200 +154 81.100 +155 150.300 +155 290.200 +156 186.300 +156 201.600 +157 218.100 +158 246.000 +159 101.200 +159 146.500 +159 162.900 +159 186.000 +160 219.500 +161 81.700 +161 148.300 +161 257.200 +163 116.700 +163 219.500 +163 278.000 +164 81.300 +164 151.300 +164 201.000 +165 80.900 +165 122.400 +165 187.000 +166 158.600 +166 165.400 +167 95.900 +167 107.000 +167 143.900 +167 218.300 +167 280.000 +168 164.200 +168 219.200 +169 107.000 +169 148.300 +169 187.100 +170 116.700 +170 185.300 +170 279.900 +171 70.000 +171 107.900 +171 184.900 +171 291.500 +172 277.900 +173 99.800 +173 164.100 +174 107.000 +174 266.000 +175 69.400 +175 115.800 +176 185.800 +176 218.200 +177 291.300 +178 199.400 +179 125.900 +180 164.500 +180 219.300 +181 57.700 +181 185.300 +181 245.400 +181 265.900 +182 117.600 +182 242.900 +183 101.900 +183 121.700 +183 201.600 +184 78.800 +184 279.900 +186 56.000 +186 117.500 +186 185.200 +187 101.900 +187 255.900 +188 143.800 +188 164.700 +189 69.700 +189 144.700 +190 164.500 +191 186.300 +192 62.100 +192 160.500 +192 256.900 +194 80.500 +194 148.700 +194 185.800 +195 55.400 +195 140.500 +195 219.700 +196 53.200 +196 144.600 +196 186.200 +196 265.600 +197 69.200 +197 142.200 +197 164.400 +197 217.200 +198 95.800 +198 116.500 +199 266.100 +200 54.300 +200 116.600 +200 185.400 +200 245.100 +200 265.000 +201 164.800 +201 288.300 +202 68.700 +202 117.400 +202 253.100 +204 218.000 +204 263.800 +205 95.900 +205 186.200 +205 219.600 +206 126.800 +206 201.600 +208 187.300 +208 201.400 +209 82.600 +209 200.800 +209 244.500 +209 266.100 +211 55.500 +211 219.500 +212 93.200 +213 100.100 +213 265.900 +214 127.600 +214 201.600 +214 266.000 +215 164.300 +215 266.000 +216 143.500 +217 185.900 +220 186.000 +220 279.900 +221 265.800 +222 287.200 +223 163.800 +224 52.400 +226 114.400 +226 292.000 +227 185.300 +228 184.500 +229 96.400 +229 200.000 +230 116.100 +230 185.100 +231 69.300 +231 147.600 +232 117.900 +232 132.600 +233 243.900 +233 290.800 +234 117.800 +234 184.900 +234 219.600 +234 244.100 +234 264.100 +234 281.600 +235 96.700 +235 107.300 +236 97.000 +236 149.000 +236 202.700 +237 120.400 +237 132.000 +237 291.300 +238 131.400 +238 146.400 +239 107.000 +239 184.400 +240 266.100 +241 99.500 +241 129.200 +241 164.600 +241 245.500 +242 57.800 +242 99.700 +242 219.600 +242 279.200 +244 81.700 +244 165.300 +244 280.600 +245 219.200 +247 81.600 +247 164.900 +247 201.100 +248 106.900 +248 146.000 +248 245.700 +249 58.500 +249 164.500 +249 184.000 +249 246.000 +250 101.700 +250 146.400 +250 186.400 +251 165.500 +251 228.900 +251 291.300 +252 217.600 +252 289.800 +253 52.600 +253 197.900 +253 230.900 +254 164.500 +255 96.400 +255 215.300 +255 265.800 +256 101.700 +256 159.000 +256 266.200 +256 288.300 +257 164.400 +257 218.300 +258 68.400 +258 152.900 +258 281.500 +259 94.100 +259 217.900 +260 116.000 +260 201.900 +261 117.100 +261 164.700 +262 69.500 +262 117.000 +262 237.200 +263 105.200 +263 184.700 +263 219.600 +263 246.000 +264 116.700 +264 164.600 +264 260.200 +264 291.800 +265 59.800 +265 185.300 +266 105.800 +266 228.300 +266 291.700 +267 117.500 +267 219.000 +268 201.500 +268 228.400 +269 132.500 +269 244.300 +269 265.600 +271 92.300 +272 81.800 +272 266.200 +273 67.200 +273 101.600 +273 164.700 +273 187.100 +273 192.100 +273 291.800 +274 101.500 +274 259.200 +276 69.700 +276 164.800 +276 281.900 +276 290.700 +277 93.100 +277 185.500 +278 108.300 +278 290.800 +279 128.100 +279 290.300 +281 115.900 +282 96.200 +282 141.200 +282 164.000 +282 245.000 +283 82.300 +283 130.900 +284 94.300 +284 144.400 +284 186.500 +284 261.400 +285 100.700 +285 116.100 +285 128.000 +285 144.600 +285 194.100 +285 218.100 +286 67.700 +286 163.800 +286 201.200 +288 152.900 +289 69.900 +289 265.700 +289 291.200 +290 81.600 +290 165.400 +291 105.300 +291 126.800 +291 164.600 +291 218.000 +292 96.300 +292 218.400 +292 244.800 +293 99.700 +293 133.900 +293 187.100 +293 201.300 +294 128.300 +295 144.200 +295 237.300 +295 277.500 +296 198.300 +296 246.000 +296 291.200 +297 105.400 +297 116.300 +298 144.600 +299 185.500 +299 236.000 +301 264.900 +302 108.000 +302 131.700 +302 281.300 +303 59.900 +303 69.800 +303 218.400 +304 95.800 +304 245.200 +305 290.900 +306 165.000 +307 94.100 +308 81.400 +308 164.700 +310 106.800 +310 116.800 +310 186.200 +312 115.900 +312 186.500 +313 108.400 +313 235.800 +314 68.700 +314 143.000 +314 164.500 +315 217.800 +316 218.200 +316 244.300 +317 141.300 +317 164.700 +317 228.200 +317 291.000 +318 130.700 +319 265.700 +320 128.800 +321 50.200 +321 164.500 +322 146.300 +323 93.300 +323 128.000 +323 217.600 +323 265.500 +324 281.300 +325 82.100 +325 163.900 +326 125.700 +326 266.100 +327 217.000 +327 281.100 +328 107.500 +328 164.100 +329 82.000 +329 116.100 +329 148.700 +330 115.900 +330 132.800 +330 164.700 +330 185.600 +331 224.600 +332 92.400 +332 142.200 +332 201.700 +332 288.100 +333 68.100 +333 92.700 +333 229.700 +333 290.000 +334 117.100 +334 154.900 +334 184.800 +335 116.400 +335 260.500 +335 291.500 +336 69.100 +336 107.200 +337 218.500 +337 290.700 +338 102.000 +338 185.100 +338 219.000 +339 55.700 +339 228.300 +339 279.800 +340 69.200 +340 92.400 +340 150.200 +340 243.600 +340 291.100 +341 164.600 +341 290.700 +342 103.000 +342 164.700 +342 185.800 +342 217.700 +342 290.900 +343 56.800 +343 117.800 +344 126.500 +344 185.100 +345 90.900 +346 164.200 +346 290.600 +347 80.600 +348 52.500 +348 107.000 +348 144.700 +348 244.300 +349 158.500 +350 81.900 +350 93.900 +350 130.400 +350 163.800 +351 164.400 +351 255.500 +352 58.300 +352 141.100 +352 218.300 +352 289.000 +353 101.100 +353 144.600 +354 69.400 +355 92.400 +355 114.600 +355 142.200 +356 260.600 +356 288.600 +357 94.000 +357 164.500 +357 219.000 +358 54.700 +358 131.900 +358 289.500 +360 67.700 +360 101.200 +360 145.800 +361 144.300 +362 80.800 +363 93.000 +363 165.000 +363 218.200 +364 69.800 +364 117.500 +364 280.000 +365 126.100 +365 200.300 +365 291.400 +367 57.600 +367 93.900 +368 56.600 +368 130.400 +368 244.600 +369 291.400 +370 201.200 +370 266.100 +372 70.600 +372 99.400 +372 245.400 +372 291.100 +373 82.000 +373 132.700 +373 164.800 +373 288.000 +374 245.100 +375 82.700 +375 99.600 +376 83.100 +377 81.600 +378 164.800 +378 218.100 +378 266.200 +379 100.400 +380 280.100 +381 92.100 +382 185.700 +382 227.200 +383 128.400 +384 101.800 +385 67.900 +385 202.800 +385 280.200 +386 164.700 +386 245.200 +387 164.600 +387 212.800 +387 219.400 +387 260.000 +388 93.100 +388 164.600 +389 187.100 +390 83.100 +390 99.500 +390 158.600 +390 165.100 +391 164.300 +391 279.400 +392 82.600 +392 115.600 +392 144.500 +392 164.900 +393 217.200 +393 279.400 +393 291.300 +394 198.500 +395 52.500 +395 117.600 +397 69.600 +397 128.500 +397 245.300 +398 54.300 +398 144.200 +398 164.700 +398 187.200 +399 67.800 +400 96.500 +400 200.500 +400 245.300 +401 71.800 +401 131.300 +402 52.300 +403 164.200 +405 106.500 +405 129.100 +405 153.400 +405 265.900 +406 81.700 +406 101.100 +406 235.800 +407 70.100 +407 102.300 +407 130.100 +407 149.900 +408 79.900 +408 140.400 +408 161.600 +408 219.400 +409 143.800 +409 291.700 +410 132.600 +411 99.500 +411 229.300 +411 265.900 +412 93.100 +412 127.300 +412 183.900 +412 288.700 +414 81.800 +415 131.500 +415 186.100 +416 201.800 +416 219.900 +416 291.000 +417 70.700 +418 81.900 +418 104.600 +419 56.600 +419 245.300 +420 117.000 +420 266.300 +421 116.600 +421 184.100 +421 219.200 +422 97.900 +422 243.800 +422 281.200 +423 164.600 +424 124.100 +424 148.900 +424 228.800 +425 55.600 +425 144.400 +425 165.000 +425 184.800 +426 151.300 +426 165.300 +426 186.400 +426 201.200 +427 92.900 +427 290.800 +428 103.800 +428 185.600 +428 228.400 +429 70.200 +429 187.000 +429 218.700 +429 244.200 +430 70.500 +430 164.700 +431 80.800 +431 198.100 +432 144.600 +433 265.700 +434 52.400 +434 202.200 +435 93.900 +435 218.100 +435 291.500 +436 163.600 +437 164.000 +437 200.100 +438 200.200 +439 93.900 +439 201.400 +439 231.100 +440 82.000 +440 164.800 +441 56.700 +441 81.500 +441 219.400 +441 289.000 +442 67.900 +442 100.300 +442 164.500 +442 291.200 +443 151.100 +443 219.200 +443 279.700 +444 144.900 +444 259.900 +444 279.500 +445 92.100 +445 164.400 +445 291.300 +446 81.300 +446 185.000 +446 289.000 +447 65.600 +447 151.200 +447 185.000 +448 278.900 +449 81.500 +449 153.500 +449 165.100 +449 215.800 +450 93.400 +450 185.000 +450 219.200 +451 219.400 +452 101.100 +453 81.400 +454 106.200 +455 69.900 +455 266.100 +456 101.800 +456 186.800 +456 217.900 +456 280.600 +457 69.500 +457 92.000 +457 144.000 +457 202.400 +457 291.300 +458 70.700 +458 93.900 +458 200.000 +459 218.300 +459 279.700 +460 117.900 +460 258.500 +461 114.900 +461 202.200 +462 81.400 +462 110.100 +462 116.700 +462 150.200 +462 164.500 +462 219.700 +463 104.200 +463 218.100 +463 261.000 +464 94.100 +464 186.700 +464 288.800 +465 163.400 +466 185.800 +466 219.300 +466 291.000 +468 67.400 +468 79.300 +469 218.200 +469 289.700 +470 101.100 +470 140.600 +470 185.400 +470 219.500 +471 101.300 +471 186.200 +472 164.400 +472 266.100 +473 93.000 +474 88.000 +474 100.800 +474 185.700 +475 127.900 +475 185.200 +476 81.500 +476 133.600 +476 146.600 +476 280.400 +477 112.800 +478 117.300 +478 151.300 +478 201.000 +479 101.500 +479 132.100 +479 186.000 +480 113.000 +480 149.800 +481 116.400 +482 50.200 +482 81.500 +483 102.200 +483 164.500 +483 236.200 +484 71.300 +484 133.500 +484 216.700 +485 218.200 +486 81.900 +486 113.800 +486 145.100 +486 164.800 +486 246.300 +486 259.000 +487 117.100 +487 262.700 +487 279.600 +488 164.700 +488 218.200 +489 117.700 +489 203.100 +489 290.700 +490 67.800 +491 117.800 +491 280.500 +492 92.400 +493 116.400 +494 126.500 +494 185.300 +495 130.800 +495 265.400 +495 288.800 +496 150.100 +496 287.400 +497 69.000 +497 92.200 +497 128.400 +498 81.500 +498 164.200 +499 56.000 +499 116.500 +499 132.400 +499 258.500 +500 92.500 +500 164.600 +503 69.900 +503 117.300 +503 128.300 +504 94.000 +504 164.700 +504 260.400 +505 150.000 +506 82.300 +506 186.100 +507 164.700 +508 128.700 +508 144.900 +509 93.800 +509 203.000 +509 265.700 +510 164.800 +511 81.300 +511 125.500 +511 165.600 +511 245.900 +512 92.600 +512 163.100 +514 70.400 +514 94.000 +514 164.500 +516 96.300 +516 200.600 +516 242.700 +516 290.800 +517 93.200 +517 132.000 +517 187.200 +517 227.000 +518 101.400 +518 117.000 +518 164.700 +518 218.800 +518 279.700 +519 117.100 +519 197.200 +519 264.900 +520 164.900 +520 289.100 +521 107.100 +521 141.800 +521 184.400 +521 227.000 +521 265.800 +522 91.300 +522 201.800 +522 266.200 +522 291.000 +523 69.700 +523 97.200 +523 129.500 +523 279.700 +523 291.800 +524 68.700 +524 82.000 +524 106.100 +524 217.100 +525 81.800 +525 100.300 +525 116.600 +525 164.300 +526 81.400 +526 219.600 +526 288.100 +527 290.800 +528 186.200 +528 290.600 +529 67.500 +529 145.200 +529 245.600 +529 290.100 +530 146.600 +530 185.400 +531 69.500 +531 114.200 +531 163.300 +531 243.900 +532 106.700 +532 164.700 +532 291.100 +533 244.400 +534 69.600 +534 100.100 +534 164.600 +534 186.200 +534 218.000 +534 244.900 +535 51.300 +535 184.600 +536 56.300 +536 145.500 +537 107.700 +538 82.000 +538 144.500 +539 164.700 +539 265.800 +541 117.000 +541 218.400 +542 93.600 +542 165.100 +543 100.900 +543 110.400 +543 164.400 +543 200.300 +544 82.100 +544 164.700 +544 279.700 +546 185.500 +547 184.700 +548 106.200 +548 164.700 +549 131.400 +549 185.800 +550 55.100 +550 116.100 +550 200.800 +551 69.300 +551 186.700 +552 199.000 +553 82.700 +553 126.700 +553 257.500 +554 55.900 +554 120.500 +554 164.400 +555 116.100 +555 164.800 +555 228.200 +555 248.200 +555 260.100 +556 164.600 +556 245.700 +557 185.400 +557 265.900 +558 65.700 +558 131.900 +559 258.100 +559 279.400 +560 57.200 +560 96.100 +560 156.600 +560 185.800 +560 244.200 +560 260.400 +561 68.100 +561 116.500 +562 184.300 +562 243.900 +563 116.200 +563 128.300 +563 164.300 +563 219.600 +564 113.600 +564 265.400 +565 101.900 +565 144.200 +567 158.300 +567 263.900 +568 80.800 +568 126.400 +569 147.000 +570 164.300 +570 218.100 +571 164.600 +573 126.100 +573 153.600 +573 217.800 +574 81.000 +574 132.700 +574 144.800 +574 185.100 +574 290.500 +575 69.600 +575 153.400 +576 132.600 +576 164.500 +576 219.300 +576 256.500 +577 164.200 +577 228.500 +577 260.100 +578 69.300 +578 164.500 +578 265.800 +580 165.100 +580 280.400 +581 68.200 +581 94.000 +581 117.500 +581 164.400 +581 218.100 +582 165.400 +582 186.900 +582 217.900 +583 163.900 +583 256.000 +584 69.300 +584 130.500 +585 164.300 +585 186.900 +585 200.200 +585 280.500 +586 201.700 +586 280.500 +587 80.000 +587 164.800 +588 102.100 +588 260.200 +589 131.800 +589 146.200 +590 81.800 +591 50.500 +591 105.500 +592 102.300 +592 114.800 +592 291.000 +593 117.600 +593 128.700 +593 187.300 +594 69.500 +594 291.700 +595 81.900 +595 164.000 +595 283.200 +596 144.300 +596 202.000 +596 266.000 +597 69.400 +597 150.500 +597 164.600 +597 198.200 +597 245.200 +598 58.300 +598 114.300 +598 164.500 +599 132.200 +599 185.600 +599 218.200 +601 93.200 +601 126.400 +602 113.800 +602 144.500 +602 244.900 +603 56.300 +603 218.300 +604 144.700 +604 187.100 +604 218.100 +605 67.000 +605 165.300 +605 244.100 +605 291.100 +606 185.400 +607 100.900 +607 218.600 +607 292.200 +608 93.000 +608 185.600 +608 288.600 +609 55.500 +609 148.400 +609 200.200 +609 219.300 +609 288.900 +610 57.600 +611 69.200 +612 164.100 +612 219.600 +613 128.000 +613 184.600 +613 244.300 +614 93.900 +614 146.600 +614 244.700 +614 265.100 +615 94.000 +615 245.600 +615 279.900 +615 291.700 +616 82.600 +616 98.400 +616 256.800 +618 153.000 +618 280.400 +619 153.300 +619 186.200 +619 228.600 +620 81.200 +620 104.700 +620 125.400 +620 220.700 +621 184.900 +622 259.000 +623 68.200 +623 131.300 +623 235.200 +624 80.700 +624 117.300 +624 219.400 +624 258.500 +624 291.300 +625 164.700 +626 69.800 +626 266.100 +627 277.600 +628 164.400 +629 78.500 +630 128.900 +630 256.500 +631 116.600 +632 164.600 +633 127.100 +633 164.700 +633 220.300 +634 81.400 +634 145.000 +634 218.500 +634 227.800 +635 153.700 +636 80.300 +636 265.800 +637 58.200 +637 81.900 +637 164.800 +637 258.900 +639 142.200 +641 131.400 +641 164.700 +641 278.800 +642 290.800 +643 67.900 +643 164.600 +643 219.500 +643 280.500 +644 107.300 +644 279.800 +645 71.000 +645 116.500 +645 164.400 +646 97.100 +646 116.000 +647 101.400 +647 144.800 +648 55.000 +648 129.900 +648 164.500 +648 291.300 +649 93.900 +649 107.500 +649 164.800 +649 246.100 +650 71.900 +650 81.700 +650 116.200 +650 281.100 +651 148.600 +652 96.000 +652 100.800 +653 131.200 +654 68.500 +654 127.000 +654 146.700 +654 219.600 +655 217.900 +655 265.100 +656 244.100 +657 52.300 +657 131.300 +657 146.400 +658 56.300 +658 280.600 +659 116.900 +659 218.900 +660 68.600 +661 107.200 +661 132.400 +661 151.000 +662 280.100 +663 57.200 +663 97.000 +663 164.900 +663 185.600 +664 151.200 +664 291.500 +665 150.000 +665 265.800 +665 281.400 +666 186.000 +666 291.800 +667 66.500 +667 95.200 +667 117.200 +667 164.700 +667 186.500 +668 55.900 +668 100.200 +669 101.500 +669 108.100 +669 131.900 +669 164.400 +669 217.700 +670 124.700 +670 184.900 +671 247.900 +672 50.300 +673 131.700 +673 164.400 +674 55.600 +674 164.500 +674 244.600 +675 102.300 +675 116.700 +675 187.200 +675 201.000 +676 202.200 +676 291.700 +677 79.300 +677 102.200 +677 202.100 +678 81.900 +678 288.000 +679 84.700 +679 144.300 +680 244.800 +680 288.600 +681 165.800 +681 186.100 +682 114.400 +682 160.000 +682 186.100 +683 165.700 +685 69.800 +685 117.600 +685 164.300 +686 288.400 +687 99.800 +687 291.300 +688 96.000 +688 118.000 +688 185.700 +688 227.400 +688 245.800 +688 280.200 +689 80.000 +690 164.200 +690 201.300 +691 81.500 +691 150.100 +691 290.600 +692 185.700 +693 83.000 +693 93.300 +693 202.700 +693 280.500 +694 164.500 +694 184.300 +694 245.700 +696 81.900 +696 101.700 +696 139.300 +698 235.200 +699 243.800 +699 290.800 +700 117.600 +701 198.400 +701 228.600 +701 291.400 +702 81.400 +702 144.400 +702 266.100 +702 282.000 +703 96.600 +703 131.900 +703 142.100 +703 201.600 +704 68.000 +704 102.200 +704 107.600 +704 218.200 +705 164.600 +705 201.400 +705 281.700 +706 82.100 +706 115.700 +708 71.100 +708 126.400 +709 82.300 +709 117.100 +710 102.400 +710 148.700 +711 92.600 +711 260.200 +711 280.100 +712 131.900 +712 185.000 +713 60.000 +713 164.900 +713 202.900 +713 219.200 +713 291.600 +714 164.000 +714 290.600 +715 244.300 +715 265.400 +715 280.400 +716 102.200 +716 153.300 +716 164.600 +716 287.300 +717 101.800 +717 256.500 +718 67.800 +718 81.800 +718 97.000 +718 291.300 +719 99.600 +719 185.800 +719 291.300 +720 54.500 +721 81.700 +721 119.800 +721 164.600 +722 106.600 +722 116.800 +723 82.500 +723 218.200 +723 291.800 +724 156.200 +724 185.200 +724 291.700 +725 82.000 +725 201.900 +726 143.300 +727 148.400 +727 227.600 +728 81.500 +728 145.000 +729 141.400 +729 158.400 +729 183.800 +729 229.800 +731 162.700 +731 201.300 +731 281.000 +732 94.000 +732 164.600 +733 56.400 +733 147.900 +734 116.700 +734 185.500 +734 217.700 +735 123.900 +735 186.000 +735 218.200 +736 163.800 +737 185.100 +738 96.300 +738 110.700 +738 144.800 +739 260.200 +740 112.400 +740 144.700 +740 217.100 +740 265.800 +741 66.200 +741 82.100 +741 187.000 +741 201.100 +741 229.600 +742 93.000 +742 280.200 +743 69.700 +743 117.100 +743 163.800 +744 69.700 +744 130.900 +744 186.100 +745 68.900 +745 99.900 +745 116.500 +745 164.700 +745 187.300 +746 218.500 +747 217.600 +747 287.800 +748 50.800 +748 99.400 +748 126.000 +748 218.000 +749 260.100 +749 291.300 +750 92.800 +750 164.600 +750 249.700 +751 147.300 +752 230.000 +752 245.400 +753 123.800 +753 186.600 +753 200.000 +753 290.900 +754 226.900 +754 266.000 +755 66.200 +755 117.400 +755 244.900 +755 291.800 +756 165.000 +756 187.100 +757 185.900 +758 116.700 +758 164.500 +758 290.700 +759 117.700 +759 185.800 +760 152.500 +760 164.200 +761 164.500 +762 96.400 +762 117.200 +762 289.000 +763 279.200 +764 290.700 +765 165.600 +766 164.600 +766 186.200 +766 266.000 +767 152.700 +767 228.200 +768 164.700 +768 265.900 +769 164.100 +770 57.400 +770 104.900 +770 116.400 +770 264.800 +770 291.500 +771 92.600 +771 202.400 +771 224.300 +772 54.400 +772 219.700 +773 100.000 +773 148.700 +773 164.500 +773 279.900 +774 218.500 +775 81.400 +775 108.300 +775 144.100 +775 165.600 +775 203.000 +776 116.200 +776 218.300 +777 106.700 +778 165.900 +779 144.600 +780 228.600 +780 287.000 +781 126.400 +781 201.700 +781 244.000 +782 67.300 +782 131.900 +782 288.700 +783 55.700 +783 95.700 +783 117.800 +783 185.100 +784 116.200 +784 218.800 +785 115.900 +785 144.400 +786 96.100 +786 256.400 +788 280.100 +789 96.200 +789 102.500 +789 186.700 +792 80.600 +792 93.100 +792 148.000 +792 186.800 +792 279.500 +793 81.700 +794 219.800 +795 107.800 +796 81.600 +796 200.300 +796 291.300 +797 144.500 +797 260.600 +798 57.200 +798 201.000 +798 277.900 +799 80.700 +799 92.900 +799 131.900 +799 235.700 +800 117.500 +800 217.200 +801 117.200 +801 132.200 +801 222.100 +801 281.100 +802 114.200 +802 201.600 +803 164.600 +803 279.400 +803 291.600 +804 69.400 +804 116.400 +804 164.900 +806 99.900 +806 164.800 +806 287.600 +807 164.700 +807 265.900 +808 130.900 +808 186.000 +809 102.400 +809 244.200 +809 291.200 +810 165.600 +810 185.200 +810 202.300 +810 217.700 +811 99.900 +811 219.700 +811 291.500 +812 164.600 +812 218.300 +812 279.700 +813 185.200 +813 243.600 +814 200.900 +814 218.000 +814 287.400 +815 80.200 +816 245.100 +817 68.400 +817 187.200 +817 217.800 +817 251.700 +818 83.000 +818 116.200 +818 219.200 +818 280.000 +819 202.200 +819 281.400 +819 290.600 +821 128.900 +821 185.100 +821 280.000 +822 94.000 +822 186.100 +822 217.900 +822 281.400 +823 92.600 +823 185.000 +823 237.400 +823 265.000 +824 116.100 +824 279.600 +826 197.200 +827 96.600 +827 164.700 +827 201.600 +827 266.200 +828 52.300 +828 108.000 +828 244.600 +829 153.500 +829 186.000 +829 264.100 +829 290.600 +830 56.800 +830 217.400 +830 280.000 +831 92.900 +831 116.300 +831 255.800 +832 186.300 +832 245.800 +833 126.200 +834 128.600 +834 164.300 +835 50.400 +835 97.000 +835 144.700 +836 114.600 +836 218.000 +837 185.300 +837 202.700 +838 117.900 +838 164.600 +838 243.800 +839 69.600 +839 163.600 +839 185.000 +839 280.600 +840 164.500 +841 117.500 +841 145.700 +842 163.700 +842 217.300 +843 123.500 +843 185.700 +844 68.000 +844 117.600 +844 164.400 +845 164.100 +845 218.200 +845 289.200 +846 117.000 +846 280.900 +847 69.400 +847 280.000 +848 102.000 +848 217.500 +849 260.100 +851 219.500 +852 57.100 +852 114.100 +852 145.200 +852 243.400 +853 58.600 +853 117.000 +853 184.200 +854 192.600 +855 186.100 +856 245.300 +858 159.600 +858 259.900 +859 102.200 +859 126.800 +859 185.800 +860 115.100 +860 185.000 +861 163.000 +863 96.700 +863 147.700 +863 266.100 +863 281.100 +864 62.400 +865 57.300 +865 185.800 +865 202.800 +867 68.600 +867 255.000 +868 69.100 +868 216.800 +869 218.100 +869 290.200 +870 69.600 +870 183.800 +870 242.800 +871 186.700 +872 144.800 +873 164.800 +873 248.400 +874 81.900 +874 117.100 +875 117.600 +875 146.000 +875 266.000 +875 290.800 +876 94.100 +876 130.100 +876 164.700 +877 114.000 +878 219.700 +878 244.700 +879 164.900 +879 219.700 +880 161.800 +880 202.500 +880 290.700 +881 114.200 +881 164.400 +882 81.700 +882 102.300 +882 127.300 +882 144.700 +883 93.500 +883 116.500 +884 127.900 +884 163.700 +885 70.700 +885 144.600 +885 243.600 +886 291.500 +887 116.300 +887 165.700 +887 219.700 +888 80.900 +888 102.200 +888 164.600 +888 202.900 +888 219.500 +888 261.700 +890 69.800 +890 80.800 +890 165.400 +890 187.300 +890 200.100 +890 289.000 +891 69.400 +891 291.800 +892 93.000 +892 116.900 +892 245.100 +892 280.100 +893 235.200 +893 291.200 +894 258.600 +895 81.700 +895 150.200 +896 70.200 +896 93.300 +896 97.900 +896 184.800 +896 218.100 +896 278.700 +897 200.200 +899 60.300 +899 218.100 diff --git a/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_9_i_pop.dat b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_9_i_pop.dat new file mode 100644 index 000000000..9056aeb88 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/alpha_0.0513_spikes_9_i_pop.dat @@ -0,0 +1,498 @@ +sender time_ms +900 106.800 +900 165.100 +900 291.600 +901 61.400 +901 245.000 +902 56.600 +902 68.600 +903 144.500 +904 96.200 +904 260.500 +906 116.600 +907 117.200 +907 291.700 +908 58.600 +908 81.100 +908 163.700 +908 291.900 +909 81.600 +909 164.600 +909 263.700 +910 62.600 +910 101.100 +910 202.100 +910 218.400 +910 280.700 +912 69.700 +912 117.500 +913 82.100 +913 185.700 +913 245.200 +913 264.900 +914 96.800 +914 187.300 +914 252.400 +914 291.600 +915 218.100 +915 291.300 +916 68.600 +916 107.800 +916 202.300 +917 82.100 +917 92.300 +917 131.400 +917 165.300 +917 217.700 +918 68.300 +918 164.400 +918 245.800 +918 265.900 +918 290.300 +919 67.400 +919 144.700 +919 164.300 +919 186.000 +919 280.100 +920 71.000 +920 144.500 +920 164.300 +920 201.600 +921 92.400 +921 164.400 +921 234.900 +921 287.200 +923 152.200 +924 164.700 +924 187.200 +926 129.400 +927 80.500 +927 117.600 +927 130.600 +928 126.700 +928 288.700 +929 93.800 +929 164.700 +930 101.400 +930 217.700 +931 70.400 +931 165.600 +931 202.100 +932 280.000 +932 291.200 +933 70.000 +934 91.000 +934 107.100 +934 164.800 +935 52.600 +935 246.700 +936 50.500 +937 54.000 +937 97.100 +937 164.500 +937 265.600 +938 117.500 +938 184.800 +938 279.800 +939 55.400 +939 81.900 +939 102.200 +940 128.500 +940 164.400 +940 218.800 +940 279.800 +941 70.600 +941 132.100 +942 102.600 +942 163.600 +943 62.700 +943 105.800 +943 185.400 +943 219.600 +943 279.900 +944 279.300 +946 201.600 +948 51.800 +948 93.700 +948 127.900 +948 164.500 +948 212.900 +948 291.700 +950 68.600 +951 81.000 +951 121.600 +952 101.200 +952 127.200 +952 164.800 +952 235.300 +953 117.200 +953 151.100 +953 217.900 +953 290.700 +954 200.300 +955 96.000 +955 185.700 +955 291.100 +956 81.700 +956 126.400 +957 117.900 +957 152.000 +957 291.400 +958 164.200 +958 187.100 +959 101.100 +959 164.700 +959 227.600 +960 164.600 +960 218.100 +961 99.900 +961 144.900 +961 264.300 +962 227.400 +962 279.500 +963 69.700 +963 100.900 +964 57.500 +965 164.500 +965 223.100 +967 92.800 +967 132.700 +967 251.200 +968 96.800 +968 164.600 +969 114.400 +969 164.500 +969 255.700 +970 164.700 +971 68.200 +971 130.300 +972 105.400 +973 202.800 +973 280.700 +974 141.600 +974 219.200 +975 61.700 +975 81.600 +975 130.400 +975 143.400 +975 186.100 +975 202.000 +975 219.700 +976 82.100 +976 144.200 +977 70.800 +978 218.300 +980 151.300 +980 201.900 +980 254.900 +981 149.100 +982 164.700 +983 201.500 +983 264.300 +985 92.800 +985 291.400 +986 80.000 +986 106.900 +987 150.000 +987 159.200 +987 279.700 +988 57.300 +988 147.700 +988 163.400 +988 185.500 +989 56.700 +989 108.300 +989 117.700 +989 161.300 +990 80.100 +990 93.200 +990 247.400 +991 93.400 +991 217.300 +991 264.700 +992 70.600 +993 200.500 +994 68.300 +994 185.700 +994 265.800 +996 259.000 +997 57.400 +997 218.200 +998 67.700 +998 132.400 +998 164.400 +998 243.900 +998 260.400 +999 85.200 +999 93.100 +999 185.600 +999 266.600 +1000 219.600 +1001 186.200 +1002 116.600 +1002 133.100 +1002 186.600 +1002 280.100 +1003 185.600 +1003 219.600 +1004 81.900 +1004 115.800 +1005 129.200 +1005 260.000 +1006 102.100 +1006 164.300 +1006 202.900 +1007 144.400 +1007 217.500 +1008 140.500 +1010 117.900 +1010 217.700 +1011 55.400 +1011 150.200 +1011 279.800 +1012 159.500 +1012 201.700 +1012 285.300 +1013 101.600 +1013 126.400 +1013 219.600 +1014 117.300 +1015 141.100 +1015 164.200 +1015 213.000 +1016 66.300 +1016 201.900 +1017 93.700 +1017 163.500 +1018 164.300 +1019 184.200 +1020 82.000 +1020 100.600 +1020 187.100 +1020 219.000 +1021 185.900 +1022 93.500 +1022 217.900 +1023 132.900 +1023 200.600 +1026 106.500 +1026 245.100 +1027 100.900 +1027 164.800 +1028 68.200 +1028 101.300 +1028 146.200 +1028 227.600 +1029 126.800 +1029 185.900 +1029 265.400 +1030 292.000 +1031 57.400 +1031 93.100 +1031 145.000 +1031 201.100 +1031 288.700 +1032 185.600 +1033 87.500 +1033 159.000 +1033 164.500 +1034 124.000 +1034 144.500 +1034 186.900 +1034 245.400 +1034 259.900 +1036 164.200 +1036 291.500 +1037 58.500 +1039 202.100 +1040 82.200 +1040 123.500 +1040 164.300 +1040 216.900 +1040 265.300 +1041 93.900 +1041 127.100 +1042 81.600 +1042 256.700 +1043 289.100 +1044 56.000 +1044 92.800 +1044 147.700 +1044 227.900 +1045 186.100 +1045 218.300 +1045 256.200 +1046 127.400 +1046 201.700 +1046 246.900 +1046 260.100 +1047 164.500 +1047 186.800 +1047 265.700 +1048 163.700 +1049 100.200 +1049 164.600 +1049 217.900 +1050 244.400 +1051 185.000 +1051 243.800 +1051 280.800 +1052 56.100 +1052 81.900 +1052 260.200 +1053 277.400 +1054 164.600 +1055 92.700 +1055 108.900 +1055 161.700 +1055 265.600 +1056 107.300 +1056 219.400 +1056 290.700 +1057 78.800 +1057 141.000 +1057 185.800 +1058 70.100 +1058 131.000 +1058 159.000 +1058 217.100 +1059 81.800 +1059 202.200 +1059 244.400 +1060 116.500 +1060 185.800 +1060 280.000 +1062 57.500 +1062 82.600 +1062 245.500 +1062 266.100 +1063 157.100 +1064 185.800 +1065 58.100 +1065 88.100 +1065 153.300 +1065 201.600 +1068 127.900 +1068 291.100 +1069 290.500 +1070 146.300 +1071 81.100 +1071 102.400 +1072 223.100 +1073 184.700 +1073 201.100 +1073 290.200 +1074 164.500 +1075 96.500 +1076 80.500 +1076 291.600 +1079 55.300 +1079 218.100 +1080 185.300 +1080 226.300 +1080 291.800 +1081 164.500 +1081 186.300 +1081 246.800 +1081 290.600 +1082 81.800 +1083 70.100 +1083 164.500 +1084 67.500 +1084 117.900 +1084 133.900 +1084 144.900 +1085 81.900 +1085 98.500 +1085 201.800 +1085 245.500 +1085 266.000 +1086 263.700 +1087 117.300 +1087 201.100 +1088 81.600 +1088 164.300 +1088 215.400 +1088 290.900 +1089 60.900 +1089 92.500 +1089 116.500 +1089 160.400 +1089 186.100 +1089 218.600 +1089 253.500 +1090 117.200 +1090 145.100 +1090 164.600 +1091 186.500 +1091 266.000 +1092 164.300 +1092 219.000 +1092 255.200 +1092 266.000 +1093 289.400 +1094 81.000 +1094 266.000 +1095 144.700 +1095 279.600 +1096 56.100 +1096 258.500 +1097 231.100 +1097 245.700 +1098 101.200 +1098 116.700 +1098 164.500 +1098 265.700 +1099 92.900 +1099 131.600 +1099 147.200 +1100 96.400 +1100 108.800 +1100 219.600 +1100 278.600 +1101 61.600 +1101 229.600 +1102 164.100 +1103 96.400 +1103 159.000 +1104 69.500 +1104 164.500 +1104 235.400 +1106 260.000 +1107 201.700 +1107 266.000 +1108 92.500 +1109 92.700 +1109 289.700 +1110 128.000 +1110 165.300 +1112 260.100 +1113 218.200 +1113 290.300 +1114 290.300 +1115 141.100 +1115 217.900 +1115 291.500 +1116 56.300 +1116 144.300 +1116 201.400 +1116 227.100 +1117 185.900 +1117 291.200 +1118 126.200 +1118 151.400 +1118 185.700 +1118 219.600 +1119 83.300 +1119 114.200 +1119 164.400 +1119 245.500 +1120 259.400 +1120 281.300 +1121 55.400 +1121 243.400 +1122 203.000 +1122 218.100 +1123 101.900 +1124 128.500 +1124 164.600 diff --git a/python/tests/hpc_benchmark/data_check/log_0.json b/python/tests/hpc_benchmark/data_check/log_0.json new file mode 100644 index 000000000..fb1b05a6a --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_0.json @@ -0,0 +1,102 @@ +{ + "rank": 0, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_0", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31613223, + "time_connect_local": 3761238, + "time_connect_remote": 316813818, + "time_connect": 320575056, + "time_initialize": 86765, + "time_construct": 352194962, + "time_calibrate": 334442748, + "time_presimulate": 1204873834, + "time_simulate": 5726509675, + "time_total": 7618107984 + }, + "stats": { + "excitatory_firing_rate": 9.342222222222222, + "inhibitory_firing_rate": 9.12 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_1.json b/python/tests/hpc_benchmark/data_check/log_1.json new file mode 100644 index 000000000..64a252db3 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_1.json @@ -0,0 +1,102 @@ +{ + "rank": 1, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_1", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31975062, + "time_connect_local": 3778350, + "time_connect_remote": 317331594, + "time_connect": 321109944, + "time_initialize": 76406, + "time_construct": 353094153, + "time_calibrate": 343550591, + "time_presimulate": 1194583060, + "time_simulate": 5726818433, + "time_total": 7618122643 + }, + "stats": { + "excitatory_firing_rate": 9.453333333333333, + "inhibitory_firing_rate": 9.262222222222222 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_2.json b/python/tests/hpc_benchmark/data_check/log_2.json new file mode 100644 index 000000000..31a47aaa7 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_2.json @@ -0,0 +1,102 @@ +{ + "rank": 2, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_2", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 32596865, + "time_connect_local": 3278580, + "time_connect_remote": 316708147, + "time_connect": 319986727, + "time_initialize": 90462, + "time_construct": 352590755, + "time_calibrate": 344172184, + "time_presimulate": 1194603459, + "time_simulate": 5726738020, + "time_total": 7618194880 + }, + "stats": { + "excitatory_firing_rate": 9.488888888888889, + "inhibitory_firing_rate": 9.564444444444446 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_3.json b/python/tests/hpc_benchmark/data_check/log_3.json new file mode 100644 index 000000000..a584169c3 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_3.json @@ -0,0 +1,102 @@ +{ + "rank": 3, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_3", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31838221, + "time_connect_local": 3861549, + "time_connect_remote": 317274144, + "time_connect": 321135693, + "time_initialize": 98247, + "time_construct": 352980237, + "time_calibrate": 343629040, + "time_presimulate": 1195168845, + "time_simulate": 5726300557, + "time_total": 7618176926 + }, + "stats": { + "excitatory_firing_rate": 9.346666666666666, + "inhibitory_firing_rate": 9.582222222222223 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_4.json b/python/tests/hpc_benchmark/data_check/log_4.json new file mode 100644 index 000000000..f995393cb --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_4.json @@ -0,0 +1,102 @@ +{ + "rank": 4, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_4", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 33400605, + "time_connect_local": 5581843, + "time_connect_remote": 314209952, + "time_connect": 319791795, + "time_initialize": 84671, + "time_construct": 353199554, + "time_calibrate": 337472464, + "time_presimulate": 1200741730, + "time_simulate": 5726654291, + "time_total": 7618152710 + }, + "stats": { + "excitatory_firing_rate": 8.813333333333333, + "inhibitory_firing_rate": 9.404444444444444 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_5.json b/python/tests/hpc_benchmark/data_check/log_5.json new file mode 100644 index 000000000..2e431a20e --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_5.json @@ -0,0 +1,102 @@ +{ + "rank": 5, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_5", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31681944, + "time_connect_local": 3862371, + "time_connect_remote": 316668441, + "time_connect": 320530812, + "time_initialize": 84140, + "time_construct": 352219629, + "time_calibrate": 344249191, + "time_presimulate": 1195174355, + "time_simulate": 5726401610, + "time_total": 7618128925 + }, + "stats": { + "excitatory_firing_rate": 8.96888888888889, + "inhibitory_firing_rate": 8.87111111111111 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_6.json b/python/tests/hpc_benchmark/data_check/log_6.json new file mode 100644 index 000000000..3b999ea64 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_6.json @@ -0,0 +1,102 @@ +{ + "rank": 6, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_6", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 32977940, + "time_connect_local": 2967587, + "time_connect_remote": 316595203, + "time_connect": 319562790, + "time_initialize": 89891, + "time_construct": 352548084, + "time_calibrate": 344272415, + "time_presimulate": 1194577459, + "time_simulate": 5726719264, + "time_total": 7618207113 + }, + "stats": { + "excitatory_firing_rate": 9.248888888888889, + "inhibitory_firing_rate": 9.333333333333334 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_7.json b/python/tests/hpc_benchmark/data_check/log_7.json new file mode 100644 index 000000000..ed19d4dc5 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_7.json @@ -0,0 +1,102 @@ +{ + "rank": 7, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_7", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31618733, + "time_connect_local": 3728326, + "time_connect_remote": 316650467, + "time_connect": 320378793, + "time_initialize": 82176, + "time_construct": 352004419, + "time_calibrate": 344904247, + "time_presimulate": 1194569605, + "time_simulate": 5726600999, + "time_total": 7618161446 + }, + "stats": { + "excitatory_firing_rate": 9.413333333333332, + "inhibitory_firing_rate": 9.724444444444446 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_8.json b/python/tests/hpc_benchmark/data_check/log_8.json new file mode 100644 index 000000000..981fe0ebb --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_8.json @@ -0,0 +1,102 @@ +{ + "rank": 8, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_8", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31731919, + "time_connect_local": 3840960, + "time_connect_remote": 316560475, + "time_connect": 320401435, + "time_initialize": 91133, + "time_construct": 352144155, + "time_calibrate": 344921540, + "time_presimulate": 1194569274, + "time_simulate": 5726468437, + "time_total": 7618194539 + }, + "stats": { + "excitatory_firing_rate": 9.297777777777778, + "inhibitory_firing_rate": 9.102222222222222 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/log_9.json b/python/tests/hpc_benchmark/data_check/log_9.json new file mode 100644 index 000000000..e5326b77f --- /dev/null +++ b/python/tests/hpc_benchmark/data_check/log_9.json @@ -0,0 +1,102 @@ +{ + "rank": 9, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_9", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31853239, + "time_connect_local": 3788440, + "time_connect_remote": 317722929, + "time_connect": 321511369, + "time_initialize": 91544, + "time_construct": 353370920, + "time_calibrate": 343190014, + "time_presimulate": 1195164307, + "time_simulate": 5726355341, + "time_total": 7618172126 + }, + "stats": { + "excitatory_firing_rate": 9.2, + "inhibitory_firing_rate": 8.835555555555555 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check/raster_plot0.png b/python/tests/hpc_benchmark/data_check/raster_plot0.png new file mode 100644 index 000000000..4a9ac5534 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot0.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot1.png b/python/tests/hpc_benchmark/data_check/raster_plot1.png new file mode 100644 index 000000000..d54c3ed09 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot1.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot2.png b/python/tests/hpc_benchmark/data_check/raster_plot2.png new file mode 100644 index 000000000..e635cbf0b Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot2.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot3.png b/python/tests/hpc_benchmark/data_check/raster_plot3.png new file mode 100644 index 000000000..d637cf63a Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot3.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot4.png b/python/tests/hpc_benchmark/data_check/raster_plot4.png new file mode 100644 index 000000000..b7d6d2cc4 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot4.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot5.png b/python/tests/hpc_benchmark/data_check/raster_plot5.png new file mode 100644 index 000000000..961e98e58 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot5.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot6.png b/python/tests/hpc_benchmark/data_check/raster_plot6.png new file mode 100644 index 000000000..50fe30ca4 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot6.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot7.png b/python/tests/hpc_benchmark/data_check/raster_plot7.png new file mode 100644 index 000000000..645945a8d Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot7.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot8.png b/python/tests/hpc_benchmark/data_check/raster_plot8.png new file mode 100644 index 000000000..6a87997a9 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot8.png differ diff --git a/python/tests/hpc_benchmark/data_check/raster_plot9.png b/python/tests/hpc_benchmark/data_check/raster_plot9.png new file mode 100644 index 000000000..211a3b4e1 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check/raster_plot9.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_0_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_0_e_pop.dat new file mode 100644 index 000000000..b07d43034 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_0_e_pop.dat @@ -0,0 +1,2282 @@ +sender time_ms +0 175.500 +1 124.300 +1 158.300 +1 173.400 +1 245.800 +2 175.600 +3 174.300 +3 265.600 +4 197.200 +4 244.900 +4 265.100 +5 123.500 +5 247.700 +6 174.600 +7 172.100 +7 287.100 +8 174.200 +8 218.200 +8 230.700 +9 197.000 +9 247.700 +9 287.700 +10 110.700 +10 153.500 +10 246.600 +11 57.200 +11 111.100 +11 152.700 +11 173.700 +13 247.000 +14 173.500 +14 245.100 +16 84.100 +16 109.400 +16 247.900 +17 246.200 +18 175.500 +18 267.500 +19 171.700 +19 247.400 +20 174.700 +20 216.600 +21 197.800 +21 289.400 +22 128.300 +22 144.200 +22 173.600 +22 244.300 +22 265.400 +23 144.600 +23 246.100 +24 173.900 +24 245.200 +25 133.200 +25 173.200 +25 265.000 +27 83.400 +27 247.000 +28 174.500 +29 70.200 +29 130.200 +29 155.500 +29 175.700 +30 157.300 +30 175.300 +30 198.200 +30 245.300 +30 267.200 +31 174.200 +31 187.500 +31 215.300 +32 175.200 +32 265.100 +32 282.100 +33 172.000 +33 193.700 +33 263.200 +34 175.000 +34 213.600 +34 266.900 +35 173.600 +35 247.400 +36 174.900 +36 190.400 +36 241.700 +37 159.400 +37 175.300 +37 217.400 +37 246.300 +38 283.600 +39 123.800 +39 158.000 +39 174.800 +39 247.300 +40 158.200 +40 174.800 +40 188.500 +41 157.600 +41 174.700 +41 247.100 +42 108.000 +43 124.000 +43 181.200 +43 263.500 +44 59.500 +44 158.200 +44 174.000 +44 263.400 +45 108.200 +45 173.400 +45 231.900 +46 159.200 +46 201.400 +46 247.300 +47 264.000 +48 123.400 +48 143.400 +48 174.400 +49 134.300 +49 144.400 +49 174.400 +49 267.100 +50 174.000 +50 188.500 +51 173.800 +51 284.100 +52 174.300 +52 240.600 +53 174.200 +53 246.800 +54 108.100 +54 173.400 +54 183.900 +55 97.000 +55 158.200 +55 246.100 +56 174.500 +56 213.500 +56 238.200 +56 247.400 +58 172.200 +58 247.900 +60 135.200 +60 174.200 +60 203.800 +60 229.800 +60 247.000 +61 174.600 +61 247.700 +62 265.200 +63 108.400 +63 247.300 +63 266.900 +64 97.300 +64 157.400 +64 175.000 +64 246.500 +65 174.700 +66 53.400 +66 124.300 +66 174.400 +67 94.900 +67 174.200 +67 244.500 +67 269.300 +68 172.300 +68 211.700 +68 247.100 +69 174.800 +69 246.900 +70 247.500 +71 58.300 +71 157.800 +71 174.200 +71 184.400 +71 244.700 +71 265.100 +72 248.300 +73 173.700 +74 107.800 +74 247.600 +75 171.500 +75 182.800 +75 247.500 +75 296.900 +76 174.700 +77 158.400 +78 95.400 +78 174.500 +78 247.500 +79 158.000 +80 174.100 +80 188.100 +81 187.600 +82 108.000 +82 217.100 +82 263.300 +83 173.100 +84 99.000 +84 110.600 +84 176.200 +84 265.000 +85 158.300 +85 174.100 +85 246.400 +86 175.200 +86 231.300 +86 247.100 +87 247.600 +88 175.300 +88 218.400 +88 247.000 +88 267.600 +89 158.000 +89 174.600 +89 264.500 +90 157.200 +90 175.800 +92 69.300 +92 95.600 +92 174.300 +92 187.300 +92 232.400 +92 247.000 +92 288.600 +94 71.000 +94 174.400 +94 243.600 +95 155.700 +95 175.000 +96 158.400 +96 175.000 +96 216.600 +96 247.700 +97 156.900 +97 176.000 +97 247.000 +98 123.500 +98 171.800 +98 279.400 +99 247.100 +99 287.900 +100 174.300 +100 247.000 +100 279.100 +101 83.300 +101 155.200 +101 247.100 +101 267.000 +103 171.900 +103 197.300 +103 247.100 +103 299.300 +104 173.100 +104 216.300 +104 247.100 +105 174.400 +106 174.700 +106 265.400 +107 198.000 +107 247.900 +108 60.500 +108 145.000 +108 158.100 +108 174.100 +108 247.100 +109 83.100 +109 144.400 +109 173.800 +109 265.200 +109 282.400 +110 73.400 +110 187.400 +110 217.700 +111 174.600 +111 243.900 +112 69.100 +112 107.600 +112 157.700 +113 144.800 +113 173.900 +113 247.100 +114 174.000 +114 216.500 +115 80.300 +115 157.500 +115 174.800 +115 187.100 +115 247.300 +115 278.400 +116 122.400 +116 158.100 +116 174.900 +116 267.700 +117 185.100 +118 124.000 +118 145.000 +118 174.300 +118 238.500 +118 267.400 +119 157.700 +119 174.200 +121 60.400 +121 144.900 +121 174.100 +121 262.800 +122 215.700 +122 247.600 +123 188.600 +123 247.600 +124 144.400 +124 175.000 +124 265.400 +125 61.000 +125 81.300 +125 124.100 +125 157.400 +125 174.300 +126 183.700 +127 95.300 +127 173.200 +128 264.300 +129 96.700 +129 158.300 +129 175.800 +130 244.600 +130 287.600 +131 58.700 +131 156.800 +131 174.800 +131 246.100 +131 267.400 +132 174.700 +132 246.500 +132 265.900 +133 265.200 +134 59.700 +134 159.300 +134 278.600 +135 81.900 +135 123.300 +135 246.800 +135 276.400 +136 247.300 +137 110.900 +137 247.500 +138 175.100 +138 288.600 +139 81.800 +139 174.700 +139 188.000 +139 231.800 +139 247.100 +140 69.400 +140 172.800 +140 216.200 +141 247.800 +142 108.300 +142 133.300 +142 158.300 +142 185.300 +142 287.800 +143 143.000 +143 247.400 +143 283.800 +144 246.500 +145 265.000 +146 174.300 +146 247.800 +147 152.300 +147 181.600 +148 133.200 +148 173.900 +148 279.400 +148 288.900 +149 145.100 +150 110.800 +150 171.100 +150 187.900 +150 231.100 +151 158.000 +151 198.200 +151 243.900 +151 286.800 +152 73.000 +152 124.400 +152 158.100 +152 192.100 +152 265.700 +153 159.400 +153 188.000 +155 265.800 +156 177.000 +156 184.000 +156 243.900 +156 265.300 +157 57.400 +157 170.900 +158 96.900 +158 157.900 +158 176.000 +158 186.400 +158 216.300 +158 243.300 +159 123.800 +159 174.800 +159 265.400 +160 83.100 +160 96.600 +160 144.900 +160 174.300 +160 185.500 +160 226.200 +160 244.400 +161 58.000 +161 174.300 +161 247.500 +162 267.200 +165 174.000 +165 203.200 +165 217.200 +166 174.500 +166 232.200 +167 174.100 +167 265.800 +168 174.700 +168 265.000 +169 95.100 +169 111.200 +169 174.500 +169 246.500 +169 267.200 +170 172.700 +170 265.400 +171 109.500 +171 247.000 +172 82.400 +172 145.100 +172 157.800 +172 173.500 +172 246.800 +173 246.800 +174 158.100 +174 231.900 +174 246.900 +174 296.700 +175 113.500 +175 158.300 +175 183.600 +176 266.900 +177 95.400 +177 158.100 +177 243.900 +178 123.000 +178 154.600 +178 173.700 +178 203.000 +178 247.400 +179 171.800 +180 173.500 +180 246.500 +181 144.500 +181 158.400 +181 183.900 +181 247.300 +182 185.200 +183 158.000 +183 174.700 +183 248.100 +183 266.700 +184 83.600 +184 176.100 +185 158.100 +186 174.300 +186 247.400 +187 184.300 +187 246.600 +187 265.500 +188 158.100 +189 82.600 +189 157.700 +189 197.500 +189 247.500 +190 158.200 +190 174.200 +190 241.000 +190 278.700 +191 248.100 +192 105.600 +192 174.700 +193 159.200 +193 247.000 +193 265.700 +194 173.700 +194 247.100 +195 176.000 +195 217.500 +195 264.900 +196 244.000 +197 122.300 +197 144.500 +197 195.000 +197 246.900 +198 158.400 +198 247.800 +199 183.000 +199 282.100 +200 108.200 +200 159.300 +200 282.200 +201 83.100 +201 245.800 +202 158.100 +202 176.200 +203 175.600 +203 194.800 +204 174.000 +205 57.300 +205 193.400 +205 217.100 +206 187.700 +206 247.000 +206 287.400 +207 266.900 +208 58.100 +208 144.900 +208 172.800 +208 216.600 +208 265.300 +209 68.700 +209 159.200 +209 217.400 +209 247.100 +210 144.500 +210 246.300 +211 174.500 +212 174.600 +213 144.900 +213 174.500 +213 246.800 +214 158.600 +214 265.500 +215 158.300 +216 243.700 +217 159.400 +217 247.400 +218 247.300 +219 267.000 +220 157.700 +220 194.900 +220 247.600 +221 72.800 +221 173.700 +221 246.600 +221 267.400 +222 174.100 +222 247.500 +223 171.900 +223 197.000 +223 289.700 +224 124.600 +224 145.000 +224 174.700 +224 247.000 +225 82.500 +225 195.000 +225 267.400 +226 176.000 +226 246.200 +227 174.200 +227 298.400 +228 175.400 +228 247.600 +229 53.200 +229 173.500 +229 263.900 +229 287.800 +230 187.700 +230 246.600 +230 267.200 +231 174.500 +232 144.100 +232 174.100 +232 247.100 +233 72.100 +233 158.200 +233 247.300 +234 159.100 +234 286.800 +235 157.600 +235 247.300 +236 143.800 +236 157.900 +236 173.900 +237 241.800 +237 268.600 +238 96.000 +238 173.700 +238 247.000 +238 267.200 +240 158.200 +240 183.600 +240 195.000 +240 247.400 +241 83.100 +241 172.400 +243 174.400 +243 266.900 +245 158.000 +245 175.900 +245 265.200 +246 83.000 +246 123.300 +246 134.600 +246 174.300 +246 247.400 +247 83.400 +247 174.100 +247 247.100 +247 265.500 +248 247.300 +249 109.500 +249 174.000 +249 246.700 +250 182.100 +251 142.800 +251 174.100 +252 174.600 +252 247.400 +252 286.800 +253 153.900 +253 181.000 +253 247.000 +253 264.900 +254 247.000 +254 267.500 +255 72.700 +255 176.000 +255 247.300 +255 267.400 +256 172.100 +256 247.300 +257 155.900 +257 174.100 +258 58.100 +258 123.000 +258 143.800 +258 159.200 +258 173.200 +258 278.300 +259 174.300 +259 274.600 +260 70.300 +260 174.300 +261 82.900 +261 157.600 +261 247.700 +262 109.400 +262 157.600 +262 173.600 +263 159.400 +263 247.500 +263 265.000 +264 159.300 +264 231.400 +265 264.800 +266 144.500 +266 175.700 +267 184.200 +267 247.100 +268 108.700 +269 157.700 +269 174.300 +269 247.400 +270 174.600 +270 267.200 +271 158.000 +271 246.600 +272 174.400 +273 83.300 +273 124.000 +273 145.000 +273 173.100 +273 245.700 +274 157.400 +274 269.100 +275 173.600 +275 189.000 +275 247.500 +276 217.300 +277 174.500 +277 279.300 +279 174.200 +279 188.000 +279 244.700 +279 266.800 +280 123.500 +280 174.600 +280 288.500 +281 174.700 +282 82.400 +282 97.100 +282 133.400 +282 144.500 +282 174.400 +282 247.600 +283 124.300 +283 156.100 +283 247.600 +284 174.800 +285 174.800 +285 187.900 +285 246.900 +286 71.900 +286 97.200 +286 144.900 +286 157.900 +286 247.600 +286 286.000 +287 97.300 +287 172.500 +287 246.100 +288 174.400 +288 193.900 +288 218.500 +288 246.900 +289 157.200 +289 266.900 +290 109.100 +290 134.300 +290 159.000 +290 265.000 +291 157.900 +291 265.000 +292 174.900 +292 247.400 +293 174.100 +294 175.700 +294 247.000 +295 83.500 +295 174.300 +295 244.300 +295 265.500 +296 84.000 +296 174.300 +296 267.400 +297 196.900 +297 246.700 +297 287.400 +298 173.300 +298 247.600 +299 56.800 +299 123.000 +299 157.100 +299 181.800 +299 244.600 +300 58.800 +300 175.400 +300 247.100 +300 265.300 +301 57.900 +301 143.300 +301 173.600 +301 246.600 +302 95.500 +302 174.200 +302 204.800 +302 263.200 +303 159.400 +304 157.000 +304 246.900 +304 287.100 +305 247.000 +306 159.400 +306 247.000 +307 83.900 +307 217.700 +307 296.900 +308 83.500 +308 157.700 +308 277.700 +309 82.800 +309 105.200 +309 158.000 +309 187.200 +309 216.100 +309 247.500 +310 174.700 +310 247.600 +311 172.000 +312 68.200 +312 107.500 +312 174.200 +312 247.900 +312 267.100 +313 267.600 +314 145.200 +314 159.000 +314 174.500 +314 247.700 +315 175.000 +316 262.700 +318 124.400 +318 158.600 +318 173.900 +318 264.900 +320 173.900 +321 82.900 +321 174.500 +322 174.900 +322 247.100 +323 132.500 +323 174.700 +323 247.200 +324 70.800 +324 157.800 +325 176.100 +325 247.700 +326 158.100 +326 176.100 +326 264.000 +327 158.300 +327 174.300 +327 231.700 +327 246.600 +328 158.000 +328 175.800 +328 187.800 +328 247.600 +329 174.600 +329 267.100 +330 173.600 +330 232.100 +331 81.200 +331 133.300 +331 269.000 +332 174.300 +332 266.900 +333 158.100 +333 246.200 +333 265.000 +334 175.000 +334 270.000 +335 173.400 +335 217.000 +336 96.700 +336 174.200 +337 70.600 +337 108.800 +337 157.600 +337 172.900 +337 245.200 +338 124.400 +338 143.500 +338 159.400 +338 247.400 +338 288.400 +339 157.000 +340 174.400 +340 247.600 +341 83.500 +341 122.300 +341 174.400 +341 216.600 +341 246.400 +342 171.600 +342 215.300 +343 123.100 +343 158.100 +344 97.200 +344 153.200 +344 190.000 +344 239.100 +345 57.000 +345 123.700 +345 144.300 +345 174.500 +345 244.400 +346 83.500 +346 174.800 +346 246.000 +347 109.700 +348 157.700 +348 247.500 +349 157.800 +349 176.000 +349 231.500 +349 247.600 +350 109.500 +350 123.300 +350 155.400 +350 172.900 +350 218.600 +351 187.600 +351 216.500 +351 232.000 +352 173.900 +352 265.200 +353 83.400 +353 123.700 +353 158.000 +353 174.800 +353 195.200 +353 245.300 +354 174.700 +355 114.000 +355 173.900 +356 246.500 +357 174.200 +357 195.200 +358 159.300 +358 180.100 +358 247.500 +358 281.900 +359 124.300 +359 245.200 +360 173.500 +360 288.400 +361 58.100 +361 174.300 +361 230.300 +361 247.300 +362 120.900 +362 176.200 +362 225.700 +363 172.100 +363 247.100 +364 263.100 +364 277.900 +365 144.600 +365 172.800 +365 185.100 +365 197.500 +365 267.300 +366 96.700 +366 174.500 +366 246.500 +367 174.900 +367 266.900 +368 156.200 +368 182.200 +368 245.500 +369 158.500 +369 176.000 +370 69.800 +370 174.600 +371 58.100 +371 157.300 +371 174.200 +372 157.600 +372 174.100 +372 247.100 +373 196.100 +373 246.800 +374 58.100 +374 174.300 +374 267.200 +375 158.000 +375 174.600 +376 185.100 +376 244.700 +376 269.100 +377 157.800 +377 244.000 +378 157.800 +379 69.300 +379 157.700 +380 82.600 +380 174.400 +382 158.900 +382 215.500 +383 83.500 +383 152.400 +383 174.200 +384 158.400 +384 171.800 +385 174.900 +385 265.300 +386 174.500 +386 266.900 +387 109.800 +387 194.200 +388 156.800 +388 173.700 +388 268.500 +389 158.200 +389 187.500 +389 267.800 +390 156.200 +390 175.500 +390 247.400 +392 173.400 +392 187.700 +392 244.200 +394 158.200 +395 158.200 +396 57.800 +396 123.300 +396 174.600 +396 247.200 +396 267.100 +397 187.800 +397 265.800 +398 124.000 +398 157.700 +398 183.300 +398 217.700 +398 247.400 +400 97.000 +400 157.700 +400 175.300 +400 247.700 +400 267.400 +401 143.100 +401 267.000 +402 96.900 +403 157.500 +403 246.100 +403 284.700 +404 83.200 +404 247.700 +405 174.400 +405 197.600 +405 247.400 +406 144.500 +407 246.900 +408 57.800 +408 124.100 +408 159.300 +408 175.700 +408 267.500 +409 197.300 +409 246.500 +410 174.400 +410 226.500 +410 244.000 +411 174.600 +412 58.700 +412 240.300 +413 171.600 +413 246.200 +413 267.600 +414 174.400 +414 217.400 +414 246.500 +415 173.800 +415 246.600 +415 267.100 +416 175.400 +416 247.900 +416 287.500 +417 197.300 +417 267.100 +418 174.400 +418 246.300 +419 173.200 +419 215.200 +419 231.200 +419 247.400 +420 158.200 +420 217.100 +421 174.400 +421 287.800 +422 173.000 +422 187.700 +423 174.200 +423 217.100 +424 175.700 +424 247.500 +425 145.400 +425 187.500 +425 247.500 +426 174.100 +426 245.800 +427 114.200 +427 156.900 +427 174.800 +427 217.700 +427 231.200 +427 265.300 +428 193.900 +429 175.900 +429 264.400 +430 58.500 +430 174.700 +430 246.900 +431 123.100 +431 157.700 +431 185.400 +432 158.100 +432 247.300 +433 175.400 +433 247.200 +434 216.200 +434 247.500 +435 185.600 +435 246.800 +436 123.300 +436 246.700 +436 267.200 +437 109.400 +437 173.100 +437 233.200 +437 247.100 +437 289.300 +438 174.000 +438 190.200 +438 248.300 +439 174.800 +439 247.900 +439 265.000 +440 97.000 +440 173.900 +440 217.400 +440 246.500 +440 289.300 +441 174.400 +441 184.700 +441 217.300 +441 247.600 +442 158.000 +442 247.600 +443 82.900 +443 173.600 +443 247.600 +444 186.200 +444 264.700 +445 174.300 +445 216.800 +445 248.000 +446 263.400 +447 175.900 +448 110.600 +448 174.200 +448 187.600 +449 157.300 +449 175.800 +449 287.700 +450 110.700 +450 155.100 +450 174.900 +450 266.700 +451 159.000 +451 246.700 +453 173.000 +453 248.100 +453 267.000 +454 58.600 +454 124.400 +454 158.100 +454 183.700 +454 247.300 +454 265.800 +455 84.200 +455 158.200 +455 173.700 +455 247.400 +456 58.100 +456 97.000 +456 173.800 +456 247.100 +457 158.200 +457 174.500 +459 97.100 +459 157.500 +459 186.000 +459 240.600 +460 78.800 +460 267.600 +461 123.600 +461 158.000 +461 186.900 +461 218.400 +461 265.200 +462 123.800 +462 158.000 +462 232.200 +463 157.500 +464 175.400 +465 267.500 +466 173.800 +466 247.600 +466 267.500 +467 59.500 +467 247.300 +468 187.900 +468 247.300 +468 287.000 +469 95.900 +469 175.700 +469 247.000 +470 174.400 +470 216.000 +470 266.000 +471 70.200 +471 109.400 +471 158.400 +471 174.700 +471 247.600 +471 269.200 +471 275.200 +472 122.600 +473 83.900 +473 97.400 +473 123.200 +473 144.400 +473 246.700 +474 155.600 +475 197.000 +475 246.200 +475 283.800 +476 172.700 +477 123.200 +477 157.900 +479 176.100 +479 278.600 +480 158.500 +481 264.900 +482 183.100 +482 187.800 +483 179.700 +483 202.700 +484 97.400 +484 123.500 +484 157.800 +484 175.600 +484 247.100 +484 277.600 +485 123.100 +485 157.900 +485 194.400 +485 246.900 +486 157.700 +486 174.400 +486 247.900 +487 246.800 +488 110.600 +488 123.200 +488 174.700 +488 217.300 +489 157.300 +489 185.900 +489 240.900 +490 58.400 +490 103.500 +490 115.500 +490 156.800 +490 174.600 +490 201.900 +490 286.700 +491 159.400 +491 246.900 +492 174.300 +492 247.600 +493 174.200 +494 173.900 +494 183.900 +494 197.100 +494 262.900 +495 183.200 +495 247.600 +496 158.000 +496 175.400 +496 247.100 +497 157.400 +497 246.400 +498 71.800 +498 143.800 +498 175.100 +498 246.900 +499 124.100 +499 170.400 +499 174.800 +499 214.700 +499 243.600 +501 185.800 +501 267.300 +502 144.400 +502 158.100 +502 183.800 +502 246.600 +503 139.600 +503 175.500 +503 247.100 +504 115.600 +504 156.300 +504 266.900 +505 144.400 +505 230.300 +505 247.000 +506 174.200 +506 231.500 +506 265.400 +506 287.600 +507 157.900 +507 247.000 +508 173.100 +509 247.400 +510 70.300 +510 124.600 +510 144.300 +510 172.300 +510 247.300 +511 156.000 +511 202.000 +511 217.900 +511 247.200 +511 264.100 +512 82.300 +512 124.100 +512 158.700 +512 173.800 +513 69.800 +513 247.300 +514 247.300 +514 287.400 +515 174.000 +515 240.700 +515 265.500 +515 287.500 +516 174.200 +517 176.200 +517 188.300 +518 70.300 +518 97.000 +518 173.800 +518 183.400 +518 263.300 +519 157.900 +519 175.900 +519 188.300 +519 286.900 +520 57.700 +521 173.800 +521 247.300 +521 267.600 +522 173.300 +522 187.400 +522 232.100 +523 173.900 +523 216.400 +524 157.900 +524 174.600 +525 176.100 +525 246.000 +526 158.400 +526 247.200 +526 286.900 +527 157.900 +527 247.800 +527 287.400 +528 72.300 +528 173.900 +528 247.100 +529 174.900 +529 216.800 +530 265.000 +531 150.900 +531 157.800 +531 174.400 +531 231.800 +532 69.400 +532 123.500 +532 158.100 +532 174.800 +532 198.200 +532 247.600 +532 267.000 +533 174.600 +533 263.300 +534 83.300 +535 174.900 +536 53.000 +536 158.000 +536 278.300 +537 174.700 +537 247.100 +538 83.600 +538 174.900 +538 247.800 +538 287.500 +539 174.400 +539 241.600 +540 124.500 +540 156.500 +540 267.100 +541 158.300 +541 175.500 +541 247.500 +542 174.100 +542 246.500 +543 287.900 +544 123.800 +544 158.800 +544 174.800 +545 174.600 +545 191.900 +546 82.800 +546 109.500 +547 174.500 +547 239.000 +547 281.900 +548 174.400 +548 215.200 +548 247.100 +548 267.000 +549 122.900 +549 157.800 +549 246.800 +550 57.000 +550 174.400 +551 109.400 +552 231.300 +553 109.200 +553 142.700 +553 265.600 +554 70.700 +554 107.600 +554 173.600 +554 267.400 +554 287.100 +555 157.500 +555 248.200 +555 274.600 +556 173.900 +558 174.300 +558 244.200 +558 277.500 +558 296.200 +559 144.300 +560 109.100 +560 171.800 +560 231.400 +561 155.900 +561 187.500 +561 231.700 +562 174.600 +562 267.600 +563 60.600 +563 172.000 +564 157.300 +564 175.100 +564 215.400 +564 246.600 +565 174.000 +565 264.900 +566 158.000 +567 144.400 +567 158.900 +567 247.400 +568 70.300 +568 84.000 +568 96.400 +568 145.200 +568 158.400 +568 261.900 +569 84.000 +569 267.200 +570 68.900 +570 97.000 +570 123.300 +570 175.300 +570 188.100 +570 218.600 +570 286.600 +571 97.300 +571 124.400 +571 157.700 +571 185.900 +571 246.800 +571 267.600 +572 141.600 +572 174.100 +573 267.100 +574 174.100 +575 176.200 +576 174.500 +576 247.000 +577 176.100 +577 186.800 +577 247.000 +579 156.700 +579 173.500 +579 185.200 +579 216.800 +579 246.300 +580 157.700 +580 202.500 +580 218.200 +581 96.700 +581 157.400 +581 185.700 +581 247.200 +581 269.200 +582 247.400 +583 154.400 +583 174.700 +583 216.600 +583 265.200 +584 174.200 +584 231.600 +584 247.500 +585 247.100 +586 175.400 +586 246.800 +587 123.200 +587 134.000 +587 159.300 +587 284.000 +588 173.300 +589 124.600 +589 188.000 +589 248.300 +589 265.400 +591 264.700 +592 174.300 +593 58.100 +593 144.200 +593 175.500 +593 265.900 +594 174.400 +594 287.800 +595 82.800 +595 123.700 +595 187.700 +596 83.000 +596 157.900 +596 175.800 +596 246.200 +597 144.800 +597 187.100 +598 69.100 +598 174.600 +598 245.000 +598 276.800 +599 174.800 +600 58.000 +600 157.400 +600 243.100 +602 174.300 +602 245.600 +602 267.000 +603 159.500 +603 174.400 +603 216.800 +603 246.800 +603 267.700 +604 174.000 +604 287.300 +605 108.200 +605 145.200 +605 157.800 +605 266.200 +606 232.000 +606 246.500 +606 266.700 +607 175.100 +607 247.400 +608 174.600 +608 244.700 +608 267.500 +609 157.900 +609 174.700 +609 244.000 +609 265.100 +610 144.700 +610 174.400 +610 247.300 +611 158.000 +611 174.900 +611 246.900 +611 287.200 +612 173.800 +613 157.500 +613 197.200 +613 278.800 +614 154.000 +614 247.200 +615 173.700 +615 216.800 +615 267.100 +616 174.800 +616 286.400 +617 169.500 +618 96.600 +618 175.100 +619 171.100 +619 247.200 +619 287.500 +620 69.600 +620 158.300 +620 173.700 +620 286.600 +621 59.300 +621 143.500 +621 159.500 +621 174.700 +621 233.100 +621 246.200 +622 83.400 +623 174.700 +623 246.400 +624 152.300 +624 174.600 +624 247.700 +624 265.400 +626 174.400 +626 247.600 +627 174.400 +627 247.300 +628 83.100 +628 145.100 +628 159.300 +629 174.300 +629 246.800 +630 174.100 +630 216.100 +630 267.000 +631 107.600 +631 174.300 +631 286.700 +632 170.100 +633 95.900 +633 246.800 +634 246.700 +635 174.200 +636 123.200 +636 144.500 +636 170.100 +636 231.100 +636 247.400 +636 262.900 +637 69.700 +637 83.700 +637 121.900 +637 132.700 +637 159.400 +637 176.200 +637 198.000 +637 247.200 +638 95.000 +638 158.700 +638 247.300 +639 110.200 +639 175.900 +639 265.100 +640 158.000 +640 247.300 +641 174.100 +641 186.400 +641 247.100 +641 287.300 +642 122.800 +642 158.100 +642 173.600 +642 246.700 +643 70.700 +643 109.400 +643 143.400 +643 246.900 +644 174.300 +644 247.400 +645 171.500 +645 231.700 +645 247.600 +646 123.300 +646 173.200 +647 174.700 +647 244.700 +647 267.000 +648 176.200 +648 247.200 +649 175.200 +649 246.300 +649 267.400 +650 144.700 +650 174.100 +650 247.400 +650 264.800 +651 159.000 +651 267.100 +652 108.100 +652 144.500 +652 265.200 +653 264.900 +654 174.000 +654 267.200 +655 247.100 +656 172.700 +656 197.500 +657 188.300 +657 246.500 +657 287.000 +659 123.200 +659 157.800 +660 174.400 +660 246.900 +660 267.000 +661 95.300 +661 173.700 +661 217.300 +661 265.000 +662 248.200 +662 298.000 +663 58.000 +663 248.000 +664 83.500 +664 185.900 +664 232.000 +664 287.400 +665 105.900 +665 158.500 +665 174.200 +665 216.400 +665 264.900 +666 108.100 +666 247.600 +667 173.200 +667 267.300 +667 287.700 +668 109.700 +668 184.100 +668 288.300 +669 175.100 +669 247.600 +670 247.600 +671 83.200 +671 170.300 +671 216.600 +672 170.800 +672 187.700 +672 247.300 +672 278.100 +673 195.500 +673 265.100 +674 53.300 +674 83.800 +674 174.800 +674 247.100 +674 267.100 +674 287.500 +675 157.800 +675 208.400 +675 231.900 +676 97.300 +676 175.900 +676 216.800 +677 57.900 +677 157.500 +677 187.600 +677 278.800 +678 247.000 +679 265.200 +680 123.100 +680 174.400 +680 188.100 +680 241.500 +680 247.500 +681 108.400 +682 107.700 +682 173.900 +682 216.900 +682 247.300 +682 265.300 +683 174.600 +683 244.000 +684 174.000 +685 159.200 +685 174.400 +686 174.100 +686 185.000 +686 265.400 +687 54.500 +687 144.000 +687 185.100 +687 267.000 +688 174.500 +689 181.900 +689 188.300 +689 247.500 +690 157.400 +690 174.900 +691 95.600 +691 155.100 +692 158.000 +692 216.100 +692 242.700 +693 53.200 +693 110.700 +693 157.800 +693 173.900 +693 194.400 +693 247.000 +693 267.200 +694 174.100 +694 187.700 +694 246.600 +695 142.700 +695 173.700 +697 174.600 +697 246.700 +697 267.300 +698 187.700 +698 247.200 +699 184.400 +700 247.200 +701 108.100 +701 174.800 +701 247.200 +701 267.400 +702 157.300 +702 246.600 +703 83.200 +703 130.500 +703 171.600 +703 244.700 +704 174.900 +704 288.000 +705 174.600 +705 244.500 +706 157.900 +706 174.500 +706 265.100 +707 157.300 +707 246.800 +708 107.700 +708 183.100 +708 246.400 +709 174.300 +709 210.900 +709 265.000 +710 56.700 +710 174.900 +710 246.700 +711 184.700 +711 244.900 +711 267.800 +712 82.800 +712 124.100 +712 157.600 +712 173.800 +712 246.900 +713 83.800 +713 174.600 +713 225.900 +713 247.100 +714 186.800 +715 217.000 +715 268.600 +716 240.400 +716 265.400 +717 158.400 +717 174.700 +718 172.000 +718 265.300 +719 123.500 +719 157.400 +719 174.700 +719 246.900 +720 174.200 +720 287.900 +721 134.600 +721 194.800 +721 217.500 +721 248.300 +722 174.400 +723 57.100 +723 174.800 +723 231.600 +723 265.600 +724 66.600 +724 132.600 +724 158.000 +724 263.100 +725 183.200 +725 247.400 +725 263.700 +726 83.300 +726 123.800 +726 145.000 +726 158.300 +726 174.800 +726 248.300 +727 157.900 +727 174.300 +728 175.900 +728 193.800 +728 247.600 +730 181.600 +730 265.600 +731 124.200 +731 247.100 +733 174.400 +733 187.600 +734 265.600 +735 123.600 +735 144.800 +735 247.100 +735 265.100 +736 157.800 +736 244.200 +737 203.900 +737 244.200 +738 287.600 +739 287.800 +740 175.200 +740 246.300 +741 123.100 +741 158.200 +741 175.000 +742 247.300 +743 266.800 +744 265.300 +744 287.400 +745 266.100 +746 96.900 +746 157.800 +746 174.200 +746 265.100 +746 298.100 +748 174.600 +749 158.100 +750 171.600 +750 244.600 +750 287.600 +751 158.200 +751 176.100 +752 83.300 +752 158.000 +752 175.700 +752 215.100 +752 247.000 +752 265.100 +753 248.000 +754 109.300 +754 174.900 +754 232.200 +754 247.500 +755 174.700 +755 186.300 +755 218.500 +755 246.900 +756 82.900 +756 158.200 +756 174.000 +757 158.000 +757 180.300 +757 244.900 +757 248.100 +758 123.900 +758 266.800 +759 174.100 +759 231.400 +760 108.900 +760 247.500 +760 267.200 +761 247.400 +762 287.600 +763 61.600 +763 96.600 +763 157.900 +763 173.700 +763 246.200 +764 83.400 +764 157.800 +764 193.400 +765 174.000 +765 247.300 +766 144.400 +767 170.900 +768 231.400 +769 173.900 +769 246.400 +770 158.100 +770 174.700 +770 247.400 +771 110.900 +771 185.900 +772 157.900 +772 185.100 +772 247.600 +773 174.500 +773 246.000 +773 281.600 +774 155.200 +774 175.000 +774 247.200 +775 174.000 +775 247.100 +776 124.400 +776 187.800 +776 245.300 +778 231.900 +778 247.400 +778 288.000 +779 174.000 +781 94.500 +781 172.900 +781 230.800 +782 110.600 +782 176.200 +782 187.900 +783 109.500 +783 174.500 +783 247.500 +783 276.400 +784 157.800 +784 244.100 +785 173.400 +786 144.500 +786 157.800 +786 247.300 +787 158.300 +787 247.600 +788 96.800 +788 197.700 +788 217.400 +789 247.100 +790 157.700 +790 174.000 +790 218.600 +791 143.700 +791 247.200 +791 267.100 +792 97.000 +792 110.900 +792 157.900 +792 176.200 +792 265.900 +793 56.700 +793 95.600 +793 144.800 +793 180.500 +793 265.400 +794 176.200 +794 244.600 +795 284.200 +796 97.400 +796 170.000 +796 187.400 +797 110.100 +797 174.400 +797 247.500 +798 174.700 +798 230.400 +798 267.300 +799 197.300 +800 158.100 +800 195.100 +801 245.800 +801 267.800 +802 132.500 +802 173.700 +803 172.800 +803 247.100 +804 73.300 +804 157.700 +804 248.100 +805 123.400 +805 142.000 +805 158.200 +805 174.800 +805 246.700 +806 247.300 +807 109.200 +807 174.700 +808 175.000 +808 181.500 +808 203.100 +808 246.400 +808 267.300 +809 50.200 +809 123.600 +809 247.200 +810 91.300 +810 143.800 +810 159.300 +810 187.100 +810 217.200 +811 267.000 +812 83.500 +812 109.400 +812 174.300 +813 109.200 +813 174.200 +813 243.900 +813 298.200 +814 174.200 +815 174.500 +815 265.600 +816 158.100 +816 174.700 +816 267.200 +817 122.900 +817 156.700 +817 184.200 +818 59.600 +818 84.100 +818 123.700 +818 157.800 +818 197.500 +818 246.200 +818 265.800 +819 174.500 +819 247.200 +820 175.200 +821 158.000 +821 287.600 +822 174.100 +822 277.600 +824 136.800 +824 174.400 +824 244.300 +825 130.900 +825 174.100 +826 154.300 +826 231.600 +826 247.600 +827 247.600 +828 158.000 +828 174.100 +828 247.400 +829 158.500 +829 175.600 +829 197.400 +830 158.300 +831 173.900 +832 110.400 +832 174.100 +832 216.500 +832 264.600 +833 174.800 +833 217.800 +834 176.000 +834 246.500 +835 173.700 +835 204.100 +836 174.900 +836 218.300 +836 246.800 +837 173.900 +837 246.900 +838 105.700 +838 123.700 +838 174.800 +838 188.000 +839 179.400 +839 247.500 +840 111.000 +840 175.700 +840 287.800 +841 176.300 +841 287.500 +842 119.500 +842 144.900 +843 97.200 +843 184.200 +844 175.800 +844 247.100 +844 265.600 +845 70.300 +845 174.200 +846 247.600 +847 179.500 +848 144.900 +849 157.700 +849 175.400 +849 247.000 +850 175.800 +851 174.200 +852 158.000 +852 176.300 +852 247.700 +853 195.200 +853 240.900 +854 83.200 +854 109.500 +854 173.800 +855 154.000 +855 176.100 +855 267.600 +856 69.300 +856 174.000 +857 158.000 +857 230.600 +858 173.000 +858 194.100 +858 247.200 +859 97.200 +859 244.600 +860 264.200 +861 247.500 +862 157.300 +864 83.200 +864 108.700 +864 134.000 +864 157.600 +864 175.800 +864 216.800 +865 104.600 +865 158.600 +865 241.600 +866 56.800 +866 216.200 +866 247.500 +867 157.700 +867 265.000 +869 172.600 +870 157.800 +870 176.100 +870 202.700 +870 247.000 +871 174.500 +871 265.200 +872 81.900 +872 266.700 +873 57.100 +873 144.200 +873 174.600 +874 83.300 +874 174.600 +874 247.400 +875 158.200 +875 175.700 +875 247.100 +876 246.800 +877 158.200 +878 175.900 +878 267.100 +879 157.900 +880 158.200 +881 157.900 +881 175.800 +881 246.700 +881 265.800 +881 287.600 +882 157.500 +882 181.300 +882 231.800 +883 158.500 +883 246.000 +884 247.200 +886 81.300 +886 133.400 +886 158.100 +886 188.000 +886 229.100 +887 187.700 +888 158.300 +888 187.600 +889 174.300 +890 173.400 +891 81.500 +891 96.700 +891 123.600 +891 144.900 +891 158.100 +892 96.600 +892 175.900 +892 245.400 +892 265.600 +893 83.600 +893 108.400 +893 174.100 +894 157.800 +894 185.800 +895 248.000 +896 158.100 +896 172.300 +897 135.100 +897 158.000 +897 174.800 +897 247.100 +898 173.600 +898 267.500 +899 97.200 +899 124.000 +899 153.300 +899 159.000 +899 174.600 +899 197.000 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_0_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_0_i_pop.dat new file mode 100644 index 000000000..cda6d87d9 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_0_i_pop.dat @@ -0,0 +1,606 @@ +sender time_ms +900 174.200 +901 174.000 +901 246.900 +902 157.100 +902 184.700 +902 247.500 +904 171.200 +904 246.100 +904 265.000 +904 277.600 +905 158.200 +905 175.800 +905 195.200 +905 239.100 +905 267.500 +906 247.000 +907 154.800 +907 218.500 +908 70.600 +909 183.800 +909 247.200 +910 144.300 +910 175.000 +910 229.200 +911 83.200 +911 124.100 +911 158.100 +911 217.100 +912 105.500 +912 155.800 +912 175.400 +912 216.300 +913 70.100 +913 173.800 +914 59.500 +914 83.100 +914 159.400 +914 247.600 +914 284.200 +915 175.600 +915 216.900 +915 247.200 +916 247.300 +916 298.800 +917 83.200 +917 122.100 +917 159.300 +917 175.100 +918 174.000 +918 246.800 +919 123.100 +919 143.900 +919 246.700 +920 97.300 +920 174.300 +920 287.600 +922 109.200 +922 185.900 +922 245.700 +922 266.700 +923 70.100 +923 158.000 +924 59.500 +925 72.700 +925 158.200 +925 174.000 +927 143.300 +927 172.000 +927 187.200 +927 246.800 +928 184.400 +929 110.700 +929 174.100 +929 243.100 +930 107.500 +930 196.100 +930 247.900 +931 144.900 +931 174.200 +931 247.400 +931 299.300 +932 216.900 +932 265.400 +933 144.500 +933 247.000 +934 97.000 +934 157.700 +934 188.100 +935 96.000 +935 157.600 +935 232.300 +935 267.100 +936 54.000 +936 123.400 +936 158.200 +936 175.000 +936 232.200 +936 246.900 +937 158.300 +937 248.300 +937 277.500 +938 169.800 +938 174.600 +939 123.900 +939 157.800 +939 187.800 +939 247.100 +940 96.900 +940 110.500 +940 152.200 +940 174.900 +940 244.400 +941 174.900 +941 244.100 +942 194.200 +942 247.700 +942 267.100 +943 96.700 +943 159.000 +943 174.600 +944 277.400 +945 145.100 +945 174.200 +945 243.800 +945 265.400 +946 122.900 +946 143.200 +946 157.800 +946 173.700 +947 158.000 +947 184.300 +947 231.600 +948 175.100 +948 246.300 +949 53.700 +949 158.200 +949 246.200 +949 268.500 +949 287.500 +950 124.000 +950 176.000 +951 96.800 +951 287.600 +952 108.000 +952 174.200 +952 247.200 +952 266.800 +953 154.000 +953 175.000 +953 231.900 +953 269.300 +955 158.000 +956 83.000 +956 157.800 +956 185.100 +957 174.600 +957 231.800 +958 158.300 +958 264.800 +959 246.800 +960 133.100 +960 174.000 +960 267.100 +960 283.200 +961 158.900 +962 144.800 +962 174.600 +962 246.800 +963 174.800 +963 218.000 +963 247.700 +965 185.100 +965 247.100 +965 269.000 +966 109.200 +966 157.900 +966 187.800 +966 264.900 +967 109.000 +967 142.900 +967 159.300 +967 174.800 +967 244.300 +968 157.600 +968 247.600 +969 231.800 +969 247.200 +969 265.500 +970 143.100 +970 174.200 +970 247.300 +971 175.900 +971 246.900 +972 109.200 +972 158.100 +972 173.300 +972 267.100 +973 193.800 +973 247.400 +974 174.700 +974 247.700 +975 264.900 +977 174.200 +977 231.600 +977 265.400 +978 158.200 +978 185.800 +978 230.700 +979 82.600 +979 143.400 +979 174.400 +979 247.500 +979 287.200 +980 181.100 +981 157.500 +981 188.300 +981 265.600 +982 110.700 +982 156.700 +982 187.500 +982 246.700 +983 185.800 +983 247.600 +984 68.400 +984 157.900 +984 179.300 +984 216.800 +985 109.400 +985 145.100 +985 172.200 +985 188.600 +985 246.400 +985 287.300 +986 174.500 +987 174.800 +987 244.400 +987 278.200 +988 174.000 +988 246.800 +989 123.500 +989 144.200 +989 165.900 +989 175.400 +989 246.400 +990 173.100 +990 247.100 +991 247.200 +992 131.000 +992 187.500 +993 173.800 +993 269.200 +994 97.700 +994 158.500 +994 217.600 +995 174.800 +995 246.700 +996 173.700 +996 247.500 +997 183.600 +997 247.300 +998 159.000 +998 175.300 +998 247.300 +999 84.000 +999 168.100 +999 181.900 +1000 156.400 +1000 173.900 +1001 157.400 +1001 174.300 +1001 246.900 +1002 246.200 +1002 267.500 +1003 174.100 +1003 247.000 +1004 157.500 +1005 174.200 +1005 247.900 +1006 175.000 +1007 171.100 +1007 247.300 +1008 83.200 +1008 123.600 +1008 174.100 +1008 247.100 +1009 157.500 +1009 174.100 +1009 266.400 +1010 72.700 +1010 156.900 +1010 265.000 +1011 107.500 +1011 145.100 +1011 171.400 +1011 184.000 +1012 246.600 +1012 279.800 +1013 53.300 +1013 174.100 +1013 247.100 +1014 175.300 +1014 247.400 +1017 145.200 +1017 173.800 +1017 247.400 +1017 297.700 +1019 244.700 +1020 83.800 +1020 158.200 +1020 287.600 +1021 264.300 +1022 240.300 +1022 287.800 +1023 173.600 +1023 244.700 +1024 82.900 +1024 107.900 +1024 174.100 +1024 288.700 +1025 174.400 +1025 286.700 +1026 157.500 +1026 175.100 +1026 216.300 +1027 174.500 +1027 247.400 +1028 94.900 +1028 179.100 +1028 217.100 +1028 247.000 +1029 171.800 +1029 186.100 +1029 230.400 +1029 263.700 +1031 123.500 +1031 158.200 +1032 174.400 +1032 239.800 +1033 159.200 +1034 81.900 +1034 145.000 +1034 158.400 +1034 246.700 +1034 287.400 +1035 175.200 +1036 143.500 +1036 156.900 +1036 216.300 +1036 244.400 +1037 68.200 +1037 124.100 +1037 183.000 +1037 247.600 +1038 157.500 +1038 196.800 +1038 265.300 +1039 52.500 +1039 174.100 +1039 246.400 +1040 143.300 +1040 159.200 +1040 246.700 +1042 175.900 +1043 60.500 +1043 123.700 +1043 136.700 +1043 156.000 +1043 247.200 +1043 267.100 +1044 174.700 +1044 264.800 +1045 110.800 +1045 143.600 +1045 246.900 +1046 174.300 +1046 246.900 +1047 174.200 +1047 247.600 +1048 158.000 +1048 245.800 +1049 96.800 +1049 174.300 +1050 176.000 +1050 231.000 +1050 246.700 +1050 267.300 +1051 157.100 +1052 144.600 +1052 170.300 +1052 243.500 +1052 286.600 +1053 158.500 +1053 182.800 +1053 203.800 +1053 247.100 +1054 172.100 +1054 187.600 +1054 246.700 +1054 287.500 +1055 143.200 +1055 155.100 +1055 175.500 +1055 287.300 +1056 174.700 +1056 247.500 +1057 174.800 +1058 83.200 +1058 173.900 +1058 240.900 +1059 108.900 +1059 158.100 +1059 247.300 +1059 267.000 +1060 96.200 +1060 231.900 +1062 158.200 +1062 174.500 +1062 246.800 +1063 83.400 +1063 144.200 +1063 172.300 +1063 184.000 +1063 216.400 +1063 246.500 +1064 174.100 +1064 212.000 +1064 217.800 +1064 246.800 +1065 174.400 +1065 247.000 +1066 183.900 +1066 247.200 +1066 263.700 +1067 57.600 +1067 123.100 +1067 157.500 +1067 174.400 +1067 269.300 +1068 122.400 +1068 172.900 +1068 230.700 +1068 246.900 +1069 170.300 +1069 247.000 +1070 65.800 +1070 107.500 +1070 171.600 +1070 247.400 +1071 173.600 +1071 247.300 +1071 282.400 +1072 158.000 +1072 174.600 +1072 247.500 +1073 247.400 +1074 68.500 +1074 157.900 +1074 175.300 +1074 194.000 +1074 218.200 +1075 63.500 +1075 72.100 +1075 108.500 +1075 139.600 +1075 157.700 +1075 175.500 +1075 244.800 +1075 264.100 +1076 247.100 +1076 267.200 +1077 174.100 +1077 231.900 +1078 246.800 +1079 107.500 +1079 173.500 +1079 187.700 +1080 158.200 +1080 175.700 +1080 244.700 +1081 187.600 +1081 286.800 +1082 171.400 +1083 69.200 +1083 114.600 +1083 123.000 +1083 158.200 +1083 172.800 +1083 289.600 +1084 144.700 +1084 174.500 +1085 114.400 +1085 144.000 +1085 174.000 +1085 244.300 +1085 275.400 +1086 145.100 +1086 173.500 +1086 263.600 +1088 231.900 +1088 286.500 +1089 173.100 +1089 185.800 +1089 218.600 +1090 82.200 +1090 173.000 +1090 188.500 +1091 96.600 +1091 240.900 +1092 70.300 +1092 109.800 +1092 172.500 +1092 246.400 +1092 267.200 +1093 97.600 +1093 176.100 +1093 246.100 +1094 143.300 +1094 173.200 +1095 247.000 +1096 82.500 +1096 247.200 +1096 289.100 +1097 173.700 +1097 247.600 +1098 174.200 +1098 197.800 +1099 187.500 +1099 247.100 +1101 83.100 +1101 174.000 +1101 187.500 +1101 231.900 +1101 265.500 +1102 104.900 +1102 134.600 +1102 171.300 +1103 158.100 +1103 174.600 +1103 218.000 +1103 262.800 +1104 159.300 +1104 174.600 +1104 247.600 +1105 123.200 +1105 174.700 +1105 247.200 +1105 279.200 +1106 133.300 +1106 172.500 +1106 188.500 +1106 231.500 +1106 287.700 +1107 158.100 +1107 174.800 +1107 247.500 +1108 203.800 +1109 144.800 +1109 173.800 +1109 203.500 +1109 216.700 +1109 266.900 +1110 158.000 +1110 175.900 +1110 232.100 +1111 175.600 +1111 247.700 +1112 144.800 +1112 175.800 +1112 247.500 +1112 267.700 +1113 216.800 +1114 83.500 +1114 243.400 +1114 267.100 +1115 158.000 +1115 176.300 +1116 175.800 +1116 232.200 +1117 83.100 +1117 144.200 +1117 247.300 +1117 266.900 +1118 174.800 +1118 247.300 +1119 96.700 +1119 107.700 +1119 175.400 +1119 246.800 +1119 267.100 +1120 175.800 +1121 58.400 +1121 158.400 +1121 173.100 +1121 247.400 +1122 157.500 +1122 174.800 +1122 187.500 +1122 198.400 +1122 219.100 +1122 231.700 +1123 157.300 +1123 176.000 +1123 247.500 +1124 95.000 +1124 173.900 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_1_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_1_e_pop.dat new file mode 100644 index 000000000..ac5b30a9f --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_1_e_pop.dat @@ -0,0 +1,1285 @@ +sender time_ms +0 247.000 +1 265.400 +2 185.200 +2 269.000 +2 287.600 +5 267.100 +6 83.000 +6 123.800 +6 290.100 +7 230.400 +8 124.300 +8 217.500 +10 83.800 +10 132.500 +10 216.900 +10 247.700 +11 80.800 +12 60.500 +12 232.100 +13 83.900 +13 158.000 +13 265.300 +15 107.300 +15 247.700 +17 83.000 +18 264.900 +19 60.500 +19 174.900 +20 83.000 +20 174.500 +20 215.900 +22 81.800 +22 115.900 +22 158.300 +22 217.600 +22 265.400 +23 144.300 +24 231.700 +24 265.200 +25 158.000 +25 215.100 +25 267.100 +27 123.500 +27 288.000 +29 70.200 +29 132.900 +29 267.900 +30 82.300 +30 97.000 +30 133.300 +33 69.500 +33 227.000 +33 248.000 +35 83.100 +36 114.900 +36 247.100 +37 217.400 +39 110.400 +39 203.600 +40 84.000 +40 96.800 +40 267.200 +42 96.600 +42 216.400 +42 232.100 +42 263.500 +43 263.800 +45 287.100 +46 144.400 +47 232.200 +48 265.200 +49 60.000 +50 108.200 +51 73.700 +52 265.600 +53 97.500 +53 157.700 +53 217.400 +53 265.300 +54 107.800 +55 244.200 +56 109.500 +56 287.100 +57 288.500 +60 158.100 +60 265.100 +62 108.000 +62 232.100 +63 247.600 +64 217.500 +64 231.900 +64 287.100 +65 268.000 +67 97.300 +67 264.700 +68 114.700 +68 203.400 +68 231.900 +68 266.900 +69 143.100 +70 155.400 +70 267.400 +72 54.000 +72 173.700 +72 230.100 +73 216.300 +74 124.000 +75 232.200 +75 265.200 +77 171.100 +78 174.600 +79 158.900 +79 264.900 +80 110.600 +80 231.100 +81 110.600 +81 157.800 +81 246.800 +83 266.900 +84 244.100 +86 96.500 +86 158.100 +86 218.000 +86 287.600 +88 157.700 +89 185.300 +89 266.900 +90 111.400 +90 232.100 +91 82.800 +93 243.900 +94 83.200 +94 267.400 +95 108.700 +95 217.300 +95 247.200 +96 110.500 +96 144.800 +96 247.000 +96 267.200 +99 123.500 +99 267.600 +100 84.000 +100 130.600 +100 144.200 +100 287.200 +101 144.300 +102 216.500 +103 108.000 +103 178.300 +103 267.100 +103 287.500 +105 145.300 +105 247.600 +111 59.800 +111 110.200 +111 265.300 +112 143.300 +113 264.900 +114 83.200 +116 216.200 +116 247.600 +116 266.900 +118 286.400 +119 54.000 +119 174.600 +119 247.500 +119 265.100 +120 247.400 +123 109.100 +123 246.000 +124 268.600 +124 287.600 +125 246.600 +126 158.400 +126 230.800 +127 217.800 +129 217.300 +129 264.900 +130 287.700 +132 123.000 +133 96.800 +133 267.200 +135 108.800 +136 213.500 +136 268.900 +137 228.400 +137 269.900 +139 232.000 +142 185.600 +142 264.900 +143 232.100 +146 248.400 +147 144.400 +148 247.100 +150 197.700 +151 58.200 +151 216.100 +152 265.500 +154 265.000 +156 58.000 +156 111.200 +156 133.100 +156 145.000 +156 157.900 +156 264.900 +157 188.700 +157 232.300 +157 267.000 +158 217.400 +159 203.400 +162 265.000 +163 217.100 +163 265.200 +164 107.700 +164 247.100 +165 174.700 +165 217.200 +166 247.400 +169 217.000 +170 109.000 +170 174.900 +170 247.700 +170 265.100 +171 97.400 +171 248.300 +172 204.600 +173 264.400 +174 265.300 +176 216.100 +177 97.300 +177 154.500 +177 229.400 +177 247.700 +178 202.400 +178 247.000 +179 94.200 +179 158.500 +179 265.200 +181 247.500 +183 203.900 +184 83.800 +184 123.500 +185 58.200 +185 97.300 +185 157.800 +186 97.300 +186 265.100 +187 71.800 +187 84.100 +187 144.300 +187 264.300 +189 57.300 +189 123.800 +190 83.300 +190 248.100 +191 218.400 +191 231.300 +192 263.800 +193 267.900 +194 242.300 +194 247.400 +196 83.400 +196 265.200 +197 83.300 +200 50.200 +200 83.000 +200 144.700 +200 247.500 +202 83.400 +202 247.200 +203 232.200 +204 58.200 +204 159.200 +204 266.200 +208 68.600 +208 267.500 +209 232.400 +210 247.100 +211 110.300 +211 265.100 +213 83.000 +213 109.600 +213 124.100 +215 123.000 +215 217.000 +215 248.300 +215 267.900 +216 123.400 +218 97.400 +218 144.600 +218 231.700 +219 265.100 +220 267.500 +221 109.600 +222 109.200 +223 94.600 +224 174.000 +224 247.000 +225 265.200 +226 243.600 +226 264.900 +227 61.600 +227 124.000 +228 247.400 +228 265.200 +229 95.800 +230 247.000 +231 172.300 +231 287.800 +232 247.400 +233 247.600 +234 110.600 +234 176.300 +235 82.300 +235 247.700 +236 95.400 +237 287.800 +238 60.600 +238 231.100 +240 82.900 +240 228.600 +241 247.200 +242 180.600 +242 265.100 +243 216.900 +243 231.500 +244 218.500 +245 109.200 +245 122.400 +246 110.500 +246 264.800 +247 58.700 +247 264.800 +248 126.200 +249 144.400 +252 95.900 +253 123.000 +254 247.200 +254 264.900 +255 83.600 +255 143.900 +255 265.200 +256 247.500 +257 287.400 +258 81.700 +258 218.100 +259 96.800 +259 215.800 +259 265.600 +261 97.400 +261 124.400 +261 264.100 +262 83.500 +263 53.400 +263 83.100 +263 113.400 +263 143.500 +264 83.200 +264 145.000 +266 60.400 +267 217.600 +267 247.300 +267 265.100 +268 216.200 +269 268.500 +271 265.000 +272 58.600 +272 124.000 +272 247.700 +273 107.900 +273 247.600 +274 243.300 +274 264.600 +275 158.000 +275 217.500 +275 247.300 +276 215.000 +276 247.600 +277 265.700 +278 264.100 +279 216.700 +279 264.700 +280 72.100 +280 264.700 +282 216.500 +282 247.500 +282 289.000 +283 97.300 +284 267.400 +287 231.900 +288 157.900 +290 84.000 +290 267.600 +291 83.400 +291 247.900 +292 95.900 +292 247.000 +292 265.300 +293 129.000 +293 268.700 +295 108.000 +295 144.300 +295 265.400 +296 265.100 +298 247.700 +299 96.800 +299 217.500 +299 247.600 +300 239.800 +301 123.600 +302 82.200 +302 247.500 +302 267.400 +304 69.200 +304 108.100 +304 123.400 +304 157.200 +304 232.100 +305 185.300 +306 108.600 +307 132.800 +307 155.300 +307 247.800 +308 172.900 +308 267.500 +309 230.000 +310 132.100 +310 217.100 +311 133.000 +311 248.200 +312 60.400 +312 83.200 +312 158.100 +313 265.400 +314 123.400 +314 216.200 +316 53.400 +316 83.800 +317 109.100 +319 266.900 +320 96.700 +320 265.300 +321 145.100 +322 267.100 +322 287.800 +323 158.100 +323 247.500 +324 59.900 +324 83.600 +324 128.500 +324 158.100 +327 217.200 +328 265.000 +329 264.800 +330 203.400 +330 217.200 +330 265.500 +331 215.100 +331 247.800 +332 123.500 +332 244.400 +333 265.000 +335 124.000 +335 158.400 +335 265.000 +336 248.000 +336 287.800 +337 232.000 +337 264.200 +338 58.900 +338 247.200 +339 232.300 +339 265.300 +340 265.000 +341 265.200 +343 218.200 +345 83.300 +346 97.600 +346 202.700 +346 267.200 +347 124.400 +347 247.200 +347 267.300 +348 232.100 +349 216.000 +350 124.100 +350 268.100 +351 71.400 +352 202.900 +354 108.200 +355 247.600 +355 286.000 +356 107.900 +357 247.600 +358 123.300 +358 265.200 +359 109.200 +360 59.000 +360 123.700 +360 247.900 +361 97.500 +361 218.700 +362 96.900 +362 231.700 +364 144.500 +364 185.300 +366 231.700 +367 95.000 +368 214.700 +369 107.700 +369 246.900 +370 83.200 +370 157.800 +370 198.100 +371 96.700 +372 264.900 +376 94.900 +376 247.200 +376 267.800 +378 83.200 +379 57.000 +379 83.400 +380 97.300 +380 232.200 +380 247.200 +381 83.600 +381 286.800 +382 281.000 +383 110.500 +383 204.000 +383 231.800 +384 270.600 +385 215.700 +386 157.800 +386 231.800 +386 247.000 +387 124.000 +387 247.200 +388 203.200 +388 265.100 +390 143.900 +391 83.300 +391 95.700 +391 217.800 +391 287.900 +392 124.200 +392 144.200 +392 246.700 +393 123.400 +393 144.200 +393 155.500 +393 222.700 +393 247.600 +394 144.300 +394 265.300 +395 83.300 +395 267.100 +396 96.900 +396 122.600 +396 231.900 +397 264.900 +398 174.600 +399 288.500 +400 83.100 +400 144.600 +401 247.400 +402 196.900 +403 57.700 +404 54.300 +404 123.700 +404 141.100 +404 157.400 +404 263.100 +405 174.300 +406 246.900 +406 287.500 +407 134.300 +407 217.000 +408 183.200 +408 216.100 +408 265.300 +410 83.400 +410 247.400 +410 287.700 +412 187.600 +413 225.600 +415 248.000 +415 287.500 +417 247.200 +419 95.100 +419 123.800 +419 158.000 +420 133.800 +420 232.100 +421 97.000 +421 218.000 +423 216.900 +424 265.100 +425 265.100 +426 97.500 +426 138.300 +426 158.500 +426 268.600 +428 129.600 +428 157.900 +428 171.600 +428 248.400 +429 228.400 +430 247.100 +430 283.900 +431 230.300 +432 68.500 +432 82.500 +432 124.200 +435 131.300 +435 158.100 +435 229.300 +435 267.000 +436 217.500 +436 247.400 +437 96.900 +437 122.800 +437 228.100 +439 267.300 +440 218.300 +440 247.600 +441 139.000 +441 158.600 +442 267.200 +443 265.300 +444 217.300 +444 267.300 +445 54.300 +445 248.300 +446 83.200 +446 265.100 +447 202.700 +448 83.200 +448 109.100 +448 157.100 +448 247.000 +449 217.300 +450 247.600 +451 157.100 +451 245.400 +454 247.400 +455 265.300 +456 97.100 +457 231.300 +457 247.100 +458 230.200 +459 81.800 +459 157.500 +459 229.300 +461 90.300 +461 216.900 +461 247.400 +463 265.000 +464 157.600 +464 217.300 +465 69.400 +465 97.000 +465 123.200 +465 233.100 +465 287.600 +466 58.500 +466 73.000 +466 231.700 +466 247.400 +467 265.200 +468 265.000 +468 287.600 +469 265.100 +471 278.700 +472 265.200 +474 158.300 +475 266.900 +476 216.500 +479 82.800 +479 110.500 +479 133.000 +479 264.500 +480 286.400 +481 247.100 +482 247.100 +483 96.800 +483 247.200 +484 57.400 +485 247.900 +485 268.700 +486 265.300 +487 70.300 +487 83.200 +487 95.700 +487 110.700 +487 172.700 +487 278.200 +488 264.800 +489 247.000 +489 288.000 +493 78.700 +493 107.400 +493 218.000 +493 267.300 +494 57.300 +494 244.500 +495 110.600 +496 83.400 +496 144.700 +496 246.900 +496 284.400 +497 157.900 +498 83.500 +498 123.500 +498 170.600 +498 283.900 +500 59.900 +500 143.500 +500 247.300 +501 247.300 +502 122.500 +502 232.000 +503 96.400 +503 176.000 +504 113.400 +504 132.200 +505 123.600 +505 201.800 +505 265.100 +507 267.600 +508 229.900 +509 88.100 +509 97.200 +509 158.200 +509 231.600 +510 226.400 +511 229.500 +511 247.400 +511 267.800 +512 267.300 +513 264.900 +514 59.400 +514 96.500 +514 174.500 +515 82.900 +517 267.100 +518 217.300 +519 96.700 +519 228.700 +519 266.800 +521 263.100 +522 69.400 +522 96.200 +522 134.300 +522 158.000 +523 95.300 +523 124.000 +524 264.800 +528 232.200 +528 267.100 +529 83.800 +529 247.600 +530 247.600 +531 83.100 +531 144.200 +531 203.600 +531 217.800 +531 267.600 +535 144.400 +535 185.600 +536 59.500 +536 124.000 +536 247.200 +536 267.600 +537 247.300 +538 204.100 +538 269.000 +540 157.400 +541 95.000 +541 246.800 +542 110.700 +545 116.200 +545 171.200 +546 109.100 +546 157.800 +546 244.100 +548 247.700 +549 267.400 +552 95.000 +552 216.000 +553 265.500 +555 203.600 +555 247.200 +556 267.400 +557 244.200 +558 109.300 +558 232.100 +559 144.400 +560 144.400 +562 157.200 +562 247.000 +562 264.900 +563 70.100 +563 96.500 +563 123.600 +563 157.700 +563 231.800 +564 263.300 +565 244.600 +565 267.400 +566 108.400 +567 72.200 +567 96.300 +568 299.300 +569 231.700 +570 174.400 +570 218.300 +570 246.100 +571 231.900 +572 247.500 +572 267.400 +573 174.700 +574 265.600 +575 109.200 +575 216.700 +575 287.600 +576 264.400 +578 58.600 +578 95.500 +578 125.100 +579 248.200 +580 247.300 +582 83.600 +582 265.000 +583 265.200 +584 82.700 +585 247.400 +586 267.000 +589 83.800 +590 231.100 +592 107.700 +592 232.000 +592 263.100 +593 56.900 +593 142.200 +594 97.300 +594 265.000 +595 229.700 +595 264.100 +596 217.100 +597 244.400 +598 93.300 +598 155.200 +598 262.800 +600 217.200 +600 247.900 +601 211.100 +601 229.900 +601 248.200 +601 286.400 +602 60.600 +603 130.800 +605 57.700 +605 109.100 +605 158.300 +605 230.200 +605 247.300 +606 110.000 +607 247.300 +610 54.200 +610 69.300 +610 84.100 +610 103.100 +610 128.600 +610 157.900 +610 231.700 +610 269.100 +611 232.400 +611 264.400 +613 231.900 +615 284.800 +617 110.400 +617 247.300 +619 247.100 +619 265.100 +620 247.400 +621 265.000 +622 248.100 +623 123.700 +625 247.100 +626 247.600 +626 267.500 +627 144.400 +628 94.800 +628 143.200 +628 232.300 +628 268.900 +629 127.000 +629 264.600 +631 83.300 +632 97.100 +632 227.800 +633 144.400 +633 265.000 +634 217.100 +637 60.700 +637 247.300 +637 267.700 +638 91.500 +638 123.800 +638 247.400 +640 133.600 +640 247.300 +641 204.800 +642 247.500 +643 83.900 +643 107.900 +643 174.200 +644 244.200 +645 83.500 +645 108.000 +645 214.900 +646 247.400 +646 267.200 +647 89.600 +647 144.200 +647 217.800 +647 267.100 +648 247.600 +649 217.100 +651 105.500 +651 248.200 +652 72.600 +652 124.400 +652 145.100 +652 174.600 +652 231.600 +652 247.500 +653 267.500 +654 109.000 +655 217.500 +656 143.900 +657 230.500 +658 202.500 +658 247.100 +660 266.900 +661 216.900 +662 158.000 +662 214.200 +662 247.300 +663 265.100 +664 83.100 +664 124.100 +664 188.700 +666 201.300 +666 247.500 +668 217.200 +669 58.500 +670 247.600 +671 231.100 +672 97.300 +672 122.300 +672 214.100 +675 110.900 +675 158.600 +675 248.300 +676 97.100 +676 267.100 +677 248.000 +678 124.100 +678 158.200 +679 231.900 +679 287.500 +683 143.500 +686 232.100 +688 144.600 +688 247.300 +691 267.900 +692 247.400 +693 143.900 +694 123.600 +695 232.200 +695 276.700 +696 204.000 +696 217.900 +697 175.000 +697 261.100 +698 232.100 +699 175.400 +699 247.300 +701 144.300 +701 267.100 +702 109.800 +702 157.800 +702 232.100 +703 123.600 +705 83.500 +705 264.200 +706 264.400 +707 53.600 +707 71.800 +707 132.900 +707 231.700 +708 231.700 +708 265.400 +709 91.100 +709 137.000 +710 59.400 +710 247.900 +710 265.000 +712 96.600 +712 123.900 +713 110.600 +714 83.500 +714 158.200 +714 248.300 +715 266.900 +716 143.500 +716 203.500 +717 231.800 +719 95.600 +719 247.300 +720 230.700 +720 269.000 +722 96.700 +722 108.000 +722 201.500 +722 216.400 +722 266.900 +723 114.100 +723 143.500 +724 267.500 +726 82.500 +726 93.800 +726 247.300 +727 232.200 +728 287.100 +730 108.000 +730 263.500 +731 83.500 +732 157.500 +732 232.100 +732 264.800 +735 122.900 +735 264.800 +736 232.400 +737 232.200 +737 264.600 +738 124.900 +738 144.000 +738 268.100 +739 247.400 +740 56.600 +740 157.900 +741 123.200 +741 226.700 +741 247.900 +742 247.000 +743 123.800 +744 58.300 +744 110.700 +744 157.900 +744 264.800 +745 144.700 +745 181.300 +745 248.200 +745 265.400 +745 288.300 +746 232.000 +746 267.400 +747 123.100 +747 244.800 +748 123.500 +748 144.000 +749 216.300 +751 81.100 +751 157.500 +751 247.800 +752 56.600 +755 145.100 +756 247.500 +758 108.800 +758 264.700 +759 174.100 +759 248.000 +759 284.100 +760 263.600 +761 123.400 +761 157.300 +761 197.200 +762 230.100 +763 72.500 +763 97.200 +763 144.100 +763 218.400 +763 265.100 +764 247.600 +765 82.700 +765 144.700 +766 286.700 +767 247.200 +770 158.000 +771 157.900 +771 265.100 +772 123.200 +772 159.400 +772 173.800 +774 143.500 +774 248.200 +775 247.600 +778 124.100 +778 144.200 +778 232.200 +779 143.500 +781 122.500 +782 231.600 +782 248.200 +783 83.300 +783 123.100 +783 143.700 +783 287.500 +784 264.600 +785 230.100 +787 269.100 +788 201.700 +788 217.400 +788 264.500 +789 247.100 +790 108.200 +791 123.600 +791 159.300 +791 265.400 +792 96.300 +792 247.500 +792 269.300 +793 58.200 +793 123.100 +793 268.900 +797 248.400 +798 232.300 +799 174.400 +799 265.200 +800 107.800 +800 247.400 +800 288.000 +802 265.100 +803 174.800 +805 107.800 +805 265.200 +806 108.300 +806 265.400 +807 97.400 +807 216.900 +807 269.000 +808 170.500 +808 232.200 +808 248.300 +808 286.300 +809 216.400 +809 265.300 +810 232.000 +810 264.500 +811 83.200 +811 97.300 +812 265.100 +813 247.300 +814 247.100 +815 232.200 +815 268.800 +816 174.400 +816 215.600 +818 65.200 +818 123.200 +819 83.200 +819 158.500 +820 95.300 +820 231.900 +820 267.800 +821 83.500 +821 130.600 +821 158.100 +821 217.700 +822 123.600 +822 157.800 +822 247.200 +823 110.800 +823 265.200 +824 151.300 +824 216.900 +824 247.500 +825 109.100 +825 124.000 +825 155.300 +825 265.500 +826 175.300 +828 83.800 +828 248.200 +829 124.400 +829 196.800 +829 288.200 +831 174.000 +836 265.300 +838 97.400 +838 158.200 +838 247.400 +842 82.700 +842 184.100 +842 216.900 +843 54.100 +843 128.400 +844 247.200 +845 216.100 +846 110.800 +846 158.000 +847 172.100 +847 247.200 +848 174.600 +848 288.400 +849 158.300 +849 247.600 +852 143.000 +852 246.900 +852 267.400 +853 158.400 +853 247.400 +854 233.000 +854 247.000 +854 287.800 +855 175.200 +856 158.000 +856 247.200 +858 123.600 +858 158.400 +860 267.600 +862 124.000 +862 288.400 +863 265.100 +865 216.500 +867 97.000 +868 83.000 +868 124.300 +868 232.100 +868 265.400 +869 57.200 +870 144.200 +871 95.300 +871 231.600 +872 83.200 +873 268.100 +876 83.500 +876 123.200 +877 96.800 +877 171.200 +877 217.300 +877 232.600 +878 123.700 +879 83.100 +879 131.400 +879 144.600 +879 217.400 +880 232.400 +881 246.800 +882 264.100 +883 97.300 +884 68.300 +885 231.300 +886 96.300 +886 157.900 +887 269.100 +891 244.200 +892 183.900 +892 267.000 +893 174.300 +894 217.100 +895 110.700 +895 230.500 +896 97.000 +896 267.500 +897 216.400 +898 217.600 +898 232.100 +899 247.600 +899 283.800 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_1_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_1_i_pop.dat new file mode 100644 index 000000000..4053987e0 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_1_i_pop.dat @@ -0,0 +1,300 @@ +sender time_ms +900 96.800 +901 264.500 +902 83.800 +902 158.000 +902 247.300 +904 267.300 +905 158.300 +905 247.200 +906 82.500 +906 108.600 +909 83.700 +909 264.700 +910 232.400 +911 217.300 +911 265.000 +911 286.500 +913 247.100 +914 123.400 +915 83.500 +915 123.400 +915 248.200 +916 68.400 +916 83.400 +916 124.400 +916 210.800 +916 232.000 +916 267.100 +917 122.900 +918 217.400 +921 216.200 +922 247.500 +923 244.800 +923 264.800 +924 123.900 +925 157.400 +925 247.500 +926 267.600 +928 144.000 +929 143.400 +930 123.100 +930 157.700 +930 247.300 +931 216.800 +932 136.700 +932 241.100 +933 96.500 +934 247.100 +935 83.500 +935 108.000 +935 159.400 +935 213.400 +936 51.700 +936 108.000 +936 144.600 +936 158.200 +937 265.100 +938 123.500 +938 230.100 +939 109.000 +939 247.600 +939 267.000 +940 123.200 +940 182.600 +943 83.500 +943 265.200 +944 91.000 +944 262.600 +945 59.800 +946 265.100 +948 175.600 +948 218.400 +948 247.400 +949 82.000 +950 216.300 +951 216.600 +951 247.700 +951 267.000 +953 137.100 +955 232.000 +956 247.300 +957 110.500 +957 246.900 +957 278.500 +959 95.700 +959 174.300 +959 214.500 +961 83.000 +961 143.000 +962 247.500 +963 216.500 +965 96.800 +965 289.800 +966 97.200 +967 115.700 +967 144.000 +968 72.400 +968 158.600 +971 82.200 +971 107.800 +971 217.900 +972 70.600 +972 83.500 +972 247.300 +973 84.000 +973 247.500 +974 58.400 +974 91.300 +974 109.300 +974 157.100 +974 246.800 +975 53.600 +975 96.500 +976 247.300 +978 201.400 +978 217.500 +978 247.100 +980 96.000 +981 247.000 +984 176.100 +984 265.200 +985 244.200 +988 123.000 +988 217.600 +988 265.200 +989 247.700 +992 217.500 +992 247.600 +993 247.300 +994 217.100 +995 216.700 +995 247.100 +996 97.300 +998 84.100 +999 230.600 +1000 248.000 +1003 113.400 +1003 267.600 +1005 215.200 +1005 265.300 +1007 226.700 +1007 248.300 +1008 232.200 +1009 143.900 +1009 265.300 +1011 83.800 +1011 286.300 +1012 83.500 +1013 84.000 +1013 216.100 +1015 83.200 +1015 174.500 +1015 230.100 +1015 267.900 +1016 231.400 +1016 247.700 +1017 246.800 +1019 123.500 +1019 265.000 +1021 96.300 +1021 217.400 +1021 230.500 +1022 218.200 +1022 231.800 +1023 157.700 +1023 261.800 +1024 109.500 +1024 278.000 +1025 218.300 +1025 247.300 +1026 247.400 +1027 108.600 +1027 144.100 +1027 267.500 +1029 54.700 +1029 70.100 +1029 133.200 +1029 144.800 +1029 204.000 +1029 246.200 +1031 247.200 +1032 246.400 +1033 110.700 +1035 82.700 +1035 159.200 +1036 232.300 +1036 246.800 +1037 110.500 +1037 143.800 +1038 248.300 +1038 264.500 +1040 247.000 +1042 96.700 +1043 84.000 +1043 123.100 +1043 232.100 +1045 216.600 +1046 247.800 +1046 287.700 +1048 107.700 +1048 227.000 +1051 83.900 +1051 144.800 +1052 232.200 +1054 70.200 +1054 123.400 +1054 144.900 +1055 232.300 +1057 230.300 +1058 247.400 +1059 247.500 +1061 97.400 +1061 124.400 +1061 138.600 +1062 82.300 +1062 175.400 +1062 246.800 +1064 175.000 +1064 265.400 +1065 82.600 +1065 158.000 +1069 109.400 +1069 247.100 +1070 103.400 +1071 232.400 +1071 268.600 +1072 106.100 +1072 218.000 +1073 216.700 +1073 247.600 +1074 264.500 +1076 229.800 +1076 269.100 +1077 197.500 +1077 288.000 +1078 78.800 +1078 157.900 +1078 225.100 +1078 247.500 +1078 267.500 +1080 60.700 +1080 107.300 +1080 124.000 +1080 247.600 +1080 282.900 +1081 217.100 +1081 264.900 +1082 115.400 +1083 247.800 +1086 267.400 +1088 266.200 +1091 240.300 +1092 204.000 +1092 247.400 +1093 83.700 +1093 122.900 +1093 158.000 +1093 217.000 +1095 247.900 +1096 174.100 +1098 158.100 +1098 247.300 +1100 94.500 +1100 266.900 +1101 109.500 +1101 264.700 +1103 95.300 +1103 123.900 +1103 244.700 +1103 267.000 +1104 123.900 +1104 157.600 +1104 247.900 +1105 267.000 +1108 81.700 +1108 216.900 +1108 265.000 +1109 226.600 +1110 96.400 +1110 247.400 +1111 247.800 +1112 143.800 +1112 266.900 +1114 107.900 +1114 247.600 +1114 287.300 +1115 264.700 +1116 69.300 +1117 159.500 +1118 143.400 +1118 264.800 +1119 96.100 +1120 247.300 +1121 57.900 +1121 288.000 +1122 248.100 +1123 122.700 +1123 158.000 +1123 216.200 +1124 264.100 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_2_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_2_e_pop.dat new file mode 100644 index 000000000..71c8cd0c4 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_2_e_pop.dat @@ -0,0 +1,1257 @@ +sender time_ms +0 267.200 +1 83.300 +1 204.200 +1 267.000 +2 157.900 +3 107.900 +3 248.100 +5 157.500 +5 265.100 +7 72.400 +7 108.800 +8 108.600 +10 83.000 +10 198.300 +10 246.900 +12 204.300 +13 132.700 +13 227.600 +14 107.900 +16 143.800 +16 265.800 +17 157.800 +18 82.900 +18 265.100 +19 134.400 +19 245.400 +20 158.400 +21 123.400 +23 158.000 +23 247.200 +24 268.500 +25 246.500 +28 216.700 +29 267.400 +30 97.200 +30 134.400 +30 158.200 +30 247.400 +31 73.200 +31 115.600 +33 83.200 +33 122.700 +33 246.900 +35 134.800 +35 174.900 +35 241.500 +37 58.700 +38 97.200 +40 132.900 +40 157.500 +40 232.000 +40 246.700 +41 247.200 +42 123.500 +42 144.500 +42 245.000 +44 132.800 +44 158.500 +45 185.000 +45 215.300 +45 266.700 +46 70.200 +46 201.000 +46 216.200 +47 246.500 +47 267.900 +48 247.600 +49 283.700 +50 216.200 +50 246.000 +51 246.600 +54 58.200 +54 267.000 +56 97.300 +56 203.500 +57 246.900 +59 247.300 +61 133.700 +61 265.000 +64 82.800 +65 57.200 +65 247.600 +66 69.700 +66 114.700 +66 133.600 +66 265.100 +68 69.200 +69 53.200 +69 83.500 +69 110.700 +69 141.400 +70 53.500 +70 108.300 +70 158.100 +70 267.300 +71 265.500 +72 247.800 +73 108.800 +74 202.500 +75 107.900 +75 247.300 +76 230.700 +76 286.400 +77 83.300 +77 108.700 +77 185.400 +78 82.300 +79 131.200 +79 265.100 +80 82.900 +80 113.200 +80 137.400 +80 247.300 +81 183.800 +82 277.600 +83 286.500 +84 64.600 +84 129.200 +85 112.800 +86 110.600 +86 267.800 +87 83.600 +88 158.300 +88 204.300 +90 247.400 +91 265.400 +92 83.400 +92 157.800 +92 248.100 +93 247.100 +94 83.400 +94 231.500 +94 265.200 +95 113.100 +95 264.700 +96 247.100 +97 107.800 +97 265.200 +98 57.800 +98 157.800 +100 176.300 +100 288.000 +101 204.200 +101 266.500 +102 69.200 +102 123.300 +102 182.800 +103 217.300 +103 247.600 +104 60.600 +104 158.300 +104 230.600 +105 203.100 +106 183.100 +106 247.500 +106 287.800 +108 83.700 +108 134.600 +108 289.000 +110 83.100 +110 108.700 +110 144.400 +111 133.500 +111 203.300 +112 244.600 +113 198.100 +113 216.900 +113 246.700 +114 265.200 +115 158.100 +115 217.500 +117 231.000 +118 66.500 +118 174.600 +119 67.600 +119 174.700 +119 247.400 +121 96.800 +121 218.000 +121 247.000 +122 97.200 +122 158.300 +123 247.500 +124 137.000 +126 69.400 +126 109.100 +127 114.700 +127 267.200 +129 71.900 +129 86.400 +129 95.800 +129 132.200 +129 158.300 +130 70.500 +130 144.900 +132 83.200 +132 269.500 +134 203.100 +134 246.600 +134 265.300 +135 287.400 +136 82.200 +137 246.900 +139 267.600 +140 58.600 +140 287.400 +141 108.400 +141 214.900 +141 246.600 +142 57.000 +142 83.000 +142 123.600 +143 68.000 +143 123.600 +144 141.700 +146 122.700 +146 247.200 +147 63.700 +147 83.000 +147 158.100 +148 267.700 +149 202.200 +151 173.900 +151 201.200 +152 266.900 +153 217.400 +154 184.500 +156 284.100 +158 247.400 +161 97.300 +161 136.600 +161 174.600 +163 70.300 +163 217.100 +163 268.000 +164 56.200 +164 134.800 +164 266.100 +165 114.300 +165 174.600 +165 268.200 +165 288.400 +167 263.000 +168 83.400 +170 247.700 +170 268.000 +171 144.900 +172 144.700 +172 203.000 +172 232.100 +173 83.100 +173 128.200 +173 184.200 +173 288.000 +174 56.700 +174 123.000 +174 158.100 +175 82.800 +176 83.200 +177 109.200 +177 157.600 +178 108.200 +178 144.300 +178 247.700 +179 109.000 +179 279.300 +180 57.200 +180 267.300 +181 176.200 +181 247.400 +182 144.100 +182 159.300 +182 231.800 +183 72.100 +184 107.900 +184 201.700 +185 158.400 +186 95.400 +187 96.900 +188 135.100 +188 159.300 +188 267.500 +190 68.700 +191 265.000 +194 83.100 +194 202.400 +194 216.800 +195 68.300 +195 134.500 +197 158.300 +198 82.400 +198 144.300 +198 288.900 +199 144.500 +199 232.100 +203 82.800 +203 158.200 +203 217.800 +203 247.200 +204 247.600 +205 247.200 +206 57.500 +206 158.500 +206 240.800 +207 143.100 +207 215.500 +208 247.300 +208 287.700 +209 109.500 +209 134.300 +210 56.600 +210 83.100 +210 158.000 +211 132.200 +212 215.700 +213 54.400 +213 123.600 +213 137.100 +213 204.000 +214 83.300 +214 109.100 +214 197.400 +214 216.600 +218 175.100 +218 265.400 +218 284.000 +219 83.200 +219 130.200 +219 158.300 +220 133.000 +220 195.300 +222 215.600 +222 268.800 +223 82.400 +226 122.900 +226 232.500 +226 267.700 +227 123.300 +231 83.100 +231 204.200 +231 267.600 +233 157.900 +233 267.300 +234 81.000 +234 97.400 +236 83.300 +236 198.500 +236 232.600 +236 265.100 +237 232.100 +237 269.100 +238 56.500 +238 82.400 +238 124.400 +238 134.500 +239 182.100 +239 217.200 +240 179.800 +240 247.700 +241 123.600 +242 109.100 +242 175.500 +244 244.800 +244 265.200 +245 83.500 +245 145.200 +247 204.300 +247 267.100 +248 145.000 +249 265.300 +250 95.300 +250 267.100 +251 283.900 +252 288.700 +253 108.500 +254 73.200 +254 202.800 +254 265.400 +255 158.200 +255 268.700 +256 247.400 +256 278.600 +257 69.700 +257 246.700 +259 231.800 +262 157.600 +263 109.000 +263 247.200 +263 286.200 +264 97.300 +265 174.100 +266 69.600 +266 107.300 +266 247.200 +267 95.800 +267 115.500 +267 247.100 +268 173.900 +268 247.400 +269 95.900 +269 124.200 +269 267.000 +270 232.100 +271 158.100 +271 246.600 +272 122.800 +273 246.900 +274 82.800 +274 107.900 +274 144.300 +274 216.100 +276 83.300 +276 204.100 +279 54.600 +279 68.200 +279 158.100 +279 230.200 +279 286.900 +280 96.900 +280 122.100 +281 97.800 +282 247.400 +284 133.500 +284 158.400 +286 267.200 +287 83.000 +289 82.500 +289 247.300 +290 144.800 +291 96.600 +291 157.400 +292 82.600 +292 135.100 +292 265.500 +293 97.400 +294 158.000 +296 247.100 +297 83.400 +300 216.300 +304 144.600 +306 217.500 +307 267.800 +308 60.400 +308 133.500 +308 158.400 +308 265.100 +309 158.000 +309 288.000 +310 123.500 +310 217.400 +313 278.000 +314 283.800 +315 232.100 +315 267.600 +316 55.800 +316 83.200 +316 157.000 +317 58.000 +317 96.900 +317 124.000 +317 201.400 +318 288.100 +319 267.200 +320 96.700 +320 198.200 +320 217.000 +321 203.100 +321 267.500 +323 97.200 +323 158.600 +323 215.700 +323 283.600 +324 247.200 +325 68.400 +325 96.200 +325 136.900 +325 215.900 +325 231.400 +326 243.700 +327 81.800 +327 108.700 +327 157.500 +328 83.300 +329 66.400 +329 123.500 +330 96.500 +331 69.200 +331 217.800 +333 108.900 +333 202.900 +333 287.800 +334 247.300 +335 195.200 +335 230.400 +335 265.400 +336 158.300 +338 96.600 +338 247.100 +338 283.900 +339 141.200 +339 247.600 +340 114.500 +340 247.300 +341 68.600 +341 83.800 +341 109.100 +341 134.300 +341 175.100 +341 232.200 +341 247.400 +342 110.400 +342 198.300 +342 267.800 +344 58.300 +345 215.700 +347 267.600 +348 134.300 +348 157.700 +348 244.800 +349 144.400 +351 134.600 +351 247.400 +352 158.000 +352 247.000 +353 109.000 +353 157.900 +353 247.300 +354 94.700 +354 267.800 +355 230.200 +356 83.100 +356 157.800 +356 247.900 +356 267.600 +358 59.200 +358 230.800 +360 70.500 +360 96.800 +360 123.900 +360 214.500 +360 247.000 +362 123.700 +362 171.800 +363 246.200 +365 83.400 +365 204.100 +366 197.700 +370 288.300 +371 247.500 +372 83.500 +373 230.700 +373 247.200 +376 134.100 +378 247.300 +379 83.000 +379 247.800 +380 158.000 +381 247.000 +383 202.800 +384 124.300 +384 203.300 +385 141.900 +386 132.600 +386 231.600 +387 216.400 +387 286.700 +388 83.200 +389 68.900 +389 123.400 +389 145.100 +390 246.300 +390 267.100 +391 123.400 +391 157.900 +391 231.600 +393 278.700 +394 247.200 +395 58.400 +395 135.100 +395 158.100 +395 203.700 +396 83.300 +396 124.300 +396 144.100 +396 204.000 +397 174.600 +398 230.200 +401 267.400 +402 217.400 +402 265.600 +403 286.800 +404 265.400 +405 133.300 +406 69.400 +406 197.300 +407 247.600 +409 83.700 +409 144.200 +409 203.400 +409 247.000 +409 267.500 +410 198.200 +410 267.400 +411 244.700 +412 123.700 +413 158.300 +413 232.100 +415 59.400 +415 145.300 +415 174.200 +415 265.100 +416 267.600 +417 70.200 +417 134.800 +417 187.800 +419 156.200 +419 267.000 +420 159.300 +420 265.300 +422 69.600 +422 217.000 +423 109.100 +423 201.700 +424 59.100 +424 246.500 +425 158.100 +427 81.600 +427 174.700 +433 96.500 +434 82.400 +434 145.200 +435 297.600 +436 185.600 +439 83.600 +439 133.300 +439 187.500 +439 265.200 +440 83.200 +442 127.800 +442 143.100 +442 158.100 +442 185.100 +442 231.900 +443 158.600 +443 231.500 +445 157.900 +448 270.700 +450 202.200 +451 69.700 +451 247.200 +452 265.300 +453 244.600 +454 134.700 +454 158.000 +454 185.900 +455 144.400 +455 247.300 +456 83.600 +456 123.400 +457 122.900 +457 248.000 +458 57.000 +458 108.100 +458 183.600 +459 108.800 +459 143.300 +459 174.400 +459 218.300 +460 203.800 +461 175.700 +462 157.900 +465 57.100 +465 133.400 +465 216.500 +465 231.200 +466 82.600 +466 115.600 +467 287.500 +468 130.800 +469 123.400 +469 157.400 +469 204.400 +469 265.500 +471 204.200 +471 217.400 +472 114.500 +472 137.100 +472 264.900 +473 247.600 +473 278.400 +474 72.800 +475 268.100 +477 185.600 +479 83.300 +479 247.200 +480 218.700 +480 231.100 +481 50.100 +481 82.500 +482 96.600 +482 201.900 +482 232.300 +482 267.400 +484 218.300 +485 197.300 +486 122.500 +487 97.500 +487 245.600 +488 83.300 +488 135.000 +488 183.200 +489 72.300 +489 133.300 +489 175.600 +491 157.200 +491 247.200 +492 134.400 +494 134.300 +495 267.400 +500 170.900 +500 217.200 +500 247.500 +501 268.000 +502 184.300 +502 287.600 +505 144.000 +505 267.000 +507 97.300 +507 247.500 +508 69.700 +508 216.300 +509 144.100 +511 158.200 +511 232.600 +512 247.300 +513 217.600 +513 246.800 +514 247.400 +515 72.500 +515 122.900 +515 158.000 +516 93.300 +516 267.200 +517 69.700 +517 97.400 +517 174.300 +517 265.200 +518 265.100 +519 197.500 +520 143.800 +521 115.600 +521 283.200 +522 82.900 +523 216.700 +524 247.100 +525 247.500 +527 156.700 +528 133.100 +528 217.500 +529 60.600 +529 111.500 +529 143.800 +529 211.900 +529 231.700 +529 267.000 +530 112.300 +530 246.900 +530 269.100 +532 230.700 +532 244.600 +533 231.800 +534 70.800 +535 69.500 +536 158.200 +537 157.700 +537 247.300 +538 116.100 +539 265.300 +540 157.700 +540 202.200 +541 196.000 +541 231.400 +542 246.900 +543 108.300 +543 174.400 +544 81.500 +545 68.400 +545 175.200 +546 70.100 +547 69.000 +547 131.300 +547 265.000 +549 67.800 +549 159.000 +552 247.600 +553 94.500 +553 216.900 +555 265.100 +557 145.000 +558 231.400 +558 247.100 +559 81.700 +560 185.500 +560 265.000 +562 69.100 +564 83.000 +564 110.300 +564 267.000 +566 134.700 +568 157.100 +569 131.200 +570 157.800 +570 247.000 +572 144.500 +572 247.800 +573 247.500 +573 266.500 +574 70.100 +575 218.100 +576 267.200 +577 267.200 +578 265.400 +579 69.200 +579 159.400 +580 268.700 +581 120.200 +581 214.400 +582 158.300 +582 287.400 +583 57.600 +583 122.800 +583 144.900 +583 197.800 +583 265.900 +586 144.100 +588 97.100 +588 176.000 +590 217.000 +591 107.700 +591 157.700 +591 203.000 +592 214.700 +594 247.100 +595 114.600 +596 267.400 +598 59.400 +598 123.000 +598 202.800 +598 263.000 +599 137.500 +600 68.700 +600 172.300 +600 247.000 +601 144.200 +601 248.300 +601 265.300 +603 231.700 +605 202.200 +605 278.900 +606 83.000 +606 282.600 +607 61.900 +607 97.100 +607 174.800 +607 216.200 +609 69.700 +609 122.800 +609 134.800 +609 187.000 +609 216.700 +610 158.200 +611 267.400 +613 111.800 +613 158.300 +613 247.200 +613 267.900 +614 267.500 +615 58.600 +615 83.600 +616 122.400 +616 136.800 +617 107.800 +617 132.700 +617 216.800 +617 247.700 +619 231.700 +620 158.000 +621 133.300 +621 157.300 +622 70.200 +622 176.000 +623 97.100 +623 157.800 +623 230.800 +623 247.800 +624 247.700 +624 289.000 +628 247.800 +631 133.100 +631 267.100 +633 83.700 +633 247.300 +634 265.000 +634 282.900 +635 123.900 +635 143.100 +636 96.700 +636 110.500 +636 143.700 +636 231.800 +636 247.300 +636 268.900 +639 268.000 +641 174.700 +642 157.400 +642 203.800 +643 83.200 +645 82.500 +645 174.400 +646 109.100 +646 174.700 +646 265.100 +647 83.300 +648 97.500 +648 174.100 +649 83.200 +649 267.400 +650 51.900 +650 134.600 +652 267.400 +657 57.300 +657 93.700 +657 124.000 +657 244.300 +658 68.100 +658 233.000 +658 247.500 +659 246.600 +660 246.900 +663 247.200 +665 72.300 +665 107.900 +665 247.700 +666 158.200 +666 247.000 +669 158.100 +669 201.800 +669 267.000 +670 158.400 +670 247.500 +671 158.200 +671 196.700 +672 204.300 +674 121.800 +674 278.700 +675 82.700 +676 59.200 +676 123.600 +676 143.700 +676 231.400 +676 265.400 +677 173.600 +678 59.600 +681 247.800 +682 63.200 +682 83.100 +682 119.800 +682 123.400 +682 157.800 +682 217.300 +684 84.100 +685 115.800 +685 143.800 +686 83.300 +686 143.500 +687 97.300 +687 203.200 +688 73.600 +688 217.500 +688 246.300 +689 155.900 +691 92.200 +691 158.400 +691 203.000 +692 58.200 +693 58.300 +694 247.000 +695 124.000 +697 83.700 +697 247.400 +698 266.100 +699 131.000 +699 247.400 +699 265.200 +701 231.900 +702 58.100 +703 180.400 +705 82.100 +705 143.300 +706 267.400 +706 287.900 +707 203.800 +709 128.200 +710 123.000 +710 157.300 +710 247.600 +710 267.700 +711 67.000 +713 110.600 +714 247.200 +714 267.000 +715 158.100 +720 158.000 +721 144.800 +721 265.200 +723 216.800 +724 215.400 +724 264.900 +727 247.600 +728 246.900 +729 108.200 +729 244.800 +729 268.500 +729 287.300 +731 247.700 +732 158.200 +732 267.700 +733 143.300 +733 265.300 +734 247.100 +735 123.600 +735 141.600 +736 265.300 +737 108.000 +740 246.200 +741 248.300 +742 134.500 +745 157.800 +746 58.500 +746 141.600 +746 267.100 +747 231.500 +749 82.800 +749 115.300 +749 268.500 +750 262.700 +751 68.900 +751 204.100 +751 231.300 +751 268.500 +753 68.400 +753 158.000 +753 265.600 +754 265.700 +755 123.800 +755 143.500 +756 159.000 +757 97.200 +758 123.900 +758 246.900 +760 232.000 +762 97.400 +763 137.900 +765 233.100 +765 287.700 +766 70.500 +768 83.500 +768 265.500 +769 58.900 +769 82.900 +769 130.800 +769 247.200 +771 122.900 +772 83.300 +772 143.500 +772 247.200 +773 103.900 +773 132.100 +773 157.800 +774 247.400 +777 111.400 +778 95.700 +778 108.100 +778 142.900 +779 122.900 +779 267.700 +780 246.400 +780 265.800 +781 59.100 +781 97.000 +781 144.400 +781 243.600 +782 63.100 +782 95.500 +782 130.500 +783 248.200 +785 97.500 +785 109.100 +786 244.000 +787 247.100 +788 157.600 +789 265.100 +790 133.000 +792 267.000 +793 60.500 +793 130.400 +793 217.400 +793 247.200 +795 247.400 +797 83.200 +797 216.900 +797 247.100 +799 130.800 +801 122.700 +801 134.700 +801 247.700 +802 97.200 +802 203.700 +803 267.800 +805 69.400 +805 124.100 +805 158.000 +806 59.500 +806 123.200 +806 157.300 +806 175.100 +806 216.800 +807 247.100 +807 266.700 +808 267.000 +810 83.300 +810 157.700 +811 110.700 +811 158.200 +813 134.700 +813 159.200 +814 157.400 +814 217.500 +815 96.600 +815 133.000 +815 267.500 +817 69.700 +818 69.700 +818 131.500 +818 157.500 +818 246.200 +819 123.100 +820 247.700 +821 83.100 +822 83.100 +822 247.000 +822 265.400 +823 247.800 +824 121.800 +824 232.400 +826 246.800 +827 246.800 +827 265.400 +828 267.400 +829 247.700 +829 267.500 +832 133.100 +833 113.900 +833 123.500 +833 157.800 +833 265.100 +834 174.700 +834 216.500 +835 217.200 +836 96.300 +836 201.700 +837 247.600 +838 158.400 +839 97.100 +839 113.800 +839 159.300 +839 289.700 +842 108.400 +842 158.200 +843 202.900 +843 247.100 +844 109.200 +844 157.700 +844 269.400 +846 107.400 +847 68.500 +847 123.300 +847 175.200 +849 158.500 +850 145.000 +851 202.000 +853 158.200 +853 247.400 +854 287.500 +855 57.800 +855 96.900 +855 134.200 +856 267.600 +857 133.000 +857 245.300 +857 279.700 +858 267.100 +861 247.200 +862 266.300 +863 82.700 +863 123.900 +863 246.800 +864 157.500 +864 218.200 +865 265.300 +867 231.800 +868 59.200 +868 83.600 +868 183.100 +868 267.200 +869 144.200 +869 267.400 +870 82.600 +870 216.100 +871 144.500 +872 109.200 +872 266.800 +874 158.400 +874 218.200 +875 247.600 +876 143.800 +878 109.100 +879 123.000 +879 134.800 +882 80.500 +882 133.400 +883 59.500 +884 108.200 +884 276.700 +885 157.500 +885 184.300 +886 231.300 +887 84.200 +887 123.600 +887 247.200 +888 135.200 +890 232.200 +891 266.200 +892 248.200 +892 267.500 +893 83.200 +893 157.800 +893 265.200 +895 83.500 +895 116.000 +895 144.200 +897 59.800 +897 247.600 +897 265.300 +899 108.300 +899 144.200 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_2_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_2_i_pop.dat new file mode 100644 index 000000000..61aef96f2 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_2_i_pop.dat @@ -0,0 +1,300 @@ +sender time_ms +900 201.500 +903 53.600 +903 133.300 +906 247.600 +907 61.200 +907 124.300 +907 143.700 +907 158.500 +907 174.700 +911 198.200 +911 246.800 +913 247.100 +914 144.100 +915 241.200 +916 262.800 +918 108.300 +919 82.800 +919 123.400 +920 158.100 +922 69.200 +922 123.600 +922 174.400 +924 83.200 +926 82.600 +926 115.800 +926 267.700 +927 60.400 +927 83.400 +927 247.400 +932 97.500 +933 133.500 +934 247.200 +935 247.300 +935 268.600 +937 68.500 +937 157.600 +938 158.000 +938 194.800 +939 53.500 +939 97.000 +939 144.500 +939 157.800 +941 58.600 +941 123.200 +944 59.900 +944 174.600 +944 266.900 +945 108.900 +946 110.400 +946 174.900 +947 216.600 +947 276.600 +949 60.600 +949 81.100 +949 247.000 +950 97.400 +950 180.500 +950 265.500 +952 110.300 +952 124.300 +954 282.000 +955 97.300 +955 201.300 +955 247.100 +956 69.700 +957 83.300 +957 109.100 +957 132.700 +957 202.500 +957 217.900 +957 247.600 +959 61.500 +959 70.900 +959 265.300 +960 106.900 +962 122.800 +962 216.800 +963 188.000 +963 202.800 +964 97.400 +964 133.100 +964 175.700 +964 247.200 +965 174.400 +965 247.600 +966 200.000 +967 114.100 +967 174.500 +967 247.000 +967 266.800 +968 106.700 +968 132.100 +968 144.200 +968 232.200 +969 158.100 +969 175.000 +969 247.300 +971 217.600 +971 247.100 +972 247.600 +974 278.600 +975 83.300 +975 96.900 +977 108.200 +977 144.100 +977 244.300 +979 247.600 +980 183.300 +981 97.300 +981 109.100 +981 247.500 +983 130.900 +984 247.300 +985 232.300 +986 247.300 +987 112.800 +987 247.100 +988 202.800 +989 135.500 +989 231.900 +990 53.700 +990 123.600 +990 230.800 +991 60.600 +991 143.700 +991 268.000 +993 143.100 +994 216.800 +995 247.500 +996 69.400 +996 109.200 +996 267.700 +997 268.200 +998 231.300 +998 247.300 +999 247.400 +1001 90.100 +1001 109.800 +1001 216.600 +1003 59.300 +1004 122.600 +1004 228.800 +1004 247.400 +1005 84.100 +1005 174.800 +1005 197.600 +1005 216.000 +1005 287.500 +1006 143.200 +1006 158.000 +1008 83.900 +1008 247.100 +1010 97.500 +1011 134.400 +1013 83.400 +1013 158.100 +1014 247.600 +1015 123.800 +1015 247.000 +1016 109.300 +1016 131.300 +1017 157.300 +1017 264.700 +1018 57.500 +1019 244.200 +1019 267.100 +1021 131.900 +1021 267.500 +1022 95.000 +1022 159.400 +1023 156.500 +1024 109.100 +1024 133.500 +1027 231.700 +1027 247.400 +1028 143.800 +1032 83.500 +1032 158.400 +1034 246.900 +1035 247.300 +1037 197.300 +1037 287.100 +1038 52.700 +1038 68.800 +1038 95.100 +1038 131.400 +1040 198.400 +1041 246.900 +1042 82.700 +1042 145.100 +1042 228.500 +1043 123.500 +1043 232.300 +1043 264.400 +1045 231.800 +1045 247.300 +1046 174.900 +1047 83.500 +1047 158.000 +1050 107.100 +1050 244.600 +1051 110.600 +1051 203.600 +1052 96.100 +1052 196.400 +1052 247.200 +1053 69.300 +1053 267.600 +1054 266.900 +1055 71.700 +1055 265.500 +1056 116.000 +1057 267.300 +1058 59.300 +1058 144.500 +1059 246.900 +1061 73.300 +1061 123.100 +1061 215.300 +1061 287.400 +1062 83.500 +1062 109.900 +1065 217.600 +1066 53.700 +1066 133.400 +1070 158.100 +1070 176.000 +1070 203.100 +1070 265.100 +1071 97.400 +1071 216.500 +1071 247.600 +1072 59.500 +1072 122.900 +1074 130.600 +1076 69.400 +1077 187.200 +1077 265.300 +1079 127.200 +1079 135.100 +1079 266.900 +1080 123.000 +1080 247.100 +1081 204.000 +1081 266.900 +1082 196.800 +1083 67.100 +1083 130.900 +1083 157.500 +1084 246.700 +1085 158.300 +1086 197.500 +1086 247.300 +1087 83.400 +1087 266.000 +1088 81.700 +1088 123.500 +1090 246.800 +1091 246.800 +1092 265.400 +1095 175.700 +1096 203.600 +1096 267.600 +1097 59.900 +1097 218.700 +1098 184.300 +1098 286.800 +1099 96.800 +1099 247.500 +1100 247.300 +1103 247.500 +1104 69.400 +1105 159.000 +1106 59.600 +1106 124.200 +1106 144.400 +1108 132.500 +1108 230.800 +1109 82.500 +1109 134.400 +1109 158.100 +1110 108.500 +1110 157.900 +1110 287.100 +1111 56.500 +1111 232.200 +1113 109.800 +1113 217.700 +1118 96.600 +1118 123.100 +1119 144.800 +1120 133.200 +1120 268.600 +1121 83.100 +1121 118.500 +1122 60.400 +1123 156.900 +1123 217.300 +1124 195.100 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_3_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_3_e_pop.dat new file mode 100644 index 000000000..e7f4fef0c --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_3_e_pop.dat @@ -0,0 +1,1997 @@ +sender time_ms +0 66.500 +0 109.900 +0 246.200 +1 158.100 +1 203.900 +1 265.100 +2 155.800 +2 240.800 +3 82.300 +3 157.400 +3 246.900 +4 278.900 +5 82.100 +5 174.900 +5 216.800 +6 60.500 +6 107.700 +6 144.400 +7 79.400 +7 216.100 +8 82.100 +8 174.800 +9 83.200 +9 247.500 +9 267.200 +10 158.100 +10 247.500 +10 267.400 +11 155.800 +11 248.200 +12 83.000 +12 143.900 +13 144.100 +13 247.000 +14 246.900 +15 60.500 +15 184.200 +15 247.300 +16 158.100 +17 60.700 +17 183.300 +17 213.800 +17 231.700 +18 83.300 +18 158.200 +20 57.400 +20 110.900 +20 143.700 +20 194.800 +21 68.600 +21 194.800 +21 247.000 +21 267.000 +22 59.000 +22 123.400 +22 247.500 +23 171.600 +23 247.600 +24 108.700 +24 226.700 +24 245.900 +25 137.000 +25 247.000 +26 67.400 +26 217.600 +26 247.200 +27 267.300 +29 122.300 +29 217.600 +30 144.400 +30 247.000 +33 247.200 +34 175.300 +34 244.400 +35 246.900 +35 265.900 +38 232.300 +38 248.200 +39 95.700 +39 137.400 +39 156.700 +39 225.400 +39 233.000 +39 247.600 +40 247.600 +41 60.600 +41 287.300 +42 54.000 +42 69.000 +42 158.000 +43 59.700 +43 123.800 +43 200.800 +44 55.100 +44 58.900 +45 83.400 +45 123.300 +45 244.500 +45 278.200 +46 97.400 +46 246.800 +46 267.400 +47 60.400 +47 124.500 +47 267.600 +48 174.500 +48 267.700 +48 283.400 +49 60.600 +49 108.500 +49 144.400 +49 247.900 +50 60.300 +52 144.300 +53 54.300 +53 102.900 +53 299.100 +54 60.400 +54 106.100 +54 144.100 +55 247.400 +56 60.000 +56 78.200 +56 123.100 +56 141.700 +57 68.600 +57 247.600 +57 267.500 +58 59.500 +58 122.200 +58 134.400 +58 158.000 +58 230.700 +58 247.100 +59 157.200 +59 247.300 +60 158.200 +61 158.500 +61 266.900 +63 175.600 +63 267.700 +64 64.200 +64 104.800 +64 157.800 +64 268.500 +65 57.700 +65 124.300 +65 157.600 +65 248.200 +66 124.000 +67 60.500 +67 267.400 +68 84.100 +68 144.500 +69 144.500 +70 230.900 +72 60.600 +72 107.500 +72 157.600 +72 216.800 +72 267.300 +73 78.700 +74 58.800 +74 134.700 +74 247.300 +75 59.100 +75 89.500 +76 185.700 +77 57.500 +78 247.200 +78 267.900 +78 282.800 +79 82.200 +80 83.100 +80 247.100 +82 56.500 +82 69.800 +82 108.900 +82 137.700 +82 224.100 +83 83.200 +84 133.300 +84 158.400 +84 248.200 +85 59.800 +85 133.500 +85 174.900 +85 216.500 +85 299.800 +87 59.600 +87 247.200 +88 73.200 +88 144.000 +88 247.000 +89 157.200 +89 287.700 +90 174.400 +92 82.400 +92 136.600 +92 175.100 +92 216.200 +94 50.200 +94 157.400 +95 60.700 +95 204.000 +95 267.800 +96 59.600 +96 158.400 +97 195.200 +97 268.400 +99 83.200 +99 247.300 +100 248.200 +102 59.500 +102 133.100 +103 247.300 +104 143.700 +107 82.900 +107 217.500 +107 267.600 +108 83.700 +111 216.100 +112 67.100 +112 158.000 +112 218.500 +113 94.700 +113 267.400 +115 210.900 +116 59.300 +116 137.100 +116 278.700 +118 59.700 +118 81.500 +118 217.700 +118 247.900 +119 66.400 +120 80.300 +121 109.400 +121 289.800 +122 83.300 +122 123.700 +123 109.600 +123 157.400 +125 244.000 +126 72.500 +126 217.300 +127 267.000 +127 287.600 +128 60.800 +128 143.600 +128 155.200 +128 217.500 +128 287.500 +130 60.700 +130 143.500 +130 268.000 +130 287.800 +131 68.300 +131 123.800 +131 144.300 +131 267.100 +132 158.000 +132 184.700 +132 247.100 +133 68.300 +133 134.700 +133 247.300 +134 144.500 +135 174.600 +135 215.100 +136 267.700 +137 69.400 +137 143.900 +137 276.600 +138 141.900 +138 202.700 +139 247.400 +140 175.200 +140 265.000 +141 60.600 +141 83.000 +141 143.500 +141 247.100 +142 267.100 +143 97.100 +144 110.200 +144 144.300 +145 108.100 +145 247.400 +146 185.400 +147 108.300 +148 97.400 +148 233.300 +148 247.600 +149 59.700 +149 216.300 +150 217.300 +151 158.300 +152 157.800 +152 215.300 +153 158.100 +153 247.100 +154 108.000 +154 171.900 +154 267.500 +155 215.600 +156 66.700 +156 97.400 +156 111.100 +156 123.800 +156 158.200 +156 212.000 +157 110.200 +157 246.400 +158 248.200 +159 124.200 +160 59.800 +161 143.300 +161 247.000 +162 108.900 +162 203.300 +163 174.500 +164 81.000 +164 109.100 +164 174.200 +164 218.300 +165 104.700 +165 247.000 +166 158.400 +166 247.000 +167 83.900 +167 143.600 +167 267.300 +168 69.600 +168 143.500 +169 265.100 +170 142.700 +170 247.900 +171 247.200 +172 205.400 +173 60.500 +173 96.500 +173 133.500 +173 144.500 +173 157.500 +174 52.900 +174 66.800 +174 83.100 +174 123.700 +174 158.500 +174 264.700 +175 247.400 +176 171.700 +177 109.900 +177 143.700 +177 286.300 +178 144.200 +179 57.500 +179 123.000 +179 201.400 +180 144.200 +180 175.000 +180 230.500 +181 59.200 +181 123.100 +181 158.300 +181 171.700 +181 187.400 +181 246.900 +182 91.600 +182 108.900 +182 155.200 +182 267.600 +183 143.100 +184 83.000 +184 174.400 +184 216.200 +184 265.100 +185 60.600 +185 215.500 +185 247.500 +187 59.600 +187 174.900 +189 83.300 +189 153.600 +189 247.800 +190 59.700 +190 96.800 +190 144.600 +190 213.900 +191 68.100 +192 58.500 +192 108.400 +192 172.900 +192 246.200 +193 58.100 +193 108.100 +193 143.800 +193 158.400 +193 246.800 +194 69.200 +194 94.900 +194 145.100 +194 216.100 +195 69.300 +195 109.400 +195 143.200 +195 157.700 +196 267.500 +198 51.600 +199 60.500 +199 83.700 +199 267.400 +201 60.400 +201 144.400 +201 175.100 +202 73.500 +202 109.500 +202 143.900 +203 78.100 +203 108.100 +203 247.200 +204 157.600 +204 171.900 +204 247.300 +205 60.200 +205 109.000 +205 123.800 +205 143.000 +206 69.100 +206 174.000 +206 286.400 +207 68.000 +208 59.000 +208 157.500 +208 216.100 +209 57.400 +209 157.800 +209 229.400 +211 108.100 +212 278.200 +213 58.800 +213 83.300 +214 70.100 +214 122.600 +214 144.500 +220 158.200 +221 67.500 +221 127.300 +221 217.600 +221 268.000 +222 83.400 +222 216.200 +222 267.900 +223 58.100 +223 82.300 +223 124.300 +223 143.500 +223 172.600 +224 158.300 +224 246.500 +225 247.900 +226 247.800 +227 69.900 +227 124.500 +227 158.400 +227 264.900 +228 267.500 +229 60.400 +229 81.200 +229 143.600 +229 158.900 +229 231.200 +230 171.900 +230 202.400 +230 248.400 +230 267.200 +231 59.600 +231 232.300 +231 286.600 +232 83.400 +232 130.600 +232 154.700 +233 174.800 +234 157.000 +235 54.200 +235 83.200 +235 124.000 +235 141.800 +235 232.000 +236 58.600 +236 174.200 +236 263.300 +237 64.500 +237 172.000 +237 268.000 +238 91.500 +238 109.000 +238 287.000 +239 57.400 +239 286.200 +240 187.400 +241 83.300 +241 110.500 +241 157.700 +241 210.900 +241 230.200 +241 287.700 +242 108.200 +242 217.300 +242 247.100 +243 82.400 +243 158.100 +243 247.100 +244 83.300 +244 97.600 +244 246.900 +245 60.100 +245 108.000 +245 246.800 +246 59.600 +246 83.100 +246 123.100 +246 170.600 +247 108.600 +247 155.400 +247 265.400 +249 83.500 +249 158.100 +249 216.800 +249 247.400 +250 143.900 +250 231.200 +250 267.100 +251 83.100 +251 267.200 +252 216.300 +252 265.300 +254 68.100 +254 143.100 +255 72.900 +255 94.100 +255 108.900 +255 158.100 +255 197.900 +256 157.900 +256 230.300 +257 72.600 +257 97.200 +258 78.100 +258 217.100 +258 267.700 +259 123.900 +259 197.000 +259 267.300 +261 247.600 +263 265.100 +264 83.300 +264 110.600 +265 247.300 +265 265.000 +266 94.300 +266 175.900 +266 287.200 +267 83.000 +267 143.400 +267 174.600 +267 216.600 +267 298.800 +268 108.200 +268 143.600 +268 157.800 +269 174.400 +271 247.600 +271 267.600 +272 53.000 +272 143.600 +273 210.200 +273 247.300 +274 130.100 +274 159.000 +275 58.600 +276 143.800 +276 229.600 +277 59.000 +277 123.000 +277 157.600 +278 158.900 +279 123.700 +279 174.900 +279 284.100 +280 268.000 +281 95.400 +281 122.100 +281 217.000 +282 60.100 +282 81.200 +282 133.900 +282 171.700 +282 217.300 +283 247.500 +283 267.900 +285 110.600 +285 270.600 +286 247.900 +288 97.500 +288 247.600 +288 287.900 +290 172.000 +291 157.000 +291 247.700 +293 56.700 +293 108.000 +294 82.300 +294 115.900 +294 247.300 +294 267.500 +295 247.100 +295 287.700 +296 91.900 +296 158.500 +296 215.700 +296 246.600 +298 109.800 +299 97.500 +299 216.200 +301 246.400 +301 267.400 +302 155.600 +302 248.100 +303 77.100 +303 109.300 +303 145.200 +303 157.200 +303 247.000 +304 83.100 +304 175.000 +305 174.900 +307 108.300 +307 157.600 +308 60.700 +308 244.100 +309 60.000 +309 247.300 +310 107.800 +310 214.900 +310 246.500 +311 157.900 +311 244.300 +311 287.300 +312 67.600 +312 95.900 +312 124.300 +313 69.800 +313 283.200 +314 153.900 +314 247.400 +315 58.200 +315 80.300 +315 215.700 +315 267.300 +316 188.300 +316 216.700 +316 267.200 +317 90.900 +317 97.600 +317 201.100 +317 215.400 +318 172.000 +319 58.300 +319 126.000 +319 144.500 +319 171.600 +319 267.600 +320 158.200 +320 203.900 +320 230.000 +321 158.400 +321 197.400 +321 216.600 +323 97.200 +323 247.300 +325 78.400 +325 123.800 +325 136.900 +325 173.700 +325 267.300 +325 283.200 +326 130.800 +327 184.900 +327 216.100 +327 248.000 +328 68.600 +328 97.000 +328 110.900 +328 136.900 +328 175.600 +328 247.200 +328 297.900 +329 157.900 +329 195.000 +329 268.500 +330 144.000 +330 174.300 +331 56.800 +331 72.800 +331 107.900 +331 174.900 +331 217.000 +332 106.600 +332 267.900 +333 59.100 +333 83.100 +333 124.600 +333 144.300 +333 157.500 +334 108.900 +335 214.800 +336 60.000 +336 97.300 +336 110.100 +336 133.400 +336 144.700 +336 287.500 +337 247.800 +337 287.100 +338 174.500 +338 217.400 +339 232.100 +339 247.700 +340 110.000 +340 287.500 +341 83.600 +341 247.400 +342 59.300 +342 154.400 +342 174.600 +343 109.600 +343 171.700 +344 248.100 +347 109.000 +347 287.100 +348 287.700 +349 109.500 +350 215.600 +351 59.600 +351 82.800 +351 157.900 +351 174.000 +351 203.800 +351 247.000 +352 174.200 +353 60.600 +353 203.900 +354 83.800 +357 283.600 +358 287.100 +359 209.100 +360 232.100 +361 247.800 +362 247.700 +363 143.300 +363 174.700 +364 68.700 +365 56.800 +365 82.900 +365 124.100 +365 157.500 +366 68.300 +366 144.300 +366 201.900 +366 216.300 +366 267.400 +367 265.500 +368 66.100 +368 109.500 +368 134.700 +368 144.700 +368 247.400 +368 267.600 +369 137.400 +369 173.600 +370 122.900 +370 150.500 +370 174.400 +371 83.100 +371 171.600 +371 202.700 +371 247.700 +372 247.800 +373 130.100 +373 174.400 +373 287.200 +374 95.000 +374 211.300 +375 60.500 +375 265.300 +376 145.000 +377 53.900 +377 62.600 +377 154.200 +377 174.000 +378 247.600 +379 50.100 +379 104.900 +379 172.500 +379 215.000 +380 59.800 +380 69.400 +380 123.500 +380 214.200 +380 297.600 +381 60.300 +381 158.300 +382 216.700 +384 83.400 +384 144.000 +384 217.700 +385 60.500 +386 68.600 +386 143.400 +387 83.300 +387 109.200 +387 157.900 +387 173.700 +387 247.500 +388 69.800 +389 85.600 +389 110.000 +389 156.400 +389 187.900 +389 231.800 +389 247.500 +391 158.200 +391 267.200 +392 82.200 +392 158.300 +393 60.300 +393 144.400 +393 175.000 +394 203.900 +394 229.700 +395 83.300 +395 122.900 +396 60.500 +396 97.500 +396 123.800 +396 217.600 +397 68.500 +398 60.700 +398 247.200 +399 60.800 +399 123.200 +399 155.500 +399 231.900 +399 247.100 +400 66.800 +400 98.900 +400 194.000 +400 231.500 +401 143.000 +402 60.000 +402 107.700 +402 144.400 +402 217.700 +402 247.300 +403 195.300 +403 267.500 +404 54.500 +404 123.600 +404 156.100 +404 264.900 +405 247.000 +406 60.700 +406 173.700 +406 230.900 +406 267.500 +407 174.500 +408 60.900 +408 108.500 +408 157.900 +408 267.600 +409 123.500 +409 144.300 +409 173.800 +410 78.500 +410 92.900 +411 110.400 +411 213.300 +411 247.700 +412 246.800 +415 105.900 +415 157.800 +417 267.300 +419 59.100 +419 129.000 +419 143.600 +419 158.200 +420 61.800 +420 84.100 +420 108.300 +420 151.400 +420 172.000 +420 194.600 +421 83.000 +421 123.000 +421 135.400 +422 56.800 +422 83.200 +422 157.800 +423 267.200 +423 287.300 +425 56.200 +425 174.400 +425 247.500 +426 157.900 +426 216.500 +426 287.400 +427 58.800 +427 110.300 +427 132.300 +427 144.200 +427 248.000 +428 97.200 +429 108.400 +430 66.600 +432 144.900 +432 247.200 +432 283.100 +433 52.900 +433 59.400 +433 144.100 +433 247.300 +435 187.600 +436 247.300 +438 158.000 +438 188.400 +438 217.100 +438 267.200 +439 67.700 +439 124.100 +439 143.700 +439 203.900 +440 60.500 +440 159.300 +441 58.400 +441 123.900 +441 247.500 +442 174.400 +443 59.300 +443 71.800 +444 66.900 +444 158.100 +444 281.500 +446 68.300 +446 263.700 +446 286.800 +447 60.500 +447 82.300 +447 111.000 +447 123.900 +447 138.200 +447 203.700 +448 108.500 +448 203.600 +448 247.900 +449 170.700 +449 241.400 +449 247.600 +450 60.200 +450 108.300 +450 158.400 +450 247.000 +451 158.100 +451 175.000 +451 205.400 +452 123.500 +452 157.600 +453 82.500 +453 108.400 +453 132.700 +453 144.200 +453 155.800 +454 58.500 +454 83.900 +454 94.800 +454 247.400 +455 175.200 +455 265.100 +456 59.200 +456 83.400 +456 247.200 +457 59.200 +457 205.300 +457 267.500 +458 61.500 +458 123.600 +458 143.500 +458 172.200 +458 247.100 +459 217.400 +460 68.500 +461 70.400 +461 108.400 +461 133.600 +462 246.700 +463 215.600 +464 176.400 +464 285.800 +465 267.900 +466 60.500 +466 157.400 +466 247.300 +466 267.600 +467 58.700 +467 83.200 +467 213.700 +467 268.000 +468 60.400 +468 109.100 +468 144.400 +468 247.000 +468 287.900 +469 174.600 +469 214.200 +470 81.000 +470 124.300 +471 67.700 +471 158.100 +472 231.200 +473 109.000 +473 155.400 +473 267.700 +474 247.100 +475 80.200 +476 107.900 +476 158.100 +476 267.700 +476 287.800 +477 79.400 +477 143.500 +477 174.000 +477 210.300 +478 95.000 +478 123.500 +478 247.200 +479 174.800 +479 267.800 +479 287.000 +480 67.200 +480 137.100 +480 244.300 +481 143.600 +481 158.200 +481 175.300 +482 60.900 +482 69.800 +482 124.100 +482 144.200 +482 158.200 +482 216.700 +483 247.300 +484 123.300 +484 158.000 +484 267.200 +484 278.000 +485 83.200 +485 143.500 +485 159.300 +485 174.300 +485 231.100 +485 247.700 +486 197.200 +486 214.600 +487 67.400 +487 82.900 +487 158.000 +487 246.200 +489 83.300 +489 217.700 +489 288.100 +490 194.900 +490 267.900 +491 56.500 +491 84.000 +491 131.100 +491 247.800 +492 216.300 +493 56.900 +493 68.800 +493 94.500 +493 122.800 +493 137.200 +493 158.300 +493 174.400 +494 214.800 +494 247.500 +495 232.200 +496 59.000 +496 83.200 +496 156.300 +496 197.800 +496 217.300 +496 267.300 +496 287.700 +496 299.900 +497 63.800 +497 233.300 +497 246.900 +498 59.200 +498 109.500 +499 158.400 +499 267.700 +500 82.400 +500 108.500 +500 195.000 +500 217.700 +500 226.400 +500 244.100 +502 60.300 +502 247.200 +503 96.900 +503 201.700 +503 230.000 +503 247.500 +504 58.600 +504 152.600 +504 247.700 +505 57.300 +505 95.000 +505 174.500 +505 246.600 +506 108.400 +506 247.100 +507 204.000 +507 246.800 +508 60.700 +508 205.400 +508 267.500 +509 82.900 +509 111.600 +509 171.300 +509 247.900 +510 109.500 +510 186.000 +510 246.800 +511 59.100 +511 144.200 +512 144.600 +512 195.400 +512 265.200 +513 58.000 +513 265.000 +514 133.000 +515 246.700 +516 143.100 +516 217.500 +516 247.700 +517 176.500 +518 62.600 +518 81.600 +518 109.400 +518 156.500 +518 217.500 +518 246.900 +519 247.300 +520 56.200 +520 69.500 +520 83.400 +520 123.900 +520 143.600 +520 284.000 +521 109.600 +522 60.900 +523 143.600 +523 188.200 +523 276.200 +523 287.400 +524 123.100 +525 97.200 +525 171.600 +525 204.000 +525 218.300 +526 79.100 +526 204.000 +527 83.400 +527 246.600 +528 57.000 +528 215.800 +529 67.100 +529 94.900 +529 143.800 +529 267.700 +530 66.600 +530 134.900 +531 69.100 +531 248.100 +533 95.900 +533 143.300 +533 247.100 +533 267.600 +534 175.300 +534 204.000 +534 267.400 +536 123.200 +536 158.400 +536 247.600 +536 281.500 +538 60.700 +538 142.900 +539 69.200 +539 204.100 +539 217.000 +540 246.400 +541 97.500 +541 227.500 +542 158.300 +542 204.200 +543 124.100 +543 158.100 +543 216.800 +544 60.600 +544 174.400 +544 247.400 +545 95.900 +545 211.000 +546 174.600 +547 68.800 +548 144.200 +549 97.300 +549 108.700 +549 175.300 +549 218.500 +550 57.000 +550 123.600 +550 155.400 +550 217.400 +551 143.100 +551 287.600 +552 83.800 +552 175.600 +553 69.000 +553 83.500 +553 144.100 +553 200.400 +553 267.800 +554 144.500 +555 157.600 +555 247.900 +556 97.500 +556 123.600 +556 277.600 +557 83.900 +557 225.200 +558 57.800 +558 123.600 +558 158.300 +558 247.300 +559 171.900 +560 200.600 +560 267.500 +561 81.800 +561 134.600 +561 217.400 +562 267.700 +563 157.200 +563 217.300 +563 265.200 +564 95.500 +564 247.900 +565 83.200 +565 171.900 +565 267.800 +566 58.000 +566 230.200 +567 68.400 +567 248.200 +568 69.500 +568 157.000 +569 69.800 +570 59.100 +570 143.400 +570 174.600 +571 57.300 +571 99.000 +571 158.000 +571 233.300 +571 247.900 +572 68.200 +572 108.400 +572 141.700 +572 217.500 +573 174.100 +573 247.700 +573 267.600 +574 83.300 +574 142.700 +574 216.400 +574 286.300 +575 174.400 +576 267.000 +578 174.000 +579 108.100 +580 123.400 +580 143.500 +580 264.300 +583 123.500 +583 185.900 +583 232.400 +584 84.200 +584 158.100 +584 175.300 +584 216.600 +584 267.300 +585 60.600 +585 174.500 +585 267.400 +586 96.500 +586 247.100 +587 66.700 +587 155.600 +587 175.000 +587 229.800 +588 109.000 +589 96.300 +589 175.600 +591 126.900 +592 247.100 +593 143.600 +593 267.200 +594 171.300 +594 191.400 +594 232.100 +595 54.100 +595 67.200 +595 143.800 +595 217.700 +595 264.800 +596 77.600 +596 124.000 +597 247.400 +599 68.100 +599 107.700 +599 204.100 +600 247.200 +601 159.200 +601 186.200 +601 268.100 +602 143.100 +604 60.500 +605 68.400 +605 83.900 +605 174.600 +605 246.200 +606 53.800 +606 94.900 +606 158.200 +607 56.900 +607 203.900 +607 267.200 +608 247.100 +610 83.600 +610 174.600 +611 58.200 +611 80.500 +611 157.500 +611 173.400 +611 243.400 +613 144.400 +613 265.200 +614 82.600 +614 267.100 +616 59.000 +616 80.900 +616 143.700 +616 204.000 +617 54.300 +617 182.500 +617 246.600 +618 108.000 +618 157.800 +618 244.800 +621 200.700 +621 229.900 +623 67.300 +623 171.400 +623 247.700 +623 289.000 +624 194.800 +624 247.700 +624 287.100 +625 59.300 +627 82.800 +629 83.400 +629 158.000 +629 247.700 +630 68.300 +630 143.200 +630 267.600 +631 83.100 +631 158.600 +631 217.100 +632 209.000 +632 247.300 +634 144.900 +634 217.000 +635 247.800 +636 82.800 +636 108.400 +636 214.300 +638 70.000 +638 143.800 +638 247.800 +639 248.300 +640 246.600 +641 68.900 +641 194.700 +642 60.800 +642 145.000 +643 286.400 +644 69.200 +644 159.200 +645 247.500 +646 187.700 +646 216.900 +647 175.100 +648 144.300 +648 176.300 +648 247.500 +649 57.300 +649 68.300 +649 158.300 +649 176.300 +649 232.000 +649 267.700 +650 60.400 +650 95.900 +650 267.800 +651 81.200 +651 137.400 +651 171.400 +651 268.300 +652 57.900 +652 143.600 +653 248.000 +654 173.800 +655 158.500 +655 246.800 +656 57.500 +656 68.700 +656 130.200 +656 143.000 +657 80.200 +657 110.600 +657 268.100 +658 96.200 +658 133.500 +658 175.100 +658 214.000 +658 269.700 +659 108.300 +659 286.300 +660 82.700 +660 157.300 +660 267.100 +661 128.700 +661 144.200 +662 67.300 +663 83.200 +663 143.600 +663 204.200 +663 247.100 +663 267.900 +664 142.200 +664 158.200 +665 158.100 +665 175.300 +665 216.500 +666 156.100 +666 248.200 +666 267.700 +667 59.500 +667 123.400 +667 158.200 +667 248.300 +667 287.500 +668 217.400 +669 82.400 +669 216.600 +671 96.400 +671 194.500 +671 216.900 +671 247.200 +671 267.400 +672 57.900 +672 68.400 +672 131.400 +672 156.000 +673 281.600 +676 247.700 +677 267.400 +678 57.500 +678 110.700 +678 131.100 +678 142.900 +678 245.300 +679 109.000 +680 61.700 +680 96.000 +680 123.500 +680 265.600 +681 267.300 +682 109.800 +682 269.000 +683 68.300 +683 155.200 +683 204.000 +685 59.200 +685 157.600 +685 248.300 +685 265.200 +686 174.400 +687 158.100 +688 57.800 +688 68.200 +688 110.300 +688 157.000 +688 265.200 +689 197.700 +690 267.400 +693 144.600 +693 267.700 +695 197.000 +696 60.100 +696 123.000 +696 215.700 +696 247.100 +697 60.300 +697 83.200 +697 134.900 +697 157.600 +697 248.200 +698 144.300 +698 174.600 +698 248.000 +699 73.900 +699 123.500 +699 267.100 +700 81.300 +701 82.500 +702 175.000 +702 247.600 +703 70.200 +703 116.000 +703 144.500 +703 210.200 +703 245.400 +704 74.100 +704 267.300 +706 288.600 +707 107.900 +707 194.100 +708 267.300 +709 174.500 +710 107.800 +710 158.400 +711 264.900 +713 60.700 +713 110.400 +713 136.600 +714 78.300 +714 124.400 +714 140.100 +714 265.600 +715 144.600 +716 265.100 +718 50.400 +718 82.500 +718 131.100 +718 142.300 +718 247.500 +718 285.900 +719 69.100 +719 107.500 +719 133.000 +720 83.100 +720 174.700 +720 266.900 +721 203.900 +721 248.000 +722 60.400 +722 143.200 +722 174.100 +722 267.200 +722 287.000 +723 69.600 +723 247.100 +725 83.200 +726 174.800 +727 183.900 +728 72.200 +728 182.600 +728 217.500 +729 60.400 +729 67.400 +729 83.200 +729 135.000 +729 201.400 +729 247.100 +730 58.700 +730 144.400 +730 175.000 +731 144.500 +731 174.700 +731 266.700 +732 143.800 +732 267.600 +733 247.200 +734 122.800 +734 265.000 +735 204.100 +735 247.200 +736 83.900 +736 197.200 +736 265.400 +737 60.200 +737 83.500 +737 145.100 +737 267.600 +738 67.100 +738 144.400 +738 246.900 +739 158.400 +739 173.800 +739 204.600 +741 66.900 +741 143.800 +742 57.000 +742 81.500 +742 119.800 +742 143.400 +742 158.100 +744 66.900 +744 80.700 +744 110.100 +744 144.100 +744 213.800 +744 267.600 +745 78.900 +745 122.900 +745 144.900 +746 69.300 +746 177.100 +746 265.100 +747 52.700 +747 144.600 +747 158.300 +747 265.000 +748 83.900 +748 174.300 +749 109.400 +749 173.500 +749 247.700 +751 68.900 +751 155.600 +751 247.200 +752 158.200 +752 172.000 +752 201.300 +752 216.700 +754 83.100 +754 157.600 +755 68.400 +755 157.800 +755 276.300 +756 59.800 +756 158.900 +757 82.500 +757 247.200 +758 81.000 +758 223.700 +759 59.700 +759 130.300 +760 287.200 +761 61.800 +762 53.600 +762 158.000 +763 66.800 +763 287.600 +765 143.700 +766 109.500 +766 158.400 +766 217.100 +768 108.400 +768 185.900 +768 248.200 +769 267.600 +770 158.000 +771 96.800 +771 111.000 +771 283.300 +772 201.600 +772 247.400 +773 265.300 +774 83.700 +774 247.200 +774 267.300 +775 188.000 +776 154.500 +776 267.500 +777 83.900 +777 158.000 +778 59.900 +778 124.100 +778 157.900 +778 244.300 +779 60.600 +779 267.500 +780 176.400 +780 247.700 +781 59.300 +781 298.800 +782 94.400 +782 267.400 +783 83.300 +784 108.600 +784 143.500 +784 158.000 +785 83.500 +785 174.600 +785 204.100 +785 247.400 +786 246.800 +788 267.400 +789 110.900 +789 174.900 +790 60.600 +790 108.200 +790 144.800 +790 200.600 +790 246.900 +791 67.700 +791 109.000 +791 144.400 +791 247.500 +792 123.500 +792 215.900 +793 57.300 +794 53.000 +794 155.100 +794 286.900 +795 247.300 +797 97.000 +797 108.100 +797 213.800 +797 288.000 +798 157.800 +798 195.100 +798 203.800 +798 268.500 +799 174.800 +799 215.800 +800 60.600 +800 97.200 +800 143.500 +800 173.800 +800 218.200 +800 267.400 +801 94.800 +801 110.600 +801 155.100 +802 143.500 +803 267.300 +804 68.700 +804 108.500 +805 68.400 +805 108.400 +805 123.900 +805 287.700 +806 175.100 +806 265.000 +807 246.900 +808 174.100 +808 268.200 +809 217.700 +810 60.500 +810 183.000 +810 216.600 +810 267.000 +812 83.300 +813 59.800 +813 123.300 +813 155.200 +813 286.600 +815 67.300 +815 78.400 +815 134.800 +815 144.100 +815 217.200 +815 287.700 +816 59.400 +816 70.700 +816 158.000 +816 287.700 +818 69.100 +818 126.600 +818 248.000 +819 84.000 +819 156.300 +820 68.400 +820 143.800 +820 247.800 +821 172.300 +822 60.600 +822 157.300 +822 175.400 +823 122.800 +823 247.100 +824 68.200 +824 98.900 +824 158.400 +824 267.200 +825 81.500 +825 141.200 +826 229.700 +827 186.300 +829 60.800 +829 79.300 +829 124.300 +829 143.700 +829 159.400 +829 171.700 +829 177.300 +829 186.100 +829 204.200 +829 216.800 +829 247.100 +829 267.300 +830 217.400 +831 83.100 +831 268.100 +832 217.400 +833 60.300 +833 111.000 +833 144.200 +834 267.800 +835 174.700 +836 60.400 +836 109.200 +836 204.300 +837 62.400 +837 137.400 +837 156.200 +837 211.000 +838 97.200 +838 174.900 +839 195.400 +839 247.500 +839 284.800 +840 83.200 +840 217.300 +841 137.100 +841 158.200 +842 83.100 +842 123.800 +842 144.500 +842 284.200 +843 143.200 +843 175.100 +843 247.300 +843 267.100 +844 77.900 +844 143.300 +844 216.000 +844 246.900 +845 173.700 +845 197.800 +845 247.700 +845 266.900 +846 68.400 +846 176.100 +846 248.000 +847 216.800 +848 176.200 +848 215.300 +849 71.900 +849 108.800 +849 247.100 +850 83.100 +851 155.000 +851 267.600 +853 217.000 +855 95.600 +855 108.100 +855 217.900 +856 97.300 +856 267.100 +857 69.300 +857 204.300 +858 69.000 +858 158.100 +860 110.100 +861 69.800 +861 157.900 +861 173.900 +861 247.100 +862 140.000 +863 174.600 +864 247.600 +864 267.700 +865 68.800 +865 247.600 +865 279.300 +866 59.000 +866 144.200 +866 197.200 +866 217.400 +866 247.600 +867 68.200 +867 107.700 +867 124.300 +867 158.200 +867 186.900 +867 195.100 +867 247.200 +868 81.700 +868 123.900 +868 140.600 +868 157.700 +868 216.700 +868 267.900 +869 108.800 +869 141.100 +869 231.900 +869 247.300 +870 60.000 +870 247.500 +872 247.600 +872 268.200 +873 60.100 +873 158.600 +874 154.500 +875 69.500 +875 114.300 +875 174.300 +875 247.500 +876 247.100 +876 267.600 +877 157.900 +877 267.500 +878 60.800 +878 267.700 +879 54.100 +879 68.300 +879 267.100 +880 124.000 +880 267.000 +881 174.400 +882 144.100 +882 267.200 +883 69.000 +883 109.200 +883 144.200 +883 175.200 +884 70.500 +884 81.600 +884 173.900 +884 287.000 +885 156.700 +885 248.300 +886 201.400 +886 216.200 +886 247.500 +887 82.300 +887 158.000 +887 266.800 +888 299.300 +889 247.100 +889 267.800 +890 214.400 +891 122.800 +891 215.900 +892 143.900 +893 82.300 +893 157.900 +893 184.800 +897 109.200 +897 157.300 +898 60.900 +898 123.400 +898 174.900 +898 204.200 +898 224.700 +898 267.200 +898 287.200 +899 247.400 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_3_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_3_i_pop.dat new file mode 100644 index 000000000..cfdf6677f --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_3_i_pop.dat @@ -0,0 +1,544 @@ +sender time_ms +901 267.900 +902 174.200 +903 123.200 +903 174.600 +903 286.900 +904 59.100 +904 158.200 +905 60.400 +905 109.200 +905 174.500 +905 216.300 +905 247.100 +906 66.300 +906 158.200 +906 278.700 +908 59.200 +908 108.200 +908 144.700 +909 60.600 +909 108.000 +909 144.200 +909 216.400 +909 299.100 +910 246.400 +911 108.000 +911 267.600 +912 78.100 +913 56.600 +913 67.900 +913 123.000 +913 137.400 +914 58.700 +914 123.100 +914 208.100 +914 267.200 +915 59.100 +915 83.200 +915 122.400 +915 137.800 +915 155.300 +915 204.200 +915 248.100 +916 62.800 +916 202.100 +916 276.500 +917 143.500 +918 60.400 +918 158.400 +918 188.900 +919 57.100 +919 67.100 +919 124.100 +919 171.600 +919 201.200 +919 215.700 +920 72.500 +920 216.600 +920 290.200 +921 58.000 +921 123.000 +921 143.300 +921 247.300 +922 58.400 +922 97.300 +922 155.900 +922 216.800 +923 60.500 +923 78.600 +923 96.600 +923 124.400 +923 186.100 +923 247.700 +924 174.700 +925 60.200 +925 143.600 +925 247.300 +926 77.800 +926 158.300 +926 230.900 +928 109.200 +928 144.500 +928 156.200 +929 72.100 +929 174.500 +930 59.500 +930 83.200 +930 107.300 +930 133.700 +930 144.300 +930 157.800 +930 218.200 +930 247.200 +930 298.000 +932 63.100 +932 70.200 +932 297.800 +933 204.000 +934 144.300 +934 267.900 +935 143.600 +936 67.600 +937 83.100 +937 110.400 +938 59.800 +938 97.400 +939 217.500 +940 158.200 +941 247.400 +942 194.400 +942 287.400 +943 52.000 +943 144.300 +944 83.400 +944 154.400 +944 267.700 +945 94.000 +945 158.300 +945 247.500 +946 83.300 +946 143.700 +946 247.800 +946 265.100 +947 171.300 +947 267.100 +948 217.500 +948 267.500 +949 59.100 +949 135.100 +949 144.900 +950 187.500 +951 95.400 +951 108.600 +951 157.800 +952 60.400 +952 144.700 +952 247.000 +953 68.700 +953 143.800 +953 247.700 +953 267.600 +954 83.600 +954 157.800 +954 247.500 +954 287.300 +956 158.100 +957 60.600 +957 83.500 +957 143.000 +957 158.600 +957 213.900 +957 269.100 +958 143.100 +958 287.400 +959 110.800 +959 171.700 +959 288.400 +960 83.300 +960 218.400 +960 247.100 +961 58.300 +961 73.300 +961 157.400 +961 174.500 +961 265.200 +962 158.100 +962 247.000 +963 157.700 +963 197.100 +963 215.500 +963 246.200 +964 52.700 +964 83.600 +964 123.600 +964 143.900 +964 216.400 +966 172.600 +966 189.000 +966 287.400 +967 203.600 +968 62.800 +968 122.900 +968 144.400 +968 265.300 +969 133.000 +969 171.300 +969 197.700 +969 246.100 +970 58.400 +970 143.600 +970 175.500 +970 204.200 +971 244.100 +972 144.400 +972 194.400 +972 231.700 +972 247.400 +972 267.700 +973 158.200 +973 231.700 +973 267.700 +974 216.700 +975 157.700 +975 245.100 +975 247.700 +977 69.100 +977 110.500 +977 141.000 +977 217.800 +978 201.600 +978 216.900 +979 157.100 +979 265.600 +980 197.400 +980 247.400 +981 175.200 +981 246.800 +982 144.600 +982 176.300 +982 218.100 +982 247.200 +983 175.100 +984 197.100 +984 296.700 +985 174.600 +986 67.100 +987 60.500 +987 94.800 +987 110.300 +988 57.100 +988 123.300 +988 136.000 +988 265.300 +989 173.000 +990 69.500 +991 247.700 +992 124.300 +992 287.500 +993 83.100 +993 203.900 +994 247.500 +995 247.200 +995 288.400 +996 143.400 +996 174.700 +996 196.800 +997 60.400 +997 123.600 +997 142.800 +997 156.700 +997 175.100 +998 110.800 +998 203.800 +998 247.700 +998 281.300 +999 83.800 +999 109.100 +999 157.800 +999 216.900 +1000 217.500 +1001 143.900 +1002 174.900 +1002 287.700 +1003 56.700 +1003 83.000 +1003 110.100 +1003 144.400 +1003 159.500 +1003 217.500 +1003 247.600 +1004 217.100 +1005 83.200 +1006 72.400 +1006 143.300 +1007 60.100 +1007 95.700 +1007 134.800 +1007 182.700 +1007 246.000 +1008 204.200 +1008 284.100 +1009 82.500 +1009 106.300 +1009 144.600 +1009 203.200 +1009 217.200 +1010 83.600 +1010 174.600 +1011 60.000 +1011 204.100 +1011 247.000 +1011 286.400 +1012 202.800 +1013 81.800 +1013 194.500 +1013 216.800 +1014 204.000 +1014 267.700 +1014 295.400 +1015 144.300 +1015 216.500 +1016 60.400 +1016 83.400 +1016 97.200 +1016 247.100 +1017 83.000 +1017 144.400 +1017 203.800 +1018 59.800 +1018 157.700 +1018 232.300 +1018 247.600 +1018 267.600 +1019 283.800 +1021 82.000 +1021 158.200 +1021 230.900 +1022 83.500 +1022 158.000 +1023 57.000 +1023 96.200 +1023 170.000 +1023 267.500 +1025 53.200 +1026 68.300 +1026 108.300 +1026 145.200 +1026 174.600 +1026 248.300 +1026 299.700 +1027 62.600 +1027 69.500 +1027 174.700 +1027 217.200 +1028 232.000 +1029 158.400 +1029 267.600 +1030 204.300 +1031 61.200 +1031 246.700 +1032 60.600 +1032 113.800 +1032 143.600 +1032 218.500 +1034 68.700 +1034 217.200 +1035 60.200 +1035 141.500 +1036 57.200 +1036 71.400 +1036 124.400 +1036 141.700 +1036 158.200 +1036 247.700 +1037 71.200 +1037 247.900 +1037 268.000 +1038 61.800 +1038 97.400 +1038 144.200 +1038 244.600 +1039 69.400 +1039 107.900 +1039 174.900 +1039 248.200 +1040 158.400 +1040 267.500 +1043 82.700 +1043 109.500 +1043 187.600 +1044 68.300 +1044 110.500 +1044 247.400 +1044 278.600 +1046 106.500 +1046 188.700 +1047 73.300 +1048 82.900 +1049 171.500 +1049 217.200 +1049 288.100 +1050 66.900 +1050 267.800 +1051 72.600 +1051 158.000 +1052 56.700 +1052 108.300 +1052 144.300 +1052 231.800 +1052 247.000 +1053 99.000 +1053 204.800 +1053 246.500 +1054 82.500 +1056 124.400 +1057 131.400 +1058 108.100 +1058 158.300 +1058 286.500 +1064 97.300 +1064 122.500 +1064 137.300 +1064 157.900 +1065 57.900 +1065 173.500 +1066 82.700 +1067 54.200 +1067 83.500 +1068 97.400 +1068 158.600 +1068 247.600 +1069 52.000 +1069 82.300 +1069 144.800 +1070 174.700 +1071 96.400 +1071 174.500 +1072 123.700 +1072 265.100 +1074 59.500 +1074 83.200 +1074 104.700 +1074 158.400 +1074 269.000 +1075 68.800 +1075 124.400 +1075 267.500 +1076 96.000 +1076 201.500 +1077 201.700 +1077 231.200 +1077 265.200 +1078 60.700 +1078 97.400 +1079 159.100 +1080 157.900 +1081 95.900 +1081 204.200 +1082 58.900 +1082 83.800 +1082 124.200 +1082 153.100 +1082 174.900 +1083 60.300 +1083 108.100 +1083 134.600 +1083 203.800 +1083 247.200 +1084 174.200 +1085 60.200 +1085 83.300 +1085 182.700 +1086 58.200 +1086 139.400 +1088 174.800 +1088 244.600 +1088 287.700 +1089 158.200 +1090 59.000 +1090 81.400 +1090 134.700 +1090 174.700 +1090 248.300 +1091 67.900 +1091 108.800 +1091 133.500 +1091 158.400 +1091 247.800 +1092 218.500 +1093 60.200 +1093 216.100 +1094 246.900 +1095 69.700 +1095 96.000 +1095 156.500 +1095 184.500 +1095 247.100 +1096 69.100 +1096 144.100 +1097 59.300 +1097 269.900 +1098 59.900 +1098 108.300 +1098 133.400 +1098 158.600 +1098 231.600 +1098 247.000 +1099 97.400 +1099 267.900 +1101 58.600 +1101 143.900 +1101 201.600 +1101 247.200 +1102 83.400 +1102 115.500 +1102 267.300 +1103 130.500 +1103 247.400 +1103 267.300 +1104 212.300 +1104 247.500 +1106 248.200 +1108 247.600 +1108 268.400 +1109 81.200 +1109 131.500 +1110 60.200 +1110 107.700 +1110 144.300 +1110 197.300 +1111 266.000 +1112 57.900 +1112 82.300 +1112 133.000 +1112 158.500 +1112 267.700 +1113 144.000 +1114 54.300 +1114 70.300 +1114 107.800 +1114 123.000 +1114 156.900 +1115 144.600 +1115 187.800 +1115 265.300 +1116 60.200 +1116 157.800 +1116 185.400 +1119 176.500 +1119 247.700 +1120 53.300 +1120 143.400 +1120 267.600 +1121 208.400 +1121 247.800 +1122 144.400 +1122 247.700 +1122 268.100 +1123 53.800 +1123 122.200 +1123 158.600 +1123 278.700 +1124 97.500 +1124 158.000 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_4_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_4_e_pop.dat new file mode 100644 index 000000000..fb4d07aba --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_4_e_pop.dat @@ -0,0 +1,1776 @@ +sender time_ms +0 56.400 +0 97.500 +0 248.000 +0 269.300 +0 287.400 +1 267.200 +2 268.900 +3 246.500 +3 267.500 +4 83.000 +5 283.400 +6 94.900 +6 122.500 +6 171.000 +6 231.000 +7 277.000 +8 276.500 +8 298.000 +9 247.300 +9 287.400 +11 268.600 +12 265.800 +13 144.300 +14 143.900 +14 174.200 +14 247.300 +14 268.000 +15 134.800 +15 247.000 +15 287.000 +16 83.200 +16 143.700 +16 267.200 +17 267.200 +18 267.300 +18 288.000 +19 59.200 +19 157.800 +19 267.600 +20 109.800 +20 232.600 +20 267.100 +21 215.800 +21 247.100 +22 123.400 +22 282.900 +23 60.000 +23 267.000 +24 267.100 +26 267.500 +27 283.900 +27 295.500 +28 83.700 +29 267.000 +30 83.500 +30 218.100 +30 247.300 +31 267.100 +32 186.300 +32 217.100 +32 229.900 +33 60.300 +33 144.400 +33 158.400 +33 171.000 +33 215.200 +34 263.100 +35 83.300 +35 109.400 +35 143.800 +35 175.000 +35 216.700 +35 247.700 +35 269.200 +35 283.500 +36 59.400 +37 245.800 +40 54.000 +40 132.200 +40 287.800 +41 109.100 +41 174.500 +41 244.500 +42 230.800 +43 157.900 +43 246.900 +43 278.900 +44 69.800 +44 174.400 +44 283.600 +45 285.500 +46 83.200 +46 278.800 +47 197.600 +48 157.200 +49 231.600 +50 267.300 +50 284.800 +51 107.800 +51 269.400 +51 284.300 +52 83.400 +52 174.000 +53 270.100 +54 143.900 +55 267.700 +55 285.200 +56 158.600 +56 265.100 +57 283.700 +58 158.300 +59 158.100 +59 283.500 +60 69.600 +60 144.200 +60 265.500 +60 282.600 +61 69.500 +61 186.100 +62 247.100 +62 267.600 +64 158.000 +64 281.600 +65 97.400 +65 143.200 +65 174.100 +65 267.500 +66 128.000 +66 267.500 +66 288.200 +67 83.200 +68 105.600 +68 123.700 +68 281.100 +69 143.500 +69 157.600 +69 287.600 +70 157.600 +70 174.400 +71 70.300 +71 82.600 +71 170.000 +71 197.800 +71 287.200 +72 57.800 +72 110.400 +72 287.400 +73 144.000 +73 159.500 +73 174.800 +73 247.000 +73 269.900 +73 283.200 +74 218.100 +74 269.100 +74 287.600 +75 246.100 +75 265.700 +76 269.400 +77 247.100 +77 288.000 +78 59.300 +78 278.100 +79 232.300 +79 287.600 +80 243.400 +80 281.800 +81 82.900 +81 144.000 +81 267.200 +81 284.000 +82 174.600 +82 286.700 +83 283.300 +84 174.700 +84 288.400 +85 96.600 +85 231.700 +86 247.500 +87 286.500 +88 286.100 +89 123.500 +89 246.600 +90 143.900 +90 185.800 +90 217.000 +90 284.700 +92 174.800 +92 278.500 +94 172.300 +94 231.500 +94 267.200 +94 300.000 +96 133.300 +96 173.600 +96 246.800 +97 156.000 +97 176.200 +97 247.300 +97 284.300 +99 83.300 +99 183.900 +100 246.700 +100 288.600 +101 94.900 +101 247.300 +102 184.900 +102 267.900 +103 83.400 +103 246.100 +105 231.600 +105 247.500 +106 277.900 +107 83.200 +107 96.300 +107 176.300 +107 200.500 +107 278.400 +108 247.500 +109 244.900 +111 83.700 +112 60.600 +112 285.900 +113 144.500 +113 158.100 +114 115.300 +114 144.900 +114 267.000 +114 282.700 +115 115.400 +116 247.400 +116 288.300 +117 83.900 +119 267.800 +119 281.300 +120 137.900 +121 286.200 +122 83.200 +122 196.900 +123 216.300 +123 265.200 +123 285.700 +124 267.100 +124 286.700 +126 247.300 +127 174.300 +128 174.300 +128 267.000 +129 278.300 +130 60.800 +130 144.400 +130 246.800 +131 232.000 +131 267.500 +132 247.400 +132 287.400 +134 82.900 +135 231.500 +135 287.500 +137 175.100 +137 247.400 +137 286.900 +138 60.600 +138 176.200 +138 287.200 +139 231.900 +140 174.500 +140 265.300 +141 176.100 +141 247.100 +141 267.400 +142 267.500 +142 284.100 +143 263.200 +143 287.100 +144 157.700 +144 268.200 +145 97.300 +145 285.700 +146 297.600 +147 174.400 +147 214.400 +147 247.100 +147 279.300 +147 288.400 +148 59.300 +149 157.700 +149 216.800 +149 268.300 +149 287.600 +150 284.000 +151 97.300 +151 172.200 +151 247.600 +151 283.900 +152 267.300 +152 288.100 +153 96.700 +153 246.700 +153 288.600 +154 83.800 +154 197.700 +155 288.100 +157 97.200 +157 265.500 +158 69.000 +158 169.700 +158 266.700 +159 265.800 +159 287.600 +160 287.000 +161 282.900 +162 69.000 +162 136.700 +162 158.100 +162 267.500 +162 286.400 +163 60.600 +163 267.900 +165 69.100 +165 247.600 +165 278.700 +166 68.400 +166 173.800 +167 158.000 +167 265.200 +168 157.100 +168 170.200 +168 267.700 +168 285.500 +169 58.200 +169 83.200 +169 143.200 +170 285.000 +172 280.000 +172 287.500 +173 60.500 +173 83.200 +173 217.500 +173 263.100 +174 97.200 +174 247.300 +174 295.300 +176 123.600 +176 158.000 +177 81.900 +177 110.600 +177 231.800 +177 286.700 +178 59.900 +178 247.300 +178 286.700 +180 278.900 +181 60.400 +181 284.600 +182 267.200 +182 283.600 +183 247.600 +184 97.600 +184 171.600 +184 267.900 +186 299.900 +187 276.000 +188 58.700 +188 217.300 +188 247.700 +188 286.600 +189 60.300 +189 139.900 +189 231.900 +189 284.600 +190 197.100 +190 287.800 +191 83.200 +192 173.900 +192 284.800 +193 284.500 +194 59.500 +194 143.900 +194 269.700 +194 284.100 +196 156.700 +196 276.300 +199 168.900 +199 247.300 +199 265.400 +200 95.500 +200 202.700 +200 267.400 +200 278.500 +201 144.200 +201 176.700 +201 247.500 +201 266.800 +202 157.400 +202 247.200 +203 124.200 +203 266.000 +204 267.700 +205 247.200 +205 267.600 +206 123.000 +207 265.600 +209 197.000 +211 247.000 +211 282.400 +212 265.700 +212 284.000 +214 97.100 +214 217.300 +215 247.400 +215 278.100 +216 267.000 +216 288.100 +217 267.100 +218 267.200 +219 174.600 +219 247.200 +219 278.700 +220 81.100 +220 96.900 +220 122.400 +220 183.800 +220 268.700 +222 247.900 +223 172.500 +223 287.000 +224 130.800 +225 83.500 +225 97.400 +225 233.200 +225 287.300 +226 123.900 +226 218.000 +226 232.200 +227 284.200 +228 144.200 +229 267.200 +230 247.700 +231 247.400 +231 288.000 +232 83.300 +232 159.400 +232 247.600 +232 267.200 +233 171.700 +233 247.600 +234 58.700 +234 231.700 +234 286.000 +235 267.600 +236 60.000 +236 285.800 +237 83.100 +237 157.800 +237 197.500 +237 247.200 +237 268.400 +238 184.000 +238 239.000 +238 286.800 +239 95.600 +239 158.300 +240 247.400 +240 284.000 +241 269.200 +242 212.100 +242 246.200 +243 95.500 +243 175.400 +244 172.800 +244 218.100 +245 83.100 +245 218.100 +246 175.100 +246 246.300 +246 269.000 +247 82.700 +247 174.300 +249 287.500 +250 82.000 +250 158.900 +250 175.400 +250 216.600 +250 247.700 +250 287.300 +251 247.200 +252 80.200 +252 143.900 +252 244.100 +252 288.200 +253 53.200 +253 267.500 +254 157.500 +254 299.300 +255 108.000 +255 231.700 +256 246.700 +256 288.000 +257 143.500 +257 175.200 +257 267.700 +258 82.800 +258 267.500 +258 269.900 +259 108.200 +260 267.000 +260 283.300 +262 110.300 +262 174.500 +262 247.200 +263 218.400 +263 284.100 +264 158.000 +264 265.300 +265 108.200 +265 218.600 +265 285.200 +266 63.700 +266 83.800 +266 124.300 +266 232.000 +266 247.800 +267 69.200 +267 123.600 +267 217.000 +267 281.200 +268 59.000 +268 83.200 +268 217.500 +268 285.800 +269 59.700 +270 265.100 +272 107.600 +272 124.000 +272 143.000 +273 83.100 +273 123.700 +273 246.600 +274 286.400 +275 198.400 +276 267.100 +276 284.100 +277 278.500 +277 288.500 +278 216.900 +278 263.300 +278 288.100 +280 159.000 +280 247.700 +281 218.200 +281 268.700 +281 287.400 +282 266.100 +283 247.200 +284 244.600 +284 247.800 +285 212.200 +285 279.300 +286 82.200 +288 156.100 +288 172.600 +288 247.000 +288 267.100 +288 278.900 +290 266.800 +291 267.000 +291 287.700 +293 95.000 +293 123.500 +293 159.600 +293 282.300 +294 82.900 +294 157.800 +295 194.200 +295 267.300 +296 178.900 +296 247.400 +296 285.400 +298 59.200 +298 97.300 +298 159.200 +298 231.400 +298 247.100 +299 203.100 +299 231.500 +300 287.000 +301 110.200 +301 229.400 +301 247.000 +302 268.900 +302 288.800 +303 140.000 +304 114.200 +304 143.600 +304 158.300 +304 267.400 +305 175.300 +305 284.200 +306 82.600 +306 111.300 +306 157.900 +306 232.100 +306 265.900 +307 247.500 +308 83.400 +308 174.600 +308 197.300 +308 287.800 +309 217.400 +309 232.500 +310 83.000 +311 218.600 +311 268.000 +312 79.300 +312 247.200 +312 287.200 +313 143.900 +313 283.600 +314 83.500 +314 246.600 +314 284.200 +315 53.500 +315 139.300 +315 247.700 +315 278.400 +315 287.900 +316 96.900 +316 174.300 +317 158.300 +317 215.900 +318 97.100 +318 282.000 +319 173.800 +319 247.400 +319 284.000 +320 262.700 +320 284.000 +321 96.900 +321 142.900 +321 202.200 +321 231.300 +321 247.500 +321 283.900 +322 82.600 +322 183.600 +322 247.100 +322 269.100 +324 157.900 +324 247.500 +324 283.400 +325 82.500 +326 83.700 +326 197.300 +326 217.200 +326 232.100 +326 280.200 +326 298.900 +327 247.400 +328 175.800 +328 264.200 +329 83.100 +329 232.000 +330 81.200 +330 175.200 +330 267.600 +331 82.200 +331 144.000 +331 217.300 +331 297.600 +333 122.900 +333 158.100 +333 173.900 +333 297.900 +334 124.100 +334 174.700 +335 267.500 +335 288.100 +336 60.300 +336 109.500 +336 284.900 +337 232.000 +339 265.200 +340 51.600 +340 265.900 +340 279.000 +341 247.800 +342 279.100 +343 197.200 +343 243.300 +344 197.100 +344 244.600 +345 144.400 +345 175.100 +345 247.400 +345 285.500 +346 266.900 +347 122.700 +347 269.700 +348 83.000 +348 269.400 +349 267.100 +350 95.300 +350 139.100 +350 267.500 +350 286.900 +351 247.100 +351 286.300 +352 267.100 +353 158.100 +354 265.100 +355 122.900 +355 159.000 +355 173.700 +355 217.500 +355 286.100 +356 130.600 +356 269.000 +357 267.000 +358 157.700 +358 176.000 +358 229.600 +358 286.700 +359 174.900 +359 214.900 +360 109.600 +360 175.400 +361 284.700 +362 231.700 +362 282.000 +363 51.500 +365 287.600 +366 54.300 +366 113.200 +366 144.400 +366 265.300 +366 288.600 +368 83.000 +368 299.000 +369 123.000 +369 174.500 +369 284.900 +370 267.000 +371 105.900 +371 267.600 +372 60.200 +372 232.200 +373 267.400 +374 53.700 +374 95.600 +374 121.400 +374 144.400 +375 216.300 +375 290.000 +376 82.900 +376 278.400 +377 284.200 +378 157.300 +378 247.500 +378 269.500 +379 124.400 +379 268.200 +379 279.000 +380 110.900 +380 217.900 +381 285.200 +382 95.400 +382 216.400 +383 247.000 +385 267.500 +386 268.100 +387 247.500 +387 288.900 +388 184.400 +388 230.600 +388 265.200 +389 158.500 +389 198.200 +389 265.800 +390 195.300 +390 244.200 +390 266.900 +390 284.300 +391 82.700 +391 159.300 +391 176.400 +391 231.800 +391 277.700 +391 286.400 +392 111.100 +392 144.500 +393 53.400 +393 247.400 +394 176.100 +394 187.200 +394 267.400 +395 82.700 +395 174.700 +395 247.500 +395 287.900 +397 83.100 +397 283.800 +398 246.700 +398 294.700 +399 247.300 +400 198.000 +400 298.900 +401 230.000 +401 267.500 +402 83.200 +402 263.100 +402 267.900 +402 284.000 +404 96.700 +404 108.000 +404 159.400 +404 231.600 +404 286.400 +405 58.800 +405 123.900 +405 144.400 +405 171.900 +405 282.800 +406 109.600 +406 247.600 +406 276.800 +408 109.000 +408 173.700 +408 231.900 +408 263.700 +408 269.400 +410 197.600 +410 232.300 +410 286.900 +411 265.900 +412 243.400 +412 264.800 +413 285.000 +414 96.200 +414 247.000 +415 158.100 +416 82.900 +416 144.200 +416 174.900 +416 267.100 +416 287.000 +417 133.300 +417 284.900 +418 95.300 +418 194.000 +418 214.800 +418 267.600 +418 284.500 +419 59.300 +419 231.900 +419 266.200 +419 284.000 +421 196.100 +421 245.900 +421 288.500 +422 109.600 +422 144.000 +422 246.800 +422 269.100 +422 284.800 +424 95.300 +425 201.400 +425 267.400 +426 96.800 +426 267.900 +426 287.100 +427 204.100 +427 247.600 +428 284.100 +429 125.900 +429 169.600 +429 267.400 +430 139.500 +430 284.800 +432 96.700 +432 123.900 +432 217.300 +432 232.200 +432 288.700 +434 143.900 +435 188.100 +435 247.400 +435 284.200 +436 110.600 +436 174.000 +436 202.800 +436 267.400 +437 95.600 +437 136.900 +437 282.000 +438 197.500 +439 79.500 +439 185.200 +439 287.300 +440 69.200 +440 170.700 +440 228.100 +440 267.900 +441 83.700 +442 247.100 +443 96.800 +444 216.800 +445 59.500 +445 83.500 +445 155.700 +445 267.700 +445 289.600 +446 267.100 +447 67.800 +447 267.500 +448 60.500 +448 287.200 +449 143.600 +449 279.200 +450 96.300 +450 173.900 +450 266.000 +450 295.200 +451 269.200 +451 283.900 +452 241.300 +453 175.100 +453 247.500 +453 287.200 +454 83.300 +454 231.500 +454 285.000 +456 247.200 +458 282.600 +459 284.900 +461 216.100 +461 264.900 +464 174.900 +465 82.600 +465 171.400 +465 217.700 +465 286.300 +466 247.500 +466 287.600 +467 244.400 +468 124.200 +468 171.200 +469 204.200 +469 243.700 +469 288.000 +470 174.700 +470 283.300 +471 246.600 +472 216.300 +472 265.900 +473 158.000 +473 265.000 +473 283.700 +475 287.100 +476 173.800 +476 185.800 +476 247.700 +476 281.400 +477 83.200 +477 286.400 +478 126.800 +478 228.000 +478 267.300 +479 158.100 +479 204.200 +479 288.200 +481 59.300 +481 197.800 +482 124.000 +482 158.400 +483 81.300 +483 267.100 +484 231.900 +484 284.100 +485 59.400 +485 247.500 +485 267.300 +486 123.700 +486 283.600 +487 267.500 +487 283.600 +488 276.900 +489 95.800 +490 218.300 +490 267.600 +490 287.600 +491 136.200 +491 268.300 +492 83.600 +492 247.400 +492 267.200 +493 287.100 +495 247.200 +496 69.700 +496 97.300 +496 247.200 +496 265.500 +496 286.500 +497 247.000 +498 269.600 +498 286.500 +499 157.600 +499 185.600 +499 268.000 +499 287.600 +501 83.000 +501 267.300 +501 287.100 +502 174.800 +502 231.800 +502 247.500 +502 269.700 +502 284.400 +503 265.200 +504 269.000 +504 283.000 +505 114.600 +505 158.500 +505 267.300 +508 59.800 +508 246.800 +509 247.400 +509 287.500 +510 172.200 +511 105.000 +511 174.100 +511 264.800 +512 97.400 +512 247.100 +512 287.400 +513 287.400 +514 175.300 +514 247.700 +514 278.300 +514 298.900 +515 144.800 +515 267.000 +515 286.600 +516 82.700 +516 173.800 +517 93.300 +517 159.000 +517 204.600 +517 246.900 +518 217.700 +519 244.300 +519 284.000 +520 68.600 +520 247.300 +520 267.900 +521 158.000 +522 280.800 +523 246.600 +524 97.300 +524 174.300 +524 267.000 +525 134.800 +525 174.400 +526 83.900 +526 247.400 +527 247.400 +528 287.200 +529 247.500 +531 108.000 +531 143.900 +531 247.000 +531 278.200 +531 287.900 +532 247.600 +532 267.100 +532 298.500 +533 286.900 +534 144.800 +534 243.800 +535 174.500 +535 213.900 +538 53.500 +538 123.900 +538 246.700 +538 286.800 +539 246.900 +539 268.400 +539 286.100 +540 172.800 +540 215.700 +540 288.000 +541 286.900 +542 215.000 +542 265.900 +542 269.600 +542 280.300 +543 284.000 +544 59.300 +544 124.400 +544 134.700 +544 172.700 +544 269.800 +544 286.700 +545 158.900 +545 247.200 +545 286.000 +546 166.400 +546 174.800 +546 216.700 +547 68.500 +547 96.600 +547 144.900 +547 217.000 +547 288.200 +549 84.100 +549 268.500 +549 284.500 +550 69.100 +550 184.800 +550 202.900 +550 247.100 +550 269.100 +551 131.600 +551 231.600 +551 284.300 +552 267.200 +553 83.300 +553 231.600 +553 266.700 +554 174.400 +555 82.400 +555 175.300 +555 270.600 +556 231.800 +557 283.200 +558 174.300 +559 83.100 +559 171.700 +559 246.300 +559 265.100 +559 283.500 +560 82.400 +560 247.700 +561 197.900 +561 232.000 +562 284.300 +563 264.600 +564 282.500 +565 67.600 +565 157.800 +565 267.300 +565 287.400 +567 266.100 +567 268.200 +568 158.100 +569 246.600 +569 278.100 +570 287.400 +571 53.900 +571 70.200 +572 204.100 +572 247.400 +572 267.200 +573 247.200 +574 283.500 +575 216.500 +575 267.200 +576 59.000 +576 285.200 +578 247.200 +578 288.200 +580 287.100 +581 115.100 +581 158.300 +581 281.700 +582 247.500 +583 282.500 +584 157.800 +584 193.400 +584 217.400 +584 269.200 +585 247.300 +586 55.800 +586 247.700 +586 267.300 +587 267.100 +588 263.000 +588 287.000 +589 276.900 +590 176.100 +590 288.300 +591 286.000 +592 111.200 +592 172.300 +592 265.200 +593 247.600 +593 265.900 +594 247.200 +594 267.000 +594 284.900 +596 218.400 +598 171.500 +598 269.600 +599 83.300 +599 247.400 +599 283.900 +601 56.200 +601 82.900 +601 143.400 +602 197.300 +603 158.100 +603 213.700 +605 54.100 +605 246.900 +606 83.400 +606 264.800 +607 213.400 +607 288.300 +608 82.900 +608 158.400 +609 145.000 +609 175.400 +609 197.400 +609 285.700 +610 57.000 +610 81.300 +610 174.300 +610 246.800 +611 93.200 +611 287.800 +613 284.900 +614 232.100 +614 268.900 +616 93.000 +616 158.400 +616 246.900 +616 284.900 +617 83.200 +617 172.900 +618 83.300 +618 247.300 +619 265.800 +620 246.900 +621 60.000 +621 83.400 +621 103.200 +622 267.200 +623 70.200 +624 175.000 +624 296.200 +625 83.200 +625 157.700 +626 157.500 +626 268.300 +627 123.800 +628 247.300 +629 67.300 +629 247.500 +630 288.100 +632 278.400 +633 197.300 +633 267.000 +634 174.900 +634 247.200 +635 174.400 +635 246.700 +637 84.000 +637 175.100 +638 81.100 +638 174.600 +639 174.600 +639 231.800 +640 287.800 +641 269.500 +642 59.400 +642 83.200 +642 158.100 +643 175.000 +643 240.500 +644 159.200 +645 82.500 +645 288.700 +646 96.400 +646 144.800 +646 285.100 +647 267.200 +647 281.200 +648 82.700 +648 123.700 +648 144.200 +648 247.000 +649 284.700 +650 110.600 +650 174.000 +650 217.300 +651 144.400 +651 282.900 +652 278.600 +654 265.700 +655 83.400 +656 83.100 +656 287.700 +657 133.000 +657 247.500 +659 217.200 +660 110.900 +660 171.800 +660 267.400 +661 174.700 +661 217.200 +662 175.400 +663 83.300 +663 158.300 +664 264.900 +666 288.100 +667 110.000 +668 247.700 +669 53.900 +669 278.800 +670 247.000 +671 170.900 +671 218.000 +672 110.500 +673 83.000 +673 110.500 +673 157.700 +673 267.400 +674 157.400 +674 217.700 +677 52.600 +677 157.100 +677 284.800 +678 60.800 +679 79.400 +679 155.900 +679 278.100 +680 284.900 +681 96.100 +682 95.700 +682 157.300 +682 174.500 +682 217.400 +682 247.000 +682 269.200 +683 174.500 +683 265.000 +684 231.800 +684 288.300 +685 217.600 +685 247.300 +686 265.800 +687 287.600 +688 59.800 +688 281.600 +689 57.100 +689 123.600 +689 159.500 +689 284.900 +690 68.400 +690 83.700 +690 96.900 +690 108.300 +690 159.200 +691 95.200 +691 143.000 +692 173.700 +692 285.900 +693 269.100 +694 83.300 +695 231.900 +695 267.200 +696 267.800 +699 83.900 +700 158.200 +700 217.500 +702 265.000 +704 82.200 +704 110.600 +704 286.800 +705 96.700 +705 186.000 +706 83.100 +706 173.700 +706 282.200 +707 132.700 +708 283.700 +709 283.900 +710 174.700 +710 282.500 +710 288.400 +711 158.300 +711 216.900 +711 232.000 +711 287.100 +712 142.600 +712 264.200 +713 158.300 +714 247.200 +714 267.500 +715 83.200 +715 110.600 +715 143.600 +715 185.400 +715 284.200 +716 84.100 +716 137.200 +716 283.400 +717 285.000 +718 247.200 +718 266.900 +719 83.000 +719 247.800 +720 157.400 +720 284.400 +721 244.300 +722 247.500 +722 267.900 +723 83.400 +723 283.500 +724 60.100 +724 141.700 +724 158.300 +724 247.400 +725 60.600 +725 174.600 +725 216.500 +725 269.100 +726 115.500 +726 174.600 +727 60.600 +727 172.100 +727 246.700 +728 267.300 +728 281.800 +729 266.800 +730 83.300 +730 283.700 +731 283.000 +732 158.600 +732 265.700 +733 123.300 +733 217.700 +733 269.000 +734 246.800 +734 267.000 +735 286.000 +736 157.500 +736 268.700 +736 283.800 +737 288.600 +738 284.500 +739 72.100 +739 83.500 +739 247.200 +740 88.000 +740 142.800 +740 201.100 +740 288.400 +741 247.200 +741 287.500 +742 265.100 +743 111.000 +744 82.100 +744 123.500 +744 265.000 +745 275.300 +747 267.200 +747 284.900 +748 84.000 +748 196.700 +748 218.300 +748 263.200 +748 285.400 +749 82.600 +749 115.600 +749 144.200 +749 173.800 +749 247.000 +749 267.300 +749 288.300 +750 124.300 +750 143.600 +750 174.100 +750 247.600 +751 247.100 +751 268.100 +753 283.800 +755 185.000 +755 282.900 +756 123.000 +756 284.200 +758 269.100 +759 80.700 +759 283.800 +761 217.800 +763 246.500 +763 288.700 +764 217.500 +764 267.200 +765 287.100 +766 96.300 +766 174.100 +767 144.800 +769 83.300 +769 123.400 +769 157.600 +770 283.100 +771 82.700 +771 123.500 +771 174.700 +771 216.400 +771 266.900 +771 286.900 +772 144.800 +772 288.300 +773 83.700 +773 159.300 +773 269.200 +773 283.100 +774 278.200 +775 109.900 +775 157.600 +776 232.300 +777 54.300 +777 109.500 +777 168.900 +777 246.800 +777 267.900 +778 284.300 +779 265.900 +780 96.300 +780 172.200 +780 230.600 +781 82.900 +781 267.200 +782 83.600 +782 205.000 +782 215.600 +782 246.600 +782 267.600 +782 284.200 +783 60.200 +783 157.700 +783 217.100 +783 232.500 +783 283.700 +784 247.500 +785 110.600 +785 284.900 +786 266.900 +786 285.400 +787 285.000 +788 57.500 +789 282.100 +790 134.800 +790 180.700 +790 267.100 +791 95.800 +791 157.800 +791 203.100 +791 277.100 +792 123.300 +792 158.000 +792 265.600 +792 286.400 +793 287.700 +794 107.900 +794 185.400 +794 265.600 +794 288.000 +795 159.400 +795 246.700 +796 287.500 +797 267.700 +798 285.800 +799 156.300 +799 247.100 +799 284.400 +800 173.300 +800 217.100 +801 97.400 +801 139.000 +801 174.100 +802 263.300 +803 56.500 +803 232.000 +803 284.800 +804 217.400 +804 284.400 +805 143.600 +805 267.700 +805 287.300 +807 248.400 +807 267.000 +808 123.600 +808 269.300 +809 144.500 +810 288.100 +811 83.400 +811 284.000 +812 266.200 +813 59.500 +813 107.100 +813 136.600 +813 247.900 +815 83.700 +815 288.400 +816 282.900 +817 174.600 +817 283.300 +818 97.300 +818 216.700 +818 247.000 +819 217.200 +820 83.900 +820 204.300 +821 231.700 +821 265.000 +822 278.500 +822 288.000 +824 170.700 +824 288.400 +825 97.400 +825 202.800 +825 268.300 +826 83.700 +826 109.500 +826 231.000 +826 286.100 +827 268.600 +828 176.300 +829 247.000 +829 288.400 +830 95.300 +830 173.800 +830 265.400 +831 137.700 +831 157.900 +831 298.800 +832 298.000 +834 266.800 +834 283.700 +835 287.300 +836 92.300 +836 123.900 +836 185.700 +836 204.100 +836 243.400 +836 288.300 +837 83.400 +837 111.000 +837 185.500 +837 216.400 +837 248.000 +837 267.300 +837 281.300 +838 57.500 +838 82.000 +838 158.000 +838 297.900 +841 267.600 +842 83.000 +842 144.500 +842 231.800 +842 265.300 +843 52.900 +843 137.300 +843 269.200 +843 285.400 +844 174.900 +844 248.300 +844 287.500 +846 60.300 +846 216.200 +846 263.300 +847 247.300 +850 132.200 +850 265.000 +850 288.700 +851 158.100 +851 246.700 +851 300.000 +852 83.400 +852 217.600 +852 247.400 +852 286.100 +853 202.900 +854 143.600 +855 123.400 +855 158.000 +855 283.600 +856 158.100 +856 244.900 +856 287.300 +858 174.200 +858 247.000 +859 247.300 +860 109.900 +860 247.200 +860 285.800 +862 174.600 +862 265.100 +862 298.600 +863 83.300 +864 266.900 +864 297.300 +865 83.200 +865 247.200 +865 286.100 +866 247.000 +867 171.100 +868 83.300 +868 204.300 +868 228.700 +868 247.800 +868 269.000 +868 286.900 +869 265.300 +869 288.400 +870 115.600 +870 144.400 +870 267.500 +871 287.300 +872 203.500 +872 288.100 +873 198.100 +874 174.600 +874 247.600 +875 216.500 +875 288.300 +876 144.300 +877 59.800 +877 122.800 +877 144.500 +878 157.900 +878 269.200 +879 81.100 +879 154.900 +879 218.300 +880 139.300 +880 172.000 +880 216.000 +880 269.000 +881 110.700 +881 173.400 +881 263.400 +881 285.100 +882 83.000 +884 96.000 +884 144.800 +884 283.000 +886 287.100 +887 282.400 +888 109.500 +888 123.800 +888 144.900 +888 169.600 +888 284.000 +890 58.400 +890 202.100 +890 247.500 +891 174.600 +892 81.900 +894 110.500 +894 244.400 +894 283.000 +895 267.300 +896 286.000 +897 176.100 +897 247.400 +897 283.600 +898 143.500 +898 265.100 +899 59.400 +899 284.000 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_4_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_4_i_pop.dat new file mode 100644 index 000000000..97704f99d --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_4_i_pop.dat @@ -0,0 +1,464 @@ +sender time_ms +900 122.800 +900 267.200 +901 83.100 +901 124.600 +901 269.300 +901 284.800 +902 175.200 +902 286.400 +903 80.200 +903 154.800 +903 283.100 +904 247.100 +904 269.200 +904 289.600 +905 267.100 +906 94.000 +907 83.200 +907 216.600 +907 247.400 +907 267.600 +908 197.500 +908 267.300 +909 83.500 +909 165.000 +909 205.200 +909 217.700 +909 295.200 +910 157.900 +910 183.700 +910 216.700 +910 282.900 +911 158.200 +911 217.700 +911 269.000 +911 278.600 +911 288.500 +912 171.800 +912 247.600 +912 287.200 +913 72.400 +913 185.700 +913 217.300 +913 276.000 +914 97.200 +914 157.500 +914 231.200 +915 109.900 +915 173.800 +915 265.100 +916 247.600 +916 283.300 +917 158.200 +917 247.200 +917 267.600 +917 279.900 +917 288.000 +918 288.100 +919 267.500 +920 97.400 +920 246.800 +921 83.900 +921 174.700 +921 247.600 +921 298.900 +922 158.300 +922 174.100 +922 268.000 +922 289.700 +923 59.100 +923 247.200 +923 278.000 +924 53.400 +924 174.600 +924 246.600 +924 267.100 +925 263.800 +926 109.500 +927 247.200 +928 247.200 +928 287.400 +929 77.200 +929 96.300 +929 144.100 +929 157.900 +929 224.400 +929 230.800 +929 246.900 +929 267.800 +930 96.800 +930 284.600 +931 194.000 +931 276.600 +932 171.500 +932 247.600 +932 278.100 +933 107.800 +933 176.100 +934 50.800 +934 137.000 +934 170.600 +934 278.600 +935 158.100 +935 174.600 +935 247.700 +935 266.200 +936 286.600 +937 157.700 +937 267.600 +937 280.500 +938 96.000 +938 197.300 +938 216.500 +938 247.100 +939 71.900 +939 123.800 +939 157.500 +939 232.100 +940 205.300 +940 217.600 +941 247.400 +941 267.100 +942 203.100 +942 237.200 +943 83.400 +943 123.600 +943 158.100 +943 246.800 +945 59.400 +945 123.600 +945 156.300 +945 174.800 +945 278.500 +946 69.400 +946 264.000 +947 83.300 +947 144.500 +947 247.100 +947 265.700 +947 285.100 +948 264.000 +948 269.300 +948 283.600 +949 229.600 +949 263.800 +950 267.200 +950 284.400 +951 266.900 +951 283.400 +952 111.100 +953 159.000 +953 226.400 +953 267.200 +954 244.700 +955 82.900 +955 173.400 +955 244.300 +955 282.000 +957 136.900 +957 246.800 +960 98.800 +960 157.500 +960 216.600 +961 244.100 +962 144.900 +962 176.000 +962 288.500 +963 83.000 +963 286.600 +965 283.800 +966 83.200 +966 247.600 +967 83.000 +967 247.200 +968 158.300 +968 278.100 +969 144.500 +969 265.200 +970 60.100 +970 158.200 +970 283.400 +971 231.800 +972 197.600 +972 247.700 +972 267.400 +972 281.200 +973 82.700 +973 203.100 +973 231.200 +975 157.900 +975 284.000 +976 143.800 +976 232.200 +977 247.300 +977 287.300 +978 157.700 +978 282.000 +979 59.400 +979 247.000 +979 267.100 +980 288.300 +981 266.200 +981 277.800 +982 159.100 +983 110.000 +985 233.300 +985 247.200 +985 287.300 +986 159.600 +986 175.100 +986 278.100 +988 247.400 +988 269.100 +989 267.200 +989 288.400 +990 281.600 +991 283.400 +992 159.200 +992 265.000 +992 285.100 +994 247.200 +995 247.100 +996 97.600 +996 144.200 +996 195.300 +996 283.700 +998 108.300 +999 278.800 +1000 286.800 +1001 188.800 +1001 289.700 +1003 269.100 +1004 267.100 +1004 288.700 +1005 82.200 +1005 247.200 +1006 59.900 +1006 83.100 +1006 115.800 +1006 144.400 +1006 158.400 +1006 197.100 +1006 247.800 +1006 266.100 +1007 187.500 +1007 288.100 +1008 266.000 +1009 96.000 +1009 175.800 +1009 265.700 +1010 229.800 +1010 268.100 +1011 144.600 +1011 267.800 +1012 243.300 +1013 157.700 +1014 96.600 +1014 176.200 +1014 287.800 +1016 247.600 +1016 267.500 +1017 82.600 +1018 133.000 +1018 158.000 +1018 216.600 +1019 82.700 +1019 157.600 +1020 196.900 +1021 247.300 +1022 158.300 +1023 174.200 +1023 247.400 +1024 267.500 +1025 83.000 +1025 158.200 +1026 267.100 +1028 283.500 +1029 267.400 +1030 170.500 +1030 265.500 +1031 81.000 +1031 174.200 +1031 268.400 +1032 157.900 +1032 286.800 +1033 95.900 +1033 247.200 +1033 287.400 +1034 158.000 +1034 265.500 +1035 174.600 +1036 85.000 +1036 267.500 +1037 283.900 +1038 173.400 +1038 280.700 +1039 110.500 +1039 247.400 +1040 269.700 +1041 183.700 +1041 269.100 +1041 283.100 +1042 284.800 +1043 57.000 +1043 174.300 +1043 285.000 +1044 58.000 +1044 283.700 +1045 267.000 +1046 109.400 +1046 193.700 +1046 277.200 +1049 83.100 +1049 203.700 +1049 231.700 +1049 289.100 +1050 267.000 +1051 284.100 +1052 197.800 +1052 247.900 +1053 123.700 +1053 144.600 +1053 288.500 +1054 173.800 +1054 284.400 +1055 288.400 +1056 81.200 +1056 267.000 +1056 287.500 +1057 267.400 +1058 57.400 +1058 174.500 +1058 247.100 +1058 298.500 +1059 202.800 +1059 246.900 +1060 282.600 +1061 57.700 +1061 286.300 +1062 288.200 +1063 288.100 +1064 282.500 +1065 174.200 +1065 247.100 +1066 282.500 +1067 97.300 +1069 171.700 +1069 247.700 +1070 82.600 +1070 247.400 +1071 83.100 +1071 247.600 +1072 144.800 +1072 246.800 +1072 282.900 +1075 68.500 +1075 278.500 +1076 267.400 +1077 107.800 +1077 133.300 +1077 247.400 +1077 266.900 +1079 266.400 +1080 84.200 +1080 124.100 +1080 134.500 +1080 267.500 +1081 124.100 +1081 157.700 +1082 158.400 +1082 286.200 +1083 83.000 +1083 174.100 +1083 232.200 +1083 263.900 +1084 157.900 +1084 188.300 +1084 231.800 +1085 143.000 +1085 176.000 +1085 288.700 +1086 83.200 +1086 174.600 +1086 215.900 +1087 269.600 +1087 286.900 +1088 282.900 +1089 82.700 +1089 266.900 +1090 108.000 +1090 216.400 +1090 231.700 +1091 216.600 +1091 247.500 +1091 286.500 +1092 187.600 +1092 278.300 +1093 61.400 +1093 157.700 +1093 231.900 +1093 247.600 +1093 269.300 +1094 275.100 +1094 287.700 +1095 107.700 +1095 247.100 +1095 267.000 +1096 285.400 +1099 268.400 +1099 286.100 +1100 83.000 +1100 110.700 +1100 135.200 +1100 283.700 +1101 59.400 +1101 83.400 +1101 282.200 +1102 158.200 +1102 216.900 +1102 287.300 +1103 247.400 +1103 297.000 +1104 217.700 +1104 288.600 +1105 283.100 +1105 300.000 +1106 95.600 +1106 123.100 +1106 229.400 +1106 248.000 +1106 275.700 +1107 287.900 +1108 144.000 +1108 267.000 +1108 284.100 +1109 175.800 +1109 247.400 +1110 175.400 +1110 287.200 +1111 53.200 +1111 143.500 +1111 176.200 +1111 247.100 +1111 286.400 +1112 70.500 +1112 82.400 +1112 133.300 +1112 172.800 +1113 53.900 +1113 232.100 +1114 247.000 +1115 83.300 +1115 157.700 +1116 281.600 +1119 69.500 +1119 174.900 +1120 69.000 +1120 144.100 +1120 286.000 +1121 97.400 +1121 286.000 +1123 137.100 +1123 289.500 +1124 247.400 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_5_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_5_e_pop.dat new file mode 100644 index 000000000..92b13be91 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_5_e_pop.dat @@ -0,0 +1,3145 @@ +sender time_ms +0 58.700 +0 83.200 +0 197.000 +0 216.300 +0 228.500 +0 288.000 +1 83.100 +1 218.100 +2 82.200 +2 202.800 +2 213.900 +2 243.400 +3 156.700 +3 215.400 +4 216.300 +5 174.600 +5 205.200 +5 215.300 +5 298.000 +6 94.600 +6 123.200 +6 157.900 +6 201.500 +6 215.500 +6 247.400 +6 299.200 +7 210.100 +7 216.300 +8 212.200 +8 247.500 +9 83.500 +9 189.000 +9 216.400 +10 83.500 +10 174.800 +10 212.000 +10 226.900 +10 267.900 +11 69.300 +11 91.400 +11 212.400 +12 144.800 +12 157.900 +12 197.200 +12 214.300 +13 83.500 +13 199.000 +13 214.700 +13 265.500 +14 70.000 +14 143.200 +14 188.800 +14 216.900 +15 82.900 +15 204.000 +15 216.600 +16 95.200 +16 216.900 +16 275.500 +16 286.500 +17 212.600 +18 110.600 +18 159.400 +18 214.700 +19 96.500 +19 216.300 +20 202.300 +21 97.600 +22 82.300 +22 171.300 +22 204.300 +22 217.300 +22 248.100 +23 82.300 +23 130.500 +23 232.300 +23 287.300 +24 82.300 +24 173.900 +24 216.400 +24 277.800 +25 56.900 +25 68.300 +25 133.400 +25 141.800 +25 159.800 +25 204.500 +25 216.900 +25 246.600 +26 195.300 +27 179.900 +27 212.300 +27 227.500 +28 83.400 +28 97.200 +28 203.500 +29 107.900 +29 171.700 +29 204.300 +29 248.400 +30 82.400 +30 188.100 +30 213.900 +30 298.000 +31 211.900 +32 212.900 +32 267.800 +33 96.000 +33 199.700 +33 216.400 +33 247.600 +34 214.700 +34 287.800 +35 181.300 +35 212.800 +35 243.900 +35 269.100 +36 83.300 +36 198.100 +36 215.400 +36 288.400 +37 213.000 +37 299.400 +38 217.000 +39 90.700 +39 204.200 +39 217.700 +40 96.300 +40 174.300 +40 214.400 +41 213.800 +42 82.600 +42 216.600 +42 281.900 +42 297.000 +43 96.000 +43 174.100 +43 204.600 +43 299.100 +44 214.300 +44 298.200 +45 193.000 +45 214.300 +45 289.500 +46 95.600 +46 175.500 +46 197.300 +46 216.300 +47 82.700 +47 176.100 +47 202.900 +48 197.500 +48 214.300 +48 228.200 +48 278.500 +49 59.200 +49 184.100 +49 215.200 +49 285.700 +50 211.900 +50 244.400 +51 106.000 +51 174.000 +51 215.900 +51 248.300 +51 298.000 +52 158.100 +52 218.000 +53 79.400 +53 97.200 +53 143.900 +53 173.600 +53 204.200 +53 265.500 +54 201.900 +54 229.100 +55 82.800 +55 124.200 +55 145.300 +55 215.400 +56 70.000 +56 214.400 +56 231.200 +56 298.500 +57 59.400 +57 83.500 +57 143.900 +57 158.000 +57 204.200 +58 219.400 +58 244.400 +59 116.800 +59 212.900 +59 284.100 +60 197.500 +60 216.500 +60 286.500 +61 204.100 +61 216.800 +62 96.700 +62 128.300 +62 212.700 +63 70.400 +63 213.100 +64 158.200 +64 198.100 +64 216.400 +65 83.500 +65 159.300 +65 216.900 +65 298.000 +66 174.500 +66 214.300 +66 287.900 +67 107.300 +67 197.200 +67 227.600 +67 298.200 +68 90.000 +68 159.000 +68 215.000 +69 97.500 +69 158.200 +69 189.000 +69 216.200 +69 286.700 +70 202.100 +70 216.500 +71 156.200 +71 204.900 +71 267.100 +71 289.000 +72 108.000 +72 159.300 +72 202.900 +72 215.200 +72 287.400 +73 212.300 +74 82.500 +74 108.100 +74 198.100 +74 214.800 +75 144.700 +75 204.600 +75 286.600 +76 196.600 +76 215.900 +77 158.200 +77 194.900 +77 214.700 +77 287.700 +78 83.200 +78 215.700 +78 286.200 +79 78.100 +79 174.400 +79 197.700 +79 211.000 +79 267.900 +80 204.200 +80 217.100 +81 60.300 +81 83.200 +81 212.900 +81 287.300 +82 71.700 +82 81.900 +82 134.700 +82 158.200 +82 214.500 +82 267.100 +82 297.100 +83 82.800 +83 197.200 +83 212.700 +83 247.600 +83 299.900 +84 213.600 +84 218.100 +85 82.200 +85 157.900 +85 215.300 +86 205.000 +86 217.300 +87 60.700 +87 82.300 +87 157.800 +87 204.300 +87 214.800 +87 298.600 +88 71.000 +88 204.400 +88 232.100 +89 133.000 +89 158.200 +89 215.900 +89 224.400 +89 265.100 +90 214.000 +91 97.000 +91 213.800 +91 247.100 +92 158.200 +92 196.700 +92 217.300 +92 231.300 +92 247.100 +93 96.400 +93 158.000 +93 197.400 +93 298.600 +94 79.800 +94 197.300 +94 216.300 +95 69.600 +95 211.400 +95 267.500 +96 188.400 +96 213.500 +97 60.700 +97 105.500 +97 124.400 +97 159.500 +97 188.100 +97 204.200 +97 217.100 +97 248.200 +98 123.600 +98 216.900 +98 267.000 +99 76.700 +99 95.800 +99 174.900 +99 193.100 +100 60.600 +100 107.700 +100 213.100 +100 243.400 +100 287.400 +100 299.100 +101 143.700 +101 211.600 +101 265.100 +102 196.800 +102 217.500 +102 299.700 +103 187.200 +103 214.600 +104 59.200 +104 145.000 +104 181.900 +104 213.300 +104 299.200 +105 109.200 +105 159.200 +105 216.200 +106 124.000 +106 197.400 +106 218.000 +107 174.600 +107 184.900 +107 216.700 +107 247.500 +108 83.400 +108 217.300 +108 287.000 +109 82.500 +109 214.600 +109 267.400 +110 107.900 +110 194.300 +110 216.000 +111 58.100 +111 205.100 +111 217.000 +112 96.700 +112 158.400 +112 194.500 +112 213.200 +112 267.500 +113 58.300 +113 213.000 +113 247.300 +114 96.200 +114 215.100 +115 67.500 +115 108.500 +115 123.400 +115 133.000 +115 244.100 +116 83.100 +116 158.000 +116 203.000 +116 247.500 +116 265.000 +117 81.700 +117 174.200 +117 197.100 +117 214.500 +117 299.200 +118 60.500 +118 83.400 +118 124.700 +118 199.700 +118 214.100 +118 229.400 +118 248.000 +118 267.300 +119 79.400 +119 130.900 +119 143.200 +119 187.800 +119 212.500 +119 247.300 +119 269.200 +119 287.800 +119 299.900 +120 116.300 +120 176.400 +120 267.100 +121 216.600 +121 267.400 +121 286.400 +122 171.400 +122 247.100 +123 211.900 +124 97.200 +124 211.900 +124 287.700 +125 83.100 +125 215.400 +125 288.200 +126 188.700 +126 216.300 +126 247.800 +127 72.500 +127 95.000 +127 144.300 +127 174.800 +127 197.700 +127 204.100 +127 217.400 +127 287.100 +128 94.100 +128 214.700 +128 265.300 +129 83.000 +129 107.900 +129 183.700 +129 216.300 +129 244.000 +130 183.700 +130 208.000 +130 216.300 +131 83.800 +131 208.000 +131 217.300 +131 247.500 +132 94.800 +132 134.400 +132 213.200 +132 285.800 +133 96.400 +133 174.900 +133 214.200 +134 215.300 +135 83.100 +135 197.600 +135 278.100 +136 215.400 +137 95.600 +137 158.100 +137 188.500 +137 209.600 +137 218.300 +137 231.400 +137 247.200 +137 278.600 +138 157.900 +138 189.000 +139 217.700 +139 286.800 +140 156.800 +140 195.000 +140 216.500 +141 83.100 +141 143.300 +141 212.800 +141 267.100 +142 187.800 +142 197.700 +142 215.800 +142 245.100 +142 286.700 +143 83.200 +143 157.700 +143 213.700 +143 287.000 +144 83.400 +144 157.700 +145 69.300 +145 204.100 +145 243.500 +146 96.400 +146 143.800 +146 217.500 +146 265.400 +146 299.700 +147 215.300 +148 175.600 +148 197.000 +148 247.000 +149 214.000 +150 108.000 +150 206.500 +150 215.400 +151 156.100 +151 174.700 +151 197.800 +151 213.700 +152 83.100 +152 216.600 +153 197.000 +153 267.300 +154 83.100 +154 123.700 +154 157.600 +154 176.300 +154 187.900 +154 215.900 +154 232.000 +155 143.200 +155 217.200 +155 243.500 +155 288.900 +156 171.300 +156 212.100 +156 231.700 +157 83.600 +157 134.300 +157 186.400 +157 207.700 +157 216.500 +157 247.600 +158 71.000 +158 131.100 +158 157.300 +158 196.900 +158 213.700 +159 82.900 +159 133.200 +159 183.000 +159 214.700 +159 269.100 +160 82.200 +160 113.400 +160 131.300 +160 153.700 +160 215.200 +160 245.000 +160 295.200 +161 71.300 +161 97.100 +161 158.200 +161 189.000 +161 203.800 +162 96.200 +162 170.400 +162 175.800 +163 83.700 +163 181.000 +163 202.900 +163 228.200 +164 93.400 +164 144.300 +164 201.300 +164 218.000 +164 286.700 +165 157.200 +165 216.100 +165 247.300 +165 297.100 +166 204.300 +166 287.200 +167 218.200 +168 83.100 +168 157.700 +168 203.100 +168 216.100 +168 247.600 +169 95.600 +169 208.500 +169 215.900 +170 96.600 +170 216.400 +170 247.500 +171 127.200 +171 158.200 +171 188.200 +171 215.300 +171 247.600 +172 173.900 +172 199.800 +173 216.700 +174 96.200 +174 215.500 +174 267.000 +175 144.300 +175 216.300 +175 286.500 +176 83.300 +176 194.900 +176 216.400 +176 287.400 +177 216.300 +177 287.400 +178 94.600 +178 143.400 +178 216.800 +178 247.900 +179 82.000 +179 96.500 +179 123.100 +179 155.300 +179 213.600 +179 288.100 +180 110.400 +180 204.300 +180 216.600 +181 83.400 +181 95.100 +181 124.800 +181 158.000 +181 195.300 +181 213.400 +181 278.700 +182 215.300 +182 264.900 +183 82.000 +183 96.300 +183 182.900 +183 216.500 +184 208.900 +184 287.200 +185 94.900 +185 197.500 +185 217.300 +186 57.600 +186 83.100 +186 128.500 +186 134.900 +186 183.500 +186 209.600 +186 217.700 +187 71.600 +187 83.300 +187 158.300 +187 214.200 +187 287.100 +188 218.400 +188 267.100 +188 288.000 +189 144.300 +189 187.200 +189 216.900 +190 96.100 +190 214.800 +191 82.200 +191 158.400 +191 201.600 +191 215.600 +191 286.700 +192 68.400 +192 124.200 +192 155.500 +192 201.500 +192 215.000 +192 286.400 +193 204.900 +193 217.000 +194 83.400 +194 212.100 +195 204.300 +195 247.200 +196 70.000 +196 82.300 +196 94.700 +196 123.700 +196 142.100 +196 211.000 +196 218.000 +197 72.200 +197 96.400 +197 216.200 +197 282.100 +198 199.600 +198 217.200 +198 247.500 +198 287.700 +199 204.100 +199 268.000 +199 296.900 +200 204.000 +200 247.200 +201 82.800 +201 197.700 +201 216.500 +201 267.300 +202 60.500 +202 213.800 +203 212.600 +203 247.700 +204 204.400 +204 216.500 +204 265.300 +205 83.100 +205 95.600 +205 157.700 +205 199.600 +205 216.900 +206 59.500 +206 83.100 +206 216.600 +206 267.200 +207 159.400 +207 201.300 +207 244.300 +207 265.300 +208 95.200 +208 215.400 +208 247.600 +208 279.500 +209 214.200 +209 299.300 +210 83.300 +210 197.300 +210 214.800 +210 265.100 +211 216.300 +212 68.400 +212 216.500 +212 231.400 +212 287.400 +213 78.700 +213 181.800 +213 202.700 +213 215.100 +214 60.400 +214 83.100 +214 213.600 +214 231.100 +215 197.500 +215 214.000 +215 287.600 +216 216.400 +217 66.400 +217 197.900 +217 215.800 +218 59.500 +218 96.400 +218 215.700 +219 60.600 +219 213.900 +220 159.000 +220 204.300 +220 214.100 +221 57.600 +221 83.600 +221 197.400 +222 83.000 +222 133.700 +222 214.200 +222 279.600 +223 96.300 +223 168.800 +223 195.300 +223 212.600 +223 267.300 +224 95.200 +224 215.500 +224 267.000 +225 67.900 +225 158.100 +225 216.900 +226 204.200 +226 217.200 +227 81.700 +227 157.900 +227 211.400 +227 286.400 +228 69.300 +228 137.000 +228 144.700 +228 197.200 +228 217.600 +228 247.400 +229 53.900 +229 203.000 +229 295.100 +230 97.200 +230 188.400 +230 248.200 +230 299.200 +231 169.500 +231 214.500 +232 195.100 +232 216.600 +233 82.500 +233 142.600 +233 158.100 +233 209.100 +234 176.100 +234 203.000 +234 216.600 +234 288.900 +235 215.400 +236 207.900 +237 83.300 +237 157.900 +237 198.100 +237 265.000 +238 286.700 +239 60.600 +239 83.300 +239 204.400 +239 213.600 +239 247.300 +239 298.100 +240 204.400 +241 59.400 +241 83.200 +241 116.000 +241 128.600 +241 158.000 +241 174.200 +241 215.100 +241 266.900 +242 83.500 +242 182.000 +242 202.700 +242 246.700 +242 267.300 +243 174.800 +243 215.400 +244 90.000 +244 144.500 +244 175.600 +244 204.500 +244 216.100 +245 72.000 +245 216.700 +246 83.500 +246 299.200 +247 52.600 +247 83.000 +247 175.600 +247 197.400 +247 213.300 +247 286.700 +247 300.000 +248 175.700 +248 212.100 +250 70.000 +250 157.600 +250 202.200 +251 82.800 +251 197.900 +251 215.000 +252 143.400 +252 214.100 +253 203.700 +253 216.700 +253 241.200 +255 83.000 +255 216.800 +255 268.100 +256 70.200 +256 83.500 +256 198.400 +256 247.300 +256 282.500 +256 287.800 +257 84.100 +257 96.600 +257 175.700 +257 215.100 +257 265.400 +257 287.500 +258 197.900 +258 248.100 +258 266.900 +259 73.700 +259 96.500 +259 158.100 +259 174.300 +259 208.000 +259 216.000 +260 216.700 +260 287.700 +261 202.500 +261 287.500 +262 183.900 +262 214.600 +263 201.500 +263 216.000 +264 72.500 +264 212.100 +264 217.400 +264 247.100 +265 174.300 +265 214.000 +265 227.300 +266 83.400 +266 209.300 +267 94.800 +267 214.200 +267 231.700 +267 268.400 +267 299.300 +268 83.100 +268 215.100 +269 91.400 +269 202.200 +269 216.300 +270 81.900 +270 144.100 +270 202.300 +271 186.200 +271 202.700 +271 214.900 +272 135.400 +272 197.300 +272 225.200 +274 183.900 +274 195.400 +274 215.800 +275 59.900 +275 83.800 +275 133.300 +275 194.800 +275 212.300 +276 78.600 +276 172.800 +276 209.400 +276 246.700 +276 283.200 +276 298.100 +277 83.600 +277 123.400 +277 216.400 +277 289.400 +278 81.100 +278 96.200 +278 185.200 +278 276.200 +279 83.000 +279 124.300 +279 206.400 +280 70.700 +280 197.500 +280 214.300 +281 195.600 +282 194.800 +282 214.900 +282 289.900 +283 70.200 +283 123.200 +283 158.000 +283 175.600 +283 194.500 +283 214.000 +283 263.000 +284 83.300 +284 212.000 +284 267.400 +285 59.200 +285 141.800 +285 188.400 +285 216.700 +285 247.200 +285 283.300 +286 83.100 +286 95.900 +286 143.800 +286 171.900 +286 195.500 +286 217.400 +286 247.300 +287 68.600 +287 83.800 +287 201.900 +287 299.000 +288 69.300 +288 97.000 +288 204.300 +288 216.600 +288 267.500 +288 298.500 +289 215.300 +289 289.600 +289 299.600 +290 232.000 +290 287.000 +291 297.700 +292 83.300 +292 210.100 +292 217.400 +292 286.400 +293 128.100 +293 279.600 +294 213.200 +294 247.400 +295 184.000 +295 197.000 +295 216.000 +295 288.600 +296 83.400 +296 144.400 +296 204.100 +296 216.400 +296 265.100 +296 287.800 +297 215.300 +297 247.300 +298 83.200 +298 143.700 +298 217.800 +299 214.200 +300 213.200 +300 217.800 +301 83.200 +301 187.500 +301 203.900 +301 216.600 +301 286.700 +302 60.500 +302 76.600 +302 84.000 +302 157.900 +302 214.800 +303 83.800 +303 157.300 +303 215.500 +304 82.700 +304 189.000 +304 211.600 +304 267.400 +304 288.200 +305 70.200 +305 158.200 +305 216.000 +305 287.500 +307 83.300 +307 123.500 +307 159.700 +307 177.200 +307 212.200 +308 175.900 +308 216.600 +308 288.100 +308 297.900 +309 159.100 +309 211.900 +310 82.800 +310 202.500 +310 216.800 +310 247.200 +311 203.100 +311 216.700 +312 83.500 +312 213.900 +312 267.500 +313 199.900 +313 217.600 +314 83.100 +314 197.300 +315 158.300 +315 195.400 +316 144.700 +316 183.400 +316 216.600 +316 244.800 +317 83.000 +317 124.400 +317 174.500 +317 213.800 +317 267.600 +318 69.800 +318 144.400 +318 204.500 +318 212.300 +319 94.800 +319 184.100 +319 202.300 +319 217.700 +320 139.600 +320 181.900 +320 197.300 +320 231.700 +321 82.200 +321 174.700 +321 213.500 +321 265.400 +321 299.900 +322 82.900 +322 158.200 +322 202.800 +322 287.400 +323 81.300 +323 130.300 +323 216.600 +324 157.900 +324 213.000 +325 82.800 +325 196.800 +325 214.300 +326 95.700 +326 184.100 +326 217.800 +327 71.700 +327 83.700 +327 123.300 +327 134.400 +327 174.500 +327 217.700 +327 247.200 +328 72.900 +328 83.800 +328 156.900 +328 205.000 +329 60.200 +329 157.900 +329 212.900 +330 60.300 +330 83.500 +330 201.700 +330 216.600 +331 95.800 +331 203.900 +331 216.700 +332 95.900 +332 212.600 +333 58.400 +333 159.200 +333 198.100 +333 214.900 +334 83.400 +334 107.700 +334 197.900 +334 231.800 +335 60.700 +335 214.600 +336 69.300 +336 142.500 +336 157.900 +336 188.900 +337 83.100 +337 175.500 +337 213.200 +337 267.300 +337 287.600 +338 185.800 +338 216.500 +339 96.600 +339 175.100 +339 201.200 +339 212.700 +339 232.000 +339 267.500 +340 108.500 +340 214.200 +340 268.000 +341 69.000 +341 83.600 +341 95.300 +341 158.900 +341 217.500 +341 299.200 +342 58.300 +342 130.800 +342 144.400 +342 175.400 +343 106.100 +343 196.900 +343 218.000 +343 247.600 +344 83.200 +344 97.300 +344 124.200 +344 143.100 +344 197.800 +344 216.600 +344 267.400 +345 201.500 +345 214.900 +345 289.000 +346 82.500 +346 95.800 +346 133.100 +346 197.500 +346 216.000 +346 287.400 +347 217.900 +348 197.300 +349 83.300 +349 109.400 +349 216.800 +349 299.900 +350 211.700 +351 81.700 +351 197.900 +351 247.200 +351 267.100 +352 188.500 +352 213.700 +353 60.900 +353 156.200 +353 215.600 +354 79.300 +354 213.500 +354 247.200 +354 278.500 +355 107.400 +355 215.000 +356 105.600 +356 142.900 +356 176.500 +356 217.600 +357 171.000 +357 202.200 +357 213.800 +358 70.000 +358 176.100 +358 204.200 +358 215.200 +359 128.500 +359 157.300 +359 211.200 +359 297.900 +360 83.300 +360 174.400 +360 216.700 +361 92.300 +361 139.800 +361 158.000 +361 187.800 +361 216.400 +362 83.200 +362 158.000 +362 183.500 +362 216.600 +362 267.500 +363 296.300 +364 69.200 +364 209.000 +364 287.300 +365 199.800 +366 214.500 +367 69.800 +367 113.300 +367 213.500 +367 245.000 +368 60.700 +368 152.100 +368 175.500 +368 213.100 +369 187.200 +369 216.800 +370 83.100 +370 158.300 +370 197.900 +370 211.300 +370 267.500 +370 288.200 +371 95.500 +371 216.900 +372 97.600 +372 158.100 +372 212.200 +372 231.100 +373 212.800 +374 83.000 +374 211.800 +374 287.900 +375 71.900 +375 215.100 +376 83.300 +376 154.700 +376 175.600 +376 213.400 +377 158.300 +377 189.200 +377 211.200 +377 246.900 +377 286.900 +378 123.800 +378 158.300 +378 204.700 +378 265.500 +379 212.600 +380 73.900 +380 176.600 +380 188.300 +380 216.700 +380 243.900 +381 96.900 +381 286.700 +382 216.700 +382 267.500 +383 83.200 +383 155.000 +383 197.800 +383 213.500 +383 299.000 +384 97.100 +384 216.800 +384 299.300 +385 83.200 +385 214.700 +385 247.500 +386 82.600 +386 159.200 +386 217.000 +386 247.000 +387 54.300 +387 82.300 +387 216.300 +388 214.500 +388 288.000 +389 217.800 +389 287.300 +390 83.300 +390 158.100 +390 200.900 +390 216.800 +390 265.400 +391 82.700 +391 175.200 +391 203.000 +391 209.900 +391 299.000 +392 61.200 +392 94.200 +392 158.000 +392 204.100 +393 217.300 +394 79.500 +394 208.400 +394 247.300 +394 296.600 +395 70.400 +395 83.300 +395 124.500 +395 209.300 +395 216.500 +396 82.800 +396 214.200 +397 197.300 +397 216.400 +398 143.200 +398 201.500 +398 278.200 +399 201.200 +400 73.000 +400 202.700 +400 216.600 +401 83.100 +401 195.100 +401 213.100 +401 247.000 +402 124.100 +402 202.300 +402 213.800 +403 205.000 +403 216.500 +403 247.100 +403 287.800 +404 83.300 +404 202.700 +404 244.500 +405 82.500 +405 214.000 +405 265.300 +405 299.100 +406 72.000 +406 144.600 +406 198.000 +406 287.600 +407 94.300 +407 215.100 +408 203.900 +408 248.400 +408 278.800 +409 60.500 +409 96.000 +409 158.000 +409 175.700 +409 204.600 +409 267.900 +410 81.700 +410 131.900 +410 158.200 +410 214.700 +411 187.500 +411 270.000 +411 288.700 +412 81.500 +412 97.200 +412 157.400 +412 175.500 +412 195.400 +412 214.500 +413 84.100 +413 144.400 +413 174.200 +413 194.500 +413 215.200 +413 231.600 +413 288.900 +414 175.600 +414 199.600 +414 217.200 +414 298.100 +415 59.900 +415 95.300 +415 157.700 +415 204.400 +415 217.200 +415 299.800 +416 158.400 +416 213.100 +416 226.700 +416 247.100 +417 68.400 +417 124.200 +417 143.500 +417 197.600 +417 216.200 +417 231.700 +417 267.300 +418 96.600 +418 183.900 +418 212.700 +418 267.600 +418 297.600 +419 94.200 +419 197.600 +419 214.200 +419 287.700 +420 158.000 +420 198.300 +420 213.400 +421 157.900 +421 216.600 +422 211.700 +422 267.500 +422 288.400 +423 123.900 +423 171.500 +423 215.600 +424 83.300 +424 214.400 +425 82.700 +425 185.000 +425 217.800 +426 83.400 +426 197.600 +426 216.500 +426 247.200 +426 287.100 +427 95.000 +427 214.100 +427 286.800 +428 157.700 +428 197.500 +428 212.800 +429 96.100 +429 217.400 +430 197.800 +430 247.300 +431 204.900 +431 216.600 +432 175.000 +432 195.300 +432 213.200 +432 288.500 +433 296.800 +434 57.300 +434 83.500 +434 158.500 +434 188.800 +434 214.100 +435 82.700 +435 108.100 +435 197.100 +435 211.700 +435 247.400 +435 287.500 +436 83.200 +436 214.800 +436 248.400 +437 83.700 +437 110.400 +437 123.900 +437 174.000 +437 195.300 +437 206.700 +437 228.000 +437 283.500 +438 175.000 +438 197.600 +438 216.100 +439 204.300 +439 288.500 +440 82.900 +440 123.300 +440 184.000 +440 198.200 +440 213.700 +440 232.000 +441 213.000 +441 267.000 +441 288.000 +442 82.500 +442 107.800 +442 195.100 +442 204.200 +442 267.000 +443 197.700 +444 213.300 +444 247.400 +444 267.800 +445 175.600 +445 213.400 +445 231.100 +445 298.800 +446 183.100 +446 213.000 +446 267.800 +447 200.800 +447 218.000 +448 275.000 +449 57.200 +449 157.900 +449 197.600 +450 83.600 +450 216.400 +451 71.700 +451 82.800 +451 188.700 +451 216.400 +451 265.100 +452 183.600 +452 202.200 +452 216.600 +452 299.200 +453 82.000 +453 213.700 +454 61.600 +454 82.800 +454 199.700 +454 213.100 +454 218.100 +454 240.800 +454 267.400 +455 83.100 +455 112.700 +455 195.000 +455 215.000 +455 298.800 +456 83.300 +456 175.500 +456 218.100 +457 154.800 +457 265.100 +458 82.800 +458 202.500 +458 211.000 +459 82.200 +459 158.000 +459 213.000 +459 248.300 +459 299.200 +460 83.200 +460 171.600 +460 197.000 +460 216.000 +460 247.100 +461 59.800 +461 69.700 +461 83.300 +461 143.000 +461 184.600 +461 216.600 +461 246.400 +462 83.400 +462 94.600 +462 144.300 +462 195.600 +463 83.200 +463 144.300 +463 197.000 +463 217.400 +464 68.400 +464 176.200 +464 214.000 +465 83.400 +465 155.600 +465 174.700 +465 213.700 +466 96.500 +466 187.600 +466 211.700 +466 247.200 +466 283.800 +467 72.100 +467 158.000 +467 203.300 +468 175.600 +468 216.900 +468 264.500 +469 82.300 +469 96.900 +469 175.700 +469 198.300 +469 247.900 +470 171.600 +470 247.600 +471 91.000 +471 195.500 +471 213.800 +472 205.100 +472 214.800 +473 95.200 +473 187.400 +473 204.100 +473 216.900 +474 71.900 +474 214.800 +475 83.400 +475 185.000 +475 204.100 +476 215.500 +476 265.900 +477 83.900 +477 175.100 +477 203.200 +477 218.100 +477 247.300 +477 286.900 +478 59.200 +478 132.500 +478 198.200 +479 71.500 +479 96.200 +479 213.600 +479 265.700 +480 94.500 +480 202.400 +480 215.800 +480 265.100 +480 300.000 +481 83.000 +481 171.900 +481 188.200 +482 71.700 +482 124.400 +482 181.000 +482 215.900 +482 265.300 +483 186.900 +483 216.300 +483 287.700 +484 72.600 +484 144.700 +484 195.600 +484 217.200 +484 298.500 +485 171.000 +485 212.100 +486 198.100 +486 217.200 +487 212.300 +488 204.200 +488 217.800 +489 80.200 +489 124.200 +489 210.600 +489 218.200 +490 115.700 +490 204.200 +490 231.200 +491 204.500 +491 216.700 +492 210.400 +492 247.700 +492 267.800 +493 187.000 +493 247.400 +494 213.500 +494 247.200 +494 289.800 +495 176.100 +495 194.800 +495 212.700 +496 78.400 +496 213.600 +496 300.000 +497 60.800 +497 201.600 +497 217.800 +498 197.900 +498 247.500 +499 213.700 +499 295.800 +500 176.300 +500 216.800 +500 247.100 +501 95.700 +501 144.600 +502 71.100 +502 96.100 +502 108.400 +502 158.400 +502 175.700 +502 195.300 +502 217.300 +502 248.000 +502 289.700 +503 171.400 +503 214.400 +503 247.200 +503 267.100 +504 70.700 +504 83.500 +504 158.300 +504 185.300 +504 216.000 +505 158.100 +505 214.900 +506 107.400 +506 216.500 +507 83.500 +507 217.500 +508 200.700 +508 218.000 +509 83.500 +509 186.600 +509 201.000 +509 214.500 +509 247.100 +510 96.600 +510 195.300 +510 210.800 +511 83.300 +511 213.600 +512 69.800 +512 95.000 +512 124.000 +512 213.000 +513 210.800 +513 267.000 +514 82.600 +514 202.400 +515 157.600 +515 187.400 +515 216.400 +515 248.300 +515 267.200 +516 176.100 +516 214.400 +516 246.900 +517 83.600 +517 214.400 +517 280.100 +518 95.900 +518 196.800 +518 216.600 +518 267.300 +519 78.000 +520 83.600 +520 158.100 +520 196.700 +520 214.700 +520 267.400 +521 71.400 +521 94.800 +521 157.800 +521 176.100 +521 187.500 +521 210.300 +521 216.900 +522 204.100 +522 217.800 +522 300.000 +523 59.600 +523 123.000 +523 143.200 +523 176.000 +523 215.100 +524 58.000 +524 82.200 +524 123.500 +524 135.000 +524 144.800 +524 174.700 +524 214.100 +525 212.100 +525 241.200 +525 288.900 +526 63.500 +526 83.100 +526 158.100 +526 211.900 +526 247.300 +527 77.000 +527 199.300 +527 217.500 +527 247.400 +527 299.300 +528 75.500 +528 174.500 +528 198.100 +528 214.300 +529 82.000 +529 122.900 +529 187.900 +529 214.600 +530 70.200 +530 199.500 +530 217.000 +530 265.200 +531 107.100 +531 210.600 +531 229.900 +532 59.500 +532 78.300 +532 157.700 +532 197.700 +533 214.300 +534 176.300 +534 202.700 +534 216.600 +534 288.000 +535 82.900 +535 123.900 +535 195.500 +535 216.800 +535 268.300 +536 60.100 +536 83.600 +536 105.300 +536 113.100 +536 134.800 +536 195.600 +536 218.200 +536 230.900 +537 83.500 +537 158.400 +537 174.600 +537 179.600 +537 202.100 +537 217.200 +538 81.800 +538 215.300 +538 245.300 +539 83.300 +539 173.800 +539 198.000 +539 210.200 +539 299.100 +540 82.800 +540 211.700 +541 266.000 +541 287.500 +542 61.400 +542 95.000 +542 211.300 +542 231.800 +543 123.000 +543 158.300 +543 212.800 +543 218.200 +543 244.200 +544 83.600 +544 187.700 +544 247.700 +545 83.300 +545 159.300 +546 82.800 +546 204.100 +547 217.100 +548 82.700 +548 231.800 +548 265.100 +549 83.200 +549 107.900 +549 143.000 +549 158.400 +549 200.500 +549 287.600 +550 215.100 +550 247.300 +550 265.400 +551 83.500 +551 185.100 +551 216.500 +552 215.200 +553 83.400 +553 213.800 +554 107.000 +554 188.300 +554 213.200 +554 247.200 +555 156.800 +555 183.500 +555 214.200 +555 247.500 +556 96.200 +556 188.000 +556 213.200 +556 242.600 +557 97.300 +557 196.900 +557 213.000 +557 248.200 +558 158.600 +558 204.300 +559 143.800 +559 198.800 +559 211.800 +559 232.300 +560 213.500 +560 267.300 +561 73.600 +561 97.500 +561 157.700 +561 201.200 +561 215.300 +561 266.900 +561 300.000 +562 205.100 +562 217.700 +562 283.100 +563 97.300 +563 144.800 +563 197.500 +563 217.700 +564 212.200 +565 69.500 +565 95.400 +565 195.500 +565 213.700 +565 248.100 +566 176.100 +566 214.000 +567 82.600 +567 156.900 +567 176.100 +567 217.300 +568 96.500 +568 187.200 +568 213.400 +568 231.000 +569 174.000 +569 187.800 +569 267.500 +570 83.900 +570 95.200 +570 195.100 +570 216.400 +570 295.800 +571 202.600 +572 70.000 +572 188.900 +572 214.800 +572 298.600 +573 60.400 +573 73.400 +573 83.500 +573 144.800 +574 84.100 +574 209.900 +575 83.200 +575 183.700 +575 216.000 +575 279.900 +575 287.300 +576 215.100 +577 68.500 +577 199.900 +577 215.600 +578 83.500 +578 216.800 +579 59.600 +579 84.100 +579 124.200 +579 159.200 +579 213.900 +579 266.100 +579 287.500 +580 82.700 +580 158.100 +580 176.100 +580 214.800 +580 247.700 +581 175.100 +581 214.900 +581 270.400 +582 216.900 +582 247.400 +583 83.400 +583 108.500 +583 133.100 +583 172.700 +583 196.600 +583 225.600 +583 267.000 +584 158.300 +584 197.200 +584 267.100 +585 95.100 +585 201.600 +585 218.100 +585 278.600 +586 69.100 +586 95.500 +586 143.800 +586 229.800 +587 83.600 +587 213.400 +588 58.800 +588 202.200 +588 225.200 +588 278.100 +589 83.100 +589 107.500 +589 133.300 +589 174.000 +589 184.100 +589 215.100 +589 298.600 +590 60.500 +590 92.900 +590 158.300 +590 202.700 +590 213.500 +590 267.500 +590 287.400 +591 83.600 +591 123.700 +591 213.100 +591 267.200 +592 82.800 +592 145.000 +592 211.300 +593 194.400 +593 216.200 +594 83.600 +594 202.900 +595 70.200 +595 123.500 +595 197.300 +595 215.600 +595 284.100 +596 204.100 +596 214.700 +596 299.400 +597 83.200 +597 136.500 +597 174.100 +597 189.300 +597 208.200 +597 217.900 +597 267.500 +598 156.200 +598 197.600 +598 214.100 +598 230.900 +598 247.200 +599 95.200 +599 173.900 +599 216.800 +600 197.500 +600 214.500 +601 72.200 +601 176.300 +601 217.100 +602 144.900 +602 158.100 +603 69.900 +603 158.100 +603 266.100 +604 197.000 +604 216.500 +605 60.200 +605 83.600 +606 211.500 +606 244.300 +606 267.600 +606 299.000 +607 197.800 +607 217.100 +607 248.000 +608 96.200 +608 176.200 +608 200.800 +608 215.500 +609 84.100 +609 176.600 +609 195.900 +610 158.400 +610 175.300 +610 216.400 +611 107.500 +611 198.800 +611 216.400 +611 289.700 +612 158.200 +612 196.400 +612 213.000 +613 83.300 +613 186.100 +613 213.400 +614 82.700 +614 175.200 +614 215.200 +614 288.000 +615 83.600 +615 173.500 +615 213.300 +615 294.000 +616 60.500 +616 83.400 +616 212.600 +616 267.400 +616 287.600 +617 204.000 +618 83.200 +618 123.600 +618 202.700 +619 83.400 +619 144.400 +619 213.900 +620 115.100 +620 203.800 +621 81.400 +621 108.000 +621 199.000 +621 213.700 +621 226.900 +621 247.200 +621 287.200 +622 83.500 +622 107.800 +622 173.900 +622 216.800 +622 287.300 +623 157.500 +623 203.000 +623 218.300 +624 83.300 +624 107.800 +624 198.200 +624 214.800 +624 288.000 +625 124.400 +625 214.100 +626 84.000 +626 195.400 +627 188.400 +627 215.700 +628 197.800 +628 212.300 +629 60.400 +629 82.400 +629 124.400 +629 144.200 +629 158.000 +629 175.300 +629 187.400 +629 198.400 +629 217.200 +630 83.100 +630 183.300 +630 213.700 +630 232.100 +630 265.200 +631 82.700 +631 190.300 +631 214.400 +632 81.900 +632 144.900 +632 197.800 +632 216.400 +633 72.800 +633 197.100 +634 211.500 +634 267.000 +635 196.300 +635 216.700 +635 288.100 +636 58.100 +636 83.500 +636 123.100 +636 133.200 +636 199.600 +636 213.400 +637 213.300 +638 82.900 +638 194.800 +638 215.400 +638 267.500 +639 158.000 +639 204.100 +639 267.200 +639 281.200 +640 197.800 +640 232.300 +640 264.900 +641 83.000 +641 204.200 +641 215.200 +641 246.700 +641 287.800 +642 71.900 +642 83.400 +642 174.400 +642 198.900 +642 214.100 +642 231.600 +643 97.200 +643 144.100 +644 214.200 +645 97.200 +645 157.500 +645 197.500 +645 213.400 +646 175.600 +646 197.300 +646 214.900 +647 204.100 +647 217.600 +648 72.700 +649 216.800 +650 95.100 +651 82.800 +651 188.600 +651 218.100 +651 287.600 +652 217.800 +653 144.500 +653 188.700 +653 198.500 +653 213.600 +653 298.000 +654 144.400 +654 216.300 +655 124.000 +655 200.600 +655 216.100 +656 194.700 +656 214.400 +657 83.400 +657 215.700 +657 287.400 +658 60.400 +658 175.400 +658 216.300 +659 83.100 +659 132.700 +659 145.200 +659 201.400 +659 215.400 +660 190.000 +660 216.400 +660 297.600 +661 203.000 +661 216.300 +663 175.600 +663 196.800 +663 216.300 +663 269.500 +663 298.700 +664 203.700 +664 216.800 +665 82.100 +665 197.500 +665 265.300 +666 72.500 +666 187.700 +666 217.400 +667 211.700 +667 289.200 +668 88.800 +668 96.600 +668 216.200 +669 83.500 +669 171.200 +670 194.200 +670 212.100 +671 82.600 +671 197.400 +671 217.900 +671 288.400 +672 65.900 +672 94.000 +672 124.500 +672 159.600 +672 217.300 +672 225.900 +672 266.900 +673 83.900 +673 124.000 +673 158.200 +673 197.800 +673 216.800 +673 225.800 +674 82.200 +674 158.000 +674 188.100 +674 203.800 +675 72.100 +675 96.100 +675 123.000 +675 196.400 +675 217.900 +675 247.600 +676 60.600 +676 77.300 +676 83.500 +676 143.100 +676 199.800 +676 215.400 +676 247.200 +677 80.800 +677 96.100 +677 185.700 +677 216.200 +677 244.300 +677 286.000 +678 216.700 +679 155.700 +679 202.200 +680 83.500 +680 123.400 +680 211.800 +680 246.700 +680 267.600 +681 204.400 +681 214.800 +682 202.500 +683 83.200 +683 123.400 +683 143.000 +683 175.500 +683 195.400 +683 218.000 +683 267.300 +684 215.200 +684 226.700 +685 72.700 +685 174.400 +685 215.200 +685 247.100 +686 72.000 +686 96.400 +686 123.200 +686 144.600 +686 157.700 +686 184.000 +686 197.600 +686 266.100 +687 107.700 +687 203.000 +687 247.000 +688 81.600 +688 214.200 +688 265.700 +689 194.700 +689 215.300 +689 247.200 +689 286.900 +691 145.300 +691 213.200 +691 298.000 +692 145.300 +692 196.700 +692 216.400 +693 59.700 +693 154.400 +693 197.500 +693 216.700 +693 232.200 +693 286.800 +694 185.700 +694 213.200 +695 213.700 +696 68.600 +696 95.000 +696 143.500 +696 216.900 +697 83.800 +697 203.400 +697 216.700 +697 298.700 +698 83.500 +698 213.700 +698 247.500 +699 79.400 +699 211.800 +699 231.700 +700 83.000 +700 174.400 +700 197.900 +700 216.700 +701 70.300 +701 213.400 +701 288.700 +702 83.500 +702 183.400 +702 202.400 +702 216.300 +702 228.600 +703 213.200 +703 286.500 +704 199.600 +704 211.600 +705 203.000 +705 216.700 +705 267.100 +706 194.300 +706 214.200 +707 144.400 +707 176.700 +707 212.000 +707 247.600 +708 79.000 +708 130.500 +708 158.000 +708 175.900 +708 197.900 +708 216.400 +708 287.300 +709 73.900 +709 96.200 +709 144.900 +709 175.600 +709 214.100 +709 228.400 +710 60.500 +710 202.100 +710 218.000 +710 299.200 +711 82.300 +711 158.300 +711 194.900 +711 215.600 +712 83.000 +712 132.900 +712 143.000 +712 186.800 +712 205.200 +712 216.400 +712 231.600 +713 52.600 +713 82.500 +713 130.500 +713 155.400 +713 209.900 +713 247.600 +714 70.000 +714 134.700 +714 175.700 +714 215.500 +715 96.800 +715 158.000 +715 213.100 +716 83.600 +716 143.700 +716 172.600 +716 193.200 +716 216.900 +716 244.400 +716 299.500 +717 71.600 +717 83.400 +717 108.400 +717 122.800 +717 171.400 +717 200.300 +717 215.100 +718 82.300 +718 215.400 +718 298.300 +719 201.200 +720 83.300 +720 171.900 +720 194.000 +720 228.100 +720 248.400 +721 212.100 +721 228.600 +721 287.600 +722 156.400 +722 174.500 +722 187.100 +722 216.300 +723 73.500 +723 95.400 +723 216.200 +723 265.300 +724 157.900 +724 213.000 +724 286.900 +725 83.300 +725 208.800 +725 218.000 +726 123.500 +726 176.300 +726 216.700 +727 72.900 +727 205.300 +727 216.200 +728 211.600 +728 247.400 +729 95.300 +729 175.400 +730 194.300 +730 212.300 +731 83.900 +731 212.800 +732 82.500 +732 195.700 +732 216.600 +733 95.100 +733 157.800 +733 211.200 +734 81.300 +734 108.700 +734 188.400 +734 214.300 +734 269.100 +734 299.300 +735 95.700 +735 211.500 +735 217.600 +735 264.200 +736 175.000 +736 216.400 +737 197.400 +738 97.100 +738 203.400 +738 217.800 +738 284.100 +739 54.300 +739 81.800 +739 247.500 +740 217.300 +740 298.000 +741 72.000 +741 143.500 +741 174.500 +741 213.900 +742 83.200 +742 174.600 +742 204.200 +742 217.300 +743 195.100 +744 203.700 +744 216.600 +745 78.700 +745 116.400 +745 159.500 +745 197.600 +746 195.600 +746 213.900 +746 247.000 +746 298.100 +747 95.200 +747 212.200 +747 276.600 +748 60.600 +748 210.700 +748 267.100 +748 287.700 +749 126.200 +749 143.200 +749 174.200 +749 186.300 +749 202.500 +749 247.200 +750 209.500 +750 245.000 +751 83.400 +751 212.100 +751 247.300 +751 299.500 +752 82.300 +752 173.800 +752 211.300 +752 217.300 +752 267.600 +753 95.500 +753 133.600 +753 175.100 +753 216.200 +753 282.800 +754 69.500 +754 92.300 +754 134.600 +754 174.400 +754 213.300 +754 247.600 +755 56.700 +755 158.200 +755 213.500 +756 83.300 +756 176.200 +756 214.600 +757 96.700 +757 176.000 +757 194.300 +757 209.000 +757 217.200 +757 247.700 +758 212.300 +758 247.600 +759 82.800 +759 212.900 +759 218.100 +759 268.900 +760 215.700 +761 83.200 +761 197.700 +761 216.000 +762 82.400 +762 214.200 +762 244.300 +763 78.900 +763 95.700 +763 175.900 +763 202.700 +763 217.500 +763 244.600 +764 69.200 +764 187.100 +764 216.800 +764 243.500 +764 278.200 +765 82.200 +765 129.900 +765 174.500 +765 213.300 +766 83.400 +766 159.000 +766 202.200 +766 216.600 +767 174.600 +767 211.200 +767 266.100 +768 94.900 +768 188.900 +768 213.300 +769 81.400 +769 157.800 +769 188.000 +769 213.000 +769 217.800 +769 232.100 +769 247.800 +769 287.900 +770 83.600 +770 197.500 +770 289.500 +771 196.300 +771 213.800 +772 83.600 +772 141.700 +772 169.700 +772 195.500 +772 214.700 +772 296.300 +773 71.600 +773 83.300 +773 123.900 +773 143.300 +773 174.400 +773 209.100 +773 217.800 +774 57.600 +774 83.400 +774 195.000 +774 214.700 +775 81.400 +775 171.700 +775 198.300 +775 217.400 +775 287.600 +776 79.200 +776 159.400 +776 205.200 +777 197.900 +777 212.100 +777 247.700 +778 216.800 +778 265.200 +779 216.600 +780 204.100 +780 216.100 +781 83.400 +781 158.300 +781 203.600 +782 83.500 +782 94.700 +782 159.100 +782 174.100 +782 216.600 +782 289.600 +783 214.400 +783 267.600 +784 80.400 +784 175.300 +784 204.300 +784 287.200 +785 82.900 +785 214.900 +785 247.500 +785 298.300 +786 170.800 +786 195.400 +786 212.300 +786 217.400 +786 265.000 +787 84.100 +787 172.700 +787 199.600 +787 216.200 +787 269.900 +788 107.500 +788 211.500 +789 82.100 +789 158.100 +789 197.700 +789 213.800 +790 93.900 +790 176.300 +790 215.400 +791 175.000 +791 213.800 +791 268.500 +792 203.600 +792 217.800 +792 278.700 +793 60.800 +793 212.500 +794 81.400 +794 105.500 +794 144.300 +794 174.800 +794 197.400 +794 216.600 +794 265.000 +795 203.500 +795 267.300 +796 197.600 +796 217.400 +796 231.100 +797 131.300 +797 213.800 +797 267.100 +798 110.700 +798 186.300 +798 212.600 +798 247.800 +798 267.400 +799 95.100 +799 184.300 +799 198.000 +799 212.100 +799 298.700 +800 209.200 +800 217.200 +801 185.100 +801 227.100 +801 244.700 +802 83.300 +802 187.900 +802 213.900 +803 97.200 +803 175.000 +803 197.000 +803 211.300 +804 60.000 +804 81.900 +804 184.900 +804 214.100 +804 229.900 +805 92.100 +805 144.800 +805 216.600 +806 204.300 +806 217.600 +806 265.300 +807 175.100 +807 204.000 +808 201.800 +808 217.500 +808 247.100 +809 53.900 +809 94.300 +809 159.600 +809 214.300 +809 247.900 +810 68.700 +810 83.200 +810 133.000 +810 195.700 +810 214.700 +810 298.900 +811 215.300 +812 60.000 +812 169.300 +812 216.200 +812 276.800 +813 215.000 +813 231.200 +813 247.500 +814 104.700 +814 142.900 +814 195.000 +814 202.600 +814 215.600 +815 122.900 +815 172.800 +815 203.800 +815 216.400 +816 132.300 +816 184.100 +816 214.700 +816 248.300 +817 69.800 +817 83.500 +817 175.000 +817 213.500 +817 247.400 +817 287.300 +818 158.500 +818 202.900 +818 216.900 +819 60.000 +819 81.900 +819 158.200 +819 184.000 +819 215.100 +819 289.900 +820 78.400 +820 199.800 +820 213.400 +820 218.000 +821 83.500 +821 197.500 +821 216.500 +822 197.700 +823 197.500 +824 72.800 +824 97.000 +824 155.100 +824 188.900 +824 212.300 +824 267.000 +825 192.700 +825 214.100 +826 78.800 +826 135.100 +826 171.900 +826 214.100 +826 247.600 +827 97.400 +827 174.300 +827 204.100 +827 297.900 +828 83.500 +828 197.100 +828 212.800 +829 175.000 +829 215.300 +829 265.400 +830 187.300 +830 217.300 +831 72.900 +831 215.100 +832 196.600 +832 216.800 +833 83.300 +833 122.900 +833 158.200 +833 188.200 +833 216.300 +833 266.900 +834 84.100 +834 199.700 +834 214.200 +834 268.600 +835 175.600 +835 197.100 +836 202.500 +836 213.700 +836 246.500 +836 286.300 +837 209.800 +837 228.900 +837 288.000 +838 72.000 +838 83.100 +838 144.100 +838 202.200 +838 216.900 +838 247.400 +839 96.000 +839 182.400 +839 217.500 +839 266.900 +839 288.900 +840 81.600 +840 141.800 +840 214.500 +841 71.100 +841 96.100 +841 158.200 +841 197.400 +841 297.700 +842 214.200 +843 195.400 +843 213.400 +843 247.500 +843 274.900 +843 288.100 +844 113.000 +844 124.100 +844 175.600 +844 197.700 +844 217.000 +845 96.400 +845 195.100 +845 214.800 +845 267.500 +846 95.900 +846 215.400 +847 216.400 +848 83.500 +848 202.500 +848 215.900 +849 107.900 +849 197.300 +849 215.200 +850 60.300 +850 83.600 +850 94.200 +850 169.500 +850 216.100 +850 244.300 +850 278.700 +851 82.900 +851 201.200 +851 218.200 +852 95.900 +852 216.300 +852 246.100 +852 300.000 +853 95.600 +853 174.400 +853 198.200 +853 216.600 +853 247.100 +854 83.100 +854 199.600 +854 216.600 +854 288.200 +855 57.500 +855 83.500 +855 144.500 +855 197.100 +855 214.700 +855 265.200 +855 298.100 +856 82.800 +857 198.600 +858 71.900 +858 187.100 +858 208.500 +859 173.900 +859 232.400 +859 247.400 +860 175.500 +860 199.100 +860 215.600 +861 83.300 +861 215.300 +862 216.700 +862 297.700 +863 175.000 +863 196.800 +863 215.200 +864 60.300 +864 214.100 +864 247.100 +865 59.500 +865 96.900 +865 175.500 +865 247.100 +866 97.200 +866 157.700 +866 210.800 +866 229.900 +866 267.300 +867 154.800 +867 197.000 +867 215.600 +867 231.200 +868 72.300 +868 144.000 +868 203.100 +868 215.400 +869 211.100 +869 287.400 +870 91.200 +870 204.100 +870 214.300 +871 83.600 +871 216.600 +872 83.000 +872 196.800 +872 204.500 +872 239.700 +872 247.700 +873 194.100 +873 216.600 +873 287.900 +873 299.700 +874 83.500 +874 203.700 +874 216.600 +875 83.400 +875 217.000 +875 288.000 +876 83.200 +876 175.300 +876 216.600 +877 83.400 +877 187.100 +877 231.900 +877 299.800 +878 95.900 +878 204.300 +878 216.200 +878 294.600 +879 176.500 +879 185.900 +880 59.600 +880 82.800 +880 175.400 +880 195.100 +880 267.200 +881 60.700 +881 211.700 +881 217.700 +881 276.300 +881 286.800 +881 299.100 +882 83.400 +882 213.600 +882 247.700 +883 60.500 +883 83.600 +883 183.200 +883 204.000 +883 215.100 +884 107.800 +884 174.600 +884 197.700 +884 217.500 +884 286.800 +885 69.000 +885 188.500 +885 217.900 +885 264.900 +886 216.500 +886 247.700 +887 59.200 +887 78.800 +887 107.400 +887 144.800 +887 213.800 +887 299.100 +888 73.500 +888 83.400 +888 144.600 +888 174.600 +888 197.900 +888 211.900 +888 248.400 +889 59.100 +889 72.700 +889 83.300 +889 141.500 +889 158.300 +889 213.700 +890 197.900 +890 214.100 +890 287.900 +891 92.600 +891 123.100 +891 247.300 +891 287.000 +892 83.100 +892 215.400 +893 83.200 +893 106.800 +893 143.500 +893 197.500 +893 217.800 +893 287.900 +894 208.500 +895 69.700 +895 123.600 +895 182.900 +895 211.200 +895 233.300 +895 247.400 +895 267.200 +896 95.200 +896 172.700 +896 204.300 +897 83.100 +897 144.500 +897 215.700 +898 197.000 +898 216.900 +899 195.400 +899 207.400 +899 216.600 +899 247.600 +899 288.600 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_5_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_5_i_pop.dat new file mode 100644 index 000000000..658a6bd95 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_5_i_pop.dat @@ -0,0 +1,864 @@ +sender time_ms +900 82.300 +900 144.700 +900 184.800 +900 193.600 +900 212.300 +900 231.900 +900 283.400 +901 83.200 +901 175.800 +901 196.900 +901 244.400 +901 288.500 +901 299.000 +902 175.200 +902 215.400 +902 287.500 +903 83.100 +903 186.300 +903 215.400 +903 247.500 +904 213.700 +905 139.200 +905 157.800 +905 208.900 +906 60.500 +906 78.900 +906 128.100 +906 159.300 +906 188.900 +906 213.200 +906 266.900 +906 270.100 +906 299.700 +907 247.700 +908 82.900 +908 212.400 +909 203.500 +909 217.400 +909 247.300 +910 95.900 +910 158.200 +910 174.600 +910 212.900 +910 289.600 +911 144.500 +911 187.500 +911 214.300 +912 60.400 +912 96.600 +912 159.500 +912 186.100 +912 204.200 +912 267.400 +913 70.200 +913 158.100 +913 183.000 +913 202.800 +913 213.500 +913 264.300 +914 70.000 +914 124.300 +914 202.700 +914 265.900 +915 197.400 +915 211.600 +916 71.100 +916 197.000 +916 216.600 +917 96.000 +917 174.600 +917 202.700 +917 216.100 +918 83.200 +918 175.600 +918 216.500 +918 267.100 +920 59.500 +920 81.600 +920 104.700 +920 124.300 +920 158.300 +920 195.200 +920 215.600 +921 69.200 +922 83.500 +922 144.800 +922 189.000 +922 197.700 +922 204.800 +922 217.400 +922 247.100 +923 72.800 +923 142.800 +923 197.800 +923 247.300 +924 214.400 +924 287.500 +925 81.200 +925 144.500 +925 203.100 +925 217.700 +926 157.500 +926 213.700 +926 286.800 +927 61.700 +927 157.900 +927 202.500 +927 244.500 +927 299.400 +928 83.500 +928 182.900 +928 197.600 +928 216.900 +928 247.000 +929 71.800 +929 83.100 +929 123.000 +929 170.900 +929 202.200 +929 214.500 +929 290.000 +930 83.600 +930 97.100 +930 175.500 +930 194.600 +930 203.800 +931 83.400 +931 198.400 +931 213.600 +932 95.800 +932 203.100 +932 289.900 +932 299.800 +933 204.200 +933 215.300 +933 288.800 +934 195.100 +934 216.200 +934 247.700 +934 287.100 +935 204.200 +935 217.600 +935 239.900 +935 247.100 +936 83.300 +936 210.100 +936 218.200 +937 72.300 +937 114.300 +937 133.300 +937 143.000 +937 158.100 +937 212.600 +937 299.800 +938 197.300 +938 211.500 +939 68.600 +939 209.100 +939 217.900 +940 197.500 +940 268.000 +941 54.100 +941 71.400 +941 95.700 +941 122.400 +941 139.900 +941 213.600 +941 297.500 +942 96.100 +942 194.800 +942 213.700 +943 69.800 +943 143.700 +943 203.700 +943 216.200 +943 246.700 +944 91.500 +944 157.400 +944 202.200 +944 216.000 +945 157.700 +945 175.700 +945 212.100 +945 283.600 +945 297.900 +946 83.300 +946 144.800 +946 213.900 +946 246.900 +947 202.300 +948 59.200 +948 81.800 +948 96.700 +949 57.500 +949 195.000 +949 217.600 +949 246.700 +950 83.600 +950 159.300 +950 174.600 +950 212.900 +950 287.500 +951 197.300 +951 218.000 +952 83.300 +952 175.000 +952 197.400 +952 215.300 +952 278.100 +953 83.300 +953 159.400 +953 211.200 +954 82.900 +954 123.200 +954 188.700 +954 204.200 +954 217.300 +954 247.600 +955 185.200 +955 216.200 +955 247.700 +956 53.300 +956 123.200 +956 143.200 +956 212.100 +956 265.200 +956 288.400 +957 58.800 +957 130.400 +957 144.800 +957 214.200 +958 83.600 +958 174.300 +958 212.400 +958 286.300 +959 82.700 +959 123.900 +959 217.300 +959 300.000 +960 95.800 +960 124.000 +960 204.800 +960 216.000 +960 269.000 +961 157.800 +961 215.600 +962 60.400 +962 111.200 +962 143.500 +962 184.300 +962 204.300 +962 214.800 +963 212.000 +963 270.600 +963 287.100 +964 216.600 +964 298.400 +965 81.600 +965 175.600 +965 204.100 +965 232.500 +966 82.700 +966 174.600 +966 197.400 +966 217.200 +966 246.700 +967 83.500 +967 203.600 +967 216.200 +967 268.400 +968 56.900 +968 216.900 +969 81.600 +969 187.100 +969 198.200 +969 298.300 +970 204.000 +970 216.100 +970 247.000 +971 72.700 +971 94.500 +971 174.200 +971 194.500 +971 211.400 +971 248.100 +971 282.700 +971 297.400 +972 82.900 +972 157.800 +972 214.200 +973 60.500 +973 133.700 +973 173.600 +973 214.600 +973 289.800 +974 71.600 +974 184.100 +974 201.200 +974 215.100 +974 286.800 +975 83.200 +975 175.000 +975 202.900 +975 216.400 +976 210.800 +977 158.300 +977 200.600 +977 212.900 +978 82.300 +978 158.200 +978 204.700 +978 216.300 +979 57.600 +979 187.100 +979 214.100 +979 247.900 +979 284.900 +980 69.700 +980 133.300 +980 158.400 +980 195.700 +980 215.000 +982 52.900 +982 91.600 +982 142.900 +982 176.100 +982 202.400 +982 216.200 +982 247.200 +983 70.200 +983 124.500 +983 174.500 +983 193.600 +983 217.700 +983 246.800 +984 83.300 +984 174.800 +984 215.100 +985 69.400 +985 95.300 +985 173.800 +985 204.100 +985 215.500 +986 84.100 +986 159.400 +986 202.700 +986 217.500 +987 197.400 +987 289.100 +988 61.800 +988 83.400 +988 204.100 +988 217.100 +988 287.500 +989 195.400 +989 209.500 +989 216.700 +990 63.700 +990 94.100 +990 158.000 +991 83.400 +991 217.100 +992 136.900 +992 215.400 +992 276.000 +992 300.000 +993 83.500 +993 217.100 +993 286.800 +993 294.300 +994 59.400 +994 95.200 +994 204.200 +994 216.000 +995 83.400 +995 124.000 +995 159.200 +995 217.500 +996 108.100 +996 204.000 +996 217.700 +997 83.800 +997 174.800 +997 213.400 +998 72.600 +998 157.300 +998 197.100 +999 83.100 +999 195.200 +999 204.300 +999 288.000 +999 299.500 +1000 83.900 +1000 188.500 +1000 217.600 +1000 295.300 +1001 83.000 +1001 196.800 +1001 217.600 +1002 203.900 +1002 217.300 +1003 90.700 +1003 196.600 +1003 216.300 +1003 247.600 +1003 265.500 +1004 174.900 +1004 197.400 +1004 215.200 +1004 266.900 +1004 287.200 +1005 59.600 +1005 143.500 +1005 247.600 +1005 278.700 +1005 287.300 +1005 300.000 +1006 188.800 +1006 229.200 +1007 83.500 +1007 124.500 +1007 143.700 +1007 198.300 +1007 213.900 +1007 232.100 +1007 287.600 +1008 59.000 +1008 214.100 +1008 247.100 +1009 97.300 +1009 170.600 +1009 207.700 +1009 288.400 +1010 197.500 +1010 213.500 +1010 247.300 +1011 159.600 +1011 197.100 +1011 217.600 +1012 72.100 +1012 109.300 +1012 143.700 +1012 159.100 +1012 187.300 +1012 202.900 +1012 226.000 +1012 263.600 +1013 56.300 +1013 94.800 +1013 133.100 +1013 159.400 +1013 174.500 +1013 197.000 +1013 213.300 +1013 232.100 +1014 199.700 +1014 213.100 +1015 124.300 +1015 196.100 +1015 217.100 +1016 82.900 +1016 144.500 +1016 216.900 +1016 287.500 +1017 83.300 +1017 197.100 +1017 216.400 +1018 174.000 +1018 213.500 +1018 282.500 +1019 82.800 +1019 143.600 +1019 202.700 +1019 216.600 +1019 298.600 +1020 72.000 +1020 175.700 +1020 216.000 +1020 297.800 +1021 97.200 +1022 69.100 +1022 157.700 +1022 174.600 +1022 247.400 +1023 97.000 +1023 144.400 +1023 173.100 +1023 202.400 +1023 279.300 +1024 61.500 +1024 73.000 +1024 157.700 +1024 201.500 +1024 213.600 +1024 278.100 +1025 277.900 +1026 110.200 +1026 157.800 +1026 175.700 +1026 193.900 +1026 211.800 +1026 237.600 +1026 286.900 +1027 175.300 +1027 216.900 +1028 83.000 +1028 197.600 +1028 217.400 +1028 295.900 +1029 69.200 +1029 132.700 +1029 175.600 +1029 193.900 +1029 204.100 +1029 299.800 +1030 132.100 +1030 158.200 +1030 204.300 +1030 215.700 +1030 288.500 +1031 97.200 +1031 186.700 +1031 216.200 +1032 212.100 +1033 70.900 +1033 82.400 +1033 187.400 +1033 212.200 +1034 198.000 +1034 214.200 +1035 79.500 +1035 157.300 +1035 175.600 +1035 197.600 +1035 209.900 +1035 216.600 +1035 288.700 +1036 83.300 +1036 176.400 +1036 215.500 +1036 267.000 +1037 83.800 +1037 214.600 +1037 267.100 +1038 200.300 +1038 216.500 +1038 287.500 +1039 214.900 +1039 267.800 +1039 287.900 +1040 196.000 +1040 215.000 +1040 267.400 +1040 296.400 +1041 216.600 +1042 214.800 +1042 297.600 +1043 83.700 +1043 173.700 +1043 216.400 +1044 58.400 +1044 144.800 +1044 196.700 +1044 215.400 +1044 267.600 +1045 83.100 +1045 173.800 +1045 213.800 +1045 296.500 +1046 197.900 +1046 213.900 +1046 231.600 +1047 93.500 +1047 198.900 +1047 216.900 +1048 96.200 +1048 158.200 +1048 187.600 +1048 212.100 +1048 248.200 +1048 268.300 +1049 81.500 +1049 195.600 +1049 287.400 +1050 83.300 +1050 204.200 +1050 267.500 +1050 288.700 +1051 90.800 +1051 157.700 +1051 214.600 +1051 247.200 +1052 97.500 +1052 197.500 +1052 207.300 +1052 216.700 +1052 246.700 +1052 298.700 +1053 96.100 +1053 210.900 +1053 287.100 +1054 72.800 +1054 83.400 +1054 144.700 +1054 184.200 +1054 214.800 +1054 231.200 +1054 287.600 +1055 59.600 +1055 83.200 +1056 184.000 +1056 197.300 +1056 215.300 +1057 83.200 +1057 195.200 +1057 217.300 +1057 267.400 +1058 60.500 +1058 69.100 +1058 93.900 +1058 122.700 +1058 158.100 +1058 194.300 +1058 204.100 +1058 218.200 +1058 286.900 +1059 68.200 +1059 109.200 +1059 143.500 +1059 174.400 +1059 188.700 +1059 215.800 +1059 248.400 +1060 203.900 +1060 297.400 +1061 81.900 +1061 132.500 +1061 157.900 +1061 214.400 +1062 217.300 +1062 247.300 +1062 288.100 +1063 83.500 +1063 217.300 +1064 83.200 +1064 193.000 +1064 209.300 +1064 267.500 +1065 186.500 +1065 216.500 +1066 96.200 +1066 197.300 +1066 265.200 +1066 299.000 +1067 188.700 +1067 200.100 +1067 218.200 +1067 247.700 +1068 73.200 +1068 124.100 +1068 158.000 +1068 216.800 +1068 267.200 +1069 204.200 +1069 217.400 +1069 269.400 +1070 82.200 +1070 156.000 +1070 189.100 +1070 213.900 +1071 77.000 +1071 158.100 +1071 184.300 +1071 201.500 +1071 217.800 +1072 83.100 +1072 144.500 +1072 174.100 +1072 204.100 +1072 217.600 +1072 298.000 +1073 82.600 +1073 124.100 +1073 144.900 +1073 217.700 +1073 286.600 +1074 174.000 +1074 212.600 +1075 83.300 +1075 156.400 +1075 204.700 +1075 216.900 +1075 287.900 +1076 197.300 +1076 211.800 +1076 232.100 +1076 288.000 +1077 68.700 +1077 82.600 +1077 97.400 +1077 144.300 +1077 214.400 +1078 81.600 +1078 188.200 +1078 213.300 +1078 299.600 +1079 73.000 +1079 157.300 +1079 210.500 +1079 217.700 +1079 284.200 +1080 83.200 +1080 96.100 +1080 114.500 +1080 154.200 +1080 217.200 +1080 247.200 +1080 299.800 +1081 202.300 +1082 82.600 +1083 83.200 +1083 136.500 +1083 158.200 +1083 198.500 +1083 215.900 +1083 226.200 +1084 181.800 +1084 201.700 +1084 216.200 +1085 197.500 +1085 213.100 +1086 58.300 +1086 83.400 +1086 171.200 +1086 196.500 +1086 209.500 +1087 83.400 +1087 108.000 +1087 188.800 +1087 210.400 +1088 159.600 +1088 212.400 +1088 287.200 +1089 60.300 +1089 83.500 +1089 96.300 +1089 203.000 +1089 267.300 +1090 175.400 +1090 188.100 +1090 211.100 +1090 267.400 +1091 82.700 +1091 194.600 +1091 212.600 +1091 231.100 +1091 294.400 +1092 67.000 +1092 143.300 +1092 174.500 +1092 187.300 +1092 201.700 +1092 214.800 +1092 267.400 +1093 72.700 +1093 96.000 +1094 186.800 +1094 247.600 +1095 158.300 +1095 171.800 +1095 214.200 +1096 72.100 +1096 134.300 +1096 175.100 +1096 198.200 +1096 217.100 +1097 97.200 +1097 216.000 +1098 82.300 +1098 175.800 +1098 204.400 +1099 176.300 +1100 109.600 +1101 68.200 +1101 202.700 +1101 298.600 +1102 217.300 +1102 265.000 +1102 287.600 +1103 107.700 +1103 184.600 +1103 204.100 +1103 216.400 +1104 69.300 +1104 122.900 +1104 158.100 +1104 213.100 +1104 246.500 +1105 83.100 +1105 214.900 +1105 297.800 +1106 82.900 +1107 69.000 +1107 83.200 +1107 108.000 +1107 172.600 +1107 183.800 +1107 196.700 +1107 213.000 +1107 244.600 +1108 70.400 +1108 174.600 +1108 212.300 +1109 79.600 +1109 174.100 +1109 204.100 +1109 232.100 +1109 284.400 +1110 175.900 +1110 199.900 +1110 214.900 +1110 270.100 +1110 286.000 +1111 81.200 +1111 209.200 +1112 175.100 +1112 197.100 +1112 214.700 +1112 246.900 +1112 281.500 +1113 142.400 +1113 158.300 +1113 182.100 +1113 216.700 +1113 231.800 +1114 83.700 +1114 196.900 +1114 214.200 +1114 299.300 +1115 69.200 +1115 113.000 +1115 202.700 +1115 216.700 +1116 188.800 +1117 97.500 +1117 173.900 +1117 213.200 +1117 246.800 +1119 95.300 +1119 216.500 +1119 267.100 +1119 287.800 +1120 83.200 +1120 204.300 +1120 265.000 +1121 211.400 +1123 59.300 +1123 77.100 +1123 123.700 +1123 213.300 +1124 83.500 +1124 158.300 +1124 184.700 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_6_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_6_e_pop.dat new file mode 100644 index 000000000..bee9e81d3 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_6_e_pop.dat @@ -0,0 +1,3974 @@ +sender time_ms +0 109.500 +0 157.900 +1 68.700 +1 117.100 +1 132.000 +1 156.500 +1 289.600 +2 54.600 +2 123.200 +2 189.100 +2 203.000 +3 123.500 +3 142.000 +3 157.500 +3 240.600 +3 267.400 +4 59.000 +4 97.100 +4 116.700 +4 174.400 +4 246.600 +5 52.900 +5 96.700 +5 115.500 +5 133.300 +5 202.300 +5 214.400 +5 247.400 +6 53.400 +6 69.900 +6 122.600 +7 110.800 +7 122.100 +7 157.100 +7 247.700 +8 77.800 +8 123.100 +9 102.500 +9 119.300 +9 143.900 +9 267.200 +10 68.800 +10 121.700 +10 231.400 +10 268.900 +11 116.400 +11 133.900 +11 176.100 +11 217.700 +11 267.400 +12 155.500 +13 58.600 +13 121.300 +14 122.000 +14 142.500 +14 246.900 +14 269.100 +15 120.200 +15 157.100 +15 195.100 +15 267.400 +16 71.900 +16 133.100 +16 157.800 +16 217.500 +17 53.700 +17 265.500 +18 68.300 +18 123.200 +18 136.400 +19 158.000 +19 217.600 +20 53.500 +20 60.500 +20 82.000 +20 122.400 +20 133.500 +20 144.800 +20 158.200 +20 267.100 +21 52.500 +21 72.800 +21 97.200 +21 116.000 +21 132.500 +21 157.700 +21 266.700 +22 96.600 +22 134.400 +22 157.500 +22 180.500 +22 247.200 +22 287.500 +23 109.400 +23 130.700 +23 156.200 +24 59.900 +24 96.000 +24 122.400 +24 143.900 +24 157.700 +24 247.600 +25 52.100 +25 123.400 +25 157.300 +25 197.500 +25 267.600 +26 56.100 +26 123.600 +26 143.900 +27 130.300 +27 265.100 +28 67.300 +28 122.200 +29 95.800 +29 119.100 +29 131.900 +29 157.300 +30 52.800 +30 70.000 +30 122.100 +30 137.300 +30 157.500 +31 81.600 +31 122.400 +31 137.100 +31 157.900 +31 173.800 +31 217.300 +31 267.400 +32 53.100 +32 94.100 +32 122.200 +32 157.500 +32 175.500 +32 279.700 +33 123.400 +34 60.300 +34 120.400 +34 143.800 +34 246.500 +34 267.000 +35 59.900 +35 121.700 +35 132.500 +36 157.100 +36 247.300 +37 119.400 +38 52.400 +38 83.500 +38 130.200 +38 142.300 +38 158.400 +38 288.200 +39 83.000 +39 157.900 +39 185.700 +39 244.400 +39 277.000 +39 288.400 +40 54.000 +40 123.000 +40 131.900 +40 173.800 +40 232.300 +41 120.600 +41 137.300 +41 157.700 +42 52.100 +42 80.600 +42 130.600 +42 144.600 +42 157.100 +42 248.200 +43 54.100 +43 123.200 +44 60.800 +44 78.400 +44 122.600 +44 215.800 +44 265.200 +44 268.000 +45 91.700 +45 123.000 +45 157.800 +45 199.800 +45 217.600 +46 120.000 +46 129.800 +46 157.200 +46 267.800 +46 295.800 +47 123.500 +47 157.800 +48 60.400 +48 97.000 +48 123.400 +48 144.100 +48 198.100 +48 247.100 +48 267.000 +48 299.900 +49 52.000 +49 97.300 +49 122.900 +49 136.400 +49 216.300 +50 113.500 +50 123.400 +50 132.400 +50 172.000 +50 217.400 +51 51.200 +51 120.900 +51 143.600 +51 158.100 +51 216.000 +52 53.400 +52 97.500 +52 110.900 +52 123.100 +52 144.600 +52 157.400 +53 70.200 +53 95.900 +53 108.200 +53 122.700 +53 137.100 +54 123.600 +54 158.400 +55 52.000 +55 81.000 +55 157.800 +55 197.300 +55 218.600 +56 52.100 +56 122.400 +56 130.900 +56 247.200 +57 96.700 +57 143.500 +57 158.100 +57 264.800 +58 122.300 +58 157.200 +58 244.500 +59 267.800 +60 60.500 +60 142.100 +60 267.000 +60 287.200 +61 121.500 +61 157.300 +62 51.200 +62 80.700 +62 114.500 +62 133.600 +63 60.100 +63 108.100 +63 159.500 +64 53.800 +64 122.100 +64 143.500 +64 245.700 +65 70.300 +65 96.500 +65 130.600 +65 157.900 +65 216.400 +66 56.600 +66 122.300 +66 140.000 +66 217.300 +66 267.400 +67 59.500 +67 94.800 +67 122.200 +67 130.300 +67 155.500 +67 173.500 +67 217.000 +68 54.800 +68 83.000 +68 124.000 +68 142.200 +68 159.300 +69 60.400 +69 122.900 +69 132.900 +69 157.700 +69 245.000 +70 122.400 +71 52.400 +71 69.000 +71 133.800 +72 53.100 +72 69.300 +72 125.500 +72 136.500 +72 157.700 +73 59.200 +73 123.600 +74 97.000 +74 131.200 +74 158.100 +74 267.300 +75 60.700 +75 130.900 +75 157.400 +75 217.700 +75 231.800 +76 68.500 +76 81.200 +76 121.600 +76 141.500 +76 247.400 +77 120.200 +77 132.300 +77 157.100 +78 53.000 +78 121.500 +78 142.200 +79 109.400 +79 120.400 +79 130.300 +79 143.400 +79 267.100 +80 115.100 +80 133.000 +80 217.200 +81 54.000 +81 97.000 +81 120.600 +81 132.100 +81 288.600 +82 69.300 +82 133.000 +83 51.900 +83 69.500 +83 96.200 +83 121.300 +83 158.900 +83 216.600 +83 286.900 +84 53.300 +84 81.800 +84 126.200 +84 174.100 +85 82.200 +85 127.000 +85 144.600 +85 171.100 +85 216.500 +86 123.900 +86 157.400 +87 122.300 +87 143.300 +87 158.100 +88 59.000 +88 108.500 +88 130.700 +88 157.100 +88 215.900 +88 279.100 +89 120.600 +89 172.200 +89 247.000 +90 174.000 +90 217.600 +91 117.000 +91 130.800 +91 175.400 +91 295.500 +92 81.500 +92 121.900 +92 158.100 +92 246.600 +93 60.300 +93 131.900 +93 157.700 +93 247.500 +93 267.400 +93 287.500 +94 60.500 +94 123.700 +94 267.400 +95 60.000 +95 82.600 +95 97.300 +95 130.800 +95 156.400 +95 231.700 +96 70.200 +96 120.500 +96 143.600 +96 158.000 +96 197.400 +96 230.700 +96 247.400 +96 267.000 +96 287.100 +97 120.700 +97 143.700 +97 157.800 +97 176.000 +97 247.700 +97 267.300 +98 64.400 +98 122.300 +98 138.500 +98 157.700 +98 232.100 +98 269.200 +99 59.600 +99 81.400 +99 121.300 +99 132.300 +99 174.700 +99 247.300 +100 107.400 +100 123.100 +100 134.000 +100 172.800 +100 267.100 +101 52.700 +101 123.400 +101 202.700 +102 58.600 +102 119.900 +102 157.100 +102 188.900 +102 267.100 +103 53.000 +103 69.400 +103 97.300 +103 123.800 +103 143.500 +103 157.300 +103 244.200 +104 123.500 +105 82.700 +105 114.800 +105 133.000 +105 157.900 +105 247.700 +106 77.600 +106 122.200 +106 142.500 +106 175.100 +107 52.900 +107 81.600 +107 116.100 +107 157.300 +107 244.400 +107 276.800 +108 68.900 +108 132.600 +108 157.500 +108 247.100 +108 287.500 +109 59.200 +109 121.600 +109 140.300 +109 159.300 +110 81.500 +110 104.900 +110 121.800 +110 247.000 +110 268.000 +111 120.600 +111 134.600 +111 157.500 +112 53.400 +112 96.300 +112 123.600 +112 131.400 +112 143.800 +112 229.900 +112 247.600 +113 119.800 +113 247.100 +113 294.100 +114 82.900 +114 132.000 +114 265.400 +115 122.900 +115 142.600 +115 170.000 +115 248.200 +115 267.200 +116 79.700 +116 128.500 +116 136.600 +116 158.400 +116 217.100 +117 51.400 +117 82.100 +117 115.500 +117 142.800 +117 157.700 +117 247.100 +117 287.100 +118 69.700 +118 108.700 +118 123.400 +118 143.500 +118 175.600 +118 217.400 +119 72.600 +119 143.100 +119 231.100 +120 107.900 +120 130.600 +120 157.800 +120 267.400 +121 57.400 +121 119.500 +121 156.200 +121 247.300 +121 267.100 +122 52.100 +122 123.400 +122 157.500 +122 247.400 +123 81.800 +123 97.600 +123 121.900 +123 142.600 +123 247.300 +124 60.900 +124 120.800 +124 142.300 +124 287.300 +125 79.700 +125 117.300 +125 158.200 +126 50.300 +126 96.900 +126 143.700 +126 267.300 +127 53.400 +127 82.600 +127 112.600 +127 120.600 +127 137.300 +127 266.900 +128 131.700 +128 267.000 +129 96.200 +129 121.500 +129 128.500 +129 156.000 +129 174.700 +129 202.700 +129 216.800 +130 70.300 +130 96.200 +130 120.500 +130 156.300 +130 247.600 +130 287.700 +131 81.000 +131 105.800 +131 115.400 +131 265.300 +132 61.100 +132 216.400 +133 122.500 +133 157.500 +133 267.500 +134 68.900 +134 158.700 +135 60.500 +135 70.100 +135 130.500 +135 183.300 +135 267.000 +136 53.700 +136 108.300 +136 122.900 +136 157.900 +137 82.500 +137 120.800 +137 170.900 +137 213.000 +137 218.300 +137 268.000 +138 60.000 +138 122.000 +138 188.000 +138 202.700 +138 215.900 +139 58.400 +139 82.800 +139 122.100 +139 157.400 +139 264.600 +139 279.000 +140 51.500 +140 60.600 +140 82.400 +140 119.700 +140 143.600 +141 122.000 +141 158.100 +142 143.700 +142 216.800 +142 268.900 +142 299.200 +143 121.400 +143 157.300 +143 265.800 +144 120.700 +144 141.900 +144 157.900 +145 60.300 +145 80.800 +145 108.200 +145 121.400 +145 133.100 +145 143.800 +145 157.300 +145 247.700 +146 68.700 +146 125.200 +146 157.500 +146 287.700 +147 62.700 +147 121.400 +147 137.300 +147 157.900 +147 197.600 +147 287.900 +148 50.700 +148 77.300 +148 117.200 +148 137.200 +148 158.400 +148 244.400 +149 50.600 +149 107.900 +149 203.800 +150 65.900 +150 113.400 +150 122.700 +150 157.800 +150 187.900 +150 267.700 +151 61.000 +151 141.600 +152 132.900 +152 155.800 +152 175.200 +152 267.600 +153 60.600 +153 94.800 +153 114.600 +153 144.900 +153 157.400 +154 52.500 +154 68.500 +154 132.800 +154 157.900 +154 216.900 +155 81.100 +155 143.700 +155 229.800 +156 53.000 +156 79.400 +156 120.700 +156 131.200 +156 230.500 +157 70.500 +157 83.000 +157 121.200 +157 157.400 +157 267.500 +158 59.900 +158 81.700 +158 121.200 +158 156.400 +158 265.700 +159 79.700 +159 119.600 +159 132.900 +159 144.300 +159 188.200 +160 82.600 +160 119.900 +160 157.700 +160 217.400 +160 247.100 +161 61.800 +161 80.800 +161 144.900 +161 157.300 +161 268.700 +162 111.100 +162 123.300 +162 141.700 +162 287.400 +163 247.200 +164 54.100 +164 82.500 +164 131.500 +165 83.700 +165 120.300 +165 143.500 +165 247.600 +165 267.100 +166 59.000 +166 140.000 +166 246.700 +166 278.700 +167 81.100 +167 158.600 +167 247.600 +167 267.000 +168 52.300 +168 131.100 +168 158.900 +168 244.500 +168 290.000 +169 80.200 +169 123.100 +169 157.800 +170 59.700 +170 137.100 +170 158.200 +170 231.000 +170 263.700 +171 132.000 +172 121.700 +172 217.000 +173 53.200 +173 68.500 +173 142.600 +173 158.000 +174 80.200 +174 130.400 +174 157.500 +174 278.000 +175 81.900 +175 122.800 +176 58.400 +176 81.700 +176 143.000 +176 217.000 +177 59.300 +177 119.000 +177 132.800 +177 142.500 +177 217.100 +177 265.300 +178 70.800 +178 81.100 +178 122.000 +178 132.900 +178 172.200 +179 94.900 +179 122.100 +179 134.400 +179 218.300 +180 80.700 +180 137.500 +180 156.500 +180 298.800 +181 121.700 +181 174.300 +181 266.900 +182 119.800 +182 142.400 +182 174.400 +183 112.300 +183 121.400 +183 143.600 +183 158.200 +184 82.600 +184 123.300 +184 158.200 +185 118.800 +185 141.200 +185 267.000 +186 69.600 +186 82.800 +186 130.700 +186 247.300 +187 122.300 +187 174.600 +188 59.800 +188 81.200 +188 157.200 +188 175.500 +189 59.200 +189 122.100 +189 283.200 +190 70.700 +190 97.400 +190 123.900 +190 143.300 +190 158.000 +190 213.300 +190 247.100 +190 286.700 +191 60.000 +191 128.700 +191 140.600 +192 72.200 +192 129.900 +192 144.900 +192 158.000 +192 215.800 +193 60.300 +193 123.100 +194 109.600 +194 158.100 +194 267.100 +195 114.600 +195 123.000 +195 158.500 +196 62.800 +196 69.800 +196 109.700 +196 123.200 +196 157.600 +196 216.400 +196 247.000 +196 266.900 +196 286.800 +197 52.500 +197 69.300 +197 119.000 +197 143.200 +198 52.900 +198 122.400 +198 269.000 +199 143.700 +199 246.900 +200 70.300 +200 119.800 +200 139.100 +200 158.100 +200 185.400 +200 217.300 +200 265.200 +201 58.200 +201 116.700 +201 133.000 +201 156.300 +201 232.000 +201 247.600 +202 107.000 +202 123.200 +202 157.600 +202 194.700 +202 216.900 +202 265.300 +203 59.100 +203 81.500 +203 96.200 +203 144.600 +203 157.800 +203 217.300 +203 287.900 +204 60.100 +204 110.000 +204 123.400 +204 143.600 +204 247.400 +204 267.300 +205 52.200 +205 123.100 +205 138.000 +206 53.700 +206 68.400 +206 115.700 +206 123.000 +206 134.900 +206 158.300 +206 246.200 +207 50.300 +207 123.900 +208 124.300 +208 157.000 +209 53.400 +209 122.400 +209 144.600 +209 267.300 +210 53.900 +210 68.000 +210 95.900 +210 132.200 +210 157.400 +210 217.300 +210 246.900 +211 130.600 +211 137.500 +211 158.300 +211 267.500 +212 52.000 +212 110.500 +212 122.000 +212 246.800 +213 58.100 +213 96.300 +213 124.000 +213 134.200 +213 144.400 +213 216.200 +213 247.600 +213 265.300 +214 59.900 +214 82.700 +214 121.600 +214 139.200 +215 59.000 +215 80.900 +215 133.600 +215 158.000 +215 215.500 +216 52.300 +216 109.800 +216 247.100 +216 268.600 +217 52.500 +217 131.700 +218 53.200 +218 121.800 +218 144.300 +219 67.300 +219 96.900 +219 123.400 +219 215.900 +219 265.200 +220 68.800 +220 121.100 +220 133.800 +220 157.600 +221 78.700 +221 119.700 +221 137.200 +221 158.800 +221 230.300 +221 266.900 +222 59.500 +222 121.100 +222 157.600 +222 247.900 +223 53.100 +223 122.600 +223 204.200 +223 229.900 +223 288.300 +224 118.900 +224 218.200 +224 278.100 +225 82.700 +225 108.100 +225 121.500 +225 129.700 +225 143.600 +225 158.000 +225 213.800 +225 247.400 +225 267.300 +226 51.400 +226 95.000 +226 107.800 +226 121.800 +226 137.100 +226 232.100 +226 265.300 +227 61.300 +227 80.700 +227 96.400 +227 120.700 +227 132.800 +227 225.500 +227 267.800 +227 294.600 +228 58.400 +228 120.100 +228 133.400 +228 246.700 +228 267.500 +229 64.400 +229 119.100 +229 130.800 +229 157.700 +229 217.000 +229 244.900 +229 267.300 +230 229.700 +230 247.200 +230 267.600 +231 52.300 +231 70.300 +231 108.800 +231 130.600 +231 174.500 +231 262.800 +232 95.600 +232 122.900 +232 134.600 +232 158.000 +233 116.700 +233 132.400 +233 157.900 +233 295.100 +234 119.300 +234 216.500 +235 51.300 +235 122.100 +235 158.000 +235 248.300 +236 62.900 +236 124.200 +236 247.000 +236 268.600 +237 52.100 +237 82.000 +237 114.200 +237 132.900 +237 143.800 +237 267.000 +238 51.300 +238 69.000 +238 123.100 +238 157.700 +238 176.400 +238 217.800 +238 247.800 +238 267.900 +239 82.100 +239 112.800 +239 126.800 +239 157.700 +239 267.500 +240 114.800 +240 123.100 +240 143.600 +240 247.300 +241 59.100 +241 97.300 +241 120.000 +241 132.500 +242 61.900 +242 122.600 +242 144.200 +242 247.500 +243 53.700 +243 96.300 +243 157.200 +243 218.100 +243 278.600 +244 122.700 +244 134.400 +244 247.000 +244 276.500 +245 69.000 +245 123.400 +245 143.400 +246 58.200 +246 119.600 +246 157.600 +246 216.000 +247 50.600 +247 67.600 +247 81.400 +247 123.500 +247 144.100 +248 54.600 +248 108.800 +248 128.300 +248 158.000 +248 247.800 +248 284.300 +249 79.400 +249 119.400 +249 130.800 +249 143.900 +249 171.800 +250 52.300 +250 82.500 +250 120.300 +250 137.300 +250 157.800 +250 246.600 +251 52.200 +251 122.100 +251 143.300 +252 52.100 +252 96.600 +252 120.600 +252 173.800 +252 245.800 +252 269.000 +253 69.800 +253 132.000 +253 144.400 +253 267.500 +254 52.100 +254 97.400 +254 114.100 +254 158.200 +254 216.500 +255 60.700 +255 117.900 +255 216.400 +256 60.400 +256 82.500 +256 120.600 +256 131.000 +256 216.300 +258 53.900 +258 69.500 +258 82.200 +258 108.100 +258 138.100 +258 157.900 +258 247.600 +259 66.200 +259 121.900 +259 144.700 +259 247.600 +259 265.800 +259 269.300 +260 53.000 +260 123.100 +260 133.000 +260 157.700 +261 70.900 +261 119.500 +261 133.400 +261 155.300 +262 81.100 +262 132.000 +262 158.000 +262 174.100 +262 247.200 +263 53.400 +263 122.300 +263 157.500 +263 247.400 +264 58.200 +264 72.700 +264 121.500 +264 143.800 +264 188.800 +264 218.100 +264 231.900 +264 267.600 +265 57.000 +265 108.000 +265 122.500 +265 130.300 +265 248.100 +266 68.900 +266 94.300 +266 111.100 +266 121.600 +266 156.400 +267 142.300 +267 158.100 +267 187.400 +268 157.900 +269 81.400 +269 123.500 +269 157.200 +269 247.200 +270 82.600 +270 122.300 +270 157.700 +271 52.700 +271 70.400 +271 121.100 +271 130.800 +271 141.100 +271 157.600 +271 285.600 +272 123.200 +272 247.500 +273 53.300 +273 118.900 +273 174.200 +273 265.400 +274 75.700 +274 121.100 +274 158.000 +274 247.300 +274 267.100 +275 52.900 +275 82.000 +275 115.200 +275 157.900 +275 247.600 +276 51.100 +276 70.300 +276 123.200 +276 143.500 +277 82.400 +277 114.700 +277 133.100 +277 157.300 +278 52.500 +278 119.000 +278 143.700 +279 81.100 +280 52.000 +280 131.700 +280 268.200 +281 60.200 +281 96.800 +281 130.200 +281 216.700 +282 123.000 +282 158.400 +283 96.300 +283 120.200 +283 157.900 +283 247.000 +283 299.000 +284 96.700 +284 133.700 +284 158.800 +284 265.000 +284 286.600 +285 51.900 +285 121.800 +285 137.600 +285 216.400 +286 59.000 +286 120.900 +286 132.600 +286 157.300 +286 188.200 +286 247.300 +287 122.500 +287 188.800 +287 201.500 +287 215.900 +287 247.300 +287 287.400 +288 68.500 +288 108.500 +288 123.500 +288 159.100 +288 247.300 +289 69.700 +289 109.900 +289 123.200 +290 97.300 +290 121.000 +290 143.100 +290 174.800 +290 247.000 +290 267.500 +291 82.300 +291 128.700 +291 141.600 +291 247.100 +292 52.400 +292 139.400 +292 157.900 +292 216.800 +293 70.400 +293 96.700 +293 123.800 +293 143.800 +293 187.300 +293 231.300 +293 247.600 +294 59.700 +294 121.000 +294 159.500 +294 173.900 +294 231.800 +294 266.700 +295 66.300 +295 122.900 +295 142.600 +295 218.700 +295 248.200 +296 157.500 +296 265.400 +298 122.100 +298 247.900 +299 53.200 +299 95.600 +299 158.200 +299 217.600 +300 60.800 +300 96.800 +300 129.000 +300 267.100 +301 52.400 +301 78.700 +301 122.800 +301 157.700 +301 204.300 +302 97.300 +302 197.600 +302 246.400 +303 120.100 +304 58.700 +304 83.200 +304 122.000 +304 158.900 +304 198.100 +305 53.300 +305 119.600 +305 134.800 +305 217.600 +305 247.700 +305 278.000 +306 68.500 +306 80.700 +306 123.500 +306 142.100 +306 159.300 +306 230.500 +307 57.900 +307 82.600 +307 122.900 +307 143.900 +307 268.000 +308 69.500 +308 110.600 +308 157.200 +308 174.300 +309 60.500 +309 84.300 +309 122.100 +309 248.100 +310 63.300 +310 117.100 +310 158.000 +310 217.700 +310 247.600 +310 267.700 +311 59.200 +311 79.600 +311 119.500 +311 125.700 +311 143.900 +311 157.000 +311 247.700 +312 121.900 +312 156.800 +312 246.100 +312 277.400 +313 51.800 +313 120.100 +313 134.500 +313 158.100 +313 263.000 +314 52.400 +314 68.500 +314 119.500 +314 143.900 +315 52.100 +315 139.600 +315 174.100 +316 121.700 +316 131.900 +316 157.700 +316 198.400 +316 247.300 +317 69.700 +317 96.200 +317 119.600 +317 133.000 +317 158.400 +317 278.000 +318 51.200 +318 61.800 +318 81.000 +318 120.400 +318 132.200 +318 156.100 +318 247.000 +318 266.900 +319 56.500 +319 97.300 +319 121.400 +319 143.700 +319 171.300 +319 232.200 +320 82.000 +320 122.500 +320 157.000 +320 174.600 +321 59.900 +321 72.900 +321 118.800 +322 120.300 +322 133.400 +322 173.800 +322 248.000 +322 266.800 +322 288.000 +323 53.600 +323 143.400 +323 186.000 +323 218.000 +323 248.000 +323 266.700 +324 53.300 +324 69.400 +324 95.100 +324 122.200 +324 246.600 +325 133.000 +325 174.200 +325 217.500 +326 52.100 +326 115.300 +326 134.100 +326 287.500 +327 97.400 +327 122.400 +329 50.900 +329 123.700 +329 143.700 +329 202.400 +329 247.300 +330 67.500 +330 123.300 +330 139.100 +330 157.500 +330 229.800 +330 264.900 +331 51.400 +331 131.000 +332 52.000 +332 60.500 +332 70.000 +332 246.700 +332 276.200 +333 52.400 +333 96.800 +333 123.400 +333 157.100 +333 217.700 +333 247.400 +334 50.700 +334 117.900 +334 143.200 +334 158.100 +334 229.600 +334 264.900 +335 59.500 +335 109.300 +335 122.700 +335 158.100 +335 188.100 +335 246.600 +335 276.300 +336 71.600 +336 84.100 +336 143.600 +336 215.200 +336 266.900 +337 82.300 +337 120.000 +337 133.300 +337 157.400 +337 265.500 +338 60.100 +338 121.500 +338 158.000 +339 82.500 +339 174.500 +339 247.800 +340 53.900 +340 115.200 +340 156.100 +340 184.000 +340 269.200 +341 53.600 +341 82.700 +341 132.900 +341 157.000 +341 288.000 +342 111.300 +342 155.100 +343 81.500 +343 133.000 +343 246.900 +344 59.900 +344 121.700 +344 142.700 +344 247.500 +345 107.500 +345 120.900 +345 130.700 +346 115.400 +346 132.300 +346 231.200 +346 265.800 +347 50.600 +347 69.300 +347 112.000 +347 157.400 +348 143.200 +348 217.700 +348 244.300 +349 121.600 +349 140.300 +349 158.000 +350 80.900 +350 119.800 +350 247.600 +351 60.500 +351 110.800 +351 123.200 +351 158.200 +351 217.500 +352 82.600 +352 123.400 +352 276.000 +353 52.900 +353 122.200 +353 157.100 +353 267.200 +353 276.300 +354 81.700 +354 119.700 +354 132.900 +354 158.100 +354 267.300 +355 109.300 +355 123.200 +355 144.800 +355 158.700 +356 130.600 +356 157.700 +356 206.800 +356 218.000 +357 82.900 +357 123.500 +357 132.900 +357 159.000 +357 216.100 +357 288.800 +358 60.100 +358 121.500 +358 134.100 +358 153.800 +359 50.500 +359 158.100 +359 216.500 +360 110.900 +360 122.800 +360 132.000 +360 155.800 +360 175.700 +360 245.300 +360 289.100 +361 53.300 +361 132.600 +361 144.700 +361 267.400 +362 60.700 +362 126.100 +362 133.100 +362 144.400 +363 53.300 +363 68.000 +363 122.700 +363 159.000 +363 247.800 +364 82.600 +364 121.200 +364 230.300 +364 247.200 +364 281.400 +365 54.300 +365 119.200 +365 174.100 +366 61.400 +366 109.300 +366 123.500 +366 144.400 +366 217.900 +366 247.300 +366 267.800 +367 156.900 +367 216.300 +368 121.200 +368 216.100 +368 247.200 +369 59.100 +369 82.300 +369 152.700 +369 158.200 +369 247.200 +369 269.300 +370 75.800 +370 121.200 +370 158.600 +370 278.300 +371 70.800 +371 122.400 +371 143.700 +371 247.900 +372 51.300 +372 122.600 +372 247.300 +373 95.200 +373 136.700 +374 52.300 +374 121.300 +374 142.800 +374 174.700 +375 60.500 +375 217.400 +376 58.900 +376 80.700 +376 121.900 +376 142.200 +376 218.300 +376 269.200 +376 286.800 +377 122.400 +377 158.100 +377 216.800 +377 247.400 +378 61.700 +378 121.400 +378 269.500 +379 52.200 +379 122.000 +379 143.200 +379 227.700 +379 267.400 +380 53.500 +380 123.600 +380 143.400 +380 267.100 +381 83.100 +381 121.900 +381 142.800 +381 184.500 +382 70.000 +382 108.800 +382 128.400 +382 143.100 +382 157.500 +382 247.200 +383 123.200 +384 97.000 +384 122.600 +384 246.900 +385 82.300 +385 131.400 +385 143.100 +385 157.300 +385 247.000 +386 60.600 +386 117.200 +386 130.700 +386 144.400 +386 158.400 +386 201.700 +387 66.500 +387 120.900 +387 138.500 +387 173.600 +388 62.900 +388 81.400 +388 96.300 +388 120.000 +388 137.100 +388 158.300 +388 287.500 +389 81.700 +389 121.500 +389 143.100 +389 195.400 +389 243.600 +389 278.800 +390 59.300 +390 122.300 +390 144.900 +390 215.900 +390 296.000 +391 122.100 +391 247.300 +392 57.400 +392 81.900 +392 120.800 +392 157.300 +393 60.600 +393 137.200 +393 157.200 +394 51.100 +394 60.700 +394 117.400 +394 130.400 +394 144.600 +394 187.500 +394 217.700 +395 56.800 +395 82.100 +395 124.500 +395 144.200 +395 247.400 +396 157.900 +397 50.300 +397 120.100 +397 157.800 +398 119.200 +398 157.700 +398 216.400 +398 267.500 +399 60.600 +399 103.400 +399 123.000 +399 144.000 +399 216.500 +399 247.500 +400 96.800 +400 175.800 +400 232.300 +400 247.400 +401 60.200 +401 81.000 +401 120.800 +401 174.900 +401 217.400 +401 266.900 +402 81.100 +402 117.300 +402 133.600 +402 157.300 +402 267.200 +403 123.200 +404 118.700 +405 59.500 +405 111.000 +405 122.700 +405 157.900 +405 247.400 +406 137.900 +406 158.000 +406 172.800 +406 247.900 +407 54.200 +407 113.500 +407 266.900 +408 122.200 +408 217.500 +408 231.200 +409 60.900 +409 97.200 +409 122.600 +409 158.100 +409 247.300 +409 282.000 +410 121.200 +410 142.600 +410 157.600 +410 247.300 +410 267.700 +411 115.800 +411 130.200 +411 248.200 +412 122.100 +412 247.000 +413 59.900 +413 81.800 +413 121.700 +413 279.100 +414 120.800 +414 134.500 +414 247.600 +414 269.000 +415 59.800 +415 73.100 +415 121.500 +415 140.900 +415 157.500 +416 69.600 +416 132.500 +416 143.200 +416 267.300 +417 119.400 +417 129.200 +417 143.400 +418 112.700 +418 123.400 +418 144.000 +418 159.100 +418 247.100 +418 267.000 +418 287.900 +419 122.600 +419 131.000 +419 175.300 +419 217.700 +419 265.000 +419 287.300 +420 121.500 +420 158.000 +420 215.300 +420 264.700 +421 80.000 +421 96.600 +421 118.900 +421 157.700 +421 247.400 +422 115.900 +422 125.600 +422 154.300 +422 247.700 +422 268.400 +423 60.300 +423 121.900 +423 132.400 +424 52.000 +424 142.900 +425 54.600 +425 71.700 +425 121.800 +425 131.300 +425 174.500 +425 247.500 +426 81.000 +426 97.200 +426 120.200 +426 132.700 +426 143.900 +426 157.700 +426 174.900 +427 61.000 +427 130.700 +427 143.700 +427 157.700 +428 51.300 +428 82.200 +428 105.300 +428 136.600 +428 216.400 +428 247.300 +429 68.600 +429 82.100 +429 122.100 +429 132.800 +429 144.400 +429 173.800 +429 246.700 +430 94.400 +430 123.400 +430 154.600 +430 213.600 +430 218.500 +430 265.400 +431 53.100 +431 143.400 +431 188.600 +431 267.500 +432 122.100 +432 144.000 +432 246.500 +432 265.100 +433 97.600 +433 122.100 +433 157.200 +433 247.300 +433 267.100 +433 289.100 +434 68.000 +434 120.900 +434 144.000 +435 97.400 +435 122.000 +435 143.800 +435 174.600 +435 230.700 +435 267.200 +436 69.300 +436 97.300 +436 122.300 +436 137.000 +436 217.700 +437 51.900 +437 81.500 +437 122.500 +438 120.000 +438 158.000 +438 217.500 +438 267.600 +439 52.400 +439 82.300 +439 123.500 +439 143.600 +439 158.200 +439 217.200 +440 131.900 +440 143.000 +440 231.700 +441 81.300 +441 121.200 +441 132.900 +442 82.600 +442 121.100 +442 131.300 +442 156.600 +443 60.300 +443 68.000 +443 97.600 +443 132.900 +443 174.100 +443 216.400 +443 267.500 +444 82.400 +444 119.900 +444 158.100 +444 278.800 +445 95.100 +445 103.400 +445 117.500 +445 131.900 +445 155.400 +445 171.700 +445 246.400 +445 267.800 +446 143.500 +446 157.900 +446 267.400 +447 115.300 +447 265.200 +447 283.500 +448 69.800 +448 119.400 +448 188.700 +448 216.500 +448 243.900 +448 268.500 +449 60.100 +449 122.700 +449 231.300 +450 51.300 +450 114.900 +450 130.600 +450 158.200 +450 187.500 +450 263.600 +451 81.100 +451 115.300 +451 122.600 +452 124.000 +452 141.100 +452 283.800 +453 80.400 +453 127.800 +453 247.400 +454 108.200 +454 122.700 +454 142.900 +454 176.200 +454 246.000 +454 267.400 +455 60.400 +455 114.100 +455 143.800 +455 231.600 +455 266.800 +456 96.800 +456 121.200 +456 144.400 +456 247.200 +457 59.200 +457 70.200 +457 96.800 +457 123.300 +457 158.000 +457 217.300 +457 267.700 +457 286.900 +458 52.800 +458 96.800 +458 122.300 +458 134.600 +458 143.700 +458 204.500 +458 265.300 +459 59.600 +459 130.800 +459 269.100 +460 54.100 +460 97.300 +460 115.700 +460 141.900 +460 172.800 +460 265.200 +460 289.000 +461 52.300 +461 114.000 +461 157.700 +462 52.400 +462 95.300 +462 123.000 +462 143.100 +462 159.400 +462 231.800 +462 265.500 +463 59.500 +463 133.300 +463 158.000 +464 95.900 +464 113.800 +464 157.200 +464 216.400 +465 69.400 +465 119.000 +465 157.400 +465 265.700 +466 53.700 +466 123.700 +466 139.000 +466 158.800 +466 247.900 +467 81.600 +467 121.000 +467 154.900 +467 229.800 +468 60.600 +468 122.900 +468 140.700 +468 176.200 +468 267.800 +469 144.500 +469 269.600 +470 79.600 +470 110.800 +470 122.600 +470 158.000 +470 246.500 +470 267.600 +471 74.100 +471 120.800 +471 132.700 +471 159.600 +471 217.100 +471 277.300 +472 80.700 +472 107.500 +472 120.900 +472 130.300 +472 157.100 +472 231.800 +472 247.200 +472 282.700 +473 141.500 +473 158.200 +473 279.400 +474 53.500 +474 97.200 +474 122.600 +474 142.200 +474 247.000 +475 58.800 +475 96.700 +475 131.400 +475 158.100 +475 217.300 +475 265.200 +476 66.400 +476 130.500 +476 158.300 +476 173.900 +476 232.100 +476 267.000 +477 59.000 +477 81.100 +477 121.200 +477 130.900 +477 144.100 +477 230.900 +478 51.800 +478 69.300 +478 115.100 +478 129.300 +478 143.700 +479 52.700 +479 141.400 +479 232.100 +479 267.300 +480 65.900 +480 120.200 +480 132.200 +480 143.100 +481 54.100 +481 119.000 +481 157.800 +481 260.500 +481 267.200 +482 57.800 +482 97.300 +482 132.900 +482 159.000 +482 174.500 +482 288.900 +483 51.100 +483 96.300 +483 121.000 +483 247.200 +484 61.100 +484 82.500 +484 108.600 +484 115.400 +484 133.400 +484 142.500 +484 157.700 +484 174.500 +484 231.100 +484 263.200 +485 123.600 +485 232.100 +486 107.800 +486 122.600 +486 214.300 +486 247.900 +487 126.600 +487 137.000 +487 204.100 +487 217.200 +487 246.900 +488 60.500 +488 110.400 +489 108.700 +489 134.600 +489 156.500 +489 219.200 +489 279.400 +490 73.700 +490 119.300 +490 158.000 +491 120.100 +491 156.800 +491 230.600 +491 268.700 +492 123.100 +492 143.700 +492 157.500 +493 54.200 +493 113.400 +493 133.400 +493 158.000 +493 262.700 +494 59.100 +494 67.100 +494 107.600 +494 121.900 +494 155.800 +494 232.200 +494 267.100 +495 112.900 +495 119.500 +495 130.900 +495 188.200 +495 218.400 +496 126.400 +496 134.000 +496 156.200 +496 278.100 +497 82.700 +497 131.700 +497 174.100 +497 202.900 +497 217.100 +497 246.600 +498 54.200 +498 82.000 +498 122.000 +498 155.800 +498 174.200 +498 197.900 +498 218.500 +498 247.400 +499 54.300 +499 121.900 +499 143.100 +499 158.000 +499 231.100 +500 82.700 +500 120.600 +500 143.200 +500 231.600 +500 267.900 +501 81.400 +501 122.800 +501 155.600 +502 53.500 +502 63.100 +502 95.400 +502 132.100 +502 157.600 +503 67.400 +503 116.600 +503 157.900 +504 82.400 +504 132.100 +504 158.100 +505 113.600 +505 132.000 +505 266.900 +506 51.300 +506 61.700 +506 77.900 +506 114.600 +506 122.700 +506 171.200 +506 218.100 +506 266.800 +507 82.100 +507 122.600 +507 158.000 +508 59.000 +508 144.000 +508 157.600 +509 82.700 +509 268.100 +509 289.800 +510 53.700 +510 115.300 +510 123.400 +510 174.500 +510 247.600 +511 82.400 +511 123.000 +512 142.700 +512 267.000 +513 51.400 +513 122.200 +513 134.400 +514 83.100 +514 119.400 +514 133.900 +514 171.000 +514 231.900 +514 267.600 +515 123.700 +515 157.000 +515 217.100 +516 54.000 +516 122.800 +517 111.000 +517 121.200 +517 144.500 +517 246.900 +517 268.200 +518 50.800 +518 122.200 +518 132.700 +518 174.100 +519 59.800 +519 123.500 +519 141.200 +519 216.900 +520 51.100 +520 121.100 +520 132.300 +520 217.200 +520 247.600 +521 82.300 +521 120.500 +521 138.300 +521 157.500 +521 230.800 +521 267.500 +522 53.400 +522 78.500 +522 121.300 +522 131.100 +522 143.000 +522 159.200 +523 115.800 +523 132.300 +523 157.300 +523 232.600 +523 247.100 +524 69.300 +524 122.000 +524 131.700 +524 231.100 +525 70.800 +525 77.200 +525 95.300 +525 121.900 +525 138.300 +525 157.200 +525 247.300 +525 267.700 +525 289.300 +526 117.300 +526 143.100 +526 244.600 +527 60.800 +527 82.200 +527 137.200 +527 158.100 +528 113.200 +528 122.900 +528 142.900 +528 158.500 +529 81.500 +529 132.800 +529 157.100 +529 244.000 +530 50.500 +530 105.700 +530 122.200 +530 142.100 +530 174.500 +530 287.500 +531 52.600 +531 122.800 +531 144.500 +531 159.200 +532 59.300 +532 97.200 +532 122.800 +532 142.900 +532 216.800 +533 68.400 +533 117.200 +533 129.900 +533 143.500 +533 174.200 +533 217.400 +533 267.900 +534 83.500 +534 115.100 +534 157.900 +534 184.000 +534 216.900 +534 247.300 +534 268.600 +534 288.400 +535 62.700 +535 122.200 +535 141.500 +535 158.500 +535 218.600 +535 277.400 +536 122.700 +536 143.900 +537 119.100 +537 247.000 +538 59.700 +538 121.200 +538 132.900 +538 144.500 +538 159.000 +538 267.200 +538 290.000 +539 121.300 +539 133.400 +539 217.600 +540 51.000 +540 82.400 +540 119.500 +540 132.700 +540 157.800 +540 216.500 +540 267.600 +540 287.800 +541 60.500 +541 81.500 +541 156.200 +541 288.500 +542 53.600 +542 84.500 +542 117.600 +542 142.400 +542 247.300 +543 60.600 +543 81.000 +543 120.300 +543 131.200 +543 144.200 +543 173.200 +543 203.000 +543 230.500 +544 51.400 +544 119.300 +544 130.700 +544 143.700 +544 215.900 +544 267.100 +545 50.300 +545 69.500 +545 103.500 +545 122.800 +545 143.900 +545 217.200 +545 267.900 +546 82.900 +546 110.600 +546 121.700 +546 143.700 +547 143.200 +547 156.900 +547 217.400 +547 286.700 +548 82.400 +548 120.200 +548 143.700 +549 51.200 +549 67.700 +549 81.800 +549 121.900 +549 130.400 +549 143.700 +549 157.900 +549 182.300 +550 121.800 +550 132.600 +550 268.100 +551 72.100 +551 121.800 +551 137.000 +551 174.600 +552 121.400 +552 131.900 +552 156.200 +553 123.800 +554 117.100 +554 156.700 +554 214.600 +554 247.300 +555 122.600 +555 143.900 +555 157.200 +555 231.600 +556 52.100 +556 70.500 +556 116.700 +556 132.200 +556 143.900 +556 266.500 +557 82.600 +557 122.300 +557 132.800 +557 267.500 +558 59.500 +559 79.100 +559 122.200 +559 143.000 +559 267.600 +560 122.500 +560 217.500 +561 120.900 +561 133.100 +561 267.400 +562 60.800 +562 81.400 +562 119.700 +562 132.800 +562 175.100 +562 247.200 +563 70.300 +563 96.500 +563 123.600 +563 158.100 +563 230.500 +563 267.800 +564 67.500 +564 81.100 +564 116.200 +564 123.900 +564 143.200 +564 157.700 +564 217.400 +564 267.100 +565 119.000 +565 158.000 +565 197.800 +565 231.400 +566 52.400 +566 82.700 +566 115.500 +566 132.500 +566 157.500 +566 246.500 +567 122.600 +567 158.000 +567 286.600 +568 122.100 +569 115.800 +569 157.500 +569 231.200 +570 60.300 +570 81.400 +570 129.700 +570 144.700 +571 115.400 +571 123.300 +571 247.400 +572 123.000 +572 142.700 +572 247.200 +573 53.800 +573 68.200 +573 82.600 +573 123.100 +573 157.200 +573 244.600 +573 266.100 +574 52.400 +574 123.300 +574 143.300 +574 195.200 +574 246.000 +575 247.000 +576 60.200 +576 80.400 +576 116.700 +576 131.400 +576 158.300 +576 248.000 +577 83.300 +577 122.100 +577 132.800 +577 143.900 +577 246.500 +578 128.000 +578 144.400 +578 194.800 +578 267.600 +579 52.400 +579 134.900 +579 157.100 +579 287.800 +580 82.500 +580 96.300 +580 130.800 +580 143.200 +580 170.900 +580 217.300 +580 246.900 +580 267.700 +581 120.900 +581 171.400 +581 266.900 +582 72.300 +582 96.100 +582 119.800 +582 132.400 +582 174.100 +582 202.300 +582 217.400 +582 248.400 +582 267.900 +582 299.300 +583 123.600 +583 158.000 +583 246.700 +584 51.200 +584 66.700 +584 96.700 +584 130.200 +584 157.700 +584 216.400 +584 247.400 +585 58.800 +585 82.600 +585 123.500 +585 143.000 +585 159.000 +585 217.600 +585 247.400 +585 267.500 +586 52.600 +586 94.800 +586 123.200 +586 143.800 +586 267.900 +587 82.100 +587 118.100 +587 132.100 +588 96.600 +588 113.900 +588 124.400 +588 136.100 +588 155.600 +588 267.300 +589 120.200 +589 217.400 +589 267.000 +590 81.800 +590 96.800 +590 115.400 +590 130.600 +590 142.300 +590 155.500 +590 174.800 +590 269.100 +591 72.100 +591 128.700 +591 141.600 +591 157.400 +591 248.000 +591 265.000 +591 268.100 +592 51.500 +592 97.300 +592 121.400 +592 142.600 +592 187.400 +593 51.300 +593 81.000 +593 123.400 +593 230.700 +594 69.400 +594 123.100 +594 157.200 +594 267.700 +595 123.400 +595 143.900 +595 267.500 +596 52.100 +596 98.800 +596 123.200 +596 215.600 +596 231.700 +596 269.500 +597 121.700 +597 144.400 +597 158.200 +597 247.900 +598 51.800 +598 63.000 +598 107.600 +598 123.100 +598 157.100 +598 287.900 +599 61.300 +599 122.100 +599 134.800 +599 247.300 +600 51.700 +600 81.500 +600 121.600 +600 132.900 +600 216.000 +601 60.900 +601 70.500 +601 130.700 +601 157.200 +601 216.800 +602 60.400 +602 138.800 +602 158.100 +602 287.700 +603 50.400 +603 95.200 +603 133.300 +603 232.400 +603 267.000 +604 68.900 +604 96.900 +604 116.800 +604 143.400 +604 175.300 +604 216.600 +604 247.300 +605 81.600 +605 120.200 +605 157.900 +605 231.700 +605 248.000 +606 50.900 +606 69.900 +606 122.000 +606 132.400 +606 155.100 +607 118.300 +607 144.000 +607 157.800 +607 248.200 +607 277.500 +608 133.000 +609 69.000 +609 97.100 +609 121.900 +609 132.000 +609 157.100 +609 217.500 +609 244.700 +610 52.800 +610 120.200 +610 157.800 +610 217.400 +610 248.200 +611 62.900 +611 71.600 +611 131.600 +611 174.600 +612 69.900 +612 95.900 +612 119.100 +612 157.800 +612 217.700 +612 247.000 +612 296.700 +613 52.400 +613 121.800 +613 141.200 +613 248.100 +614 122.100 +614 172.000 +615 82.800 +615 121.700 +615 157.100 +615 215.000 +615 231.600 +616 51.900 +616 82.300 +616 110.800 +616 131.500 +616 269.000 +616 287.600 +617 60.800 +617 97.200 +617 130.700 +617 157.500 +617 232.100 +617 247.700 +618 114.800 +618 132.300 +618 156.600 +619 81.500 +619 137.200 +619 231.800 +619 278.600 +620 52.400 +620 82.200 +620 119.100 +620 142.400 +620 157.700 +620 246.900 +621 97.100 +621 119.500 +621 126.600 +621 158.000 +621 175.500 +622 81.700 +622 143.800 +622 156.900 +622 174.400 +622 217.100 +622 247.300 +623 51.300 +623 132.600 +623 247.400 +624 217.600 +624 269.200 +625 51.800 +625 83.800 +625 115.300 +625 143.600 +625 174.600 +625 194.300 +625 287.600 +626 82.600 +626 123.000 +626 143.800 +626 215.400 +626 247.100 +626 287.300 +627 50.900 +627 115.400 +627 143.500 +628 66.000 +628 131.300 +628 157.900 +628 269.500 +629 52.400 +629 123.600 +629 232.100 +629 274.500 +630 71.900 +630 115.600 +630 132.300 +630 158.000 +630 267.200 +631 96.200 +631 131.600 +631 265.300 +631 288.400 +632 96.500 +632 122.900 +632 154.500 +632 244.400 +632 267.800 +633 51.800 +633 97.200 +633 121.200 +633 247.200 +633 267.400 +634 60.200 +634 122.100 +634 134.900 +634 155.800 +635 82.000 +635 140.900 +635 155.700 +635 197.900 +636 53.600 +636 121.000 +636 132.500 +636 155.400 +636 247.100 +637 130.700 +638 52.500 +638 115.600 +639 71.800 +639 122.100 +639 156.600 +640 53.300 +640 81.300 +640 97.300 +640 131.700 +640 158.000 +640 265.500 +641 81.600 +641 140.100 +641 247.300 +642 52.400 +642 144.500 +642 201.300 +642 287.700 +643 68.200 +643 104.600 +643 132.300 +643 265.400 +644 53.000 +644 83.100 +644 121.400 +644 133.000 +644 287.600 +645 59.800 +645 95.200 +645 131.100 +645 174.600 +645 266.300 +645 287.000 +646 60.600 +646 70.500 +646 123.400 +646 131.400 +646 155.600 +646 175.000 +646 247.300 +647 120.700 +647 157.400 +648 50.400 +648 60.800 +648 126.700 +648 155.100 +648 174.400 +648 247.300 +649 54.700 +649 132.600 +649 247.200 +650 68.000 +650 96.600 +650 122.600 +650 154.900 +650 169.400 +651 58.200 +651 119.500 +651 133.000 +651 158.200 +651 246.900 +652 53.100 +652 68.800 +652 123.600 +652 267.900 +653 58.400 +653 81.200 +653 110.700 +653 123.900 +653 144.200 +653 157.500 +654 134.800 +654 157.700 +654 174.100 +654 267.200 +655 117.000 +655 144.000 +655 231.300 +655 267.200 +655 290.100 +656 60.300 +656 118.100 +656 248.100 +657 66.400 +657 95.700 +657 120.900 +657 155.600 +658 52.100 +658 69.400 +658 128.500 +659 51.300 +659 59.600 +659 114.300 +659 171.500 +659 269.500 +660 60.600 +660 109.200 +660 125.800 +660 154.900 +661 59.900 +661 122.100 +662 197.300 +662 216.900 +662 239.800 +662 279.400 +663 61.300 +663 81.300 +663 116.000 +663 130.700 +663 144.200 +663 244.400 +663 287.000 +664 72.100 +664 122.900 +664 132.700 +664 157.800 +664 197.800 +665 159.200 +666 53.100 +666 68.900 +666 95.900 +666 120.600 +666 154.500 +666 216.600 +667 66.600 +667 110.500 +667 122.300 +667 133.300 +667 156.800 +667 217.200 +667 278.400 +668 109.300 +668 131.000 +668 158.000 +668 197.400 +668 245.800 +668 265.800 +669 81.800 +669 122.400 +669 132.200 +669 187.800 +670 54.300 +670 122.000 +670 282.100 +671 121.900 +671 141.300 +671 233.100 +671 267.600 +671 298.200 +672 121.900 +672 156.800 +673 110.600 +673 123.500 +673 142.500 +673 157.900 +673 174.600 +673 267.600 +674 118.500 +674 157.200 +674 174.800 +674 197.600 +674 232.100 +674 247.300 +674 269.400 +675 60.700 +675 122.700 +675 144.700 +675 216.700 +676 122.400 +676 269.200 +676 278.300 +677 60.200 +677 133.900 +677 144.600 +677 158.200 +677 269.200 +678 68.000 +678 82.800 +678 107.600 +678 123.400 +678 143.100 +678 157.900 +678 215.000 +679 59.800 +679 82.200 +679 131.200 +679 157.500 +679 246.800 +680 59.800 +680 127.700 +680 174.500 +680 268.600 +681 63.300 +681 138.400 +681 244.900 +682 61.000 +682 134.100 +682 175.500 +683 53.100 +683 68.800 +683 128.000 +683 138.800 +685 70.300 +685 119.000 +685 216.000 +685 267.500 +685 287.400 +686 94.900 +686 122.200 +686 133.500 +686 157.000 +686 228.000 +687 52.900 +687 69.500 +687 82.600 +687 129.300 +687 143.500 +687 156.200 +687 216.700 +687 248.100 +687 267.800 +688 52.000 +688 121.800 +688 143.700 +688 157.500 +688 247.600 +688 288.100 +689 131.300 +689 158.200 +689 216.200 +689 298.900 +690 70.800 +690 112.100 +690 119.300 +690 216.700 +690 247.100 +691 61.300 +691 123.400 +691 138.800 +691 157.400 +692 52.600 +692 133.000 +693 158.100 +693 217.600 +694 50.900 +694 121.500 +694 157.500 +694 267.300 +695 53.100 +695 67.200 +695 120.900 +695 143.700 +695 216.800 +695 247.900 +695 267.200 +696 52.200 +696 68.600 +696 136.800 +696 268.500 +697 60.100 +697 122.500 +697 132.800 +697 174.900 +697 216.600 +697 278.800 +698 81.300 +698 120.800 +698 264.800 +699 124.500 +700 123.600 +700 157.200 +700 202.200 +700 276.300 +701 53.300 +701 121.800 +701 157.300 +701 247.900 +701 288.000 +702 52.700 +702 108.000 +702 132.300 +702 172.400 +703 59.500 +703 97.500 +703 122.600 +703 144.400 +703 289.100 +704 68.200 +704 121.900 +704 143.900 +704 157.700 +704 268.200 +705 60.600 +705 96.300 +705 122.600 +705 153.000 +705 171.500 +705 288.900 +706 58.100 +706 81.100 +706 110.900 +706 123.200 +706 133.300 +706 157.700 +706 175.100 +707 54.400 +707 121.400 +707 133.200 +707 157.300 +707 201.200 +707 247.400 +707 276.300 +707 290.700 +708 52.000 +708 70.000 +708 110.400 +708 122.100 +708 158.100 +709 53.300 +709 132.800 +709 217.700 +710 57.100 +710 123.100 +710 171.600 +710 267.200 +711 53.300 +711 107.900 +711 139.900 +711 157.600 +711 278.600 +712 82.600 +712 121.200 +712 175.200 +712 218.200 +712 269.000 +713 81.600 +713 121.900 +713 134.600 +713 158.000 +713 268.100 +714 58.300 +714 97.200 +714 121.700 +714 133.300 +714 142.000 +714 230.500 +714 248.200 +715 121.100 +715 157.900 +715 217.300 +715 247.400 +715 288.100 +716 69.600 +716 113.900 +716 123.600 +716 155.400 +716 218.000 +717 81.800 +717 121.400 +717 132.900 +718 123.500 +718 157.500 +718 265.200 +719 83.000 +719 118.800 +719 288.000 +720 69.100 +720 131.500 +720 216.700 +721 54.600 +721 69.500 +721 111.000 +721 120.800 +721 157.800 +721 269.100 +722 69.600 +722 120.300 +722 156.000 +722 267.600 +723 58.600 +723 82.000 +723 123.400 +723 144.200 +723 231.500 +724 82.100 +724 132.400 +724 157.600 +724 232.000 +725 122.300 +725 217.300 +725 267.700 +726 80.200 +726 122.600 +726 141.200 +726 158.000 +727 51.700 +727 122.800 +727 267.500 +728 59.600 +728 68.800 +728 109.300 +728 124.500 +728 141.900 +728 217.500 +728 244.300 +729 54.800 +729 82.000 +729 109.800 +729 123.400 +729 132.100 +729 143.200 +729 265.200 +730 71.000 +730 97.300 +730 121.400 +730 157.400 +730 188.000 +730 268.300 +731 70.400 +731 80.400 +731 108.400 +731 131.200 +731 172.100 +731 217.800 +731 247.400 +732 69.700 +732 118.700 +732 133.900 +732 143.900 +732 194.800 +732 267.200 +733 81.500 +733 122.000 +733 157.300 +734 67.500 +734 116.500 +734 132.900 +734 158.500 +734 184.100 +735 50.500 +735 123.400 +735 158.000 +736 59.500 +736 83.200 +736 111.100 +736 130.400 +736 157.000 +736 202.600 +737 123.500 +738 124.100 +738 158.300 +738 204.100 +738 267.400 +739 120.200 +740 52.300 +740 70.700 +740 110.500 +740 122.900 +740 229.800 +740 247.700 +741 53.900 +741 122.400 +741 156.900 +742 56.000 +742 133.000 +742 216.700 +742 248.200 +743 52.000 +743 119.300 +743 133.200 +743 204.500 +743 243.800 +743 267.500 +744 68.900 +744 115.600 +744 132.600 +744 158.400 +745 69.500 +745 122.200 +745 157.600 +746 52.600 +746 120.100 +746 137.000 +747 66.500 +747 97.300 +747 131.500 +747 216.200 +747 287.500 +748 144.400 +749 52.600 +749 97.500 +749 119.700 +750 61.500 +750 79.300 +750 121.900 +750 143.700 +750 232.000 +751 50.300 +751 121.000 +751 144.100 +751 201.300 +751 217.700 +752 61.800 +752 82.700 +752 133.100 +752 244.200 +752 267.600 +753 50.100 +753 130.700 +754 51.200 +754 81.000 +754 108.900 +754 131.900 +754 144.800 +754 157.900 +755 107.700 +755 175.500 +756 52.000 +756 119.700 +756 132.600 +756 240.900 +756 267.900 +757 119.000 +757 247.500 +757 267.000 +757 288.500 +758 78.700 +758 133.000 +758 156.900 +758 174.900 +758 265.000 +759 97.300 +759 117.400 +759 143.100 +759 246.200 +760 50.100 +760 70.500 +760 118.400 +760 132.000 +760 154.300 +760 187.600 +760 218.200 +760 266.900 +761 110.100 +761 128.300 +761 157.100 +761 267.500 +762 50.800 +762 97.000 +762 122.500 +762 133.000 +762 175.000 +762 197.200 +762 247.200 +763 97.500 +763 120.300 +763 158.400 +763 264.300 +764 51.900 +764 97.000 +764 130.200 +764 169.300 +764 224.300 +764 247.500 +765 82.300 +765 122.200 +765 157.700 +765 217.500 +765 287.200 +766 52.400 +766 82.600 +766 115.000 +766 143.600 +767 52.300 +767 131.500 +767 158.300 +767 192.100 +767 231.600 +767 290.300 +768 54.600 +768 122.500 +768 156.100 +768 247.500 +768 275.100 +769 50.900 +769 70.000 +769 121.600 +769 144.300 +769 171.800 +769 278.100 +769 285.600 +770 120.000 +770 230.900 +770 247.800 +771 70.400 +771 121.200 +771 247.500 +772 287.200 +773 51.500 +774 54.100 +774 81.200 +774 123.600 +774 158.100 +774 267.400 +775 70.300 +775 114.500 +775 131.100 +775 156.200 +775 175.500 +775 217.200 +775 247.900 +776 122.500 +776 158.100 +777 81.100 +777 97.100 +777 110.400 +777 121.900 +777 130.100 +777 157.600 +777 175.700 +777 217.500 +777 267.100 +778 53.000 +778 71.700 +778 122.800 +779 60.500 +779 71.800 +779 121.600 +779 132.800 +779 157.300 +780 54.700 +780 82.000 +780 110.700 +780 121.400 +780 130.900 +780 144.500 +780 267.800 +781 70.200 +781 123.000 +781 132.900 +781 216.400 +782 118.300 +782 126.200 +782 133.200 +782 156.500 +782 217.400 +783 52.500 +783 125.600 +783 132.200 +783 154.100 +784 68.900 +784 131.300 +784 158.200 +784 215.600 +785 122.700 +785 244.300 +786 81.500 +786 119.800 +786 130.700 +786 142.800 +787 118.400 +788 82.600 +788 123.600 +788 157.700 +788 217.400 +789 59.100 +789 72.400 +789 123.400 +789 144.100 +789 247.100 +790 120.100 +790 143.300 +790 202.400 +790 265.400 +791 111.900 +791 121.700 +791 157.400 +791 269.000 +792 60.900 +792 70.400 +792 107.900 +792 123.600 +792 142.500 +792 269.200 +793 82.700 +793 118.900 +793 133.000 +793 174.300 +794 97.000 +794 122.200 +794 158.000 +794 216.200 +795 68.600 +795 97.300 +795 124.000 +795 144.400 +796 59.200 +797 68.500 +797 82.700 +797 132.200 +797 159.300 +797 188.200 +797 217.500 +798 82.000 +798 120.000 +798 132.500 +798 197.700 +799 67.100 +799 122.700 +799 157.800 +799 247.000 +800 53.600 +800 123.100 +800 248.000 +801 70.300 +801 114.200 +801 123.900 +801 143.400 +801 214.100 +802 52.400 +802 108.500 +802 121.500 +802 126.800 +802 141.800 +802 174.500 +802 193.200 +802 247.600 +802 277.600 +803 82.400 +803 143.700 +804 110.700 +804 122.300 +804 144.000 +805 110.500 +805 132.000 +806 51.300 +806 82.700 +806 122.500 +806 143.700 +806 158.000 +807 68.600 +807 122.400 +807 144.700 +807 174.200 +808 68.800 +808 121.700 +808 157.500 +810 123.100 +810 218.000 +810 246.600 +810 297.200 +811 51.400 +811 64.100 +811 120.500 +811 133.000 +811 244.500 +812 67.500 +812 123.500 +812 157.200 +812 246.600 +812 270.300 +812 288.200 +813 129.400 +813 143.300 +813 217.800 +814 53.000 +814 96.600 +814 123.600 +814 265.000 +814 288.100 +815 81.900 +815 111.000 +815 117.600 +815 155.900 +815 180.400 +816 60.200 +816 157.200 +816 175.300 +816 267.700 +817 52.700 +817 81.500 +817 97.700 +817 121.800 +817 133.400 +817 156.100 +817 231.000 +817 247.600 +817 265.800 +818 81.600 +818 120.400 +818 144.200 +818 247.700 +819 51.100 +819 121.900 +819 140.800 +819 244.400 +819 269.700 +820 52.200 +820 120.700 +820 246.500 +820 267.500 +821 53.900 +821 121.000 +821 157.900 +821 247.300 +822 51.600 +822 70.000 +822 121.100 +822 174.600 +822 286.400 +823 120.300 +823 156.900 +823 247.800 +823 296.700 +824 122.300 +824 247.100 +825 52.300 +825 68.800 +825 119.100 +825 132.100 +825 157.600 +825 174.800 +825 230.100 +825 266.800 +825 287.500 +826 61.300 +826 82.100 +826 96.900 +826 121.300 +826 131.700 +826 157.500 +826 231.500 +826 290.000 +827 52.200 +827 132.000 +827 232.100 +827 281.700 +828 71.700 +828 123.200 +828 133.300 +828 157.100 +828 203.900 +828 217.200 +829 52.500 +829 121.700 +829 132.900 +829 174.700 +829 217.700 +830 60.000 +830 97.600 +830 122.800 +830 185.900 +830 217.400 +830 295.500 +831 143.700 +831 216.900 +832 56.400 +832 122.200 +832 141.000 +832 157.600 +832 173.900 +832 248.200 +833 52.000 +833 108.400 +833 123.700 +833 143.400 +833 175.700 +834 68.300 +834 119.700 +834 158.900 +835 81.700 +835 122.500 +835 267.800 +836 60.500 +836 118.600 +836 144.200 +837 59.900 +837 108.800 +837 156.400 +837 185.000 +837 247.400 +838 53.400 +838 96.700 +838 122.300 +838 265.500 +839 52.000 +839 123.500 +839 142.100 +839 158.000 +839 241.800 +839 288.800 +840 50.900 +840 81.400 +840 143.600 +840 171.300 +841 51.700 +841 117.900 +841 137.600 +841 247.100 +841 268.300 +842 69.000 +842 123.700 +842 134.600 +842 158.000 +842 185.900 +842 217.300 +842 267.500 +843 97.600 +843 121.800 +843 232.200 +844 57.200 +845 81.400 +845 120.800 +845 197.400 +845 216.400 +845 287.600 +846 54.600 +846 123.200 +846 158.200 +847 52.100 +847 67.100 +847 121.900 +847 159.000 +847 214.700 +847 247.400 +848 96.500 +848 123.400 +848 174.300 +848 215.900 +848 247.500 +848 267.400 +849 62.800 +849 82.100 +849 109.200 +849 124.300 +849 133.200 +849 157.600 +849 174.600 +849 267.700 +850 248.300 +850 265.400 +851 52.400 +851 97.400 +851 119.100 +851 142.900 +851 158.600 +851 232.000 +852 51.600 +852 81.300 +852 121.300 +852 132.400 +852 156.700 +852 217.800 +852 247.300 +853 115.400 +853 143.900 +854 70.100 +854 110.700 +854 121.400 +854 132.400 +854 158.900 +854 231.900 +854 265.500 +855 69.100 +855 108.100 +855 113.900 +855 133.200 +855 157.400 +855 231.500 +855 267.900 +856 54.500 +856 83.100 +856 131.900 +856 158.000 +856 247.000 +857 56.900 +857 110.100 +857 141.800 +857 248.200 +858 70.900 +858 96.700 +858 123.400 +858 143.800 +859 62.600 +859 124.300 +859 264.900 +860 82.000 +860 123.800 +861 81.300 +861 119.700 +861 157.300 +861 194.700 +861 264.700 +862 52.100 +862 68.200 +862 129.600 +862 265.000 +863 54.600 +863 97.500 +863 122.200 +863 142.900 +863 215.500 +863 269.200 +864 60.300 +864 82.400 +864 116.800 +864 131.100 +864 157.400 +865 53.900 +865 123.500 +865 143.500 +865 269.300 +865 276.700 +866 116.700 +866 132.500 +866 158.100 +866 246.700 +867 50.100 +867 82.500 +867 97.400 +867 143.500 +867 188.700 +867 247.000 +868 58.600 +868 84.000 +868 121.300 +868 189.300 +868 215.700 +868 231.900 +869 60.100 +869 122.500 +869 157.400 +870 69.600 +870 82.200 +870 122.400 +870 157.200 +870 173.900 +870 231.200 +870 267.700 +871 56.600 +871 122.100 +871 230.900 +871 243.800 +872 68.500 +872 132.500 +872 144.400 +872 232.300 +872 247.100 +873 69.400 +873 113.400 +873 131.500 +873 157.900 +873 201.000 +875 53.400 +875 107.800 +875 123.200 +875 217.200 +875 289.500 +876 52.500 +876 82.500 +876 113.600 +876 122.900 +876 171.500 +877 53.200 +877 108.700 +877 144.600 +877 231.100 +878 122.100 +878 216.900 +879 56.200 +879 82.300 +879 93.700 +879 119.000 +879 157.300 +879 247.800 +880 52.800 +880 120.800 +880 173.200 +880 232.000 +880 298.500 +881 70.400 +881 155.700 +881 247.900 +882 122.100 +882 143.600 +882 269.500 +883 123.400 +883 231.200 +884 122.500 +884 267.300 +885 60.700 +885 121.600 +885 143.600 +885 266.500 +886 123.400 +886 157.600 +886 247.400 +887 53.200 +887 81.600 +887 119.900 +887 144.000 +887 158.800 +887 216.700 +887 231.700 +888 61.300 +888 82.500 +888 120.500 +888 131.200 +889 58.000 +889 119.100 +889 132.200 +889 157.700 +889 298.900 +890 72.000 +890 95.900 +890 156.600 +890 231.600 +890 267.000 +891 142.700 +891 290.000 +892 117.900 +893 52.600 +893 132.700 +893 246.100 +894 53.500 +894 65.200 +894 157.800 +894 247.800 +895 54.900 +895 121.800 +895 132.900 +895 157.200 +895 217.400 +895 268.000 +896 59.000 +896 135.900 +896 159.700 +896 188.600 +896 216.100 +896 218.500 +897 57.600 +897 70.300 +897 124.500 +897 143.900 +897 174.400 +897 247.200 +897 269.000 +898 130.800 +898 142.900 +898 231.500 +898 267.100 +899 52.500 +899 61.900 +899 76.900 +899 287.000 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_6_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_6_i_pop.dat new file mode 100644 index 000000000..b4877d2fc --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_6_i_pop.dat @@ -0,0 +1,1040 @@ +sender time_ms +900 60.500 +900 72.200 +900 82.100 +900 96.000 +900 131.500 +900 184.900 +900 204.200 +900 229.000 +901 61.300 +901 110.100 +901 122.800 +901 158.300 +901 217.600 +901 269.200 +902 82.700 +902 110.500 +902 123.400 +902 144.300 +902 247.000 +902 268.900 +903 115.300 +903 130.000 +903 144.500 +903 157.300 +904 69.600 +904 122.500 +904 171.900 +905 72.800 +905 121.800 +905 132.500 +905 157.100 +905 246.800 +906 67.800 +906 114.500 +906 128.000 +906 144.700 +906 157.600 +906 216.000 +906 267.000 +907 52.200 +907 96.700 +907 122.500 +907 157.900 +907 247.200 +907 277.200 +908 82.600 +908 157.500 +908 186.100 +908 267.300 +909 65.900 +909 97.400 +909 121.500 +909 131.800 +909 157.900 +909 174.800 +910 121.200 +910 155.400 +910 231.300 +910 267.000 +911 132.100 +912 95.300 +912 123.300 +912 136.600 +912 158.100 +912 216.200 +912 267.100 +913 82.300 +913 123.000 +913 144.500 +913 269.100 +914 60.400 +914 109.000 +914 123.800 +914 135.900 +914 171.300 +915 82.100 +915 121.600 +915 128.400 +915 140.400 +916 70.200 +916 123.000 +916 143.200 +916 158.200 +916 266.200 +917 52.000 +917 97.300 +917 143.500 +917 246.200 +918 53.200 +918 122.800 +919 73.000 +919 82.600 +919 118.000 +919 133.000 +919 196.800 +919 217.100 +920 60.200 +920 122.100 +920 143.300 +920 158.000 +921 54.300 +921 82.000 +921 119.600 +921 130.300 +921 158.900 +921 247.700 +921 290.200 +922 54.100 +922 79.200 +922 114.500 +922 123.000 +922 144.000 +923 117.700 +923 143.700 +923 174.900 +924 123.200 +924 134.100 +924 264.400 +925 52.100 +925 68.200 +925 122.100 +925 278.900 +926 132.100 +926 158.900 +926 244.700 +927 51.100 +927 60.700 +927 110.800 +927 133.300 +927 154.800 +927 216.700 +928 109.000 +928 123.000 +928 157.300 +928 246.900 +929 83.100 +929 122.800 +929 174.500 +929 264.800 +930 97.500 +930 120.600 +930 144.200 +930 158.000 +931 59.100 +931 81.900 +931 122.100 +931 143.800 +931 217.500 +932 69.100 +932 122.300 +932 138.200 +932 246.000 +932 288.200 +933 69.800 +933 117.600 +933 174.700 +933 216.400 +934 56.800 +934 123.500 +934 157.800 +934 247.200 +934 295.300 +935 82.300 +935 287.400 +936 119.600 +936 143.900 +936 247.500 +937 52.400 +937 70.200 +937 121.100 +937 138.200 +937 174.300 +937 248.200 +938 122.000 +938 144.000 +938 185.100 +938 286.900 +939 68.900 +939 96.200 +939 230.800 +940 68.900 +940 122.500 +940 136.500 +940 158.100 +940 198.000 +940 267.000 +941 122.300 +941 155.500 +941 247.200 +942 69.300 +942 97.300 +942 111.000 +942 133.600 +942 157.300 +942 247.500 +943 58.900 +943 109.100 +943 143.000 +943 247.700 +944 52.500 +944 115.800 +944 158.100 +944 247.200 +944 287.500 +945 52.300 +945 68.700 +945 122.400 +945 140.500 +945 158.100 +945 265.200 +946 60.100 +946 115.400 +946 287.200 +947 59.900 +947 97.100 +947 130.800 +947 175.100 +947 241.400 +948 57.200 +948 122.000 +948 287.700 +949 60.300 +949 82.600 +949 122.400 +949 133.000 +949 217.000 +950 52.100 +950 70.400 +950 122.200 +950 142.200 +950 244.100 +950 248.000 +951 120.000 +951 136.700 +951 157.600 +951 247.700 +951 287.200 +952 61.500 +952 104.400 +952 110.900 +952 144.200 +952 246.600 +953 82.500 +953 119.000 +953 127.300 +953 138.000 +954 53.100 +954 67.800 +954 156.200 +954 173.500 +955 52.200 +955 91.500 +955 123.200 +955 143.700 +955 213.800 +955 247.900 +955 288.700 +956 110.700 +956 123.900 +956 133.900 +956 247.000 +956 267.500 +957 53.200 +957 70.100 +957 123.600 +957 158.200 +958 114.200 +958 123.600 +958 130.100 +958 157.400 +959 63.200 +959 117.100 +959 157.600 +959 174.400 +959 247.500 +959 267.500 +960 60.500 +960 82.800 +960 107.700 +960 123.100 +960 133.400 +960 143.900 +960 157.700 +960 188.700 +960 247.500 +961 50.800 +961 123.300 +961 247.100 +962 53.000 +962 63.000 +962 115.100 +962 132.500 +962 157.200 +963 82.400 +963 110.900 +963 117.200 +963 136.300 +963 170.700 +963 187.400 +963 283.400 +964 118.500 +964 131.900 +964 268.400 +965 63.000 +965 122.700 +966 67.600 +966 108.200 +966 158.300 +967 82.700 +967 121.900 +967 196.900 +967 217.700 +967 265.600 +968 96.600 +968 131.900 +968 217.500 +968 267.800 +969 59.100 +969 84.100 +969 107.900 +969 134.300 +969 143.900 +969 204.300 +969 216.500 +969 267.500 +969 288.600 +970 82.700 +970 119.400 +970 188.900 +970 216.300 +970 267.300 +971 52.400 +971 122.900 +971 138.700 +971 173.800 +971 232.000 +971 288.900 +972 68.600 +972 96.000 +972 130.500 +973 60.400 +973 108.100 +973 131.900 +973 268.700 +974 51.500 +974 116.200 +974 133.700 +974 155.900 +974 217.200 +974 247.000 +974 287.100 +975 122.900 +975 142.000 +975 278.500 +976 60.500 +976 97.100 +976 121.400 +976 158.100 +976 174.700 +976 247.100 +976 267.000 +977 51.000 +977 80.800 +977 108.400 +977 123.800 +977 140.000 +977 158.000 +977 231.700 +978 60.800 +978 121.100 +978 144.400 +978 173.900 +978 188.900 +978 217.200 +978 247.000 +978 287.900 +979 52.800 +979 81.200 +979 115.200 +979 143.500 +979 247.300 +980 123.500 +980 142.600 +980 244.300 +981 69.700 +981 97.700 +981 123.000 +981 140.300 +981 216.200 +982 60.900 +982 130.700 +982 158.200 +982 175.400 +982 247.200 +983 51.900 +983 71.400 +983 109.900 +983 122.600 +983 157.400 +983 202.900 +983 247.200 +983 267.100 +984 96.000 +984 113.800 +984 123.900 +984 158.100 +984 217.800 +985 53.800 +985 123.300 +985 218.000 +986 96.300 +986 123.100 +986 217.000 +986 269.000 +986 289.000 +987 60.500 +987 122.700 +988 52.400 +988 68.700 +988 107.900 +988 119.500 +989 82.100 +989 123.200 +989 144.300 +990 82.400 +990 123.200 +991 82.600 +991 115.000 +991 132.100 +991 158.100 +991 216.700 +991 267.300 +992 123.500 +993 59.900 +993 121.500 +993 247.200 +993 276.100 +994 77.300 +994 143.400 +994 203.000 +994 229.400 +994 267.100 +995 82.300 +995 102.400 +995 117.400 +995 267.000 +996 232.300 +997 51.100 +997 118.500 +997 158.100 +997 194.000 +997 288.400 +998 61.000 +998 72.800 +998 94.700 +998 114.500 +998 131.300 +998 155.200 +998 174.300 +998 202.500 +998 217.100 +998 247.600 +998 288.800 +999 70.300 +999 122.900 +999 142.900 +999 156.900 +999 247.300 +1000 80.100 +1000 130.900 +1000 157.100 +1001 119.900 +1001 143.900 +1001 210.700 +1001 268.500 +1002 53.000 +1002 123.700 +1002 157.200 +1002 247.600 +1002 286.000 +1003 51.200 +1003 60.700 +1003 82.500 +1003 141.900 +1003 187.400 +1003 267.500 +1004 52.300 +1004 115.400 +1004 231.800 +1004 267.300 +1005 50.200 +1005 59.800 +1005 97.000 +1005 123.900 +1005 129.400 +1005 173.800 +1005 288.300 +1006 68.700 +1006 124.100 +1006 157.700 +1006 267.100 +1007 80.800 +1007 122.000 +1008 117.100 +1008 157.800 +1008 217.500 +1008 247.800 +1009 72.400 +1009 121.600 +1009 138.000 +1009 155.100 +1009 247.300 +1010 71.800 +1010 82.500 +1010 116.500 +1010 131.700 +1010 143.800 +1010 215.200 +1010 227.800 +1011 157.900 +1011 216.900 +1011 247.100 +1012 53.600 +1012 115.400 +1012 157.200 +1012 268.200 +1013 69.300 +1013 123.200 +1013 203.800 +1013 247.500 +1014 82.700 +1014 115.600 +1014 142.100 +1014 158.000 +1014 187.800 +1014 215.400 +1015 52.500 +1015 109.900 +1015 128.800 +1015 157.900 +1015 216.500 +1016 82.300 +1016 123.500 +1016 143.300 +1016 158.000 +1016 230.100 +1016 265.100 +1017 51.800 +1017 80.200 +1017 119.200 +1017 267.200 +1018 75.800 +1018 111.100 +1018 120.600 +1018 133.400 +1018 157.700 +1018 183.800 +1018 198.100 +1018 248.000 +1019 81.500 +1019 109.500 +1019 144.500 +1019 231.800 +1020 59.500 +1020 95.400 +1020 118.000 +1020 141.700 +1020 154.000 +1020 217.300 +1020 267.500 +1021 59.100 +1021 96.500 +1021 121.600 +1021 132.800 +1021 157.900 +1021 246.400 +1021 267.000 +1021 286.800 +1022 53.100 +1022 67.000 +1022 119.600 +1022 144.200 +1022 157.800 +1023 60.000 +1023 110.300 +1023 132.800 +1023 144.300 +1024 59.800 +1024 121.400 +1024 157.900 +1025 53.000 +1025 140.300 +1025 217.400 +1025 263.600 +1026 58.100 +1026 119.800 +1026 144.500 +1026 267.600 +1027 69.100 +1027 113.300 +1027 132.400 +1027 155.500 +1027 216.000 +1027 246.200 +1028 52.000 +1028 120.400 +1028 136.800 +1028 158.100 +1029 53.600 +1029 118.300 +1029 132.100 +1029 157.700 +1030 59.500 +1030 124.100 +1030 138.400 +1030 157.100 +1030 248.300 +1030 283.600 +1031 78.600 +1031 132.000 +1031 157.400 +1031 244.400 +1032 78.000 +1032 121.200 +1032 190.300 +1032 232.200 +1032 267.600 +1032 286.700 +1033 54.400 +1033 122.000 +1033 143.700 +1033 195.100 +1033 268.000 +1034 121.600 +1034 132.800 +1034 217.700 +1034 231.100 +1034 288.300 +1035 97.100 +1035 130.600 +1035 158.900 +1035 217.500 +1035 231.700 +1036 82.500 +1036 122.300 +1036 129.000 +1036 134.100 +1036 158.300 +1037 59.000 +1037 143.700 +1037 286.500 +1038 123.400 +1038 157.000 +1039 142.900 +1040 70.400 +1040 157.900 +1041 116.800 +1041 132.300 +1041 158.500 +1041 248.100 +1042 143.600 +1043 70.800 +1043 107.500 +1043 123.600 +1044 123.600 +1044 157.400 +1045 96.600 +1045 123.800 +1046 265.600 +1047 52.000 +1047 79.700 +1047 113.600 +1047 122.700 +1047 265.600 +1047 288.200 +1048 118.700 +1048 246.700 +1049 82.600 +1049 118.900 +1049 129.800 +1050 51.100 +1050 120.900 +1050 157.800 +1051 97.500 +1051 119.300 +1051 128.200 +1051 144.200 +1051 158.100 +1051 247.200 +1051 267.000 +1052 52.700 +1052 131.100 +1052 158.000 +1052 265.200 +1053 53.600 +1053 111.900 +1053 144.100 +1053 188.100 +1054 52.500 +1054 115.100 +1054 123.300 +1055 60.400 +1055 133.100 +1055 156.200 +1055 174.700 +1055 268.700 +1056 82.600 +1056 108.300 +1056 132.300 +1056 157.700 +1056 232.100 +1056 287.700 +1057 50.100 +1057 59.700 +1057 123.300 +1058 59.200 +1058 116.600 +1058 131.100 +1058 155.500 +1058 173.800 +1058 248.100 +1059 60.500 +1059 82.000 +1059 108.100 +1059 129.700 +1059 143.600 +1059 213.300 +1059 227.900 +1060 61.500 +1060 120.500 +1060 130.500 +1061 120.000 +1061 142.800 +1061 158.400 +1061 269.800 +1062 59.100 +1062 124.100 +1062 133.300 +1062 153.700 +1062 231.900 +1062 267.700 +1063 81.200 +1063 122.500 +1063 138.800 +1063 232.200 +1063 265.200 +1064 70.300 +1064 157.500 +1064 180.800 +1064 202.700 +1064 231.100 +1064 243.900 +1064 265.200 +1065 71.800 +1065 96.400 +1065 130.700 +1065 144.300 +1065 247.000 +1066 50.100 +1066 68.700 +1066 109.400 +1066 122.700 +1066 132.800 +1066 143.800 +1066 158.100 +1066 185.100 +1066 217.800 +1066 277.000 +1067 60.300 +1067 119.400 +1067 144.000 +1067 217.900 +1067 267.400 +1068 58.200 +1068 111.500 +1068 121.900 +1068 137.500 +1068 159.000 +1068 267.200 +1069 96.900 +1069 134.700 +1069 215.800 +1070 52.600 +1070 121.400 +1070 134.500 +1070 157.600 +1070 216.700 +1071 52.800 +1071 123.300 +1071 187.600 +1071 246.600 +1072 59.000 +1072 122.100 +1072 158.400 +1072 247.800 +1073 58.100 +1073 84.100 +1073 96.500 +1073 119.900 +1073 157.300 +1073 215.900 +1073 285.900 +1074 67.900 +1074 122.100 +1074 171.600 +1074 230.600 +1075 57.000 +1075 94.300 +1075 114.900 +1075 132.300 +1075 156.800 +1075 217.500 +1076 66.800 +1076 82.000 +1076 122.400 +1076 157.900 +1076 216.800 +1076 266.800 +1077 59.400 +1077 116.000 +1077 133.000 +1078 97.400 +1078 115.300 +1078 130.100 +1078 143.900 +1078 269.100 +1079 69.600 +1079 97.100 +1079 113.000 +1079 122.700 +1079 157.800 +1079 267.100 +1079 288.100 +1080 60.800 +1080 120.500 +1080 134.900 +1080 158.100 +1080 230.300 +1081 59.200 +1081 72.700 +1081 119.600 +1081 287.800 +1082 60.600 +1082 77.900 +1082 121.800 +1082 143.800 +1082 247.200 +1083 132.700 +1083 247.100 +1084 247.600 +1085 82.700 +1085 133.500 +1085 215.700 +1085 267.600 +1085 299.800 +1086 120.200 +1086 158.100 +1086 213.900 +1086 248.000 +1086 266.000 +1087 58.000 +1087 82.300 +1087 108.000 +1087 122.000 +1087 143.800 +1087 176.300 +1087 246.400 +1088 121.400 +1088 157.900 +1088 247.200 +1089 72.300 +1089 115.400 +1089 157.000 +1089 202.800 +1089 247.600 +1090 59.200 +1090 81.900 +1090 110.800 +1090 118.900 +1090 143.700 +1090 248.100 +1090 288.900 +1091 109.300 +1091 119.700 +1091 143.600 +1091 158.000 +1091 202.600 +1091 265.200 +1091 297.600 +1092 96.100 +1092 121.500 +1092 157.500 +1092 248.000 +1093 60.500 +1093 123.200 +1093 156.900 +1093 218.200 +1094 58.900 +1094 78.800 +1094 132.900 +1094 143.100 +1094 267.200 +1095 81.000 +1095 97.600 +1095 120.400 +1095 157.100 +1095 232.000 +1095 247.400 +1096 56.300 +1096 82.800 +1096 131.100 +1096 175.600 +1096 266.000 +1097 59.300 +1097 82.200 +1097 95.000 +1097 130.700 +1097 154.600 +1097 216.600 +1097 269.200 +1098 110.300 +1098 128.400 +1098 214.900 +1098 248.000 +1099 118.400 +1099 133.000 +1099 157.800 +1099 200.700 +1099 267.000 +1100 53.000 +1100 118.800 +1100 131.000 +1100 143.500 +1100 158.000 +1100 174.700 +1100 267.000 +1101 60.700 +1101 125.600 +1101 143.600 +1101 171.800 +1102 50.100 +1102 81.800 +1102 118.700 +1102 157.000 +1102 175.600 +1102 264.800 +1102 287.500 +1103 69.200 +1103 120.900 +1104 54.000 +1104 156.800 +1104 268.900 +1105 96.800 +1105 136.000 +1105 158.000 +1105 269.200 +1106 144.600 +1106 175.800 +1106 231.900 +1106 267.500 +1107 68.700 +1107 121.500 +1107 141.900 +1107 267.500 +1108 132.900 +1109 52.700 +1109 122.800 +1109 130.300 +1109 157.000 +1110 59.300 +1110 81.800 +1110 115.700 +1110 131.500 +1110 156.600 +1111 58.400 +1111 133.600 +1111 154.900 +1111 244.200 +1112 60.800 +1112 122.900 +1112 133.200 +1113 50.500 +1113 97.200 +1113 110.800 +1113 121.900 +1113 132.900 +1113 157.500 +1113 174.700 +1113 231.400 +1113 288.800 +1114 156.700 +1114 174.000 +1114 265.400 +1115 68.600 +1115 118.200 +1115 126.900 +1115 143.500 +1116 52.800 +1116 114.100 +1116 143.900 +1116 247.200 +1117 52.900 +1117 70.600 +1118 97.700 +1118 126.400 +1118 142.800 +1118 248.300 +1119 51.600 +1119 94.300 +1119 122.100 +1119 144.700 +1119 217.900 +1119 287.700 +1120 58.000 +1120 110.200 +1120 122.700 +1120 157.800 +1120 247.400 +1121 121.300 +1121 133.700 +1121 186.000 +1121 217.200 +1121 276.800 +1122 51.400 +1122 95.600 +1122 115.800 +1122 123.800 +1122 144.000 +1122 217.000 +1122 246.100 +1122 283.500 +1123 68.300 +1123 122.000 +1123 157.100 +1123 197.400 +1124 70.200 +1124 121.900 +1124 130.700 +1124 246.600 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_7_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_7_e_pop.dat new file mode 100644 index 000000000..7d7e13fc2 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_7_e_pop.dat @@ -0,0 +1,1677 @@ +sender time_ms +2 143.400 +2 247.300 +3 143.500 +3 265.400 +4 267.400 +7 218.200 +8 267.400 +9 143.300 +9 286.700 +10 247.600 +11 158.000 +11 267.800 +12 243.800 +13 248.200 +13 287.700 +14 83.000 +14 132.500 +15 97.000 +15 131.800 +15 155.500 +15 231.000 +17 248.200 +17 287.500 +18 158.300 +18 243.900 +19 108.700 +19 174.100 +19 241.200 +19 265.300 +20 158.100 +20 231.100 +21 244.700 +21 265.400 +22 217.500 +23 141.900 +23 216.500 +23 246.500 +23 267.200 +25 122.800 +25 157.900 +26 140.100 +26 246.900 +28 246.800 +28 278.800 +29 269.100 +29 282.900 +30 267.200 +31 123.200 +31 158.100 +31 230.500 +32 267.000 +32 278.100 +33 284.100 +34 144.500 +34 276.800 +34 286.800 +36 176.400 +36 187.600 +36 218.100 +36 247.400 +36 267.100 +37 122.700 +37 144.400 +37 246.800 +38 158.000 +39 95.400 +39 132.300 +39 143.800 +39 246.700 +39 267.700 +40 123.500 +40 143.400 +41 83.300 +41 157.800 +41 264.900 +42 96.500 +42 143.600 +42 244.500 +42 267.200 +43 144.500 +43 216.300 +43 230.700 +44 144.800 +44 243.200 +44 269.600 +45 143.900 +46 59.000 +46 83.300 +46 247.400 +46 267.100 +47 268.300 +48 215.600 +48 247.100 +48 269.500 +50 83.100 +51 247.500 +51 269.000 +51 286.300 +54 60.200 +54 202.700 +55 134.700 +55 158.200 +55 246.100 +56 132.600 +56 158.400 +57 60.500 +58 244.200 +58 268.600 +59 157.800 +59 176.300 +59 246.800 +59 279.200 +60 59.800 +60 97.200 +60 136.200 +60 144.600 +60 247.100 +61 204.300 +64 269.000 +65 58.900 +65 153.800 +65 247.000 +65 267.500 +66 95.000 +66 124.300 +66 247.200 +66 267.600 +67 82.800 +67 157.900 +67 243.800 +67 267.600 +69 144.300 +70 57.000 +70 83.300 +70 123.800 +70 144.300 +70 174.100 +70 267.100 +70 281.600 +71 83.400 +71 107.900 +71 144.300 +71 267.400 +72 82.000 +72 267.700 +73 143.000 +73 248.100 +74 56.900 +74 144.400 +74 268.800 +74 287.400 +75 267.400 +76 157.600 +76 202.000 +76 245.900 +76 269.700 +76 287.600 +78 159.100 +79 97.100 +79 217.000 +80 82.400 +81 70.900 +81 123.300 +81 248.200 +82 95.100 +82 202.900 +82 218.100 +82 247.700 +82 267.300 +83 265.000 +84 144.400 +84 231.700 +84 247.500 +85 82.400 +85 144.100 +85 203.200 +88 245.600 +91 246.900 +92 144.100 +92 267.000 +93 143.500 +94 123.100 +94 267.300 +96 108.900 +96 247.000 +97 96.900 +99 158.500 +99 247.600 +100 83.200 +100 267.400 +101 57.100 +101 122.900 +101 144.400 +102 110.100 +102 134.100 +102 265.100 +103 144.300 +106 247.900 +106 283.800 +107 83.500 +107 142.800 +107 247.500 +107 267.300 +108 211.800 +108 227.800 +109 111.800 +109 156.400 +109 176.000 +109 231.200 +110 267.100 +112 247.400 +113 287.500 +114 203.400 +114 245.300 +114 267.200 +115 174.400 +115 244.700 +116 60.700 +116 123.000 +116 154.200 +116 247.200 +118 174.600 +118 247.300 +118 267.300 +119 157.600 +120 267.300 +121 122.600 +121 158.400 +122 143.700 +122 244.300 +123 185.700 +123 247.600 +124 58.800 +124 143.200 +124 240.500 +124 267.600 +125 267.600 +125 283.600 +126 154.500 +126 247.100 +126 269.100 +126 287.400 +127 107.600 +127 217.000 +128 96.700 +128 267.600 +129 268.600 +130 247.600 +132 265.600 +133 267.800 +134 84.200 +134 123.900 +135 97.400 +135 112.800 +135 131.400 +135 157.900 +135 201.300 +135 265.100 +135 287.900 +136 83.400 +137 97.600 +138 143.700 +139 231.900 +140 156.200 +140 248.200 +140 267.200 +141 52.500 +141 83.200 +141 131.400 +141 155.200 +141 231.700 +141 267.300 +142 159.100 +142 269.100 +143 174.200 +143 246.900 +143 267.700 +144 83.000 +144 97.500 +144 159.300 +144 247.000 +146 248.300 +147 248.200 +148 144.700 +149 97.500 +149 215.900 +149 246.900 +150 69.700 +150 84.000 +150 145.200 +150 283.400 +151 83.100 +151 143.800 +151 204.200 +151 267.500 +151 288.300 +152 265.200 +153 267.700 +155 247.100 +156 248.000 +157 247.600 +157 268.000 +158 96.000 +158 136.300 +158 144.800 +158 157.800 +158 267.600 +159 143.700 +160 185.400 +160 247.400 +164 157.500 +164 267.400 +165 110.700 +165 266.100 +166 58.100 +166 83.200 +166 115.000 +166 143.900 +167 215.600 +168 268.300 +169 97.600 +169 267.400 +170 83.200 +170 133.000 +172 247.300 +175 247.300 +176 283.700 +177 247.200 +178 141.700 +178 247.500 +178 267.600 +179 60.700 +179 247.100 +180 247.600 +181 110.700 +181 130.800 +182 82.800 +182 132.500 +182 159.200 +182 267.000 +183 247.400 +183 267.400 +184 83.500 +184 108.800 +184 158.400 +184 268.600 +185 97.200 +185 247.000 +186 216.100 +187 245.200 +187 296.400 +188 59.400 +188 118.800 +188 286.400 +189 73.800 +189 83.300 +189 247.600 +189 287.300 +190 268.900 +191 82.900 +191 136.700 +191 243.500 +192 143.700 +192 228.600 +194 265.100 +195 248.100 +196 123.500 +196 287.100 +197 69.300 +197 267.400 +198 267.200 +199 111.100 +199 157.700 +199 245.900 +199 265.100 +200 143.700 +200 216.800 +200 248.200 +200 267.100 +201 123.600 +201 248.000 +202 83.400 +202 269.100 +203 157.500 +203 267.800 +204 231.100 +204 267.100 +205 267.400 +206 243.900 +207 96.800 +207 244.200 +207 281.500 +209 231.800 +209 267.500 +210 244.400 +210 265.200 +211 158.000 +211 226.300 +211 247.400 +211 267.500 +212 217.600 +212 269.300 +213 267.400 +214 82.800 +214 175.400 +215 267.400 +216 83.300 +216 144.500 +217 69.300 +218 213.900 +218 228.900 +218 246.000 +220 60.400 +220 197.700 +220 247.500 +221 248.100 +222 157.800 +223 123.800 +223 144.200 +223 247.800 +223 275.800 +224 269.000 +225 53.500 +225 158.500 +225 217.800 +225 267.400 +228 247.200 +229 215.900 +229 246.700 +230 97.400 +230 246.900 +231 267.700 +232 110.500 +232 268.700 +233 244.500 +234 82.700 +234 143.900 +235 267.700 +236 217.200 +237 96.500 +238 83.300 +238 144.300 +239 231.000 +240 83.300 +240 122.900 +240 157.800 +240 218.100 +240 244.500 +241 123.100 +241 230.200 +241 267.400 +242 83.200 +242 174.900 +243 108.000 +243 246.900 +243 267.000 +244 143.800 +244 244.700 +244 268.200 +245 144.500 +246 156.900 +246 267.400 +247 141.600 +247 246.900 +248 174.600 +248 247.700 +249 231.500 +249 265.600 +250 59.700 +250 247.000 +250 265.200 +251 231.300 +252 217.000 +252 247.700 +253 142.900 +254 97.000 +254 143.500 +254 215.900 +255 247.300 +256 60.600 +256 185.400 +256 248.300 +256 267.700 +256 298.200 +257 267.600 +258 267.800 +260 52.300 +260 83.500 +260 157.600 +260 267.500 +261 268.400 +262 156.200 +262 184.600 +262 247.800 +262 269.400 +263 247.500 +264 52.900 +264 247.600 +264 269.100 +265 83.000 +265 157.800 +265 267.200 +266 82.400 +266 217.400 +266 247.000 +267 156.700 +267 174.600 +267 266.600 +268 218.400 +271 268.400 +272 157.800 +272 267.200 +274 143.500 +274 247.400 +275 247.500 +276 267.400 +277 108.800 +278 107.700 +278 131.200 +278 144.400 +278 247.500 +279 248.300 +280 174.500 +281 139.000 +281 269.700 +282 245.200 +283 157.900 +283 217.500 +283 287.700 +284 230.900 +284 282.200 +285 141.200 +285 246.800 +285 267.300 +285 278.300 +287 83.600 +287 143.600 +287 173.700 +287 247.100 +288 82.500 +288 122.900 +288 143.900 +288 174.300 +288 247.300 +288 268.000 +291 158.100 +292 124.200 +292 268.800 +293 217.600 +294 139.500 +295 53.000 +295 83.300 +295 123.600 +295 134.900 +295 247.400 +295 266.900 +296 144.200 +296 158.100 +297 247.300 +298 247.500 +299 83.300 +299 137.800 +299 174.300 +299 216.800 +299 247.000 +301 83.700 +301 247.400 +301 284.400 +302 247.800 +304 247.600 +305 97.200 +305 267.500 +306 268.900 +306 287.200 +307 83.300 +307 110.600 +307 268.300 +309 59.200 +309 83.200 +309 123.900 +309 244.700 +310 159.300 +310 216.800 +311 107.700 +311 247.400 +312 83.600 +312 124.300 +312 159.100 +313 158.400 +314 59.100 +314 132.800 +314 157.000 +315 174.200 +315 247.400 +317 60.000 +317 118.600 +317 142.800 +317 267.900 +318 96.100 +318 217.800 +318 247.100 +319 107.900 +321 247.500 +323 144.300 +323 248.100 +323 281.400 +324 246.900 +324 267.300 +325 83.100 +325 157.800 +326 247.300 +327 123.600 +327 248.400 +327 288.300 +328 216.700 +329 244.100 +331 128.400 +331 144.100 +331 217.500 +331 247.600 +332 247.100 +332 287.200 +333 83.500 +333 131.700 +333 243.400 +333 266.700 +334 59.700 +334 144.400 +334 171.000 +335 109.300 +335 248.000 +335 287.600 +336 268.600 +337 134.400 +338 95.200 +338 267.400 +339 70.300 +339 83.200 +339 111.100 +339 124.400 +339 131.800 +339 157.500 +339 216.600 +339 246.500 +341 247.700 +342 70.000 +342 139.600 +342 158.000 +342 247.200 +343 144.100 +344 144.500 +344 217.100 +344 247.500 +345 245.600 +346 157.800 +347 217.700 +348 244.200 +349 267.500 +350 247.100 +350 287.300 +351 109.000 +351 247.100 +351 268.100 +353 108.200 +353 289.700 +354 83.400 +354 123.500 +354 157.900 +354 287.500 +355 110.400 +355 123.300 +355 144.600 +355 269.000 +357 267.000 +358 123.600 +358 268.300 +359 217.300 +360 217.600 +362 158.200 +362 247.200 +363 124.300 +363 267.500 +364 143.700 +365 157.500 +366 63.900 +366 83.200 +366 107.900 +366 218.300 +366 267.100 +367 123.200 +367 247.500 +370 158.200 +370 267.800 +371 144.600 +372 287.800 +373 267.600 +374 143.200 +374 246.200 +374 267.600 +375 247.000 +375 267.000 +375 288.000 +376 158.900 +376 267.600 +377 267.500 +378 68.400 +378 143.100 +378 267.900 +378 287.600 +379 287.400 +380 261.200 +380 267.500 +381 216.800 +381 248.000 +383 268.900 +384 82.900 +384 247.500 +384 267.600 +385 246.900 +387 82.300 +387 265.400 +388 132.500 +388 247.700 +389 247.300 +390 70.200 +390 144.300 +390 247.300 +391 83.700 +391 247.600 +392 158.000 +392 242.600 +392 247.400 +393 157.700 +394 83.800 +394 267.200 +395 278.000 +396 232.100 +396 269.200 +397 247.600 +398 108.200 +398 231.000 +398 243.100 +399 245.800 +399 268.000 +400 83.900 +400 247.400 +400 278.900 +401 108.900 +401 185.200 +401 279.600 +402 95.100 +402 158.000 +402 216.500 +402 245.100 +404 59.500 +404 158.200 +404 216.500 +404 247.400 +405 143.700 +406 69.700 +406 143.300 +406 158.100 +407 269.000 +409 81.700 +409 144.100 +409 247.000 +409 269.300 +410 122.600 +411 129.700 +411 248.000 +411 267.500 +412 247.400 +412 267.100 +413 120.900 +413 201.100 +413 248.300 +413 265.100 +414 267.300 +414 286.600 +415 286.900 +416 145.000 +416 247.200 +417 143.000 +417 157.900 +417 247.600 +419 158.500 +419 230.500 +419 287.500 +420 247.400 +423 83.300 +423 247.900 +424 83.400 +424 131.600 +424 269.000 +426 70.100 +426 267.600 +426 287.500 +428 83.300 +428 124.000 +428 247.700 +429 82.400 +429 113.900 +429 265.100 +431 247.400 +432 248.200 +432 267.200 +433 80.500 +433 123.800 +433 267.000 +434 158.300 +434 246.700 +435 144.500 +435 158.000 +435 287.000 +436 59.300 +436 144.400 +436 158.800 +437 278.400 +438 175.500 +438 286.600 +439 247.700 +439 298.500 +440 197.700 +440 267.700 +441 175.400 +441 278.000 +442 158.200 +442 246.700 +444 82.600 +444 93.900 +444 247.700 +445 82.100 +446 143.600 +447 94.200 +447 267.700 +448 247.100 +448 267.800 +448 281.000 +449 144.900 +449 157.800 +449 216.900 +449 266.900 +450 246.800 +452 247.600 +453 144.200 +453 158.300 +453 247.100 +454 93.500 +454 157.100 +454 246.800 +454 269.000 +455 83.700 +457 265.300 +459 247.500 +459 267.500 +460 158.000 +461 141.500 +461 216.700 +461 264.800 +461 283.700 +462 108.000 +462 217.700 +463 247.600 +464 128.700 +464 158.300 +466 267.700 +467 244.900 +468 83.200 +469 217.400 +469 247.800 +470 144.100 +470 267.000 +471 83.100 +471 278.900 +472 248.100 +473 248.200 +473 287.400 +474 217.400 +474 265.400 +475 197.600 +475 216.400 +476 83.100 +476 247.700 +477 108.100 +477 143.500 +477 267.100 +478 265.400 +480 247.600 +480 269.400 +481 247.400 +481 283.900 +482 267.300 +485 218.200 +486 107.800 +486 232.100 +486 247.300 +487 126.800 +487 136.900 +487 155.400 +487 286.800 +488 197.400 +489 82.900 +489 157.900 +489 247.300 +491 83.900 +491 216.500 +491 247.500 +493 83.400 +493 226.300 +493 267.200 +494 247.800 +494 267.300 +495 156.000 +495 247.300 +495 287.600 +496 82.700 +496 144.800 +497 244.700 +497 278.800 +498 247.400 +499 135.100 +499 175.800 +500 248.100 +501 144.000 +502 95.500 +502 144.000 +502 158.700 +504 132.100 +504 185.700 +505 108.200 +505 158.100 +506 247.700 +507 69.400 +507 124.100 +507 142.800 +507 157.000 +507 247.300 +508 247.200 +510 267.700 +511 143.600 +512 247.400 +512 283.700 +513 248.200 +513 287.200 +514 53.200 +514 144.600 +514 284.200 +515 83.600 +515 157.600 +515 247.000 +515 287.300 +516 97.200 +516 216.600 +516 246.300 +516 267.600 +518 247.300 +519 176.100 +519 267.500 +519 288.000 +520 197.400 +520 247.800 +522 59.300 +523 155.700 +523 247.500 +524 247.000 +524 268.300 +525 218.000 +525 247.500 +526 158.400 +526 266.900 +527 54.400 +527 218.400 +527 232.400 +529 92.300 +529 132.400 +530 129.500 +530 154.500 +532 247.100 +533 157.800 +533 248.200 +534 175.000 +534 267.900 +535 267.200 +536 115.900 +536 247.100 +538 247.500 +538 277.500 +539 83.000 +539 218.200 +540 157.900 +540 244.700 +540 278.800 +541 82.800 +541 131.100 +541 159.200 +541 247.000 +541 284.200 +542 131.100 +544 202.700 +545 60.300 +545 141.800 +545 158.200 +545 265.200 +546 143.600 +546 247.300 +547 267.700 +549 158.400 +550 216.600 +550 287.300 +551 247.700 +552 268.600 +553 83.300 +553 241.300 +553 277.200 +554 246.100 +554 267.500 +555 59.200 +555 123.600 +555 267.500 +556 157.700 +557 246.900 +558 247.700 +559 247.800 +560 68.900 +560 82.800 +560 137.300 +560 231.700 +560 248.000 +560 267.200 +561 141.300 +561 247.600 +562 94.700 +562 267.400 +564 57.500 +564 157.700 +564 201.500 +564 248.300 +564 283.600 +565 143.800 +565 218.600 +565 247.400 +567 157.900 +567 247.600 +568 83.300 +568 134.000 +568 174.600 +568 197.900 +569 83.100 +569 134.000 +569 144.300 +569 267.400 +570 244.600 +570 268.300 +572 267.200 +573 83.300 +573 143.300 +573 157.300 +575 157.900 +575 218.200 +575 288.700 +576 246.900 +577 267.500 +578 107.900 +578 245.900 +579 267.400 +581 248.000 +581 267.900 +584 248.200 +585 83.400 +585 133.100 +585 158.000 +585 185.800 +585 247.400 +585 267.400 +587 143.400 +587 247.500 +588 68.600 +588 95.100 +588 136.700 +588 216.600 +589 158.400 +589 247.200 +590 158.000 +590 243.800 +590 247.600 +593 267.400 +594 83.000 +594 247.900 +595 158.200 +596 60.500 +596 245.800 +596 267.100 +597 116.400 +598 82.200 +598 134.700 +598 145.000 +598 247.800 +598 283.400 +599 158.500 +600 287.400 +601 83.800 +602 268.900 +603 108.900 +603 278.500 +603 297.300 +604 107.900 +604 133.600 +604 217.000 +606 69.200 +606 246.700 +607 97.100 +607 158.200 +607 245.800 +608 59.800 +608 247.500 +611 247.700 +612 245.800 +612 268.900 +613 246.300 +613 267.500 +615 109.700 +615 247.300 +616 267.300 +618 124.100 +618 144.800 +618 267.100 +619 110.400 +620 155.400 +620 247.500 +621 247.200 +621 267.400 +622 158.400 +623 108.900 +623 188.400 +623 246.600 +624 217.300 +624 282.000 +626 94.000 +626 157.100 +627 111.300 +627 122.600 +627 217.700 +627 247.300 +627 267.300 +628 122.700 +628 202.100 +629 97.300 +629 175.900 +629 245.900 +629 268.400 +630 217.500 +630 247.500 +630 267.100 +631 247.500 +632 246.500 +632 267.800 +633 244.000 +634 82.800 +634 176.400 +634 203.000 +634 218.100 +635 108.800 +635 139.200 +636 96.400 +636 267.200 +638 60.500 +638 84.000 +638 133.100 +638 144.400 +638 266.900 +639 58.000 +639 123.700 +639 141.700 +639 246.900 +639 267.700 +640 157.000 +640 216.800 +641 217.000 +642 109.100 +642 144.200 +642 265.200 +643 155.900 +643 247.700 +644 247.300 +645 158.100 +645 218.200 +645 247.300 +645 278.800 +646 157.700 +646 217.300 +646 231.700 +646 247.400 +647 267.200 +648 97.400 +648 144.200 +648 267.600 +648 282.700 +650 109.100 +650 202.900 +651 247.700 +651 265.300 +652 230.200 +652 267.800 +653 90.600 +653 158.200 +653 247.800 +653 267.000 +653 287.300 +655 247.100 +656 58.600 +657 246.700 +658 247.400 +659 83.000 +659 246.700 +659 268.900 +660 247.500 +660 278.300 +661 144.100 +662 144.300 +662 265.100 +663 62.700 +663 156.800 +664 143.900 +664 247.700 +665 216.800 +665 246.700 +666 94.900 +666 122.800 +666 157.200 +666 246.900 +667 288.000 +668 216.300 +668 245.300 +668 283.200 +669 246.900 +670 247.300 +671 247.300 +673 267.700 +674 144.400 +674 268.400 +675 58.100 +675 109.000 +675 143.600 +675 172.700 +675 229.100 +676 267.400 +677 143.500 +677 231.800 +678 144.700 +678 247.300 +679 95.600 +679 158.300 +680 144.300 +680 267.700 +681 247.900 +681 287.300 +682 82.100 +682 143.800 +683 184.000 +683 267.000 +684 287.500 +685 109.100 +686 59.800 +686 244.700 +686 283.100 +687 229.700 +687 247.500 +688 283.600 +690 247.700 +690 283.900 +691 81.800 +691 108.200 +691 158.200 +693 97.200 +693 269.300 +693 287.000 +694 83.300 +694 123.600 +694 143.800 +694 247.700 +695 268.000 +696 246.100 +697 157.300 +697 247.300 +698 217.100 +698 267.400 +699 83.200 +699 269.300 +700 278.500 +701 59.200 +701 158.400 +702 109.100 +702 144.300 +702 267.100 +704 83.300 +704 267.700 +705 83.200 +705 107.400 +705 144.500 +705 175.700 +705 247.000 +705 288.700 +706 94.400 +707 247.500 +707 267.200 +708 246.300 +708 265.200 +709 158.100 +710 267.800 +711 83.200 +711 95.400 +711 123.300 +711 158.100 +711 217.300 +711 231.600 +711 247.600 +711 267.400 +712 143.800 +712 229.400 +712 265.400 +713 105.400 +713 158.100 +713 229.200 +713 265.500 +715 82.800 +715 130.300 +715 141.000 +716 59.900 +716 81.300 +716 143.600 +716 265.400 +717 247.300 +717 266.900 +718 123.800 +718 174.500 +719 158.200 +719 217.200 +719 247.600 +720 139.500 +720 203.100 +721 265.300 +722 216.100 +722 247.700 +724 108.200 +724 176.500 +724 243.500 +725 95.200 +725 216.300 +726 265.700 +727 134.500 +727 216.100 +727 247.800 +727 279.300 +728 144.400 +728 267.600 +729 82.800 +729 142.000 +729 158.200 +730 248.200 +730 267.200 +731 95.100 +731 144.000 +731 174.000 +731 202.700 +731 266.900 +732 268.400 +733 143.500 +733 238.400 +733 247.300 +734 108.600 +734 144.600 +734 247.000 +735 69.300 +735 134.500 +735 288.700 +736 157.800 +736 267.500 +737 123.500 +737 137.200 +737 217.600 +737 269.100 +740 218.100 +740 247.700 +741 277.700 +742 247.300 +743 143.800 +743 247.700 +744 265.300 +745 59.500 +745 244.700 +746 97.500 +746 144.400 +747 216.200 +748 247.600 +748 267.500 +749 109.400 +749 247.400 +750 145.200 +750 232.000 +751 123.600 +751 269.000 +753 111.300 +753 230.200 +754 110.600 +755 248.200 +756 68.300 +756 124.200 +756 139.600 +756 157.800 +756 231.700 +758 246.500 +759 108.100 +759 247.400 +760 217.500 +761 130.600 +761 171.500 +761 216.800 +762 143.700 +762 198.100 +763 245.000 +764 51.800 +765 83.600 +765 157.500 +765 267.600 +767 213.500 +770 156.200 +770 267.600 +771 57.500 +771 109.200 +771 144.000 +771 265.000 +772 58.400 +772 134.900 +772 175.000 +772 244.700 +772 263.600 +772 269.600 +772 278.100 +773 174.400 +773 281.300 +774 144.800 +774 246.700 +775 247.800 +775 283.900 +776 158.300 +776 247.200 +777 60.600 +777 276.500 +778 82.900 +778 130.900 +778 144.300 +778 171.800 +778 217.400 +778 284.300 +779 82.400 +779 157.600 +779 242.300 +779 267.600 +780 123.000 +780 233.100 +780 247.100 +780 284.000 +781 247.300 +781 267.600 +782 144.000 +782 267.500 +783 246.200 +785 217.700 +785 269.100 +786 97.500 +786 217.200 +786 247.500 +786 266.900 +787 83.500 +789 83.400 +789 142.800 +789 247.300 +790 58.200 +790 83.100 +790 123.000 +790 216.300 +790 247.000 +792 84.200 +792 123.100 +792 143.800 +792 216.300 +792 269.100 +792 287.700 +793 83.600 +793 217.100 +794 57.400 +794 132.200 +795 83.200 +795 247.200 +795 267.700 +797 267.400 +798 94.600 +798 157.600 +798 245.300 +800 54.400 +800 123.400 +800 267.500 +801 107.900 +801 283.100 +802 216.900 +802 298.000 +804 267.300 +804 287.400 +805 247.900 +805 284.600 +806 144.300 +806 268.600 +807 157.400 +807 287.600 +808 123.700 +808 248.300 +809 158.200 +809 282.700 +811 68.900 +812 83.300 +812 204.100 +812 216.300 +814 246.500 +814 267.700 +815 247.500 +816 69.700 +816 83.300 +817 83.300 +817 123.300 +817 143.200 +819 123.800 +819 247.400 +819 287.600 +820 248.300 +821 268.500 +822 69.700 +822 157.100 +822 243.900 +822 287.700 +823 109.100 +823 185.600 +825 57.800 +825 137.400 +826 97.300 +826 143.200 +826 216.900 +827 269.300 +828 202.400 +828 264.800 +829 159.300 +830 141.300 +830 248.300 +830 287.700 +832 83.200 +832 174.800 +832 217.500 +832 267.400 +833 95.300 +833 267.000 +834 247.400 +834 267.200 +835 123.300 +835 266.900 +838 82.900 +838 248.000 +838 267.100 +839 82.000 +839 123.400 +839 158.300 +839 216.900 +839 267.000 +840 60.600 +840 123.400 +840 246.700 +840 268.500 +841 243.600 +842 159.200 +842 247.300 +843 247.500 +844 246.600 +844 267.500 +845 131.400 +846 130.400 +846 143.500 +846 158.100 +846 216.600 +847 174.800 +847 247.900 +847 267.100 +848 247.600 +849 244.400 +850 247.500 +850 267.000 +851 133.400 +852 230.900 +852 267.800 +854 266.800 +855 96.500 +855 157.000 +855 246.900 +856 82.600 +856 217.200 +858 248.000 +859 265.300 +860 157.700 +861 81.200 +861 157.600 +861 248.000 +862 144.100 +862 217.600 +863 158.000 +863 217.100 +863 267.000 +863 287.000 +865 139.400 +865 268.500 +866 246.400 +867 123.400 +867 202.500 +867 244.100 +867 266.600 +869 95.600 +869 247.900 +869 267.700 +870 157.500 +870 265.500 +871 265.400 +872 59.200 +872 123.000 +872 159.000 +872 246.500 +873 82.300 +873 217.000 +873 246.400 +875 247.800 +875 267.800 +876 268.000 +877 247.500 +878 246.400 +880 247.900 +882 122.900 +882 266.900 +884 59.900 +884 144.400 +884 247.500 +884 267.200 +884 269.800 +884 284.100 +885 96.800 +886 58.500 +886 140.400 +886 246.100 +886 267.400 +887 136.700 +887 247.900 +887 266.800 +888 144.500 +888 246.300 +888 267.500 +890 144.400 +890 247.500 +890 269.100 +891 247.000 +892 247.600 +893 287.700 +894 108.500 +894 202.600 +894 247.000 +894 267.800 +895 269.300 +896 247.900 +896 285.200 +897 131.300 +897 281.600 +898 284.400 +899 154.900 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_7_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_7_i_pop.dat new file mode 100644 index 000000000..3d3de1780 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_7_i_pop.dat @@ -0,0 +1,401 @@ +sender time_ms +900 265.500 +901 141.600 +904 95.000 +904 240.600 +905 58.700 +905 174.600 +905 267.500 +906 81.200 +906 143.600 +906 247.200 +906 267.200 +908 248.300 +908 267.800 +909 144.200 +909 243.600 +909 267.200 +910 247.300 +911 133.100 +911 278.100 +912 83.400 +913 107.600 +913 216.900 +914 114.400 +914 156.900 +914 247.500 +914 287.100 +915 247.700 +916 108.000 +916 144.500 +916 264.900 +917 139.400 +917 217.800 +917 269.300 +918 137.600 +918 246.100 +919 71.700 +919 158.500 +919 247.900 +921 95.300 +921 124.000 +921 246.600 +922 82.500 +922 143.800 +922 247.500 +922 269.000 +923 97.400 +924 143.600 +924 197.000 +924 247.300 +924 269.000 +925 132.400 +926 158.400 +926 248.200 +926 267.000 +927 144.300 +927 245.600 +928 143.700 +928 268.500 +929 246.800 +931 96.500 +932 143.500 +932 232.100 +934 144.400 +934 218.300 +934 247.700 +935 137.200 +935 217.100 +936 248.200 +936 265.400 +937 135.700 +937 144.700 +937 247.600 +938 133.600 +938 247.200 +938 267.400 +940 83.600 +940 144.500 +940 229.000 +940 265.400 +941 110.800 +941 217.900 +941 243.500 +941 283.700 +944 83.400 +944 123.200 +945 83.000 +945 248.100 +945 294.400 +946 109.100 +946 247.300 +947 144.300 +947 267.100 +949 82.800 +949 267.900 +950 174.700 +951 90.800 +951 283.200 +952 143.700 +953 83.200 +953 247.200 +953 267.400 +954 156.800 +954 247.300 +956 240.600 +957 144.800 +957 267.700 +959 144.500 +959 267.400 +960 116.000 +960 218.500 +960 267.100 +961 132.200 +962 104.700 +962 123.400 +962 269.300 +963 109.100 +963 244.600 +963 283.900 +964 247.600 +965 158.000 +965 240.400 +965 266.500 +966 97.600 +966 127.100 +966 266.900 +967 97.300 +967 246.600 +968 83.400 +968 122.900 +968 246.200 +968 269.000 +969 60.300 +969 158.000 +969 282.700 +971 83.400 +971 143.800 +971 246.200 +972 134.100 +972 267.200 +973 265.300 +974 109.700 +975 265.200 +976 248.000 +977 81.600 +977 144.300 +977 267.500 +978 203.900 +978 278.600 +979 136.800 +979 232.100 +980 232.000 +980 247.500 +981 83.200 +981 267.700 +982 246.600 +983 267.200 +984 246.900 +985 82.800 +985 157.900 +985 218.300 +985 265.500 +986 159.500 +986 267.200 +987 60.200 +987 231.900 +987 246.000 +988 283.900 +989 247.600 +990 137.100 +990 247.100 +990 267.600 +991 69.600 +991 97.000 +991 137.400 +991 217.600 +991 269.700 +992 95.200 +992 216.500 +992 287.700 +993 267.800 +994 115.900 +994 265.100 +996 246.200 +998 144.100 +998 267.200 +999 158.900 +999 267.100 +1000 157.300 +1001 244.200 +1002 267.300 +1004 132.200 +1004 276.400 +1006 80.600 +1006 108.900 +1006 124.100 +1006 142.900 +1006 174.000 +1006 247.100 +1007 143.300 +1007 243.300 +1007 247.500 +1008 267.500 +1009 158.100 +1009 267.500 +1010 247.400 +1011 247.600 +1013 83.200 +1013 267.500 +1014 184.800 +1015 247.900 +1015 267.600 +1016 144.400 +1016 231.700 +1017 84.100 +1017 129.800 +1017 246.400 +1018 53.800 +1018 97.400 +1018 217.000 +1018 246.500 +1018 267.200 +1020 269.500 +1020 287.500 +1021 247.000 +1022 247.100 +1023 157.900 +1024 154.600 +1024 198.100 +1024 248.200 +1024 278.200 +1025 110.700 +1026 82.400 +1026 131.900 +1026 216.200 +1026 247.600 +1026 267.500 +1027 157.900 +1027 266.800 +1028 132.400 +1028 267.000 +1029 158.000 +1030 265.500 +1031 213.700 +1032 124.200 +1032 174.400 +1032 267.300 +1033 157.800 +1033 247.400 +1035 144.900 +1035 267.100 +1036 175.200 +1037 78.100 +1037 97.500 +1037 129.300 +1037 144.500 +1037 158.200 +1037 264.900 +1038 134.500 +1040 269.200 +1041 107.000 +1041 139.600 +1041 232.000 +1042 124.100 +1043 143.900 +1043 245.700 +1044 216.300 +1044 243.800 +1044 278.600 +1045 277.000 +1046 95.700 +1046 217.500 +1047 53.000 +1047 95.800 +1047 123.900 +1047 132.500 +1047 231.900 +1047 247.800 +1048 82.700 +1048 232.100 +1049 97.000 +1050 59.300 +1050 68.800 +1050 83.300 +1050 124.100 +1050 143.100 +1051 247.900 +1053 265.100 +1055 158.900 +1055 247.800 +1056 158.000 +1056 267.300 +1056 288.100 +1057 298.500 +1058 158.300 +1060 287.900 +1061 83.200 +1061 144.100 +1061 158.300 +1061 247.200 +1062 60.100 +1062 157.500 +1063 268.300 +1064 143.500 +1065 109.600 +1065 124.100 +1065 248.300 +1066 123.000 +1066 246.900 +1067 144.100 +1067 231.800 +1067 247.400 +1067 288.000 +1068 83.700 +1068 267.000 +1069 267.700 +1070 248.100 +1071 216.800 +1071 244.400 +1071 298.500 +1072 123.000 +1072 247.400 +1073 144.000 +1074 247.400 +1075 198.000 +1075 243.500 +1076 217.000 +1076 247.100 +1076 266.700 +1077 246.600 +1077 287.700 +1078 267.700 +1081 55.800 +1081 83.400 +1081 123.200 +1082 217.200 +1083 57.000 +1083 109.100 +1083 247.000 +1083 267.100 +1084 202.700 +1085 83.200 +1085 143.500 +1085 155.600 +1085 247.300 +1086 218.300 +1087 57.700 +1087 143.800 +1087 231.000 +1088 197.900 +1088 279.600 +1090 123.600 +1090 277.900 +1091 124.100 +1091 267.600 +1092 287.500 +1093 158.300 +1093 243.900 +1093 287.300 +1094 247.900 +1095 174.800 +1095 246.000 +1096 59.100 +1097 123.300 +1097 246.800 +1097 268.700 +1098 287.000 +1099 267.000 +1100 218.000 +1101 247.200 +1101 278.900 +1103 248.400 +1104 108.400 +1104 230.300 +1104 266.900 +1105 217.600 +1106 263.400 +1107 158.000 +1107 268.400 +1108 82.600 +1108 133.400 +1108 265.200 +1110 141.600 +1110 265.200 +1111 90.800 +1111 97.600 +1112 124.100 +1112 217.700 +1112 281.100 +1114 267.100 +1115 144.200 +1115 215.900 +1115 245.600 +1115 268.100 +1117 202.700 +1117 288.200 +1118 158.200 +1119 247.300 +1123 216.000 +1123 247.300 +1124 267.500 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_8_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_8_e_pop.dat new file mode 100644 index 000000000..a4ee12724 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_8_e_pop.dat @@ -0,0 +1,1693 @@ +sender time_ms +0 59.400 +0 131.900 +0 144.500 +1 59.300 +1 83.100 +1 91.800 +1 140.800 +2 158.500 +2 241.900 +2 275.600 +3 246.500 +5 232.100 +5 267.500 +6 57.800 +7 266.900 +8 144.200 +8 216.200 +8 247.000 +9 60.600 +9 95.400 +9 236.200 +9 268.000 +10 232.200 +13 52.300 +13 97.400 +14 143.300 +14 244.000 +15 217.100 +15 276.000 +16 229.100 +17 70.700 +17 230.400 +17 275.800 +20 132.600 +21 83.500 +22 231.300 +22 243.700 +23 108.400 +24 157.900 +25 97.300 +25 217.700 +25 275.800 +26 82.400 +26 216.700 +26 244.600 +26 267.900 +27 217.400 +28 202.000 +29 53.900 +29 83.100 +29 110.800 +29 144.500 +29 229.900 +31 57.300 +31 84.200 +31 110.400 +31 216.500 +31 247.000 +32 107.500 +32 217.200 +32 267.500 +34 267.700 +34 288.000 +35 144.800 +36 83.200 +36 265.200 +37 90.800 +37 123.500 +37 143.200 +37 157.700 +37 231.600 +38 82.500 +38 157.900 +38 233.600 +38 267.300 +39 246.300 +40 270.200 +41 243.000 +42 110.700 +42 144.800 +42 267.300 +43 95.700 +43 230.300 +43 267.800 +45 244.400 +45 267.400 +46 267.800 +47 82.600 +48 185.600 +48 218.000 +49 97.300 +49 245.800 +50 157.500 +50 247.300 +51 275.700 +52 59.300 +52 95.300 +54 83.500 +54 287.700 +56 241.300 +56 268.100 +57 233.400 +57 247.500 +58 122.300 +58 175.700 +58 217.100 +59 97.600 +59 231.600 +59 247.700 +60 97.600 +60 247.100 +61 157.900 +61 231.600 +61 247.400 +61 275.600 +63 132.300 +63 268.100 +64 247.600 +64 267.400 +65 182.300 +65 244.400 +65 283.200 +67 53.600 +67 83.300 +67 159.500 +68 267.400 +69 230.700 +69 267.800 +70 267.300 +71 82.300 +71 247.500 +73 247.600 +74 244.700 +75 174.400 +75 247.500 +76 247.200 +77 82.700 +77 230.300 +77 276.700 +78 60.100 +78 123.500 +78 175.300 +78 241.900 +80 97.400 +81 60.400 +81 174.700 +81 232.000 +84 229.900 +84 267.100 +85 97.600 +86 202.400 +86 247.600 +87 174.500 +87 218.300 +87 230.800 +87 267.300 +88 244.500 +90 247.000 +91 95.600 +91 230.600 +93 241.300 +94 246.300 +95 144.400 +95 247.300 +96 216.300 +96 272.700 +97 97.500 +97 215.700 +97 247.000 +99 267.500 +100 97.300 +100 267.400 +101 83.700 +102 266.700 +103 97.000 +103 217.400 +105 132.200 +105 232.100 +106 97.100 +106 124.100 +106 158.100 +106 240.600 +106 267.200 +107 133.400 +107 144.900 +107 175.500 +107 247.000 +109 144.600 +109 288.800 +110 59.700 +111 158.000 +111 214.600 +111 243.700 +112 97.200 +112 174.600 +112 231.900 +112 275.200 +113 83.200 +113 267.700 +114 233.100 +116 267.100 +117 83.400 +117 216.900 +118 230.400 +119 124.300 +119 185.600 +119 217.500 +121 267.100 +122 108.200 +122 244.300 +123 105.600 +123 263.200 +124 231.900 +125 197.300 +126 230.000 +127 231.700 +127 276.600 +128 83.700 +128 288.600 +129 232.300 +129 266.800 +129 272.600 +132 82.200 +132 246.400 +133 157.800 +134 232.000 +135 236.600 +137 174.600 +137 287.500 +138 57.800 +138 82.400 +138 141.700 +138 216.900 +139 96.800 +139 123.200 +139 265.100 +140 247.200 +142 230.200 +142 244.300 +143 58.700 +143 107.600 +146 248.300 +147 158.000 +147 243.000 +148 97.100 +148 244.200 +149 243.000 +150 145.000 +150 241.800 +151 157.800 +151 217.400 +151 244.200 +151 278.400 +152 83.400 +153 56.200 +153 83.800 +153 132.800 +155 59.100 +155 123.700 +155 145.000 +155 232.100 +155 263.200 +155 278.100 +156 83.500 +156 229.900 +156 245.700 +157 53.700 +157 83.000 +157 154.500 +158 81.600 +158 97.000 +158 131.100 +158 232.300 +159 204.000 +159 217.700 +159 244.800 +160 51.600 +160 134.200 +160 276.500 +162 56.800 +162 241.800 +162 287.800 +163 227.000 +164 171.100 +165 57.700 +165 97.500 +165 202.500 +165 218.300 +165 231.800 +165 288.000 +166 144.000 +166 267.700 +167 56.800 +167 137.000 +167 231.900 +168 229.800 +168 247.200 +169 94.900 +169 240.900 +171 233.000 +172 176.000 +173 52.700 +173 123.600 +173 169.100 +174 246.500 +175 158.200 +175 216.600 +175 247.400 +176 247.600 +176 287.500 +177 276.200 +178 244.000 +179 107.100 +179 268.500 +181 226.300 +181 233.300 +182 83.300 +182 97.400 +182 134.600 +182 144.800 +182 247.100 +183 97.200 +183 159.400 +183 213.400 +183 247.700 +184 233.200 +184 246.800 +185 91.600 +185 217.300 +185 240.900 +186 229.900 +186 247.100 +187 244.300 +188 217.400 +188 226.800 +189 275.300 +190 69.300 +190 105.600 +190 123.500 +190 264.800 +191 158.400 +191 279.000 +192 123.500 +192 231.600 +192 267.100 +193 97.400 +194 62.100 +194 95.600 +194 143.300 +196 227.500 +196 247.200 +197 240.900 +198 244.600 +199 67.300 +199 96.400 +199 144.600 +199 216.100 +199 230.600 +200 267.200 +201 60.800 +201 83.100 +201 132.500 +201 266.900 +201 287.000 +202 97.100 +202 134.900 +202 144.500 +202 217.400 +203 97.200 +203 267.400 +204 96.900 +206 216.300 +206 231.700 +207 82.100 +207 244.600 +208 59.300 +208 97.600 +208 247.600 +208 267.400 +209 267.500 +210 59.500 +210 156.300 +210 287.700 +211 267.700 +212 217.700 +212 240.700 +213 218.100 +213 246.800 +214 267.000 +216 267.500 +217 230.400 +219 233.700 +219 269.100 +219 286.900 +220 217.700 +221 247.500 +221 267.400 +222 159.200 +222 267.100 +223 54.200 +223 84.200 +223 97.200 +223 217.800 +223 243.800 +224 82.300 +224 124.200 +224 144.500 +224 247.400 +225 82.900 +225 243.400 +225 289.700 +226 245.100 +227 268.100 +228 92.100 +228 232.200 +229 96.700 +229 217.400 +230 176.200 +231 83.700 +231 233.200 +231 246.600 +232 56.100 +232 83.500 +232 134.400 +232 173.800 +232 266.900 +233 96.300 +233 144.200 +233 244.300 +233 267.400 +234 244.300 +235 283.000 +236 59.200 +236 123.800 +236 174.000 +236 232.600 +237 97.500 +237 217.700 +237 247.600 +237 278.100 +238 123.300 +238 284.000 +239 97.600 +239 231.800 +239 266.900 +240 287.700 +241 94.500 +241 230.600 +241 288.800 +242 97.500 +242 244.600 +242 267.100 +243 202.800 +243 247.200 +244 122.300 +244 158.200 +244 247.400 +245 96.900 +245 232.700 +245 274.500 +246 157.700 +246 231.000 +246 267.100 +247 174.700 +247 244.700 +247 270.100 +248 232.900 +249 244.000 +249 267.300 +251 130.700 +253 107.400 +253 124.300 +255 276.300 +256 172.000 +256 216.800 +257 97.000 +257 276.300 +258 128.100 +258 230.100 +260 71.600 +260 96.700 +260 143.900 +260 217.100 +260 246.900 +261 174.500 +261 247.000 +261 274.500 +262 97.100 +262 247.100 +263 173.700 +263 267.700 +264 247.000 +264 276.700 +265 59.500 +265 247.600 +266 232.300 +266 287.900 +267 84.000 +267 217.100 +267 247.500 +268 83.600 +268 137.800 +268 229.200 +268 297.500 +269 232.000 +269 267.200 +270 81.500 +270 155.100 +271 232.000 +272 217.100 +272 247.100 +273 267.600 +274 223.000 +274 230.300 +274 269.800 +275 108.000 +275 144.700 +275 217.100 +275 288.000 +276 269.000 +278 110.400 +278 217.200 +278 244.200 +279 123.900 +279 174.000 +279 225.800 +279 240.900 +279 268.200 +279 289.300 +280 96.700 +281 267.500 +282 229.600 +283 174.000 +284 83.800 +284 158.100 +284 267.300 +285 246.400 +286 54.200 +286 122.300 +286 267.800 +287 217.800 +288 158.500 +289 90.500 +289 124.500 +289 143.500 +289 217.000 +290 243.400 +291 81.700 +291 230.400 +292 247.200 +293 158.700 +295 247.000 +296 133.200 +296 231.700 +297 97.600 +297 106.000 +297 229.500 +297 247.200 +298 82.400 +298 158.200 +298 245.900 +298 267.800 +299 69.200 +299 173.800 +299 233.000 +300 247.600 +300 272.700 +301 81.200 +301 230.100 +301 267.600 +303 97.200 +303 217.100 +303 247.600 +303 269.600 +304 94.500 +304 217.600 +304 267.000 +305 276.800 +306 267.600 +307 60.100 +307 97.300 +307 239.000 +307 247.100 +308 267.100 +308 276.600 +309 105.400 +309 143.500 +309 245.600 +312 283.700 +313 97.400 +313 267.100 +315 237.100 +315 247.200 +315 276.500 +316 157.900 +317 287.000 +318 245.600 +319 267.600 +321 247.500 +323 96.800 +323 131.100 +323 202.400 +324 286.700 +325 231.800 +325 267.400 +326 229.900 +327 83.300 +328 246.200 +329 267.900 +331 267.300 +332 142.900 +332 200.300 +332 216.600 +332 228.800 +332 247.400 +333 96.800 +333 175.100 +333 247.400 +334 96.700 +334 157.700 +334 246.900 +334 284.000 +335 79.100 +335 233.100 +336 107.500 +336 158.000 +336 247.000 +337 107.100 +337 174.500 +338 84.000 +338 265.500 +339 108.300 +339 144.500 +339 231.100 +339 267.300 +340 81.500 +340 96.500 +340 144.500 +340 169.700 +340 267.600 +340 287.600 +341 237.800 +341 244.800 +343 60.400 +343 83.700 +343 123.400 +343 238.500 +344 156.200 +344 216.900 +344 247.500 +345 58.300 +345 83.600 +345 275.900 +347 171.500 +348 247.700 +349 241.500 +350 83.800 +350 97.600 +350 143.800 +350 247.600 +351 83.500 +352 69.500 +352 133.000 +352 158.400 +352 266.900 +352 288.700 +353 92.200 +353 232.200 +353 267.000 +354 83.200 +355 97.600 +355 142.000 +356 53.200 +356 124.000 +356 143.700 +356 247.400 +356 267.600 +357 277.200 +357 299.100 +358 267.400 +359 268.200 +360 132.900 +360 247.100 +361 176.300 +361 230.500 +362 230.300 +363 59.100 +363 83.800 +364 217.500 +365 59.100 +366 197.700 +366 230.300 +366 247.700 +367 59.300 +367 288.900 +368 244.300 +369 82.900 +369 240.300 +369 247.800 +370 59.800 +370 83.700 +370 123.000 +370 202.300 +370 228.800 +371 68.800 +371 97.200 +371 174.300 +371 247.300 +372 53.900 +373 81.700 +373 97.600 +373 276.500 +374 157.900 +375 97.000 +375 217.500 +377 60.500 +377 91.800 +377 231.900 +377 244.100 +378 108.100 +378 286.300 +379 158.300 +379 287.200 +380 107.400 +380 267.600 +380 287.600 +382 188.400 +382 242.100 +383 97.000 +383 175.200 +383 231.700 +383 247.600 +383 287.200 +385 83.400 +385 124.100 +385 229.800 +385 267.300 +386 188.800 +387 216.400 +388 247.400 +389 61.700 +389 96.900 +389 230.000 +389 277.300 +390 83.100 +390 108.700 +390 247.300 +391 229.800 +391 247.700 +392 82.400 +392 229.200 +392 247.500 +392 267.300 +394 231.800 +395 97.500 +395 132.700 +395 246.400 +395 267.000 +396 229.400 +397 175.000 +397 284.200 +398 96.800 +398 275.900 +399 58.000 +399 97.500 +399 158.000 +399 227.800 +401 144.400 +403 107.000 +403 185.800 +403 228.800 +404 133.400 +404 233.500 +404 269.400 +405 83.400 +405 203.600 +405 217.200 +405 244.900 +407 246.700 +408 288.600 +409 105.400 +409 267.300 +411 231.300 +412 244.100 +412 267.200 +414 230.000 +416 248.100 +416 286.600 +418 287.300 +419 216.100 +419 240.800 +420 83.600 +421 227.300 +422 82.800 +422 175.500 +422 229.600 +422 283.100 +423 143.700 +423 174.300 +423 232.300 +424 97.000 +424 212.400 +424 232.200 +425 53.800 +425 217.500 +425 247.800 +426 114.200 +427 131.000 +427 245.700 +428 83.900 +429 60.300 +430 247.400 +431 59.700 +431 82.700 +431 107.800 +432 107.400 +432 159.200 +432 244.100 +433 83.000 +433 216.000 +433 280.300 +433 287.800 +434 215.900 +435 110.400 +436 247.700 +437 276.200 +438 241.600 +439 124.300 +441 231.500 +442 96.900 +442 233.400 +442 267.700 +443 144.400 +443 247.000 +444 105.900 +444 123.900 +444 217.500 +445 83.200 +445 108.000 +445 232.700 +445 247.700 +445 267.500 +446 158.900 +446 267.200 +447 244.700 +448 247.400 +448 267.200 +449 158.400 +449 216.000 +449 230.500 +450 245.100 +451 83.600 +451 96.300 +451 174.000 +451 217.100 +451 267.500 +452 247.500 +452 267.700 +455 231.600 +456 229.300 +456 233.700 +457 143.700 +457 216.900 +459 244.000 +460 144.700 +460 247.600 +462 218.100 +462 244.400 +463 133.000 +464 267.200 +464 288.700 +465 215.900 +465 247.500 +465 287.400 +466 83.800 +466 108.200 +467 83.300 +467 156.200 +467 217.400 +467 269.000 +468 218.100 +470 83.200 +470 173.600 +470 246.900 +471 171.800 +471 230.500 +471 247.600 +472 216.100 +472 247.200 +474 247.500 +474 274.900 +474 283.600 +475 287.700 +476 287.600 +477 248.200 +477 267.300 +479 50.300 +479 83.100 +479 124.000 +479 159.300 +480 97.200 +480 246.700 +481 97.400 +481 159.200 +481 217.400 +482 216.800 +482 265.300 +483 246.100 +486 143.600 +487 287.000 +488 54.200 +488 267.300 +490 52.500 +490 145.100 +490 173.700 +490 247.500 +490 267.800 +491 104.600 +491 157.300 +491 188.400 +491 247.000 +492 82.500 +492 247.000 +493 278.400 +493 289.200 +494 217.000 +495 97.300 +496 83.500 +496 266.900 +497 158.100 +497 232.000 +498 96.100 +498 232.000 +498 247.000 +498 273.000 +499 97.000 +500 158.400 +501 175.600 +501 229.400 +501 281.200 +502 83.200 +503 107.200 +506 232.900 +506 275.200 +507 91.800 +507 123.500 +507 230.400 +508 174.800 +508 267.000 +509 267.300 +510 174.300 +510 247.300 +510 277.800 +511 96.900 +514 244.000 +514 287.200 +515 96.800 +516 124.400 +517 57.200 +517 266.800 +519 54.200 +519 107.500 +520 107.100 +520 133.000 +520 267.300 +521 97.300 +521 144.300 +522 232.200 +522 246.700 +523 97.500 +523 144.000 +523 227.700 +523 267.200 +524 97.500 +524 232.000 +525 159.100 +526 267.100 +527 96.900 +527 247.400 +527 288.400 +528 158.000 +528 229.700 +528 265.200 +529 123.500 +529 233.400 +529 247.500 +529 267.600 +530 59.900 +530 227.800 +530 267.200 +531 241.300 +532 54.000 +532 107.900 +532 232.300 +533 97.300 +533 215.700 +533 247.100 +534 276.700 +535 246.500 +536 52.200 +536 97.200 +536 143.900 +536 247.700 +537 110.400 +537 187.100 +537 200.100 +537 216.500 +537 229.400 +537 247.900 +538 157.300 +538 232.000 +538 288.800 +540 227.300 +540 247.200 +541 95.500 +541 123.700 +541 231.800 +541 247.000 +542 246.300 +542 287.800 +543 245.200 +544 230.400 +544 247.400 +545 59.800 +545 83.400 +545 108.000 +545 230.300 +545 266.900 +546 97.400 +546 174.000 +546 281.200 +548 247.200 +548 267.600 +549 276.400 +550 97.000 +551 107.500 +551 144.300 +551 214.100 +552 239.000 +552 266.700 +554 114.000 +554 158.400 +555 59.600 +556 57.200 +558 158.000 +559 158.100 +559 230.100 +559 268.800 +559 273.600 +560 159.400 +560 216.700 +560 246.000 +561 247.400 +561 266.900 +562 83.600 +562 216.600 +563 97.200 +564 58.200 +564 274.500 +565 83.900 +565 144.600 +565 247.500 +565 271.500 +566 69.300 +566 97.300 +566 132.900 +566 174.900 +566 247.200 +568 143.300 +568 268.100 +569 237.800 +569 267.300 +570 96.600 +570 289.400 +571 69.300 +573 247.200 +573 287.600 +574 241.200 +575 229.200 +576 232.100 +577 83.300 +577 144.500 +577 217.300 +577 267.100 +578 247.500 +578 276.400 +578 283.900 +579 243.900 +579 267.100 +580 245.800 +581 97.100 +581 230.700 +581 268.000 +582 158.100 +582 277.400 +583 247.000 +584 247.100 +585 122.800 +586 245.700 +587 144.300 +588 171.700 +590 106.300 +590 246.200 +590 268.100 +591 96.900 +591 133.000 +591 158.000 +591 218.000 +591 230.500 +591 267.400 +592 96.400 +592 123.500 +592 174.600 +592 267.600 +594 108.300 +595 108.300 +595 230.200 +595 267.400 +596 95.400 +596 123.600 +596 231.300 +596 267.500 +597 158.300 +597 246.800 +598 97.400 +598 267.400 +600 107.500 +601 96.900 +601 131.700 +601 269.200 +602 144.400 +602 174.900 +602 278.400 +603 193.100 +603 267.600 +604 97.300 +604 247.400 +605 176.000 +605 247.200 +607 94.000 +607 230.400 +607 247.300 +607 299.900 +609 144.000 +610 171.600 +611 97.500 +611 227.400 +612 267.000 +613 53.200 +613 97.300 +613 157.900 +613 232.400 +613 267.700 +614 174.600 +614 217.900 +614 244.300 +615 97.500 +615 265.100 +617 157.700 +618 83.500 +618 108.200 +618 168.100 +618 231.400 +619 83.300 +620 238.600 +621 56.300 +621 83.400 +621 124.000 +621 144.600 +621 218.500 +621 267.100 +622 97.300 +622 265.000 +623 233.400 +625 158.300 +625 233.000 +626 246.300 +626 267.600 +627 267.500 +628 83.600 +628 217.400 +628 244.700 +629 144.600 +629 217.300 +630 182.100 +631 232.200 +632 267.400 +633 263.300 +634 97.600 +635 83.000 +636 96.900 +637 92.100 +637 123.000 +637 267.300 +638 299.800 +639 53.500 +639 105.600 +640 83.400 +640 233.400 +640 267.500 +641 84.000 +641 124.100 +642 109.100 +642 173.400 +642 228.900 +643 268.500 +644 133.900 +644 174.400 +644 218.500 +644 231.300 +645 216.700 +645 247.500 +645 276.100 +646 84.000 +646 107.600 +647 244.700 +648 228.800 +648 244.500 +648 278.100 +651 198.000 +651 229.800 +652 158.500 +652 217.600 +652 247.700 +653 110.600 +653 246.200 +654 267.300 +655 96.000 +655 144.800 +655 247.600 +656 158.000 +657 247.600 +658 59.300 +658 144.400 +658 241.900 +659 97.200 +659 229.300 +659 246.100 +660 287.700 +661 83.300 +661 106.000 +661 143.100 +662 60.300 +663 97.000 +663 158.000 +663 216.200 +663 246.300 +663 267.600 +664 233.000 +665 268.300 +666 59.900 +666 245.700 +666 276.200 +666 287.600 +667 82.900 +667 217.500 +667 247.500 +669 94.400 +669 231.800 +669 245.700 +669 267.800 +671 82.400 +671 115.400 +671 131.000 +671 232.900 +672 53.400 +672 91.100 +672 107.700 +672 144.400 +672 175.300 +673 59.400 +673 84.000 +673 267.600 +674 265.200 +674 287.800 +676 96.600 +676 245.600 +677 244.900 +678 246.300 +678 267.300 +679 247.600 +681 288.700 +682 109.300 +682 289.900 +683 57.900 +683 82.900 +683 144.300 +683 267.000 +684 247.400 +684 266.900 +685 83.700 +686 247.200 +688 245.900 +689 97.400 +690 247.700 +691 265.300 +692 82.600 +692 97.600 +692 143.500 +692 158.300 +692 233.200 +692 267.000 +693 83.400 +693 233.400 +693 266.800 +694 97.500 +695 97.300 +695 128.700 +695 247.100 +696 230.800 +697 58.600 +697 213.500 +699 123.100 +699 143.700 +700 59.300 +701 238.300 +702 95.400 +702 247.500 +703 158.000 +703 243.400 +704 96.900 +704 232.400 +705 82.800 +705 217.500 +705 270.600 +706 83.100 +706 197.900 +706 287.500 +707 60.500 +707 241.200 +707 267.300 +707 283.600 +708 97.300 +708 288.700 +709 97.500 +709 244.400 +709 269.600 +710 244.500 +710 267.100 +711 59.100 +711 232.400 +712 97.200 +712 230.000 +712 287.900 +713 83.100 +713 231.100 +713 267.600 +714 97.400 +714 268.300 +715 231.900 +715 244.400 +716 133.600 +717 267.300 +718 105.700 +718 284.700 +719 60.500 +719 109.900 +719 229.100 +719 267.000 +720 97.600 +720 244.300 +721 97.400 +722 281.400 +723 69.200 +723 174.700 +723 243.400 +724 96.500 +725 143.500 +727 213.600 +729 72.200 +729 98.500 +730 159.300 +731 157.900 +732 133.400 +732 174.800 +732 244.300 +734 218.900 +734 232.300 +735 97.200 +735 143.500 +735 267.500 +735 275.600 +736 231.900 +737 278.100 +738 59.500 +738 245.900 +739 58.800 +739 131.300 +739 143.900 +739 247.400 +740 52.800 +740 233.100 +740 267.700 +743 106.900 +743 229.100 +743 245.800 +744 60.500 +744 90.700 +745 272.600 +746 60.100 +746 174.200 +747 52.400 +747 143.600 +747 171.400 +748 233.300 +748 267.500 +749 83.700 +749 123.300 +749 244.300 +749 267.200 +750 58.300 +750 82.500 +750 247.000 +751 217.100 +752 53.200 +752 96.800 +752 134.100 +752 172.800 +752 232.300 +752 267.600 +753 218.100 +753 244.200 +754 84.900 +754 107.800 +754 133.400 +754 157.400 +754 231.800 +754 247.500 +755 51.600 +755 58.700 +755 83.700 +755 124.300 +755 157.900 +755 231.300 +755 265.100 +756 97.100 +757 70.200 +757 244.700 +758 217.400 +759 137.300 +759 173.300 +759 265.900 +759 268.100 +760 57.800 +760 247.000 +761 84.200 +761 245.800 +763 95.600 +763 247.200 +764 71.300 +764 123.400 +764 158.300 +765 50.400 +765 144.300 +767 83.400 +767 158.300 +767 216.300 +768 53.200 +768 83.000 +768 134.800 +769 83.500 +769 123.700 +771 247.400 +771 276.100 +772 240.600 +773 69.300 +773 132.300 +774 246.700 +775 267.200 +775 270.100 +776 83.500 +776 97.100 +776 144.800 +777 277.400 +778 97.400 +778 267.200 +779 143.900 +779 169.600 +779 287.000 +780 83.500 +781 95.400 +781 247.100 +782 174.800 +784 107.900 +785 96.900 +785 246.100 +785 266.800 +786 245.900 +788 83.100 +788 246.900 +788 267.200 +788 299.300 +790 70.100 +791 123.500 +791 174.700 +791 230.300 +792 83.200 +792 124.100 +792 158.000 +793 60.300 +793 97.500 +793 144.200 +793 287.300 +794 267.100 +795 243.400 +796 174.800 +796 198.200 +800 246.300 +801 83.600 +802 267.000 +803 232.000 +804 233.300 +805 267.600 +806 96.900 +806 158.400 +806 245.700 +806 267.200 +808 265.500 +810 247.400 +810 281.200 +811 173.800 +811 233.200 +811 248.400 +811 277.100 +812 217.200 +812 265.300 +813 232.200 +814 123.500 +814 157.600 +814 174.500 +814 231.500 +815 97.300 +815 144.400 +815 216.700 +816 72.500 +816 96.000 +816 157.600 +817 143.800 +819 229.800 +819 247.600 +823 59.000 +823 114.300 +823 124.200 +823 158.100 +823 267.500 +825 58.700 +826 231.900 +826 267.700 +829 246.900 +830 231.900 +831 96.000 +831 174.500 +831 232.100 +832 247.300 +833 107.000 +833 246.400 +834 230.500 +834 266.900 +835 233.500 +836 58.500 +836 105.600 +836 144.300 +837 158.400 +838 240.400 +839 96.100 +840 69.400 +840 211.700 +840 233.300 +841 158.300 +842 157.300 +842 216.500 +842 231.600 +843 133.600 +843 213.000 +843 246.600 +843 267.300 +844 66.800 +844 83.400 +844 144.200 +844 238.300 +845 82.100 +845 216.100 +845 244.100 +845 269.400 +847 231.600 +847 247.600 +848 107.100 +848 241.200 +849 97.500 +849 136.800 +849 242.200 +850 201.800 +850 233.600 +850 244.000 +851 58.700 +851 97.200 +852 97.300 +852 158.500 +852 275.100 +853 97.500 +853 233.200 +854 70.200 +854 241.700 +854 280.700 +855 230.000 +856 247.600 +857 158.000 +857 246.200 +858 97.100 +858 216.000 +858 244.400 +860 267.300 +861 267.400 +862 231.700 +862 267.100 +864 143.500 +864 217.000 +864 227.800 +865 50.400 +865 97.500 +865 216.300 +865 277.200 +866 97.000 +867 97.600 +867 171.200 +867 247.400 +868 247.500 +868 266.900 +869 246.700 +870 231.800 +871 246.300 +871 270.700 +871 283.900 +873 269.400 +874 232.000 +876 143.400 +876 174.000 +876 200.700 +876 227.300 +876 247.500 +877 59.000 +877 217.000 +879 269.400 +880 97.700 +880 244.400 +881 83.800 +881 283.300 +883 94.800 +883 265.400 +884 107.400 +884 174.500 +884 265.200 +885 58.300 +885 94.500 +885 107.700 +885 158.300 +885 218.500 +885 232.400 +885 246.900 +885 267.000 +886 97.300 +886 158.300 +886 217.500 +886 232.200 +886 267.600 +887 267.100 +888 96.700 +888 143.500 +888 245.900 +888 286.700 +889 94.000 +889 244.400 +889 288.200 +890 241.700 +890 287.300 +892 83.600 +892 232.000 +892 244.800 +893 158.100 +893 175.200 +893 231.800 +893 247.100 +893 267.100 +896 157.200 +896 229.900 +897 231.800 +897 267.700 +899 98.800 +899 144.300 +899 197.400 +899 245.800 +899 285.500 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_8_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_8_i_pop.dat new file mode 100644 index 000000000..61e49ec5c --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_8_i_pop.dat @@ -0,0 +1,429 @@ +sender time_ms +900 83.300 +901 268.600 +902 247.600 +903 81.700 +903 123.500 +903 134.800 +903 229.700 +903 247.000 +904 231.700 +905 95.900 +905 213.800 +906 267.600 +907 83.500 +907 268.000 +908 58.400 +908 96.700 +908 123.700 +908 159.400 +908 217.300 +908 233.500 +909 144.800 +910 96.500 +910 122.900 +910 229.500 +911 216.900 +911 267.100 +912 230.000 +913 69.000 +913 231.000 +914 82.300 +915 158.000 +915 217.300 +915 264.900 +916 217.200 +918 175.000 +919 158.500 +919 268.200 +920 231.700 +921 270.200 +922 56.800 +922 103.700 +923 110.500 +924 83.000 +924 96.900 +926 83.800 +926 246.800 +927 246.900 +927 288.900 +928 83.400 +929 96.600 +929 157.900 +929 217.500 +930 275.600 +931 157.400 +931 231.900 +933 203.300 +933 233.000 +933 287.300 +936 243.800 +937 265.300 +938 59.100 +938 232.000 +938 267.300 +939 60.300 +939 122.700 +939 144.500 +939 171.200 +939 218.200 +939 232.100 +939 246.400 +940 218.800 +940 246.800 +941 97.300 +941 243.800 +942 82.800 +943 231.600 +944 97.500 +944 158.400 +945 157.600 +946 204.100 +948 244.400 +948 267.700 +949 97.000 +949 158.300 +949 228.600 +950 242.800 +950 247.500 +951 204.000 +952 91.800 +952 231.600 +952 298.700 +953 229.900 +953 276.100 +954 78.700 +954 97.500 +954 230.600 +955 97.500 +955 243.700 +956 82.800 +956 245.900 +956 266.900 +957 57.100 +957 95.000 +957 144.400 +957 267.300 +958 158.100 +958 267.100 +959 95.600 +959 123.500 +960 107.900 +960 267.800 +962 240.600 +964 247.600 +965 230.600 +966 230.200 +966 267.900 +967 96.100 +967 231.700 +968 222.900 +969 287.600 +970 96.700 +971 247.300 +972 158.300 +972 201.400 +972 231.800 +972 269.800 +975 97.200 +975 231.700 +975 278.400 +976 97.400 +976 230.600 +977 83.400 +977 230.100 +977 286.200 +978 246.700 +979 230.500 +979 267.200 +980 95.200 +980 174.800 +981 216.300 +981 227.700 +981 247.100 +982 83.900 +982 144.500 +982 217.100 +983 83.400 +983 123.400 +984 97.500 +984 267.200 +985 95.400 +985 232.000 +985 267.400 +986 247.300 +987 97.300 +987 158.100 +987 267.100 +988 82.800 +988 231.000 +988 267.700 +990 144.400 +991 96.600 +991 156.700 +991 247.100 +991 268.500 +993 267.600 +996 67.600 +996 107.800 +996 144.200 +996 245.800 +996 267.300 +997 81.700 +997 174.600 +997 197.100 +998 267.500 +999 233.000 +999 267.900 +1000 122.300 +1000 143.500 +1000 231.100 +1000 246.900 +1000 267.200 +1001 83.500 +1001 230.200 +1001 265.900 +1002 123.400 +1002 267.400 +1004 247.100 +1005 83.900 +1005 158.600 +1005 246.900 +1006 82.800 +1006 230.800 +1006 267.600 +1007 268.700 +1008 158.200 +1008 231.200 +1010 240.800 +1010 267.700 +1011 218.300 +1012 232.000 +1013 231.700 +1013 269.600 +1014 83.900 +1014 96.500 +1014 123.300 +1014 176.200 +1014 216.800 +1015 232.300 +1015 247.600 +1017 96.600 +1017 174.400 +1017 198.100 +1017 215.900 +1017 243.500 +1017 265.100 +1018 247.800 +1018 287.800 +1020 231.900 +1021 143.600 +1021 217.100 +1022 97.500 +1022 232.000 +1022 270.400 +1022 288.900 +1023 69.700 +1023 133.300 +1023 217.100 +1023 268.400 +1024 265.100 +1026 96.900 +1026 225.100 +1027 247.500 +1027 267.100 +1029 59.300 +1029 83.400 +1030 267.500 +1031 174.100 +1031 231.600 +1031 247.500 +1031 289.400 +1032 83.500 +1032 97.300 +1032 134.400 +1032 217.100 +1032 232.100 +1032 267.600 +1033 82.000 +1033 96.800 +1033 124.400 +1033 216.200 +1033 240.100 +1033 267.500 +1034 83.600 +1034 264.700 +1035 247.600 +1036 247.200 +1036 286.900 +1037 59.000 +1037 107.700 +1037 158.000 +1038 158.400 +1039 95.100 +1039 267.700 +1040 95.600 +1040 217.500 +1040 229.600 +1041 247.200 +1043 267.500 +1045 246.600 +1046 97.100 +1046 231.600 +1048 97.300 +1048 247.300 +1049 216.300 +1049 231.600 +1050 53.400 +1050 83.200 +1050 110.600 +1050 233.200 +1051 144.300 +1052 81.600 +1052 158.200 +1052 203.700 +1052 218.400 +1053 60.400 +1053 84.000 +1053 277.300 +1054 247.600 +1054 269.700 +1055 52.700 +1055 123.400 +1055 246.800 +1055 267.600 +1056 233.000 +1057 247.400 +1057 267.300 +1058 83.500 +1058 269.100 +1059 159.200 +1060 83.700 +1060 216.500 +1060 247.100 +1061 158.200 +1062 268.000 +1062 287.600 +1063 131.000 +1064 247.500 +1064 274.800 +1065 246.100 +1066 269.300 +1067 59.500 +1067 97.300 +1068 96.500 +1068 267.400 +1069 94.900 +1069 105.000 +1069 130.600 +1069 230.800 +1069 267.700 +1070 247.600 +1072 217.200 +1072 241.000 +1073 243.900 +1073 264.400 +1075 57.800 +1075 82.800 +1075 142.900 +1075 232.300 +1075 267.600 +1076 60.800 +1076 225.400 +1077 157.400 +1077 269.300 +1077 287.400 +1078 98.500 +1078 174.600 +1078 232.100 +1078 286.900 +1079 217.500 +1079 233.400 +1080 97.400 +1080 243.200 +1081 73.000 +1081 90.000 +1081 97.100 +1081 267.400 +1082 244.300 +1083 132.900 +1084 225.600 +1084 233.300 +1084 265.600 +1086 232.000 +1087 83.700 +1087 217.200 +1087 231.800 +1087 267.200 +1088 245.800 +1088 287.100 +1089 266.900 +1090 53.100 +1090 82.600 +1090 125.700 +1090 144.700 +1090 157.900 +1090 228.500 +1091 60.300 +1091 81.800 +1091 230.500 +1091 267.300 +1092 217.200 +1092 241.200 +1092 282.900 +1093 232.400 +1094 240.000 +1096 218.100 +1097 59.200 +1099 244.300 +1100 158.900 +1100 247.200 +1100 270.100 +1102 110.500 +1102 278.000 +1103 124.000 +1104 144.300 +1104 245.800 +1105 231.800 +1106 83.300 +1107 83.600 +1107 108.100 +1107 217.300 +1107 267.200 +1108 227.200 +1109 95.900 +1109 226.700 +1110 56.600 +1110 278.700 +1111 83.000 +1111 142.200 +1111 227.900 +1111 247.700 +1112 98.300 +1112 131.700 +1112 218.700 +1112 268.000 +1113 217.300 +1114 286.500 +1115 53.200 +1115 83.500 +1115 97.300 +1115 143.800 +1115 231.000 +1115 247.500 +1116 215.200 +1116 269.300 +1118 144.900 +1118 232.100 +1119 82.800 +1119 218.700 +1119 232.300 +1120 244.200 +1121 247.400 +1122 53.500 +1122 69.800 +1123 97.400 +1123 229.800 +1123 287.700 +1124 247.600 +1124 270.000 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_9_e_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_9_e_pop.dat new file mode 100644 index 000000000..524e41276 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_9_e_pop.dat @@ -0,0 +1,1225 @@ +sender time_ms +0 174.400 +0 243.800 +1 287.700 +3 156.300 +3 215.800 +4 95.000 +6 246.800 +6 267.700 +7 287.000 +9 266.900 +12 267.800 +13 247.300 +13 288.900 +14 216.700 +14 246.900 +14 287.200 +15 218.500 +16 95.800 +16 174.000 +20 81.700 +20 267.800 +22 267.500 +26 83.100 +27 216.700 +28 144.200 +28 267.700 +28 287.200 +29 278.600 +30 133.400 +31 96.800 +31 110.200 +32 82.700 +32 247.300 +32 288.100 +33 174.500 +33 267.700 +33 288.300 +34 285.900 +36 123.600 +36 267.600 +37 216.100 +39 176.000 +40 83.100 +40 157.500 +40 240.700 +40 278.100 +41 197.300 +41 267.300 +41 287.600 +42 84.100 +42 287.500 +43 56.700 +43 134.300 +43 158.200 +43 230.400 +46 247.500 +48 58.700 +48 174.400 +48 247.100 +48 267.800 +48 288.700 +49 83.400 +49 182.500 +49 216.500 +49 246.100 +49 269.000 +50 267.700 +51 267.400 +51 287.400 +54 247.600 +55 217.500 +56 217.700 +57 172.000 +58 69.700 +59 61.400 +59 144.500 +59 216.400 +59 268.100 +60 175.600 +61 247.200 +62 266.900 +64 216.400 +65 144.400 +65 267.300 +66 194.400 +68 278.800 +69 57.000 +69 134.400 +70 267.100 +71 109.500 +71 187.800 +71 217.600 +71 288.600 +72 156.000 +72 195.400 +73 267.200 +74 96.700 +74 174.700 +74 247.600 +76 174.500 +77 83.500 +77 217.200 +77 287.100 +78 83.200 +79 287.200 +82 247.400 +82 267.500 +82 279.300 +84 54.100 +84 83.100 +84 139.500 +85 267.500 +87 173.500 +87 267.200 +89 217.000 +90 54.300 +90 144.000 +90 282.100 +92 264.900 +93 267.100 +94 157.600 +96 108.600 +96 217.700 +98 60.300 +98 175.400 +98 203.000 +98 216.900 +98 247.300 +99 217.600 +100 246.300 +100 267.200 +101 247.700 +101 267.600 +102 201.600 +102 267.900 +104 59.200 +104 124.200 +104 157.900 +104 267.100 +105 217.500 +106 155.900 +106 174.600 +107 218.300 +109 157.100 +110 286.400 +111 297.500 +112 247.700 +112 267.500 +115 217.300 +118 82.700 +118 267.900 +118 287.700 +119 281.900 +120 56.900 +122 281.400 +125 111.000 +125 144.600 +126 216.600 +127 247.500 +128 278.800 +129 247.500 +129 287.300 +131 247.200 +132 196.800 +132 267.600 +133 217.300 +133 278.200 +134 82.600 +134 244.500 +134 268.600 +135 216.000 +136 97.200 +136 247.800 +136 267.800 +137 96.700 +137 287.400 +138 60.600 +138 144.800 +138 267.700 +139 97.100 +139 172.800 +140 69.300 +141 247.100 +141 287.800 +142 53.600 +142 81.200 +142 124.100 +142 287.500 +144 216.900 +144 247.500 +144 267.600 +144 286.600 +145 158.500 +148 144.500 +150 287.600 +151 185.700 +151 217.400 +151 287.600 +152 68.400 +152 247.200 +153 247.800 +153 267.300 +154 176.200 +155 174.400 +155 265.000 +156 68.600 +156 228.000 +156 298.500 +157 70.800 +157 247.300 +157 287.500 +159 216.200 +161 287.800 +164 110.100 +164 216.100 +166 83.300 +166 216.500 +166 267.300 +167 270.600 +167 279.300 +167 294.900 +170 110.400 +170 173.000 +170 203.400 +170 286.000 +171 110.500 +172 195.100 +173 278.900 +174 267.100 +175 123.900 +175 244.800 +175 267.700 +176 217.400 +176 241.500 +177 175.300 +177 246.400 +178 83.100 +181 278.400 +182 288.100 +183 157.600 +184 175.300 +186 247.400 +188 231.500 +188 287.200 +190 83.300 +190 265.100 +191 247.000 +192 286.100 +193 247.600 +193 286.500 +198 83.300 +198 172.800 +198 247.700 +198 267.900 +199 157.900 +199 217.500 +199 245.800 +199 267.500 +199 287.800 +200 247.200 +201 158.100 +201 267.600 +202 175.000 +202 216.500 +202 247.900 +203 246.700 +204 263.600 +207 215.500 +207 288.000 +208 53.600 +208 205.300 +211 60.900 +211 82.200 +211 123.800 +211 144.200 +211 188.500 +211 217.000 +213 217.700 +214 247.300 +214 267.800 +214 287.700 +215 241.200 +218 244.400 +218 286.700 +220 53.700 +220 247.200 +223 96.800 +227 83.200 +227 267.200 +228 82.800 +228 246.700 +229 157.900 +229 216.900 +229 246.700 +230 267.500 +231 247.300 +233 187.400 +233 297.000 +234 174.700 +237 287.200 +238 72.700 +238 286.800 +239 175.300 +241 267.600 +242 53.500 +242 195.200 +242 287.500 +243 123.800 +243 269.600 +244 82.300 +244 158.400 +244 216.900 +244 265.400 +244 287.700 +245 287.500 +246 232.000 +247 268.000 +248 248.100 +249 247.400 +251 247.800 +252 267.400 +253 144.400 +255 287.500 +256 196.800 +257 69.300 +257 247.300 +257 267.300 +258 97.500 +258 123.500 +258 152.000 +261 216.000 +262 97.100 +262 217.400 +262 265.600 +263 144.200 +264 197.800 +265 97.500 +265 288.100 +266 217.000 +267 247.900 +269 175.400 +269 267.000 +270 286.800 +271 157.300 +272 217.700 +272 246.600 +273 215.700 +275 217.500 +276 134.900 +276 217.400 +279 173.900 +279 246.300 +280 84.100 +280 267.400 +282 267.700 +283 267.200 +284 97.200 +285 101.800 +285 217.800 +286 275.800 +287 247.300 +288 217.400 +288 264.100 +289 176.300 +289 203.100 +289 229.200 +289 248.300 +291 83.400 +291 231.600 +292 232.300 +294 269.300 +294 287.200 +295 83.800 +295 248.000 +295 267.500 +295 284.000 +297 83.000 +297 123.600 +297 139.500 +297 247.000 +298 59.400 +298 83.200 +298 124.500 +299 247.400 +299 278.400 +300 123.400 +300 245.800 +300 267.200 +301 264.200 +302 267.000 +303 54.000 +303 287.500 +304 216.900 +305 268.100 +307 278.700 +308 217.000 +308 265.000 +309 158.200 +311 157.900 +311 217.500 +311 247.000 +311 267.200 +312 60.200 +312 287.200 +314 298.800 +315 68.600 +315 82.600 +315 158.100 +316 158.300 +317 123.900 +317 158.300 +317 267.400 +318 174.400 +318 267.600 +318 286.900 +319 216.200 +319 267.200 +320 247.400 +322 158.500 +323 269.900 +323 295.500 +324 96.100 +324 158.400 +324 247.000 +324 274.500 +325 247.500 +325 266.900 +326 229.800 +327 183.800 +327 217.600 +327 267.300 +328 217.500 +328 247.800 +329 56.600 +329 83.300 +329 278.600 +330 97.600 +331 245.800 +332 244.500 +333 110.800 +333 123.200 +333 174.600 +333 287.900 +336 82.500 +336 205.200 +337 122.600 +337 216.000 +338 231.500 +338 248.200 +339 72.300 +339 158.300 +340 83.900 +340 144.200 +340 158.000 +341 174.000 +342 286.600 +343 83.400 +343 110.800 +343 247.800 +346 217.600 +348 175.800 +348 232.100 +348 275.700 +349 106.200 +349 176.100 +349 217.200 +349 246.600 +350 176.300 +352 228.200 +353 248.000 +354 246.500 +355 217.900 +355 247.700 +355 267.300 +356 82.300 +356 231.300 +357 270.000 +357 278.400 +358 248.200 +359 97.700 +359 267.400 +360 247.100 +362 144.500 +363 144.500 +363 195.000 +363 217.100 +364 216.800 +365 217.400 +366 97.300 +366 268.300 +368 267.300 +370 246.300 +372 241.200 +372 267.300 +373 108.900 +373 287.500 +375 218.300 +376 56.800 +376 123.800 +376 267.300 +378 123.100 +380 97.000 +380 197.500 +380 246.900 +381 248.000 +382 286.600 +383 247.400 +384 248.000 +385 83.200 +385 217.700 +385 267.000 +386 83.400 +387 216.900 +389 110.600 +389 175.000 +389 278.400 +391 175.200 +391 204.200 +391 267.800 +391 278.500 +392 277.200 +393 267.500 +395 288.200 +396 60.600 +396 283.900 +397 157.900 +397 247.500 +397 267.600 +399 124.000 +399 157.100 +399 267.200 +399 286.700 +400 217.500 +401 50.200 +401 188.600 +402 96.900 +402 232.300 +403 267.700 +403 289.600 +404 110.800 +404 267.000 +405 53.600 +405 123.500 +405 158.000 +405 233.100 +405 267.900 +405 283.300 +406 115.900 +406 247.300 +407 218.400 +407 247.300 +408 267.900 +409 267.100 +409 299.000 +410 216.600 +411 112.400 +411 158.200 +412 286.400 +413 268.000 +414 247.000 +418 217.200 +419 82.800 +419 197.600 +420 247.600 +421 198.000 +421 247.700 +421 267.600 +422 130.800 +422 267.500 +423 216.300 +423 287.000 +424 70.600 +424 244.300 +426 265.400 +427 123.000 +427 158.200 +427 247.500 +428 144.500 +428 267.100 +429 232.200 +429 267.700 +430 144.200 +430 267.200 +431 97.100 +431 283.700 +434 54.000 +434 232.400 +434 267.500 +435 244.900 +435 268.100 +437 244.500 +439 70.100 +440 217.800 +440 267.300 +440 285.100 +441 108.000 +442 286.500 +443 84.000 +444 266.900 +448 172.800 +448 217.800 +448 247.300 +449 298.200 +451 83.900 +451 265.700 +453 214.200 +454 157.400 +454 244.100 +456 287.500 +457 83.300 +457 110.900 +457 247.700 +457 287.100 +458 124.400 +458 174.900 +458 247.500 +458 298.700 +459 157.300 +459 248.000 +462 240.500 +462 246.500 +463 96.700 +464 123.600 +464 268.100 +465 267.400 +466 245.400 +466 270.300 +467 157.400 +470 158.300 +470 247.100 +471 247.300 +472 82.600 +472 245.100 +472 267.400 +473 83.200 +473 245.200 +474 83.700 +474 194.700 +474 247.400 +475 217.500 +475 244.800 +476 83.700 +476 267.200 +477 83.800 +478 265.200 +479 264.900 +480 50.200 +480 247.500 +480 279.100 +481 53.900 +481 145.000 +481 267.100 +481 279.200 +482 97.300 +482 216.700 +483 232.100 +483 283.000 +484 83.300 +484 217.400 +485 216.600 +485 278.400 +487 267.500 +488 216.600 +489 184.200 +489 267.300 +491 267.200 +494 122.800 +494 136.900 +494 217.700 +494 270.700 +495 82.200 +495 247.200 +496 83.600 +496 175.400 +499 60.500 +499 83.800 +502 216.400 +504 97.200 +504 296.800 +505 247.500 +506 288.000 +508 124.600 +509 267.400 +511 182.200 +511 202.900 +511 216.600 +513 155.800 +513 277.900 +515 83.500 +515 267.700 +516 109.400 +516 157.800 +516 217.400 +517 267.400 +517 286.700 +518 268.300 +520 269.900 +522 97.200 +522 130.800 +522 232.200 +523 83.300 +525 158.000 +526 174.000 +526 247.500 +527 265.300 +529 123.900 +529 217.100 +531 124.400 +532 109.300 +532 267.100 +533 230.600 +534 231.600 +534 244.300 +535 247.300 +536 246.300 +538 216.800 +539 107.700 +540 247.400 +541 144.800 +541 175.000 +542 143.600 +542 247.900 +543 54.000 +543 83.800 +543 171.300 +543 267.900 +544 157.700 +544 216.500 +546 267.800 +547 83.100 +549 278.500 +550 286.800 +553 158.600 +554 295.600 +556 157.900 +556 247.000 +556 282.900 +558 231.900 +558 265.400 +559 244.700 +561 204.000 +561 216.700 +561 267.300 +562 247.500 +562 268.400 +563 275.700 +564 158.400 +564 267.300 +565 96.800 +566 124.100 +567 279.200 +569 267.100 +569 277.600 +572 82.900 +572 269.500 +573 123.600 +573 144.500 +574 204.100 +574 267.400 +576 70.000 +576 174.400 +578 59.500 +578 248.000 +578 287.400 +579 277.400 +580 58.800 +580 247.300 +581 232.100 +583 82.500 +585 124.100 +587 246.800 +587 286.700 +588 217.300 +588 232.300 +591 82.800 +592 193.800 +592 267.300 +593 52.900 +593 144.800 +593 299.100 +595 269.100 +597 265.200 +597 286.800 +598 82.400 +598 217.000 +600 83.100 +600 202.900 +600 247.100 +601 217.600 +602 96.300 +602 283.800 +603 54.500 +603 83.700 +604 267.100 +605 244.800 +606 197.400 +606 216.900 +606 287.300 +609 54.300 +609 287.500 +610 158.000 +611 216.800 +611 267.200 +612 158.400 +612 267.800 +613 217.500 +613 244.800 +616 159.400 +616 216.900 +617 111.000 +617 158.000 +617 232.000 +619 60.300 +619 84.300 +619 131.000 +619 156.700 +619 174.400 +619 288.000 +620 155.800 +620 247.000 +621 83.800 +622 123.800 +622 143.200 +622 175.100 +623 59.300 +623 217.500 +625 286.600 +626 174.900 +627 96.300 +628 107.500 +628 144.800 +628 267.300 +629 267.700 +632 269.400 +632 281.100 +633 245.800 +634 246.900 +635 265.300 +636 60.400 +636 123.400 +636 269.400 +638 247.300 +639 131.000 +639 266.900 +640 158.000 +640 287.500 +643 83.100 +644 108.400 +645 233.100 +646 144.800 +646 175.700 +646 246.900 +647 52.500 +647 188.200 +647 247.800 +648 247.000 +649 157.900 +649 267.600 +650 176.500 +650 197.100 +650 217.300 +650 247.300 +651 188.300 +651 247.700 +652 174.400 +652 244.300 +653 246.800 +654 216.500 +654 247.000 +654 268.400 +654 287.100 +655 189.800 +655 247.400 +656 267.500 +657 58.500 +657 123.400 +657 134.000 +657 247.100 +658 244.200 +659 286.200 +660 83.700 +660 245.900 +661 216.400 +661 267.500 +662 83.600 +662 143.200 +664 267.800 +664 286.100 +665 247.700 +665 287.100 +666 123.200 +666 286.800 +667 82.700 +667 143.500 +667 174.500 +667 245.700 +667 267.600 +670 267.200 +671 97.600 +671 231.900 +671 267.700 +672 267.300 +672 287.100 +673 246.700 +674 246.900 +674 288.100 +675 124.300 +675 216.300 +676 83.200 +676 175.200 +677 267.100 +679 265.800 +681 133.600 +681 174.100 +681 267.100 +682 217.000 +683 268.000 +684 143.700 +684 246.700 +684 267.900 +686 123.900 +686 247.600 +687 157.700 +687 247.600 +688 143.500 +689 247.900 +689 267.600 +690 124.300 +691 83.100 +691 217.600 +691 247.800 +692 171.100 +692 267.400 +693 244.300 +694 247.400 +694 287.100 +695 97.400 +695 124.300 +695 265.200 +695 287.900 +696 267.700 +697 267.600 +698 230.700 +698 282.400 +699 265.200 +704 83.200 +705 265.100 +706 247.600 +707 59.700 +707 83.000 +707 109.100 +707 216.400 +707 231.700 +707 247.100 +707 267.100 +708 267.600 +709 218.500 +709 267.400 +710 83.700 +710 174.000 +710 267.600 +710 287.000 +711 247.600 +712 288.300 +713 217.200 +713 267.200 +714 174.200 +714 232.200 +715 232.200 +716 176.200 +716 268.400 +717 96.400 +717 180.100 +717 216.000 +717 267.600 +718 217.200 +719 188.600 +719 232.400 +722 216.000 +722 280.000 +724 246.500 +724 288.400 +725 216.300 +726 83.100 +726 217.800 +727 174.200 +728 246.700 +729 58.600 +729 157.600 +729 247.100 +731 131.600 +732 72.800 +732 265.300 +734 83.500 +734 175.200 +734 247.800 +735 114.400 +738 246.400 +739 247.500 +740 265.100 +741 217.600 +741 265.200 +742 174.500 +743 278.300 +745 217.900 +745 248.300 +745 267.400 +745 287.200 +746 83.300 +746 215.000 +747 123.500 +747 289.200 +748 138.200 +748 247.200 +748 278.900 +749 267.000 +750 247.000 +751 83.200 +751 123.600 +751 187.300 +751 264.700 +752 265.100 +753 188.300 +753 216.500 +753 247.900 +754 247.700 +754 267.500 +759 184.700 +759 296.900 +760 158.200 +761 144.100 +761 283.100 +762 158.000 +762 203.700 +762 287.500 +763 83.600 +763 246.500 +766 157.500 +766 197.400 +766 248.100 +766 267.000 +767 218.000 +767 247.600 +767 268.200 +767 287.400 +768 286.700 +769 216.400 +769 265.300 +772 78.500 +772 247.300 +773 287.700 +774 217.400 +774 246.600 +775 110.600 +775 216.000 +775 287.700 +777 188.400 +778 143.900 +778 244.100 +779 156.800 +781 246.800 +782 232.100 +782 245.000 +783 69.000 +783 267.200 +784 123.300 +785 267.600 +787 143.900 +788 107.300 +788 217.200 +788 247.000 +789 107.700 +791 265.500 +792 246.900 +793 284.000 +794 194.400 +795 56.500 +795 110.500 +795 158.000 +795 247.300 +796 217.000 +798 267.400 +799 56.900 +799 83.400 +799 123.200 +803 197.500 +803 232.100 +803 295.500 +804 175.300 +806 246.800 +808 157.700 +808 216.200 +810 287.700 +811 144.300 +813 82.300 +813 268.800 +814 203.600 +814 232.000 +814 247.300 +815 96.200 +817 158.000 +817 286.900 +819 201.500 +819 217.800 +819 267.500 +820 217.300 +820 230.400 +823 267.700 +824 175.500 +824 267.700 +825 217.200 +827 83.200 +828 82.300 +828 246.100 +829 157.100 +829 216.400 +829 244.400 +829 281.000 +830 70.100 +830 83.400 +830 287.300 +831 174.900 +832 246.100 +834 96.800 +834 138.400 +834 216.000 +834 229.100 +834 267.700 +835 60.500 +835 158.200 +835 287.200 +836 287.200 +837 247.900 +839 172.700 +839 267.100 +840 110.600 +840 133.700 +841 247.200 +842 142.500 +842 243.600 +842 265.000 +843 267.600 +844 60.000 +844 122.700 +844 144.700 +844 269.900 +846 57.600 +846 132.500 +846 267.400 +847 63.000 +847 70.200 +847 267.400 +848 119.100 +848 217.200 +848 268.100 +849 277.000 +850 247.200 +850 267.800 +851 247.300 +852 216.200 +852 267.500 +853 70.400 +853 83.000 +853 123.400 +857 217.900 +859 185.100 +859 267.100 +860 174.000 +860 218.100 +860 247.100 +861 265.000 +862 174.800 +862 247.000 +863 267.600 +864 267.600 +865 188.300 +865 247.300 +865 267.700 +865 287.800 +866 285.900 +867 267.600 +869 246.800 +870 187.400 +870 247.000 +870 267.600 +871 144.800 +871 246.900 +872 96.200 +872 288.300 +874 216.400 +874 267.900 +876 283.700 +877 263.400 +879 286.100 +880 216.900 +880 267.600 +881 124.400 +881 286.600 +883 83.700 +883 217.300 +885 82.500 +886 124.200 +886 218.300 +888 298.300 +889 217.400 +889 247.300 +889 267.800 +891 247.200 +891 269.800 +891 286.800 +892 247.900 +892 267.200 +893 232.100 +893 247.500 +894 143.100 +894 159.100 +894 278.800 +895 124.200 +895 174.600 +895 244.600 +897 197.600 +897 229.400 +897 247.300 +898 216.800 diff --git a/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_9_i_pop.dat b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_9_i_pop.dat new file mode 100644 index 000000000..3d54862a1 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/alpha_0.0513_spikes_9_i_pop.dat @@ -0,0 +1,268 @@ +sender time_ms +900 278.600 +901 97.600 +901 215.700 +903 114.400 +903 174.700 +904 265.900 +905 108.900 +906 243.800 +909 96.400 +909 232.800 +909 287.900 +910 217.300 +911 175.500 +912 123.800 +913 53.100 +913 175.600 +913 279.600 +913 296.600 +914 267.600 +915 216.800 +915 265.500 +916 286.900 +917 83.400 +917 174.100 +917 276.500 +918 267.200 +918 287.500 +919 247.200 +920 247.400 +920 265.300 +921 265.100 +923 215.900 +923 247.400 +923 284.000 +924 287.100 +925 268.000 +926 247.000 +926 290.400 +927 247.100 +927 288.700 +929 267.200 +930 217.500 +930 232.200 +932 174.500 +933 158.000 +933 216.700 +933 247.500 +935 170.800 +935 233.200 +936 97.400 +936 176.200 +938 185.700 +939 82.300 +939 230.800 +939 267.500 +940 158.000 +940 278.700 +945 83.200 +945 247.500 +946 143.700 +947 97.400 +947 264.500 +948 217.800 +948 246.800 +950 267.600 +951 288.700 +952 53.500 +955 144.100 +955 203.100 +955 267.500 +955 287.200 +957 123.900 +958 231.700 +959 268.000 +960 247.400 +961 107.600 +962 278.900 +963 232.300 +965 247.900 +969 217.300 +970 157.800 +972 287.800 +974 83.000 +974 267.500 +976 195.400 +977 217.100 +981 246.500 +983 122.000 +983 287.500 +986 83.600 +987 188.200 +987 214.700 +988 143.900 +988 242.900 +989 243.400 +989 268.300 +990 108.100 +991 174.800 +992 173.800 +995 231.600 +995 267.600 +996 247.100 +997 72.900 +997 175.100 +997 187.800 +998 83.100 +998 278.800 +999 267.200 +1001 267.500 +1005 247.400 +1006 58.000 +1006 83.400 +1006 159.100 +1006 283.700 +1007 241.600 +1007 287.500 +1008 247.500 +1008 267.400 +1010 216.600 +1010 267.700 +1011 201.500 +1012 157.800 +1012 267.900 +1014 59.200 +1014 109.600 +1014 247.400 +1016 68.200 +1016 144.100 +1016 188.800 +1017 157.900 +1017 244.600 +1017 267.200 +1018 247.400 +1019 158.000 +1019 247.300 +1020 217.600 +1021 217.000 +1024 185.800 +1024 246.400 +1026 287.800 +1027 265.100 +1028 277.700 +1029 158.300 +1030 97.200 +1031 247.300 +1031 267.800 +1032 283.800 +1033 247.200 +1034 281.300 +1035 267.400 +1036 217.100 +1036 267.500 +1036 287.200 +1038 96.900 +1038 246.000 +1039 72.100 +1039 174.100 +1039 277.200 +1040 144.300 +1040 268.600 +1040 285.900 +1042 246.900 +1043 217.100 +1045 247.500 +1045 267.400 +1045 286.800 +1047 158.400 +1048 267.800 +1049 96.500 +1049 215.100 +1049 232.300 +1050 247.100 +1050 267.400 +1051 175.400 +1051 197.400 +1051 232.300 +1052 287.600 +1053 83.200 +1053 267.700 +1054 123.400 +1055 267.400 +1056 94.700 +1056 269.400 +1056 287.800 +1058 230.500 +1058 247.300 +1060 217.200 +1060 247.700 +1061 216.900 +1062 82.700 +1062 143.400 +1062 286.700 +1065 159.400 +1065 267.300 +1066 217.800 +1066 267.900 +1068 265.400 +1069 267.700 +1069 287.500 +1071 83.800 +1071 275.000 +1072 265.200 +1073 231.500 +1073 246.700 +1073 267.800 +1074 175.200 +1074 268.200 +1075 267.800 +1075 287.400 +1076 247.200 +1077 288.100 +1078 247.100 +1079 158.100 +1080 247.400 +1080 267.800 +1082 174.600 +1083 268.400 +1084 131.400 +1084 144.300 +1084 247.300 +1084 287.000 +1085 284.000 +1089 267.600 +1091 203.000 +1091 265.400 +1092 265.300 +1093 83.300 +1093 217.800 +1093 230.900 +1093 247.200 +1095 217.300 +1097 247.300 +1099 61.700 +1099 82.700 +1100 81.100 +1100 142.300 +1100 278.200 +1103 157.900 +1103 187.400 +1103 267.800 +1105 216.800 +1105 283.700 +1106 215.800 +1106 232.300 +1106 299.900 +1108 216.200 +1110 185.400 +1110 216.200 +1110 267.700 +1111 123.500 +1111 217.500 +1112 267.300 +1112 288.400 +1114 108.200 +1114 277.400 +1115 267.900 +1116 190.400 +1117 247.200 +1118 216.900 +1118 247.500 +1119 187.900 +1119 204.300 +1120 230.700 +1121 267.700 +1122 265.600 +1123 217.300 +1123 248.200 diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_0.json b/python/tests/hpc_benchmark/data_check_dfi/log_0.json new file mode 100644 index 000000000..263e527f6 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_0.json @@ -0,0 +1,102 @@ +{ + "rank": 0, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_0", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 29799614, + "time_connect_local": 788294, + "time_connect_remote": 441161141, + "time_connect": 441949435, + "time_initialize": 73589, + "time_construct": 471758544, + "time_calibrate": 312052546, + "time_presimulate": 1216275467, + "time_simulate": 5138682805, + "time_total": 7138842951 + }, + "stats": { + "excitatory_firing_rate": 10.137777777777778, + "inhibitory_firing_rate": 10.755555555555556 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_1.json b/python/tests/hpc_benchmark/data_check_dfi/log_1.json new file mode 100644 index 000000000..6bbbfd2f9 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_1.json @@ -0,0 +1,102 @@ +{ + "rank": 1, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_1", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 29851411, + "time_connect_local": 717879, + "time_connect_remote": 440638564, + "time_connect": 441356443, + "time_initialize": 61021, + "time_construct": 471218740, + "time_calibrate": 312661933, + "time_presimulate": 1216295267, + "time_simulate": 5138686039, + "time_total": 7138923000 + }, + "stats": { + "excitatory_firing_rate": 5.706666666666666, + "inhibitory_firing_rate": 5.315555555555555 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_2.json b/python/tests/hpc_benchmark/data_check_dfi/log_2.json new file mode 100644 index 000000000..c70ceb3d3 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_2.json @@ -0,0 +1,102 @@ +{ + "rank": 2, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_2", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 29959572, + "time_connect_local": 770828, + "time_connect_remote": 450604637, + "time_connect": 451375465, + "time_initialize": 63394, + "time_construct": 481344121, + "time_calibrate": 306344344, + "time_presimulate": 1212527145, + "time_simulate": 5138692168, + "time_total": 7138971172 + }, + "stats": { + "excitatory_firing_rate": 5.582222222222222, + "inhibitory_firing_rate": 5.315555555555555 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_3.json b/python/tests/hpc_benchmark/data_check_dfi/log_3.json new file mode 100644 index 000000000..f4180360f --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_3.json @@ -0,0 +1,102 @@ +{ + "rank": 3, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_3", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 32122743, + "time_connect_local": 3283511, + "time_connect_remote": 491039711, + "time_connect": 494323222, + "time_initialize": 61742, + "time_construct": 526454569, + "time_calibrate": 260466142, + "time_presimulate": 1213368368, + "time_simulate": 5138683165, + "time_total": 7139033986 + }, + "stats": { + "excitatory_firing_rate": 8.87111111111111, + "inhibitory_firing_rate": 9.653333333333332 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_4.json b/python/tests/hpc_benchmark/data_check_dfi/log_4.json new file mode 100644 index 000000000..1640ffc30 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_4.json @@ -0,0 +1,102 @@ +{ + "rank": 4, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_4", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31138308, + "time_connect_local": 930786, + "time_connect_remote": 441999951, + "time_connect": 442930737, + "time_initialize": 75212, + "time_construct": 474076556, + "time_calibrate": 313885776, + "time_presimulate": 1212675176, + "time_simulate": 5138668943, + "time_total": 7139381663 + }, + "stats": { + "excitatory_firing_rate": 7.888888888888889, + "inhibitory_firing_rate": 8.231111111111112 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_5.json b/python/tests/hpc_benchmark/data_check_dfi/log_5.json new file mode 100644 index 000000000..46ff4a2c6 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_5.json @@ -0,0 +1,102 @@ +{ + "rank": 5, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_5", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 30935796, + "time_connect_local": 1137664, + "time_connect_remote": 439538435, + "time_connect": 440676099, + "time_initialize": 82102, + "time_construct": 471620508, + "time_calibrate": 306541107, + "time_presimulate": 1222415953, + "time_simulate": 5138665900, + "time_total": 7139325570 + }, + "stats": { + "excitatory_firing_rate": 13.973333333333334, + "inhibitory_firing_rate": 15.342222222222222 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_6.json b/python/tests/hpc_benchmark/data_check_dfi/log_6.json new file mode 100644 index 000000000..decccf7c3 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_6.json @@ -0,0 +1,102 @@ +{ + "rank": 6, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_6", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 30079601, + "time_connect_local": 985919, + "time_connect_remote": 440996456, + "time_connect": 441982375, + "time_initialize": 61822, + "time_construct": 472070198, + "time_calibrate": 312648814, + "time_presimulate": 1215301647, + "time_simulate": 5139084913, + "time_total": 7139167394 + }, + "stats": { + "excitatory_firing_rate": 17.657777777777778, + "inhibitory_firing_rate": 18.47111111111111 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_7.json b/python/tests/hpc_benchmark/data_check_dfi/log_7.json new file mode 100644 index 000000000..33c499c74 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_7.json @@ -0,0 +1,102 @@ +{ + "rank": 7, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_7", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 31084017, + "time_connect_local": 819431, + "time_connect_remote": 439657482, + "time_connect": 440476913, + "time_initialize": 76724, + "time_construct": 471568270, + "time_calibrate": 305823438, + "time_presimulate": 1223119501, + "time_simulate": 5138681112, + "time_total": 7139269045 + }, + "stats": { + "excitatory_firing_rate": 7.448888888888889, + "inhibitory_firing_rate": 7.111111111111112 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_8.json b/python/tests/hpc_benchmark/data_check_dfi/log_8.json new file mode 100644 index 000000000..b35392717 --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_8.json @@ -0,0 +1,102 @@ +{ + "rank": 8, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_8", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 28833055, + "time_connect_local": 653092, + "time_connect_remote": 440754426, + "time_connect": 441407518, + "time_initialize": 64326, + "time_construct": 470249065, + "time_calibrate": 304064689, + "time_presimulate": 1226184926, + "time_simulate": 5138650567, + "time_total": 7139213573 + }, + "stats": { + "excitatory_firing_rate": 7.52, + "inhibitory_firing_rate": 7.608888888888889 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/log_9.json b/python/tests/hpc_benchmark/data_check_dfi/log_9.json new file mode 100644 index 000000000..04337716f --- /dev/null +++ b/python/tests/hpc_benchmark/data_check_dfi/log_9.json @@ -0,0 +1,102 @@ +{ + "rank": 9, + "seed": 12345, + "conf": { + "num_processes": 10, + "brunel_params": { + "NE": 900, + "NI": 225, + "model_params": { + "E_L": 0.0, + "C_m": 250.0, + "tau_m": 10.0, + "t_ref": 0.5, + "Theta_rel": 20.0, + "V_reset_rel": 0.0, + "tau_syn_ex": 0.3258272240372284, + "tau_syn_in": 0.3258272240372284, + "V_m_rel": 0.0 + }, + "randomize_Vm": true, + "mean_potential": 5.7, + "sigma_potential": 7.2, + "delay": 1.5, + "JE": 0.14, + "sigma_w": 3.47, + "g": -5.0, + "stdp_params": { + "alpha": 0.0513, + "lambda": 0.1, + "mu_plus": 0.4, + "mu_minus": 0.4, + "tau_plus": 15.0, + "tau_minus": 15.0 + }, + "stdp_delay": 1.5, + "eta": 1.685, + "filestem": ".", + "poisson_rate": 20856.037200898867, + "recorder_label": "alpha_0.0513_spikes_9", + "connection_rules": { + "inhibitory": { + "rule": "fixed_indegree", + "indegree": 225 + }, + "excitatory": { + "rule": "fixed_indegree", + "indegree": 900 + } + } + }, + "simulation_params": { + "scale": 0.1, + "seed": 12345, + "simtime": 250.0, + "presimtime": 50.0, + "dt": 0.1, + "stdp": false, + "record_spikes": true, + "show_plot": false, + "raster_plot": true, + "path_name": ".", + "log_file": "log", + "use_all_to_all": false, + "check_conns": false, + "use_dc_input": false, + "verbose_log": false + } + }, + "timers": { + "time_create": 30029887, + "time_connect_local": 973490, + "time_connect_remote": 457352527, + "time_connect": 458326017, + "time_initialize": 74531, + "time_construct": 488363095, + "time_calibrate": 296281777, + "time_presimulate": 1215698989, + "time_simulate": 5138690305, + "time_total": 7139108697 + }, + "stats": { + "excitatory_firing_rate": 5.44, + "inhibitory_firing_rate": 4.746666666666666 + }, + "kernel_status": { + "time_resolution": 0.10000000149011612, + "max_spike_num_fact": 1.0, + "max_spike_per_host_fact": 1.0, + "max_remote_spike_num_fact": 1.0, + "rnd_seed": 12345, + "verbosity_level": 4, + "max_spike_buffer_size": 20, + "max_node_n_bits": 20, + "max_syn_n_bits": 6, + "max_delay_n_bits": 12, + "conn_struct_type": 0, + "spike_buffer_algo": 1, + "print_time": false, + "remove_conn_key": false, + "remote_spike_mul": false + } +} \ No newline at end of file diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot0.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot0.png new file mode 100644 index 000000000..5ec9a853d Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot0.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot1.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot1.png new file mode 100644 index 000000000..3ac90b085 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot1.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot2.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot2.png new file mode 100644 index 000000000..b39661fef Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot2.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot3.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot3.png new file mode 100644 index 000000000..52b4edd23 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot3.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot4.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot4.png new file mode 100644 index 000000000..afd8bc019 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot4.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot5.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot5.png new file mode 100644 index 000000000..978865fa6 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot5.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot6.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot6.png new file mode 100644 index 000000000..b936d4893 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot6.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot7.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot7.png new file mode 100644 index 000000000..fc47949f9 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot7.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot8.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot8.png new file mode 100644 index 000000000..99ababac4 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot8.png differ diff --git a/python/tests/hpc_benchmark/data_check_dfi/raster_plot9.png b/python/tests/hpc_benchmark/data_check_dfi/raster_plot9.png new file mode 100644 index 000000000..af07b92b5 Binary files /dev/null and b/python/tests/hpc_benchmark/data_check_dfi/raster_plot9.png differ diff --git a/python/hpc_benchmark/test_hpc_benchmark_hg/check.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_hg/check.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_hg/check.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_hg/check.sh diff --git a/python/hpc_benchmark/test_hpc_benchmark_hg/check2.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_hg/check2.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_hg/check2.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_hg/check2.sh diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/clean.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_hg/clean.sh similarity index 80% rename from python/hpc_benchmark/test_hpc_benchmark_wg/clean.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_hg/clean.sh index 1757710a9..2d072550e 100755 --- a/python/hpc_benchmark/test_hpc_benchmark_wg/clean.sh +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_hg/clean.sh @@ -1,3 +1,4 @@ rm -f alpha_*pop.dat rm -f log_*.json rm -f raster_plot*.png +rm -f tmp*.txt diff --git a/python/hpc_benchmark/test_hpc_benchmark_hg/hpc_benchmark_hg.py b/python/tests/hpc_benchmark/test_hpc_benchmark_hg/hpc_benchmark_hg.py similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_hg/hpc_benchmark_hg.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_hg/hpc_benchmark_hg.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_hg/run.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_hg/run.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_hg/run.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_hg/run.sh diff --git a/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/check.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/check.sh new file mode 100644 index 000000000..30bf35a9d --- /dev/null +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/check.sh @@ -0,0 +1 @@ +for i in $(seq 0 9); do diff raster_plot$i.png ../data_check/raster_plot$i.png; done diff --git a/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/check2.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/check2.sh new file mode 100644 index 000000000..e19fac085 --- /dev/null +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/check2.sh @@ -0,0 +1 @@ +more log_* | grep firi > tmp1.txt; more ../data_check/log_* | grep firi > tmp2.txt; diff tmp1.txt tmp2.txt diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/clean.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/clean.sh similarity index 80% rename from python/hpc_benchmark/test_hpc_benchmark_wg_640/clean.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_p2p/clean.sh index 1757710a9..2d072550e 100755 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640/clean.sh +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/clean.sh @@ -1,3 +1,4 @@ rm -f alpha_*pop.dat rm -f log_*.json rm -f raster_plot*.png +rm -f tmp*.txt diff --git a/python/hpc_benchmark/test_hpc_benchmark_p2p/hpc_benchmark_p2p.py b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/hpc_benchmark_p2p.py similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_p2p/hpc_benchmark_p2p.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_p2p/hpc_benchmark_p2p.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_p2p/run.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_p2p/run.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_p2p/run.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_p2p/run.sh diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/check.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/check.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/check.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/check.sh diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/check2.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/check2.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/check2.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/check2.sh diff --git a/python/hpc_benchmark/test_hpc_benchmark_hg/clean.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/clean.sh similarity index 80% rename from python/hpc_benchmark/test_hpc_benchmark_hg/clean.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/clean.sh index 1757710a9..2d072550e 100755 --- a/python/hpc_benchmark/test_hpc_benchmark_hg/clean.sh +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/clean.sh @@ -1,3 +1,4 @@ rm -f alpha_*pop.dat rm -f log_*.json rm -f raster_plot*.png +rm -f tmp*.txt diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg.py b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg.py similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore.py b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore.py similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore_leonardo.py b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore_leonardo.py similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore_leonardo.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_ignore_leonardo.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_jureca.py b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_jureca.py similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_jureca.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_jureca.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_leonardo.py b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_leonardo.py similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_leonardo.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/hpc_benchmark_wg_leonardo.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/run.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/run.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/run.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/run.sh diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch.sh diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch_leonardo.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch_leonardo.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch_leonardo.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg/run_sbatch_leonardo.sh diff --git a/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/check.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/check.sh new file mode 100644 index 000000000..adb8074b0 --- /dev/null +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/check.sh @@ -0,0 +1 @@ +for i in $(seq 0 9); do diff raster_plot$i.png ../data_check_dfi/raster_plot$i.png; done diff --git a/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/check2.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/check2.sh new file mode 100644 index 000000000..45cff2040 --- /dev/null +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/check2.sh @@ -0,0 +1 @@ +more log_* | grep firi > tmp1.txt; more ../data_check_dfi/log_* | grep firi > tmp2.txt; diff tmp1.txt tmp2.txt diff --git a/python/hpc_benchmark/test_hpc_benchmark_p2p/clean.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/clean.sh similarity index 80% rename from python/hpc_benchmark/test_hpc_benchmark_p2p/clean.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/clean.sh index 1757710a9..2d072550e 100755 --- a/python/hpc_benchmark/test_hpc_benchmark_p2p/clean.sh +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/clean.sh @@ -1,3 +1,4 @@ rm -f alpha_*pop.dat rm -f log_*.json rm -f raster_plot*.png +rm -f tmp*.txt diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg_fake.py b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/hpc_benchmark.py similarity index 90% rename from python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg_fake.py rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/hpc_benchmark.py index bf122d50a..87ac8cc8b 100644 --- a/python/hpc_benchmark/test_hpc_benchmark_wg_640_fake/hpc_benchmark_wg_fake.py +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/hpc_benchmark.py @@ -94,6 +94,12 @@ parser.add_argument("--seed", type=int, default=12345) parser.add_argument("--fake_mpi_proc_num", type=int, default=0) parser.add_argument("--fake_mpi_proc_id", type=int, default=0) +parser.add_argument("--scale", type=float, default=1.0) +parser.add_argument("--simtime", type=float, default=250.0) +parser.add_argument("--raster_plot", type=int, default=0) +parser.add_argument("--record_spikes", type=int, default=1) +parser.add_argument("--nhosts", type=int, default=0) + args = parser.parse_args() M_INFO = 10 @@ -107,40 +113,48 @@ mpi_id = ngpu.HostId() mpi_np = ngpu.HostNum() -#hg = ngpu.CreateHostGroup([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) +if args.nhosts != 0: + mpi_np = args.nhosts + hg = ngpu.CreateHostGroup(list(range(mpi_np))) +if args.nhosts != 0: + ngpu.SetNHosts(args.nhosts) + +if mpi_id >= mpi_np: + ngpu.MpiFinalize() + quit() + ############################################################################### # Parameter section # Define all relevant parameters: changes should be made here params = { - 'scale': 20.0, # scaling factor of the network size + 'scale': args.scale, # scaling factor of the network size # total network size = scale*11250 neurons 'seed': args.seed, # seed for random number generation - 'simtime': 250., # total simulation time in ms + 'simtime': args.simtime, # total simulation time in ms 'presimtime': 50., # simulation time until reaching equilibrium 'dt': 0.1, # simulation step 'stdp': False, # enable plastic connections [feature not properlyly implemented yet!] - 'record_spikes': True, # switch to record spikes of excitatory + 'record_spikes': (args.record_spikes != 0) , # switch to record spikes of excitatory # neurons to file 'show_plot': False, # switch to show plot at the end of simulation # disabled by default for benchmarking - 'raster_plot': False, # when record_spikes=True, depicts a raster plot + 'raster_plot': (args.raster_plot != 0) , # when record_spikes=True, depicts a raster plot 'path_name': args.path, # path where all files will have to be written 'log_file': 'log', # naming scheme for the log files - 'use_all_to_all': False, # Connect using all to all rule 'check_conns': False, # Get ConnectionId objects after build. VERY SLOW! 'use_dc_input': False, # Use DC input instead of Poisson generators - 'verbose_log': False, # Enable verbose output per MPI process + 'verbose_log': True, # Enable verbose output per MPI process } def rank_print(message): """Prints message and attaches MPI rank""" if params['verbose_log']: - print(f"MPI RANK {mpi_id}: {message}") + print(f"MPI RANK {mpi_id}: {message}", flush=True) rank_print("Simulation with {} MPI processes".format(mpi_np)) @@ -266,7 +280,6 @@ def build_network(): neurons.append(ngpu.RemoteCreate(i, 'iaf_psc_alpha', NE+NI, 1, model_params).node_seq) E_pops.append(neurons[i][0:NE]) I_pops.append(neurons[i][NE:NE+NI]) - else: neurons.append(ngpu.Create('iaf_psc_alpha', NE+NI, 1, model_params)) E_pops.append(neurons[mpi_id][0:NE]) @@ -314,7 +327,7 @@ def build_network(): if params['record_spikes']: recorder_label = 'alpha_' + str(stdp_params['alpha']) + '_spikes_' + str(mpi_id) brunel_params["recorder_label"] = recorder_label - ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 1000) + ngpu.ActivateRecSpikeTimes(neurons[mpi_id], 100) record = ngpu.CreateRecord("", ["V_m_rel"], [neurons[mpi_id][0]], [0]) time_create = perf_counter_ns() @@ -322,6 +335,8 @@ def build_network(): syn_dict_ex = None syn_dict_in = {'weight': brunel_params['g'] * JE_pA, 'delay': brunel_params['delay']} if params['stdp']: + print("error stdp") + sys.exit(1) syn_group_stdp = ngpu.CreateSynGroup('stdp', stdp_params) syn_dict_ex = {"weight": JE_pA, "delay": brunel_params['stdp_delay'], "synapse_group": syn_group_stdp} else: @@ -337,42 +352,23 @@ def build_network(): rank_print('Creating local connections.') rank_print('Connecting excitatory -> excitatory population.') - - if params['use_all_to_all']: - i_conn_rule = {'rule': 'all_to_all'} - e_conn_rule = {'rule': 'all_to_all'} - else: - i_conn_rule = {'rule': 'fixed_indegree', 'indegree': CI_distrib} - e_conn_rule = {'rule': 'fixed_indegree', 'indegree': CE_distrib} - - brunel_params["connection_rules"] = {"inhibitory": i_conn_rule, "excitatory": e_conn_rule} - - my_connect(E_pops[mpi_id], neurons[mpi_id], - e_conn_rule, syn_dict_ex) - - my_connect(I_pops[mpi_id], neurons[mpi_id], - i_conn_rule, syn_dict_in) - + time_connect_local = perf_counter_ns() rank_print('Creating remote connections.') - - for i in range(mpi_np): - for j in range(mpi_np): - if(i!=j): - rank_print('Connecting excitatory {} -> excitatory {} population.'.format(i, j)) - my_remoteconnect(i, E_pops[i], j, neurons[j], - e_conn_rule, syn_dict_ex, hg) + host_list = list(range(mpi_np)) + neurons_list = [] + E_pops_list = [] + I_pops_list = [] - rank_print('Connecting inhibitory {} -> excitatory {} population.'.format(i, j)) - - my_remoteconnect(i, I_pops[i], j, neurons[j], - i_conn_rule, syn_dict_in, hg) - - rank_print('Connecting excitatory {} -> inhibitory {} population.'.format(i, j)) + for i in range(mpi_np): + E_pops_list.append(E_pops[i]) + I_pops_list.append(I_pops[i]) + neurons_list.append(neurons[i]) - rank_print('Connecting inhibitory {} -> inhibitory {} population.'.format(i, j)) + ngpu.ConnectDistributedFixedIndegree(host_list, E_pops_list, host_list, neurons_list, CE, hg, syn_dict_ex) + ngpu.ConnectDistributedFixedIndegree(host_list, I_pops_list, host_list, neurons_list, CI, hg, syn_dict_in) # read out time used for building time_connect_remote = perf_counter_ns() @@ -412,14 +408,17 @@ def run_simulation(): time_start = perf_counter_ns() ngpu.SetKernelStatus({ - "verbosity_level": 4, + "verbosity_level": 6, "rnd_seed": params["seed"], "time_resolution": params['dt'], - "max_node_n_bits": 28, - "max_syn_n_bits": 1, + "max_node_n_bits": 31, + "max_syn_n_bits": 0, "max_spike_num_fact": 0.01, - "max_spike_per_host_fact": 0.01 + "max_spike_per_host_fact": 0.01, + "min_allowed_delay": 1.5, + "max_n_ports_warning": False }) + seed = ngpu.GetKernelStatus("rnd_seed") time_initialize = perf_counter_ns() @@ -431,17 +430,17 @@ def run_simulation(): ngpu.Calibrate() time_calibrate = perf_counter_ns() - if args.fake_mpi_proc_num > 0: - quit() - - ngpu.Simulate(params['presimtime']) - - time_presimulate = perf_counter_ns() - - ngpu.Simulate(params['simtime']) - - time_simulate = perf_counter_ns() + time_presimulate = time_calibrate + time_simulate = time_calibrate + else: + ngpu.Simulate(params['presimtime']) + + time_presimulate = perf_counter_ns() + + ngpu.Simulate(params['simtime']) + + time_simulate = perf_counter_ns() time_dict.update({ "time_initialize": time_initialize - time_start, @@ -457,12 +456,19 @@ def run_simulation(): "brunel_params": brunel_params, "simulation_params": params } + + gpu_mem_dict = { + "gpu_mem_peak": ngpu.getCUDAMemHostPeak(), + "gpu_mem_used": ngpu.getCUDAMemHostUsed(), + "gpu_mem_total": ngpu.getCUDAMemTotal() + } info_dict = { "rank": mpi_id, "seed": seed, "conf": conf_dict, - "timers": time_dict + "timers": time_dict, + "gpu_mem": gpu_mem_dict } if params['record_spikes']: diff --git a/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run.sh new file mode 100755 index 000000000..7172ee39b --- /dev/null +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run.sh @@ -0,0 +1 @@ +mpirun -n 10 --oversubscribe python hpc_benchmark.py --scale 0.1 --raster_plot 1 diff --git a/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run_sbatch.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run_sbatch.sh new file mode 100644 index 000000000..cb3123a6b --- /dev/null +++ b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run_sbatch.sh @@ -0,0 +1,16 @@ +#!/bin/bash -x +#SBATCH --account=jinb33 +#SBATCH --nodes=16 +#SBATCH --ntasks-per-node=4 +#SBATCH --cpus-per-task=32 +#SBATCH --time=01:00:00 +#SBATCH --partition=dc-gpu +#SBATCH --gres=gpu:4 +#SBATCH --output=/p/scratch/cjinb33/golosio/test/test_ngpu_hpcb_wg_out.%j +#SBATCH --error=/p/scratch/cjinb33/golosio/test/test_ngpu_hpcb_wg_err.%j +# *** start of job script *** +# Note: The current working directory at this point is +# the directory where sbatch was executed. + +export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} +srun python3 hpc_benchmark_wg_jureca.py diff --git a/python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch.sh b/python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run_sbatch_leonardo.sh similarity index 100% rename from python/hpc_benchmark/test_hpc_benchmark_wg_640/run_sbatch.sh rename to python/tests/hpc_benchmark/test_hpc_benchmark_wg_dfi/run_sbatch_leonardo.sh diff --git a/python/mpi_mem_check/README.md b/python/tests/mpi_mem_check/README.md similarity index 100% rename from python/mpi_mem_check/README.md rename to python/tests/mpi_mem_check/README.md diff --git a/python/mpi_mem_check/benchmark.sh b/python/tests/mpi_mem_check/benchmark.sh similarity index 100% rename from python/mpi_mem_check/benchmark.sh rename to python/tests/mpi_mem_check/benchmark.sh diff --git a/python/mpi_mem_check/benchmark_terminal.sh b/python/tests/mpi_mem_check/benchmark_terminal.sh similarity index 100% rename from python/mpi_mem_check/benchmark_terminal.sh rename to python/tests/mpi_mem_check/benchmark_terminal.sh diff --git a/python/mpi_mem_check/n_conn_list.txt b/python/tests/mpi_mem_check/n_conn_list.txt similarity index 100% rename from python/mpi_mem_check/n_conn_list.txt rename to python/tests/mpi_mem_check/n_conn_list.txt diff --git a/python/mpi_mem_check/n_mpi_list.txt b/python/tests/mpi_mem_check/n_mpi_list.txt similarity index 100% rename from python/mpi_mem_check/n_mpi_list.txt rename to python/tests/mpi_mem_check/n_mpi_list.txt diff --git a/python/mpi_mem_check/n_neuron_list.txt b/python/tests/mpi_mem_check/n_neuron_list.txt similarity index 100% rename from python/mpi_mem_check/n_neuron_list.txt rename to python/tests/mpi_mem_check/n_neuron_list.txt diff --git a/python/mpi_mem_check/run.sh b/python/tests/mpi_mem_check/run.sh similarity index 100% rename from python/mpi_mem_check/run.sh rename to python/tests/mpi_mem_check/run.sh diff --git a/python/mpi_mem_check/run_terminal.sh b/python/tests/mpi_mem_check/run_terminal.sh similarity index 100% rename from python/mpi_mem_check/run_terminal.sh rename to python/tests/mpi_mem_check/run_terminal.sh diff --git a/python/mpi_mem_check/summary.sh b/python/tests/mpi_mem_check/summary.sh similarity index 100% rename from python/mpi_mem_check/summary.sh rename to python/tests/mpi_mem_check/summary.sh diff --git a/python/mpi_mem_check/test.py b/python/tests/mpi_mem_check/test.py similarity index 100% rename from python/mpi_mem_check/test.py rename to python/tests/mpi_mem_check/test.py diff --git a/python/test_new_features/example2.py b/python/tests/new_features/example2.py similarity index 100% rename from python/test_new_features/example2.py rename to python/tests/new_features/example2.py diff --git a/python/tests/new_features/plot_aeif_cond_beta.py b/python/tests/new_features/plot_aeif_cond_beta.py new file mode 100644 index 000000000..463edca63 --- /dev/null +++ b/python/tests/new_features/plot_aeif_cond_beta.py @@ -0,0 +1,75 @@ +import sys + +import nestgpu as ngpu +import numpy as np + +tolerance = 0.0005 +neuron = ngpu.Create("aeif_cond_beta", 1, 3) +ngpu.SetStatus( + neuron, + { + "V_peak": 0.0, + "a": 4.0, + "b": 80.5, + "E_L": -70.6, + "g_L": 300.0, + "E_rev": [20.0, 0.0, -85.0], + "tau_decay": [40.0, 20.0, 30.0], + "tau_rise": [20.0, 10.0, 5.0], + }, +) +spike = ngpu.Create("spike_generator") +spike_times = [10.0, 400.0] +n_spikes = 2 + +# set spike times and heights +ngpu.SetStatus(spike, {"spike_times": spike_times}) +delay = [1.0, 100.0, 130.0] +weight = [0.1, 0.2, 0.5] + +conn_spec = {"rule": "all_to_all"} +for syn in range(3): + syn_spec = {"receptor": syn, "weight": weight[syn], "delay": delay[syn]} + ngpu.Connect(spike, neuron, conn_spec, syn_spec) + +record = ngpu.CreateRecord("", ["V_m"], [neuron[0]], [0]) +# voltmeter = nest.Create('voltmeter') +# nest.Connect(voltmeter, neuron) + +ngpu.Simulate(800.0) + +data_list = ngpu.GetRecordData(record) +t = [row[0] for row in data_list] +V_m = [row[1] for row in data_list] +# dmm = nest.GetStatus(voltmeter)[0] +# V_m = dmm["events"]["V_m"] +# t = dmm["events"]["times"] +# with open('test_aeif_cond_beta_nest.txt', 'w') as f: +# for i in range(len(t)): +# f.write("%s\t%s\n" % (t[i], V_m[i])) + +data = np.loadtxt("../static_tests/test_aeif_cond_beta_nest.txt", delimiter="\t") +t1 = [x[0] for x in data] +V_m1 = [x[1] for x in data] +print(len(t)) +print(len(t1)) + +dV = [V_m[i * 10 + 20] - V_m1[i] for i in range(len(t1))] +rmse = np.std(dV) / abs(np.mean(V_m)) +print("rmse : ", rmse, " tolerance: ", tolerance) +# if rmse>tolerance: +# sys.exit(1) + +# sys.exit(0) +import matplotlib.pyplot as plt + +fig1 = plt.figure(1) +plt.plot(t, V_m) +fig1.suptitle("NESTGPU") +fig2 = plt.figure(2) +plt.plot(t1, V_m1) +fig2.suptitle("NEST") +plt.draw() +plt.pause(1) +ngpu.waitenter("") +plt.close() diff --git a/python/test_new_features/test_distributions.py b/python/tests/new_features/test_distributions.py similarity index 100% rename from python/test_new_features/test_distributions.py rename to python/tests/new_features/test_distributions.py diff --git a/python/test_new_features/test_fixed_total_number.py b/python/tests/new_features/test_fixed_total_number.py similarity index 100% rename from python/test_new_features/test_fixed_total_number.py rename to python/tests/new_features/test_fixed_total_number.py diff --git a/python/test_new_features/test_new_connect.dat b/python/tests/new_features/test_new_connect.dat similarity index 100% rename from python/test_new_features/test_new_connect.dat rename to python/tests/new_features/test_new_connect.dat diff --git a/python/test_new_features/test_new_connect.py b/python/tests/new_features/test_new_connect.py similarity index 100% rename from python/test_new_features/test_new_connect.py rename to python/tests/new_features/test_new_connect.py diff --git a/python/test_new_features/tmp.py b/python/tests/new_features/tmp.py similarity index 100% rename from python/test_new_features/tmp.py rename to python/tests/new_features/tmp.py diff --git a/python/tests/static_tests/analyze_connect_distributed_fixed_indegree.py b/python/tests/static_tests/analyze_connect_distributed_fixed_indegree.py new file mode 100644 index 000000000..8a4ce2946 --- /dev/null +++ b/python/tests/static_tests/analyze_connect_distributed_fixed_indegree.py @@ -0,0 +1,23 @@ +import numpy as np + +data1 = np.loadtxt('tmp1.dat') +data2 = np.loadtxt('tmp2.dat') + +mean1 = data1.mean(axis=0) +mean2 = data2.mean(axis=0) +stdm1 = data1.std(axis=0)/np.sqrt(data1.shape[0]) +stdm2 = data2.std(axis=0)/np.sqrt(data2.shape[0]) +print(f"N. of samples: {data1.shape[0]}") +print("Indegree per host computed from simulations:") +print(f"{mean1} +- {stdm1}") +print(f"{mean2} +- {stdm2}") + +source_size =np.asarray([4, 3, 3]) +target_size = [3, 4] +indegree = 4 + +theor1 = target_size[0]*indegree*source_size / sum(source_size) +theor2 = target_size[1]*indegree*source_size / sum(source_size) +print("Theoretical:") +print(theor1) +print(theor2) diff --git a/python/test/err.py b/python/tests/static_tests/err.py similarity index 100% rename from python/test/err.py rename to python/tests/static_tests/err.py diff --git a/python/test/err_mpi.py b/python/tests/static_tests/err_mpi.py similarity index 100% rename from python/test/err_mpi.py rename to python/tests/static_tests/err_mpi.py diff --git a/python/tests/static_tests/just_import.py b/python/tests/static_tests/just_import.py new file mode 100644 index 000000000..0f2c8a9cc --- /dev/null +++ b/python/tests/static_tests/just_import.py @@ -0,0 +1 @@ +import nestgpu diff --git a/python/test/log_remote_connect.txt b/python/tests/static_tests/log_remote_connect.txt similarity index 100% rename from python/test/log_remote_connect.txt rename to python/tests/static_tests/log_remote_connect.txt diff --git a/python/test/logp3_connect.txt b/python/tests/static_tests/logp3_connect.txt similarity index 99% rename from python/test/logp3_connect.txt rename to python/tests/static_tests/logp3_connect.txt index aae630d38..2739548c8 100644 --- a/python/test/logp3_connect.txt +++ b/python/tests/static_tests/logp3_connect.txt @@ -8,10 +8,6 @@ Homepage: https://github.com/nest/nest-gpu -Calibrating ... -Allocating auxiliary GPU memory... -Sorting... -Done ######################################## Even to all {'index': 0, 'source': 0, 'target': 1, 'port': 0, 'syn_group': 0, 'delay': 1.0, 'weight': 100.0} diff --git a/python/test/logp3_getarr.txt b/python/tests/static_tests/logp3_getarr.txt similarity index 100% rename from python/test/logp3_getarr.txt rename to python/tests/static_tests/logp3_getarr.txt diff --git a/python/test/logp3_group_param.txt b/python/tests/static_tests/logp3_group_param.txt similarity index 100% rename from python/test/logp3_group_param.txt rename to python/tests/static_tests/logp3_group_param.txt diff --git a/python/test/logp3_setvar2.txt b/python/tests/static_tests/logp3_setvar2.txt similarity index 100% rename from python/test/logp3_setvar2.txt rename to python/tests/static_tests/logp3_setvar2.txt diff --git a/python/test/logp3_setvar3.txt b/python/tests/static_tests/logp3_setvar3.txt similarity index 100% rename from python/test/logp3_setvar3.txt rename to python/tests/static_tests/logp3_setvar3.txt diff --git a/python/test/logp3_syn_group.txt b/python/tests/static_tests/logp3_syn_group.txt similarity index 100% rename from python/test/logp3_syn_group.txt rename to python/tests/static_tests/logp3_syn_group.txt diff --git a/python/test/nest_iaf_psc_alpha.py b/python/tests/static_tests/nest_iaf_psc_alpha.py similarity index 100% rename from python/test/nest_iaf_psc_alpha.py rename to python/tests/static_tests/nest_iaf_psc_alpha.py diff --git a/python/test/parrot_neuron.py b/python/tests/static_tests/parrot_neuron.py similarity index 100% rename from python/test/parrot_neuron.py rename to python/tests/static_tests/parrot_neuron.py diff --git a/python/test/plot_aeif_psc_delta_multisynapse.py b/python/tests/static_tests/plot_aeif_psc_delta_multisynapse.py similarity index 100% rename from python/test/plot_aeif_psc_delta_multisynapse.py rename to python/tests/static_tests/plot_aeif_psc_delta_multisynapse.py diff --git a/python/tests/static_tests/run_sbatch_all_leonardo.sh b/python/tests/static_tests/run_sbatch_all_leonardo.sh new file mode 100644 index 000000000..9c5d944df --- /dev/null +++ b/python/tests/static_tests/run_sbatch_all_leonardo.sh @@ -0,0 +1,17 @@ +#!/bin/bash -x +#SBATCH --account=INF25_brainsta +#SBATCH --nodes=1 +#SBATCH --ntasks-per-node=1 +#SBATCH --cpus-per-task=1 +#SBATCH --time=00:01:00 +#SBATCH --partition=boost_usr_prod +#SBATCH --qos=boost_qos_dbg +#SBATCH --gres=gpu:1 +#SBATCH --output=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_test_all_out.%j +#SBATCH --error=/leonardo_scratch/large/userexternal/bgolosio/test_ngpu_test_all_err.%j +# *** start of job script *** +# Note: The current working directory at this point is +# the directory where sbatch was executed. + +export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} +srun /usr/bin/sh test_all.sh diff --git a/python/test/test_aeif_cond_alpha.py b/python/tests/static_tests/test_aeif_cond_alpha.py similarity index 100% rename from python/test/test_aeif_cond_alpha.py rename to python/tests/static_tests/test_aeif_cond_alpha.py diff --git a/python/test/test_aeif_cond_alpha_multisynapse.py b/python/tests/static_tests/test_aeif_cond_alpha_multisynapse.py similarity index 100% rename from python/test/test_aeif_cond_alpha_multisynapse.py rename to python/tests/static_tests/test_aeif_cond_alpha_multisynapse.py diff --git a/python/test/test_aeif_cond_alpha_multisynapse_nest.txt b/python/tests/static_tests/test_aeif_cond_alpha_multisynapse_nest.txt similarity index 100% rename from python/test/test_aeif_cond_alpha_multisynapse_nest.txt rename to python/tests/static_tests/test_aeif_cond_alpha_multisynapse_nest.txt diff --git a/python/test/test_aeif_cond_alpha_nest.txt b/python/tests/static_tests/test_aeif_cond_alpha_nest.txt similarity index 100% rename from python/test/test_aeif_cond_alpha_nest.txt rename to python/tests/static_tests/test_aeif_cond_alpha_nest.txt diff --git a/python/test/test_aeif_cond_beta.py b/python/tests/static_tests/test_aeif_cond_beta.py similarity index 100% rename from python/test/test_aeif_cond_beta.py rename to python/tests/static_tests/test_aeif_cond_beta.py diff --git a/python/test/test_aeif_cond_beta_multisynapse.py b/python/tests/static_tests/test_aeif_cond_beta_multisynapse.py similarity index 100% rename from python/test/test_aeif_cond_beta_multisynapse.py rename to python/tests/static_tests/test_aeif_cond_beta_multisynapse.py diff --git a/python/test/test_aeif_cond_beta_multisynapse_nest.txt b/python/tests/static_tests/test_aeif_cond_beta_multisynapse_nest.txt similarity index 100% rename from python/test/test_aeif_cond_beta_multisynapse_nest.txt rename to python/tests/static_tests/test_aeif_cond_beta_multisynapse_nest.txt diff --git a/python/test/test_aeif_cond_beta_nest.txt b/python/tests/static_tests/test_aeif_cond_beta_nest.txt similarity index 100% rename from python/test/test_aeif_cond_beta_nest.txt rename to python/tests/static_tests/test_aeif_cond_beta_nest.txt diff --git a/python/test/test_aeif_psc_alpha.py b/python/tests/static_tests/test_aeif_psc_alpha.py similarity index 100% rename from python/test/test_aeif_psc_alpha.py rename to python/tests/static_tests/test_aeif_psc_alpha.py diff --git a/python/test/test_aeif_psc_alpha_multisynapse.py b/python/tests/static_tests/test_aeif_psc_alpha_multisynapse.py similarity index 100% rename from python/test/test_aeif_psc_alpha_multisynapse.py rename to python/tests/static_tests/test_aeif_psc_alpha_multisynapse.py diff --git a/python/test/test_aeif_psc_alpha_multisynapse_nest.txt b/python/tests/static_tests/test_aeif_psc_alpha_multisynapse_nest.txt similarity index 100% rename from python/test/test_aeif_psc_alpha_multisynapse_nest.txt rename to python/tests/static_tests/test_aeif_psc_alpha_multisynapse_nest.txt diff --git a/python/test/test_aeif_psc_alpha_nest.txt b/python/tests/static_tests/test_aeif_psc_alpha_nest.txt similarity index 100% rename from python/test/test_aeif_psc_alpha_nest.txt rename to python/tests/static_tests/test_aeif_psc_alpha_nest.txt diff --git a/python/test/test_aeif_psc_delta.py b/python/tests/static_tests/test_aeif_psc_delta.py similarity index 100% rename from python/test/test_aeif_psc_delta.py rename to python/tests/static_tests/test_aeif_psc_delta.py diff --git a/python/test/test_aeif_psc_delta_nest.txt b/python/tests/static_tests/test_aeif_psc_delta_nest.txt similarity index 100% rename from python/test/test_aeif_psc_delta_nest.txt rename to python/tests/static_tests/test_aeif_psc_delta_nest.txt diff --git a/python/test/test_aeif_psc_exp.py b/python/tests/static_tests/test_aeif_psc_exp.py similarity index 100% rename from python/test/test_aeif_psc_exp.py rename to python/tests/static_tests/test_aeif_psc_exp.py diff --git a/python/test/test_aeif_psc_exp_multisynapse.py b/python/tests/static_tests/test_aeif_psc_exp_multisynapse.py similarity index 100% rename from python/test/test_aeif_psc_exp_multisynapse.py rename to python/tests/static_tests/test_aeif_psc_exp_multisynapse.py diff --git a/python/test/test_aeif_psc_exp_multisynapse_nest.txt b/python/tests/static_tests/test_aeif_psc_exp_multisynapse_nest.txt similarity index 100% rename from python/test/test_aeif_psc_exp_multisynapse_nest.txt rename to python/tests/static_tests/test_aeif_psc_exp_multisynapse_nest.txt diff --git a/python/test/test_aeif_psc_exp_nest.txt b/python/tests/static_tests/test_aeif_psc_exp_nest.txt similarity index 100% rename from python/test/test_aeif_psc_exp_nest.txt rename to python/tests/static_tests/test_aeif_psc_exp_nest.txt diff --git a/python/test/test_all.sh b/python/tests/static_tests/test_all.sh similarity index 100% rename from python/test/test_all.sh rename to python/tests/static_tests/test_all.sh diff --git a/python/test/test_brunel_array.py b/python/tests/static_tests/test_brunel_array.py similarity index 100% rename from python/test/test_brunel_array.py rename to python/tests/static_tests/test_brunel_array.py diff --git a/python/test/test_brunel_list.py b/python/tests/static_tests/test_brunel_list.py similarity index 100% rename from python/test/test_brunel_list.py rename to python/tests/static_tests/test_brunel_list.py diff --git a/python/test/test_brunel_mpi.py b/python/tests/static_tests/test_brunel_mpi.py similarity index 100% rename from python/test/test_brunel_mpi.py rename to python/tests/static_tests/test_brunel_mpi.py diff --git a/python/test/test_brunel_mpi_hg.py b/python/tests/static_tests/test_brunel_mpi_hg.py similarity index 100% rename from python/test/test_brunel_mpi_hg.py rename to python/tests/static_tests/test_brunel_mpi_hg.py diff --git a/python/test/test_brunel_outdegree.py b/python/tests/static_tests/test_brunel_outdegree.py similarity index 100% rename from python/test/test_brunel_outdegree.py rename to python/tests/static_tests/test_brunel_outdegree.py diff --git a/python/test/test_brunel_outdegree_mpi.py b/python/tests/static_tests/test_brunel_outdegree_mpi.py similarity index 100% rename from python/test/test_brunel_outdegree_mpi.py rename to python/tests/static_tests/test_brunel_outdegree_mpi.py diff --git a/python/test/test_brunel_outdegree_mpi_hg.py b/python/tests/static_tests/test_brunel_outdegree_mpi_hg.py similarity index 100% rename from python/test/test_brunel_outdegree_mpi_hg.py rename to python/tests/static_tests/test_brunel_outdegree_mpi_hg.py diff --git a/python/test/test_brunel_user_m1.py b/python/tests/static_tests/test_brunel_user_m1.py similarity index 100% rename from python/test/test_brunel_user_m1.py rename to python/tests/static_tests/test_brunel_user_m1.py diff --git a/python/test/test_connect.py b/python/tests/static_tests/test_connect.py similarity index 98% rename from python/test/test_connect.py rename to python/tests/static_tests/test_connect.py index 9510b4df6..9cc706087 100644 --- a/python/test/test_connect.py +++ b/python/tests/static_tests/test_connect.py @@ -1,6 +1,8 @@ import ctypes import nestgpu as ngpu +ngpu.SetKernelStatus("verbosity_level", 0) + N = 5 neuron = ngpu.Create("aeif_cond_beta_multisynapse", 2*N) diff --git a/python/tests/static_tests/test_connect_distributed_fixed_indegree.py b/python/tests/static_tests/test_connect_distributed_fixed_indegree.py new file mode 100644 index 000000000..d1d661ef3 --- /dev/null +++ b/python/tests/static_tests/test_connect_distributed_fixed_indegree.py @@ -0,0 +1,22 @@ +import sys +import nestgpu as ngpu + +ngpu.SetKernelStatus("rnd_seed", 1234 + int(sys.argv[1])) + +ngpu.ConnectMpiInit() + +hg1 = ngpu.CreateHostGroup([0, 2, 4, 6]) + +neuron = ngpu.Create('iaf_psc_exp', 10) + +syn_spec = {'weight': 2.0, 'delay': 0.6} +indegree = 4 +source_host_list = [0, 4, 6] +source_group_list =[[3, 1, 4, 5], [5, 8, 6], [3, 4, 7]] +target_host_list = [2, 6] +target_group_list = [[9, 2, 7], [0, 3, 1, 2]] +ngpu.ConnectDistributedFixedIndegree(source_host_list, source_group_list, \ + target_host_list, target_group_list, \ + indegree, hg1, syn_spec) + +ngpu.MpiFinalize() diff --git a/python/tests/static_tests/test_connect_distributed_fixed_indegree.sh b/python/tests/static_tests/test_connect_distributed_fixed_indegree.sh new file mode 100644 index 000000000..2139194d3 --- /dev/null +++ b/python/tests/static_tests/test_connect_distributed_fixed_indegree.sh @@ -0,0 +1,16 @@ +echo "To run this test you must search the keyword" +echo "test_connect_distributed_fixed_indegree in the file" +echo "src/remote_connect.h, uncomment the next line, rebuild" +echo "and reinstall NEST GPU" +echo "Remember to comment it again, rebuild and reinstall NEST GPU after the test!" +echo +:> tmp1.dat +:> tmp2.dat +N=100 +echo "Progress:" +for seed in $(seq 1 $N); do + echo "$seed / $N" + (mpirun -np 7 python test_connect_distributed_fixed_indegree.py $seed | grep 'TDFID 2,' | awk '{print $NF}' | while read a; do echo -n "$a "; done; echo "0 0 0") | awk '{print $1, $2, $3}' >> tmp1.dat + (mpirun -np 7 python test_connect_distributed_fixed_indegree.py $seed | grep 'TDFID 6,' | awk '{print $NF}' | while read a; do echo -n "$a "; done; echo "0 0 0") | awk '{print $1, $2, $3}' >> tmp2.dat +done +python analyze_connect_distributed_fixed_indegree.py diff --git a/python/tests/static_tests/test_distributed_fixed_indegree.sh b/python/tests/static_tests/test_distributed_fixed_indegree.sh new file mode 100644 index 000000000..1a026fd8a --- /dev/null +++ b/python/tests/static_tests/test_distributed_fixed_indegree.sh @@ -0,0 +1 @@ +mpirun -np 3 python just_import.py diff --git a/python/test/test_distribution.py b/python/tests/static_tests/test_distribution.py similarity index 97% rename from python/test/test_distribution.py rename to python/tests/static_tests/test_distribution.py index f7a8f6204..2c561ed4a 100644 --- a/python/test/test_distribution.py +++ b/python/tests/static_tests/test_distribution.py @@ -10,7 +10,7 @@ l = ngpu.GetStatus(neuron, "V_m") d=[] for elem in l: - d.append(elem[0]) + d.append(elem) print (len(d)) import matplotlib.pyplot as plt diff --git a/python/test/test_ext_neuron.py b/python/tests/static_tests/test_ext_neuron.py similarity index 100% rename from python/test/test_ext_neuron.py rename to python/tests/static_tests/test_ext_neuron.py diff --git a/python/test/test_fast_iaf_psc_exp_nest.txt b/python/tests/static_tests/test_fast_iaf_psc_exp_nest.txt similarity index 100% rename from python/test/test_fast_iaf_psc_exp_nest.txt rename to python/tests/static_tests/test_fast_iaf_psc_exp_nest.txt diff --git a/python/test/test_fixed_total_number.py b/python/tests/static_tests/test_fixed_total_number.py similarity index 100% rename from python/test/test_fixed_total_number.py rename to python/tests/static_tests/test_fixed_total_number.py diff --git a/python/test/test_getarr.py b/python/tests/static_tests/test_getarr.py similarity index 100% rename from python/test/test_getarr.py rename to python/tests/static_tests/test_getarr.py diff --git a/python/test/test_group_param.py b/python/tests/static_tests/test_group_param.py similarity index 100% rename from python/test/test_group_param.py rename to python/tests/static_tests/test_group_param.py diff --git a/python/test/test_iaf_psc_alpha.py b/python/tests/static_tests/test_iaf_psc_alpha.py similarity index 100% rename from python/test/test_iaf_psc_alpha.py rename to python/tests/static_tests/test_iaf_psc_alpha.py diff --git a/python/test/test_iaf_psc_alpha_nest.txt b/python/tests/static_tests/test_iaf_psc_alpha_nest.txt similarity index 100% rename from python/test/test_iaf_psc_alpha_nest.txt rename to python/tests/static_tests/test_iaf_psc_alpha_nest.txt diff --git a/python/test/test_iaf_psc_exp.py b/python/tests/static_tests/test_iaf_psc_exp.py similarity index 100% rename from python/test/test_iaf_psc_exp.py rename to python/tests/static_tests/test_iaf_psc_exp.py diff --git a/python/test/test_iaf_psc_exp_g.py b/python/tests/static_tests/test_iaf_psc_exp_g.py similarity index 100% rename from python/test/test_iaf_psc_exp_g.py rename to python/tests/static_tests/test_iaf_psc_exp_g.py diff --git a/python/test/test_iaf_psc_exp_hc.py b/python/tests/static_tests/test_iaf_psc_exp_hc.py similarity index 100% rename from python/test/test_iaf_psc_exp_hc.py rename to python/tests/static_tests/test_iaf_psc_exp_hc.py diff --git a/python/test/test_iaf_psc_exp_nest.txt b/python/tests/static_tests/test_iaf_psc_exp_nest.txt similarity index 100% rename from python/test/test_iaf_psc_exp_nest.txt rename to python/tests/static_tests/test_iaf_psc_exp_nest.txt diff --git a/python/test/test_izh.py b/python/tests/static_tests/test_izh.py similarity index 100% rename from python/test/test_izh.py rename to python/tests/static_tests/test_izh.py diff --git a/python/test/test_izh_nest.txt b/python/tests/static_tests/test_izh_nest.txt similarity index 100% rename from python/test/test_izh_nest.txt rename to python/tests/static_tests/test_izh_nest.txt diff --git a/python/test/test_izh_psc_exp_2s_mpi.py b/python/tests/static_tests/test_izh_psc_exp_2s_mpi.py similarity index 100% rename from python/test/test_izh_psc_exp_2s_mpi.py rename to python/tests/static_tests/test_izh_psc_exp_2s_mpi.py diff --git a/python/test/test_izh_psc_exp_2s_mpi_hg.py b/python/tests/static_tests/test_izh_psc_exp_2s_mpi_hg.py similarity index 100% rename from python/test/test_izh_psc_exp_2s_mpi_hg.py rename to python/tests/static_tests/test_izh_psc_exp_2s_mpi_hg.py diff --git a/python/test/test_mpi.sh b/python/tests/static_tests/test_mpi.sh similarity index 86% rename from python/test/test_mpi.sh rename to python/tests/static_tests/test_mpi.sh index 56f3e7ba8..3e9f893dd 100755 --- a/python/test/test_mpi.sh +++ b/python/tests/static_tests/test_mpi.sh @@ -1,7 +1,7 @@ mpi_pass_str[0]="MPI TEST PASSED" mpi_pass_str[1]="MPI TEST NOT PASSED" :>log.txt -for fn in test_brunel_mpi.py test_brunel_outdegree_mpi.py test_izh_psc_exp_2s_mpi.py; do +for fn in test_brunel_mpi.py test_brunel_outdegree_mpi.py test_izh_psc_exp_2s_mpi.py test_remote_connection_maps.py; do mpirun -np 2 python3 $fn >> log.txt 2>err.txt res=$? cat err.txt >> log.txt diff --git a/python/test/test_remote_connect.py b/python/tests/static_tests/test_remote_connect.py similarity index 100% rename from python/test/test_remote_connect.py rename to python/tests/static_tests/test_remote_connect.py diff --git a/python/test/test_remote_connect.sh b/python/tests/static_tests/test_remote_connect.sh similarity index 100% rename from python/test/test_remote_connect.sh rename to python/tests/static_tests/test_remote_connect.sh diff --git a/python/tests/static_tests/test_remote_connection_maps.py b/python/tests/static_tests/test_remote_connection_maps.py new file mode 100644 index 000000000..5d7017095 --- /dev/null +++ b/python/tests/static_tests/test_remote_connection_maps.py @@ -0,0 +1,45 @@ +import sys +import math +import ctypes +import nestgpu as ngpu +from random import randrange +import numpy as np + + +ngpu.ConnectMpiInit(); +mpi_np = ngpu.HostNum() + +if mpi_np != 2: + print ("Usage: mpirun -np 2 python %s" % sys.argv[0]) + quit() + +mpi_id = ngpu.HostId() +print("Building on host ", mpi_id, " ...") + +ngpu.SetKernelStatus({"check_node_maps": True, "rnd_seed": 1234}) # seed for GPU random numbers + +neuron = ngpu.Create('iaf_psc_exp', 200) + +delay = 2.0 +weight = 1.0 +syn_spec = {'weight': weight, 'delay': delay} + +conn_spec1 = {"rule": "fixed_total_number", "total_num": 50} +conn_spec2 = {"rule": "fixed_total_number", "total_num": 200} + +ngpu.RemoteConnect(0, neuron, 1, neuron, conn_spec1, syn_spec) +ngpu.RemoteConnect(0, neuron[80:130], 1, neuron, conn_spec2, syn_spec) +ngpu.RemoteConnect(0, neuron, 1, neuron, conn_spec1, syn_spec) +ngpu.RemoteConnect(0, neuron[120:170], 1, neuron, conn_spec2, syn_spec) + +ngpu.RemoteConnect(1, neuron, 0, neuron, conn_spec1, syn_spec) +ngpu.RemoteConnect(1, neuron[80:130], 0, neuron, conn_spec2, syn_spec) +ngpu.RemoteConnect(1, neuron, 0, neuron, conn_spec1, syn_spec) +ngpu.RemoteConnect(1, neuron[120:170], 0, neuron, conn_spec2, syn_spec) + +ngpu.Calibrate + +ngpu.MpiFinalize() + + + diff --git a/python/test/test_remote_spikes.py b/python/tests/static_tests/test_remote_spikes.py similarity index 100% rename from python/test/test_remote_spikes.py rename to python/tests/static_tests/test_remote_spikes.py diff --git a/python/test/test_remote_spikes_host_group_mix.py b/python/tests/static_tests/test_remote_spikes_host_group_mix.py similarity index 100% rename from python/test/test_remote_spikes_host_group_mix.py rename to python/tests/static_tests/test_remote_spikes_host_group_mix.py diff --git a/python/test/test_remote_spikes_host_group_mix2.py b/python/tests/static_tests/test_remote_spikes_host_group_mix2.py similarity index 100% rename from python/test/test_remote_spikes_host_group_mix2.py rename to python/tests/static_tests/test_remote_spikes_host_group_mix2.py diff --git a/python/test/test_remote_spikes_host_group_w.py b/python/tests/static_tests/test_remote_spikes_host_group_w.py similarity index 100% rename from python/test/test_remote_spikes_host_group_w.py rename to python/tests/static_tests/test_remote_spikes_host_group_w.py diff --git a/python/test/test_remote_spikes_host_group_w2.py b/python/tests/static_tests/test_remote_spikes_host_group_w2.py similarity index 100% rename from python/test/test_remote_spikes_host_group_w2.py rename to python/tests/static_tests/test_remote_spikes_host_group_w2.py diff --git a/python/test/test_setvar.py b/python/tests/static_tests/test_setvar.py similarity index 100% rename from python/test/test_setvar.py rename to python/tests/static_tests/test_setvar.py diff --git a/python/test/test_setvar2.py b/python/tests/static_tests/test_setvar2.py similarity index 100% rename from python/test/test_setvar2.py rename to python/tests/static_tests/test_setvar2.py diff --git a/python/test/test_setvar3.py b/python/tests/static_tests/test_setvar3.py similarity index 100% rename from python/test/test_setvar3.py rename to python/tests/static_tests/test_setvar3.py diff --git a/python/test/test_spike_detector.py b/python/tests/static_tests/test_spike_detector.py similarity index 100% rename from python/test/test_spike_detector.py rename to python/tests/static_tests/test_spike_detector.py diff --git a/python/test/test_spike_times.py b/python/tests/static_tests/test_spike_times.py similarity index 100% rename from python/test/test_spike_times.py rename to python/tests/static_tests/test_spike_times.py diff --git a/python/test/test_stdp.py b/python/tests/static_tests/test_stdp.py similarity index 100% rename from python/test/test_stdp.py rename to python/tests/static_tests/test_stdp.py diff --git a/python/test/test_stdp/cases/case1.py b/python/tests/static_tests/test_stdp/cases/case1.py similarity index 100% rename from python/test/test_stdp/cases/case1.py rename to python/tests/static_tests/test_stdp/cases/case1.py diff --git a/python/test/test_stdp/cases/case10.py b/python/tests/static_tests/test_stdp/cases/case10.py similarity index 100% rename from python/test/test_stdp/cases/case10.py rename to python/tests/static_tests/test_stdp/cases/case10.py diff --git a/python/test/test_stdp/cases/case2.py b/python/tests/static_tests/test_stdp/cases/case2.py similarity index 100% rename from python/test/test_stdp/cases/case2.py rename to python/tests/static_tests/test_stdp/cases/case2.py diff --git a/python/test/test_stdp/cases/case3.py b/python/tests/static_tests/test_stdp/cases/case3.py similarity index 100% rename from python/test/test_stdp/cases/case3.py rename to python/tests/static_tests/test_stdp/cases/case3.py diff --git a/python/test/test_stdp/cases/case4.py b/python/tests/static_tests/test_stdp/cases/case4.py similarity index 100% rename from python/test/test_stdp/cases/case4.py rename to python/tests/static_tests/test_stdp/cases/case4.py diff --git a/python/test/test_stdp/cases/case5.py b/python/tests/static_tests/test_stdp/cases/case5.py similarity index 100% rename from python/test/test_stdp/cases/case5.py rename to python/tests/static_tests/test_stdp/cases/case5.py diff --git a/python/test/test_stdp/cases/case6.py b/python/tests/static_tests/test_stdp/cases/case6.py similarity index 100% rename from python/test/test_stdp/cases/case6.py rename to python/tests/static_tests/test_stdp/cases/case6.py diff --git a/python/test/test_stdp/cases/case7.py b/python/tests/static_tests/test_stdp/cases/case7.py similarity index 100% rename from python/test/test_stdp/cases/case7.py rename to python/tests/static_tests/test_stdp/cases/case7.py diff --git a/python/test/test_stdp/cases/case8.py b/python/tests/static_tests/test_stdp/cases/case8.py similarity index 100% rename from python/test/test_stdp/cases/case8.py rename to python/tests/static_tests/test_stdp/cases/case8.py diff --git a/python/test/test_stdp/cases/case9.py b/python/tests/static_tests/test_stdp/cases/case9.py similarity index 100% rename from python/test/test_stdp/cases/case9.py rename to python/tests/static_tests/test_stdp/cases/case9.py diff --git a/python/test/test_stdp/cases/swap.sh b/python/tests/static_tests/test_stdp/cases/swap.sh similarity index 100% rename from python/test/test_stdp/cases/swap.sh rename to python/tests/static_tests/test_stdp/cases/swap.sh diff --git a/python/test/test_stdp/cases/test_all.sh b/python/tests/static_tests/test_stdp/cases/test_all.sh similarity index 100% rename from python/test/test_stdp/cases/test_all.sh rename to python/tests/static_tests/test_stdp/cases/test_all.sh diff --git a/python/test/test_stdp/long_test/test_stdp.py b/python/tests/static_tests/test_stdp/long_test/test_stdp.py similarity index 100% rename from python/test/test_stdp/long_test/test_stdp.py rename to python/tests/static_tests/test_stdp/long_test/test_stdp.py diff --git a/python/test/test_stdp_list.py b/python/tests/static_tests/test_stdp_list.py similarity index 100% rename from python/test/test_stdp_list.py rename to python/tests/static_tests/test_stdp_list.py diff --git a/python/test/test_syn_group.py b/python/tests/static_tests/test_syn_group.py similarity index 100% rename from python/test/test_syn_group.py rename to python/tests/static_tests/test_syn_group.py diff --git a/python/test/test_syn_model.py b/python/tests/static_tests/test_syn_model.py similarity index 100% rename from python/test/test_syn_model.py rename to python/tests/static_tests/test_syn_model.py diff --git a/python/test/test_t_ref.py b/python/tests/static_tests/test_t_ref.py similarity index 100% rename from python/test/test_t_ref.py rename to python/tests/static_tests/test_t_ref.py diff --git a/python/test/test_user_m1.py b/python/tests/static_tests/test_user_m1.py similarity index 100% rename from python/test/test_user_m1.py rename to python/tests/static_tests/test_user_m1.py diff --git a/pythonlib/Makefile.am b/pythonlib/Makefile.am deleted file mode 100644 index 9695f6ec9..000000000 --- a/pythonlib/Makefile.am +++ /dev/null @@ -1 +0,0 @@ -python_PYTHON = nestgpu.py diff --git a/pythonlib/Makefile.in b/pythonlib/Makefile.in deleted file mode 100644 index 74005c307..000000000 --- a/pythonlib/Makefile.in +++ /dev/null @@ -1,542 +0,0 @@ -# Makefile.in generated by automake 1.16.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2018 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ -VPATH = @srcdir@ -am__is_gnu_make = { \ - if test -z '$(MAKELEVEL)'; then \ - false; \ - elif test -n '$(MAKE_HOST)'; then \ - true; \ - elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ - true; \ - else \ - false; \ - fi; \ -} -am__make_running_with_option = \ - case $${target_option-} in \ - ?) ;; \ - *) echo "am__make_running_with_option: internal error: invalid" \ - "target option '$${target_option-}' specified" >&2; \ - exit 1;; \ - esac; \ - has_opt=no; \ - sane_makeflags=$$MAKEFLAGS; \ - if $(am__is_gnu_make); then \ - sane_makeflags=$$MFLAGS; \ - else \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - bs=\\; \ - sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ - | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ - esac; \ - fi; \ - skip_next=no; \ - strip_trailopt () \ - { \ - flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ - }; \ - for flg in $$sane_makeflags; do \ - test $$skip_next = yes && { skip_next=no; continue; }; \ - case $$flg in \ - *=*|--*) continue;; \ - -*I) strip_trailopt 'I'; skip_next=yes;; \ - -*I?*) strip_trailopt 'I';; \ - -*O) strip_trailopt 'O'; skip_next=yes;; \ - -*O?*) strip_trailopt 'O';; \ - -*l) strip_trailopt 'l'; skip_next=yes;; \ - -*l?*) strip_trailopt 'l';; \ - -[dEDm]) skip_next=yes;; \ - -[JT]) skip_next=yes;; \ - esac; \ - case $$flg in \ - *$$target_option*) has_opt=yes; break;; \ - esac; \ - done; \ - test $$has_opt = yes -am__make_dryrun = (target_option=n; $(am__make_running_with_option)) -am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = pythonlib -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/acx_mpi.m4 \ - $(top_srcdir)/m4/ct_check_cuda.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -DIST_COMMON = $(srcdir)/Makefile.am $(python_PYTHON) \ - $(am__DIST_COMMON) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -AM_V_P = $(am__v_P_@AM_V@) -am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) -am__v_P_0 = false -am__v_P_1 = : -AM_V_GEN = $(am__v_GEN_@AM_V@) -am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) -am__v_GEN_0 = @echo " GEN " $@; -am__v_GEN_1 = -AM_V_at = $(am__v_at_@AM_V@) -am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) -am__v_at_0 = @ -am__v_at_1 = -SOURCES = -DIST_SOURCES = -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) -am__installdirs = "$(DESTDIR)$(pythondir)" -am__pep3147_tweak = \ - sed -e 's|\.py$$||' -e 's|[^/]*$$|&.*.pyc &.*.pyo|' -py_compile = $(top_srcdir)/m4/py-compile -am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) -am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/m4/py-compile -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CDINCPATH = @CDINCPATH@ -CDLIBPATH = @CDLIBPATH@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -MPICC = @MPICC@ -MPICXX = @MPICXX@ -MPILIBS = @MPILIBS@ -MPI_CXXFLAGS = @MPI_CXXFLAGS@ -MPI_CXXLIBS = @MPI_CXXLIBS@ -NM = @NM@ -NMEDIT = @NMEDIT@ -NVCC = @NVCC@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OPENMP_CFLAGS = @OPENMP_CFLAGS@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -PYTHON = @PYTHON@ -PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ -PYTHON_PLATFORM = @PYTHON_PLATFORM@ -PYTHON_PREFIX = @PYTHON_PREFIX@ -PYTHON_VERSION = @PYTHON_VERSION@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -pkgpyexecdir = @pkgpyexecdir@ -pkgpythondir = @pkgpythondir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -pyexecdir = @pyexecdir@ -pythondir = @pythondir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -python_PYTHON = nestgpu.py -all: all-am - -.SUFFIXES: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ - && { if test -f $@; then exit 0; else break; fi; }; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu pythonlib/Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu pythonlib/Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(am__aclocal_m4_deps): - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs -install-pythonPYTHON: $(python_PYTHON) - @$(NORMAL_INSTALL) - @list='$(python_PYTHON)'; dlist=; list2=; test -n "$(pythondir)" || list=; \ - if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(pythondir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(pythondir)" || exit 1; \ - fi; \ - for p in $$list; do \ - if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ - if test -f $$b$$p; then \ - $(am__strip_dir) \ - dlist="$$dlist $$f"; \ - list2="$$list2 $$b$$p"; \ - else :; fi; \ - done; \ - for file in $$list2; do echo $$file; done | $(am__base_list) | \ - while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pythondir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(pythondir)" || exit $$?; \ - done || exit $$?; \ - if test -n "$$dlist"; then \ - $(am__py_compile) --destdir "$(DESTDIR)" \ - --basedir "$(pythondir)" $$dlist; \ - else :; fi - -uninstall-pythonPYTHON: - @$(NORMAL_UNINSTALL) - @list='$(python_PYTHON)'; test -n "$(pythondir)" || list=; \ - py_files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - test -n "$$py_files" || exit 0; \ - dir='$(DESTDIR)$(pythondir)'; \ - pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \ - pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \ - st=0; \ - for files in "$$py_files" "$$pyc_files" "$$pyo_files"; do \ - $(am__uninstall_files_from_dir) || st=$$?; \ - done; \ - dir='$(DESTDIR)$(pythondir)/__pycache__'; \ - echo "$$py_files" | $(am__pep3147_tweak) | $(am__base_list) | \ - while read files; do \ - $(am__uninstall_files_from_dir) || st=$$?; \ - done || exit $$?; \ - exit $$st -tags TAGS: - -ctags CTAGS: - -cscope cscopelist: - - -distdir: $(BUILT_SOURCES) - $(MAKE) $(AM_MAKEFLAGS) distdir-am - -distdir-am: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile -installdirs: - for dir in "$(DESTDIR)$(pythondir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libtool mostlyclean-am - -distclean: distclean-am - -rm -f Makefile -distclean-am: clean-am distclean-generic - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: install-pythonPYTHON - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-generic mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-pythonPYTHON - -.MAKE: install-am install-strip - -.PHONY: all all-am check check-am clean clean-generic clean-libtool \ - cscopelist-am ctags-am distclean distclean-generic \ - distclean-libtool distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-pythonPYTHON install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-generic \ - mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ - uninstall-am uninstall-pythonPYTHON - -.PRECIOUS: Makefile - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/pythonlib/nestgpu.py b/pythonlib/nestgpu.py index 49af3f062..fbd1e125d 100644 --- a/pythonlib/nestgpu.py +++ b/pythonlib/nestgpu.py @@ -1574,18 +1574,10 @@ def Simulate(sim_time=1000.0): NESTGPU_ConnectMpiInit = _nestgpu.NESTGPU_ConnectMpiInit -NESTGPU_ConnectMpiInit.argtypes = (ctypes.c_int, ctypes.POINTER(c_char_p)) NESTGPU_ConnectMpiInit.restype = ctypes.c_int def ConnectMpiInit(): "Initialize MPI connectivity" - argc=len(sys.argv) - array_char_pt_type = c_char_p * argc - c_var_name_list=[] - for i in range(argc): - c_arg = ctypes.create_string_buffer(to_byte_str(sys.argv[i]), len(sys.argv[i])+1) - c_var_name_list.append(c_arg) - ret = NESTGPU_ConnectMpiInit(ctypes.c_int(argc), - array_char_pt_type(*c_var_name_list)) + ret = NESTGPU_ConnectMpiInit() if GetErrorCode() != 0: raise ValueError(GetErrorMessage()) return ret @@ -1601,6 +1593,16 @@ def FakeConnectMpiInit(n_hosts, this_host): raise ValueError(GetErrorMessage()) return ret +NESTGPU_SetNHosts = _nestgpu.NESTGPU_SetNHosts +NESTGPU_SetNHosts.argtypes = (ctypes.c_int, ) +NESTGPU_SetNHosts.restype = ctypes.c_int +def SetNHosts(n_hosts): + "Set number of hosts when it should differ from number of MPI processes" + ret = NESTGPU_SetNHosts(ctypes.c_int(n_hosts)) + if GetErrorCode() != 0: + raise ValueError(GetErrorMessage()) + return ret + NESTGPU_HostId = _nestgpu.NESTGPU_HostId NESTGPU_HostId.restype = ctypes.c_int @@ -3134,3 +3136,182 @@ def RemoteCreate(i_host, model_name, n_node=1, n_ports=1, status_dict=None): if GetErrorCode() != 0: raise ValueError(GetErrorMessage()) return ret + + + + + +NESTGPU_ConnectDistributedFixedIndegreeSeqSeq = _nestgpu.NESTGPU_ConnectDistributedFixedIndegreeSeqSeq +NESTGPU_ConnectDistributedFixedIndegreeSeqSeq.argtypes = (ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_int, ctypes.c_int) + +NESTGPU_ConnectDistributedFixedIndegreeSeqSeq.restype = ctypes.c_int + +NESTGPU_ConnectDistributedFixedIndegreeGroupSeq = _nestgpu.NESTGPU_ConnectDistributedFixedIndegreeGroupSeq +NESTGPU_ConnectDistributedFixedIndegreeGroupSeq.argtypes = (ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_int, ctypes.c_int) + +NESTGPU_ConnectDistributedFixedIndegreeGroupSeq.restype = ctypes.c_int + +NESTGPU_ConnectDistributedFixedIndegreeSeqGroup = _nestgpu.NESTGPU_ConnectDistributedFixedIndegreeSeqGroup +NESTGPU_ConnectDistributedFixedIndegreeSeqGroup.argtypes = (ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_int, ctypes.c_int) + +NESTGPU_ConnectDistributedFixedIndegreeSeqGroup.restype = ctypes.c_int + +NESTGPU_ConnectDistributedFixedIndegreeGroupGroup = _nestgpu.NESTGPU_ConnectDistributedFixedIndegreeGroupGroup +NESTGPU_ConnectDistributedFixedIndegreeGroupGroup.argtypes = (ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_void_p, ctypes.c_int, + ctypes.c_void_p, ctypes.c_void_p, + ctypes.c_int, ctypes.c_int) + +NESTGPU_ConnectDistributedFixedIndegreeGroupSeq.restype = ctypes.c_int + + +def ConnectDistributedFixedIndegree(source_host_list, source_group_list, target_host_list, target_group_list, + indegree, host_group, syn_dict): + "Connect a list of source node groups to a list of target node groups on different mpi hosts with the \ + fixed-indegree rule" + if (type(source_host_list)!=list and type(source_host_list)!=tuple) or \ + (type(target_host_list)!=list and type(target_host_list)!=tuple): + raise ValueError("Error in host list type") + if (type(source_group_list)!=list) and (type(source_group_list)!=tuple): + raise ValueError("Unknown source group list type") + if len(source_host_list) != len(source_group_list): + raise ValueError("Inconsistent size of source_host_list and source_group_list") + if (type(source_group_list[0])==NodeSeq): + for source_group in source_group_list: + if (type(source_group)!=NodeSeq): + raise ValueError("Inconsistent source group types") + elif (type(source_group_list[0])==list or type(source_group_list[0])==tuple): + for source_group in source_group_list: + if (type(source_group)!=list and type(source_group)!=tuple): + raise ValueError("Inconsistent source group types") + else: + raise ValueError("Unknown source node type") + + if (type(target_group_list)!=list) and (type(target_group_list)!=tuple): + raise ValueError("Unknown target group list type") + if len(target_host_list) != len(target_group_list): + raise ValueError("Inconsistent size of target_host_list and target_group_list") + + if (type(target_group_list[0])==NodeSeq): + for target_group in target_group_list: + if (type(target_group)!=NodeSeq): + raise ValueError("Inconsistent target group types") + elif (type(target_group_list[0])==list or type(target_group_list[0])==tuple): + for target_group in target_group_list: + if (type(target_group)!=list and type(target_group)!=tuple): + raise ValueError("Inconsistent target group types") + else: + raise ValueError("Unknown target node type") + + gc.disable() # temporarily disable garbage collection + SynSpecInit() + + #array_size = RuleArraySize(conn_dict, source, target) # not used for now + + for param_name in syn_dict: + if SynSpecIsIntParam(param_name): + SetSynSpecIntParam(param_name, syn_dict[param_name]) + elif SynSpecIsFloatParam(param_name): + fpar = syn_dict[param_name] + #if (type(fpar)==dict): # not used for now + # SetSynParamFromArray(param_name, fpar, array_size) + #else: + SetSynSpecFloatParam(param_name, fpar) + + elif SynSpecIsFloatPtParam(param_name): + SetSynSpecFloatPtParam(param_name, syn_dict[param_name]) + else: + raise ValueError("Unknown synapse parameter") + + source_host_arr = (ctypes.c_int * len(source_host_list))(*source_host_list) + source_host_arr_pt = ctypes.cast(source_host_arr, ctypes.c_void_p) + target_host_arr = (ctypes.c_int * len(target_host_list))(*target_host_list) + target_host_arr_pt = ctypes.cast(target_host_arr, ctypes.c_void_p) + + if (type(source_group_list[0])==NodeSeq): + source_i0_list = [] + source_n_list = [] + for source_seq in source_group_list: + source_i0_list.append(source_seq.i0) + source_n_list.append(source_seq.n) + + source_i0_arr = (ctypes.c_int * len(source_i0_list))(*source_i0_list) + source_i0_arr_pt = ctypes.cast(source_i0_arr, ctypes.c_void_p) + else: + source_pt_list = [] + source_n_list = [] + for source_group in source_group_list: + source_arr = (ctypes.c_int * len(source_group))(*source_group) + source_arr_pt = ctypes.cast(source_arr, ctypes.c_void_p) + source_pt_list.append(source_arr_pt) + source_n_list.append(len(source_group)) + source_pt_arr = (ctypes.c_void_p * len(source_pt_list))(*source_pt_list) + + source_n_arr = (ctypes.c_int * len(source_n_list))(*source_n_list) + source_n_arr_pt = ctypes.cast(source_n_arr, ctypes.c_void_p) + + if (type(target_group_list[0])==NodeSeq): + target_i0_list = [] + target_n_list = [] + for target_seq in target_group_list: + target_i0_list.append(target_seq.i0) + target_n_list.append(target_seq.n) + + target_i0_arr = (ctypes.c_int * len(target_i0_list))(*target_i0_list) + target_i0_arr_pt = ctypes.cast(target_i0_arr, ctypes.c_void_p) + else: + target_pt_list = [] + target_n_list = [] + for target_group in target_group_list: + target_arr = (ctypes.c_int * len(target_group))(*target_group) + target_arr_pt = ctypes.cast(target_arr, ctypes.c_void_p) + target_pt_list.append(target_arr_pt) + target_n_list.append(len(target_group)) + target_pt_arr = (ctypes.c_void_p * len(target_pt_list))(*target_pt_list) + + target_n_arr = (ctypes.c_int * len(target_n_list))(*target_n_list) + target_n_arr_pt = ctypes.cast(target_n_arr, ctypes.c_void_p) + + if (type(source_group_list[0])==NodeSeq) and (type(target_group_list[0])==NodeSeq): + ret = NESTGPU_ConnectDistributedFixedIndegreeSeqSeq \ + (source_host_arr_pt, len(source_host_list), source_i0_arr_pt, source_n_arr_pt, \ + target_host_arr_pt, len(target_host_list), target_i0_arr_pt, target_n_arr_pt, \ + indegree, host_group) + + elif (type(source_group_list[0])==NodeSeq) and (type(target_group_list[0])!=NodeSeq): + ret = NESTGPU_ConnectDistributedFixedIndegreeSeqGroup \ + (source_host_arr_pt, len(source_host_list), source_i0_arr_pt, source_n_arr_pt, \ + target_host_arr_pt, len(target_host_list), target_pt_arr, target_n_arr_pt, \ + indegree, host_group) + + elif (type(source_group_list[0])!=NodeSeq) and (type(target_group_list[0])==NodeSeq): + ret = NESTGPU_ConnectDistributedFixedIndegreeGroupSeq \ + (source_host_arr_pt, len(source_host_list), source_pt_arr, source_n_arr_pt, \ + target_host_arr_pt, len(target_host_list), target_i0_arr_pt, target_n_arr_pt, \ + indegree, host_group) + + else: + ret = NESTGPU_ConnectDistributedFixedIndegreeGroupGroup \ + (source_host_arr_pt, len(source_host_list), source_pt_arr, source_n_arr_pt, \ + target_host_arr_pt, len(target_host_list), target_pt_arr, target_n_arr_pt, \ + indegree, host_group) + + if GetErrorCode() != 0: + raise ValueError(GetErrorMessage()) + + gc.enable() + return ret + diff --git a/src/RemoteConnections_note.txt b/src/RemoteConnections_note.txt deleted file mode 100644 index 62cb8472c..000000000 --- a/src/RemoteConnections_note.txt +++ /dev/null @@ -1,414 +0,0 @@ -Checking file spike_mpi.cu -in particular for changes that are necessary to adapt it -to the new approach -Note: it should be renamed to remote_spike.cu -the mpi communication part should be separated and placed in -a file as mpi_communication.cu - - -NExternalNodeTargetHost corresponds to d_n_target_hosts -ExternalNodeTargetHostId corresponds to d_node_target_hosts ([i_source][ith]) -ExternalNodeId corresponds to d_node_target_host_i_map ([i_source][ith]) -initialize them in the function ExternalSpikeInit -after remote connection map calibration - - -kernels PushSpikeFromRemote seem fine, but for minimum delays we'll probably -need a version in which spike time index can be specified and possibly !=0 - -It seems that the kernel AddOffset is obsolete and can be removed - -kernel PushExternalSpike seems fine - -kernel SendExternalSpike seems fine - -kernel ExternalSpikeReset seems fine - -in function ExternalSpikeInit -replace class ConnectMPI:: with NESTGPU:: -initialize: -NExternalNodeTargetHost corresponds to d_n_target_hosts -ExternalNodeTargetHostId corresponds to d_node_target_hosts ([i_source][ith]) -ExternalNodeId corresponds to d_node_target_host_i_map ([i_source][ith]) -remove variables related to MPI related time -e.g. SendSpikeToRemote_MPI_time_ -they can be renamed to MPI_send_time and MPI_recv_time -and defined in the MPI related file -remove - int *h_NExternalNodeTargetHost = new int[n_node]; - int **h_ExternalNodeTargetHostId = new int*[n_node]; - int **h_ExternalNodeId = new int*[n_node]; -and all related code -mv recv_mpi_request to MPI related file -remove loop for (int i_source=0; i_source d_n_target_hosts -d_ExternalNodeTargetHostId -> d_node_target_hosts -d_ExternalNodeId -> d_node_target_host_i_map - -move functions SendSpikeToRemote and RecvSpikeFromRemote -to mpi related file - - -in function CopySpikeFromRemote -replace class ConnectMPI:: with NESTGPU:: -remove any reference to i_remote_node_0 -NOTE: function seems fine, however what is transmitted is not the -node index, but the index in the map [source_host] -which should be used to get the node index -Maybe replace call to obsolete AddOffset kernel with search in the map -or do it in the PushSpikeFromRemote kernel - -in function JoinSpikes ... -replace prefix_scan with CUB function? -why there is no explicit copy of the cumulative sum from device to host? -is done twice! in device and in host memory separately! - - - -Better to separate the code for remote communication (i.e. MPI) -from the rest, because in principle communication can be achieved -through other protocols or methods, for instance some kind of shared memory, -a software interface to communicate spikes to other simulators, physical or virtual devices, ... -In all other files, including nestgpu.cu/h, remote_connect.cu/h, connect_rules.cu/h, ... remove any reference to MPI and its functions. -Replace mpi_id (mpi rank, MpiId(),...) with the member variable this_host_, and mpi_num_ (mpi_proc_num, ...) with n_hosts_ -In connect_rules.cu/h, in RemoteConnect(..), replace check on MPI activation -with check that source and target host are in the correct range, 0-n_hosts-1 -Remove RemoteConnectOneToOne, AllToAll, and so on - -////////////////////////////////////////////////////////////////////// -// DONE -Check that the random number generator is used consistentlyy in the code -across different files and functions and in CUDA kernels, and whether -a single generator initialized only once with a specified seed is used. -Do this check in connection generation code, in particular. -(maybe with emacs search rnd, rng, rand). - -Define a 2d array of random number generators specialized for connections, -where the rows and columns of the 2d array correspond to different hosts. -////////////////////////////////////////////////////////////////////// - - -// remote_source_node_map_index[i_source_host][i_block][i] -extern std::vector< std::vector > h_remote_source_node_map_index; -extern __device__ uint ***remote_source_node_map_index; - -// local_spike_buffer_map_index[i_source_host][i_block][i] -extern std::vector< std::vector > h_local_spike_buffer_map_index; -extern __device__ uint ***local_spike_buffer_map_index; - -int allocateNewNodeMapBlocks(// std::vector &key_subarray, - // std::vector &conn_subarray, - // int64_t block_size, - uint new_n_block); - -namespace ngpu_remote_connections -{ - // INITIALIZATION - // - // Define an array that maps remote source nodes to local spike buffers - // There is one element for each remote host (MPI process), - // so the array size is mpi_proc_num - // Each element of the array is a 2*n_remote_source_node_map array - // that represent a map, with n_remote_source_node_map pairs - // (remote node index, local spike buffer index) - // where n_remote_source_node_map is the number of nodes in the source host - // (MPI pocess) that have outgoing connections to local nodes. - // All elements are initially empty: - // n_remote_source_nodes[i_source_host] = 0 for each i_source_host - // The map is organized in blocks each with remote_node_map_block_size - // elements, which are allocated dynamically - - __constant__ int source_node_map_block_size; // = 100000; - // n_remote_source_node_map[i_source_host] - // with i_source_host = 0, ..., mpi_proc_num-1 excluding this host itself - __device__ int *n_remote_source_node_map; // [mpi_proc_num]; - int *d_n_remote_source_node_map; - - __device__ int ***remote_source_node_map_index; // [i_source_host][i_block][i] - int ***d_remote_source_node_map_index; - - __device__ int ***local_spike_buffer_map_index; // [i_source_host][i_block][i] - int ***d_local_spike_buffer_map_index; - - // Create array that maps local source nodes to remote spike buffers. - // The procedure is the same as for remote source nodes - - // n_local_source_node_map[i_target_host] - // with i_target_host = 0, ..., mpi_proc_num-1 excluding this host itself - __device__ int *n_local_source_node_map; // [mpi_proc_num]; - int *d_n_local_source_node_map; - - __device__ int ***local_source_node_map_index; // [i_target_host][i_block][i] - int ***d_local_source_node_map_index; - - // Define a boolean array with one boolean value for each connection rule - // - true if the rule always creates at least one outgoing connection - // from each source node (one_to_one, all_to_all, fixed_outdegree) - // - false otherwise (fixed_indegree, fixed_total_number, pairwise_bernoulli) - - bool use_all_source_nodes[n_connection_rules]: - - // Initialize the maps - int RemoteConnectionMapInit(int n_hosts) - { - int bs = 10000; - cudaMemcpyToSymbol(source_node_map_block_size, &bs, sizeof(int)); - gpuErrchk(cudaMalloc(&d_n_remote_source_node_map, n_hosts*sizeof(int))); - gpuErrchk(cudaMemset(d_n_remote_source_node_map, 0, n_hosts*sizeof(int))); - gpuErrchk(cudaMalloc(&d_remote_source_node_map_index, - n_hosts*sizeof(int**))); - gpuErrchk(cudaMalloc(&d_local_spike_buffer_map_index, - n_hosts*sizeof(int**))); - gpuErrchk(cudaMalloc(&d_n_local_source_node_map, n_hosts*sizeof(int))); - gpuErrchk(cudaMemset(d_n_local_source_node_map, 0, n_hosts*sizeof(int))); - gpuErrchk(cudaMalloc(&d_local_source_node_map_index, - n_hosts*sizeof(int**))); - - - // launch kernel to copy pointers to CUDA variables - // ..... - RemoteConnectionMapInitKernel // <<< , >>> - (d_n_remote_source_node_map, - d_remote_source_node_map_index, - d_local_spike_buffer_map_index, - d_n_local_source_node_map, - d_local_source_node_map_index); - - return 0; - } - - // Calibrate the maps - int RemoteConnectionMapCalibrate(int n_nodes) - { - //.... - return 0; - } - - - - - return 0; - } - -// b) CONNECT FUNCTION -// The seed for random number generation should be specific and used only by connect commands -// It should be determined by a specific seed for remote connections -// a 2d array indexed by the source host index and the target host index -// connection_rng[i_source_host][i_target_host] -// Problem: how to update the master seed? -// Maybe a single rnd extraction for any connect command, then summing MPI_Num*target_host_index + source_host_index - -connect_rnd_seed = MPI_Num*target_host_index + source_host_index - -// This seed should also be used for the delays if they are extracted from a random distribution, -// in order to evaluate the minimum delay consistently in the source and in the target host. -// OR maybe it is more efficient to send the delay from the target host to the source host throuh MPI. -// Check if target_host matches the MPI ID. In such case: -// b00) n_nodes will be the first index for new mapping of remote source nodes to local spike buffers - -if (target_host == mpi_idx && source_host != target_host) { - local_spike_buffer_map_index0 = getNodeNum(); - -// b01) If the flag UseAllSourceNodes[conn_rule] is false, than do the following -// b02) on both the source and target hosts create a temporary array of booleans having size equal to the number of source nodes - - int *d_source_node_flag; // [n_source] // each element is initially false - gpuErrchk(cudaMalloc(&d_source_node_flag, n_source*sizeof(int8_t))); - gpuErrchk(cudaMemset(d_source_node_flag, 0, n_source*sizeof(int8_t))); - -// b03) on the target hosts create a temporary array of integers having size equal to the number of source nodes - - int *d_local_node_index; // [n_source]; // only on target host - gpuErrchk(cudaMalloc(&d_local_node_index, n_source*sizeof(int))); - -// b04) The connect command is performed on both source and target host using the same initial seed and using as source node indexes the integers from 0 to n_source_nodes - 1 -// The source host uses a fake connect command, which creates temporary connections the array of connections with source and target nodes, but WITHOUT setting weights and delays. -// For both source host and target host find the minimum delay, OR send it from the target host to the source host during calibration. -// At the end the source host restores the original number of connections. -// b05) Loop on the connections (similar code as SetConnectionWeights kernel), and (atomic?) set - -source_node_flag[i_source] = true; - - Meglio inserirlo in connect.h, passare come argomento - anche source_node_flag controllare se è diverso da null - e in questo caso lanciare il kernel DOPO quello che setta i source - OPPURE codice simile a connect_one_to_one etc con calcolo di ib0 - e tutto il resto. - Forse meglio - - - int64_t n_prev_conn = 0; - uint ib0 = (uint)(old_n_conn / block_size); - uint ib1 = (uint)((n_conn + block_size - 1) / block_size); - for (uint ib=ib0; ib<=ib1; ib++) { - uint64_t n_block_conn; // number of connections in a block - uint64_t i_conn0; // index of first connection in a block - if (ib1 == ib0) { // all connections are in the same block - i_conn0 = old_n_conn % block_size; - n_block_conn = n_new_conn; // diverso da new_n_conn!!!!! - } - else if (ib == ib0) { // first block - i_conn0 = old_n_conn % block_size; - n_block_conn = block_size - i_conn0; - } - else if (ib == ib1) { // last block - i_conn0 = 0; - n_block_conn = (n_conn - 1) % block_size + 1; - } - else { - i_conn0 = 0; - n_block_conn = block_size; - } - - setOneToOneSourceTarget<<<(n_block_conn+1023)/1024, 1024>>> - (key_subarray[ib] + i_conn0, conn_subarray[ib] + i_conn0, - n_block_conn, n_prev_conn, source, target); - -// b06) Initialize n_used_source_nodes to 0 - -int n_used_source_nodes = 0; - -// b07) Count how many source_node_flag are true using atomic increase on n_used_source_nodes - -if (source_node_flag[thread_idx] == true) { - atomicInc(n_used_source_nodes){ -} - -// b08) Allocate arrays of size n_used_source_nodes - -int unsorted_source_node_index[n_used_source_nodes]; -int sorted_source_node_index[n_used_source_nodes]; -int i_source[n_used_source_nodes]; // this is the position in the arrays source_node_flag and local_node_index -bool source_node_index_to_be_mapped[n_used_source_nodes]; // initially false - -// b09) Fill the arrays using atomic increase when source_node_flag is true, as in the Count kernel - -if (source_node_flag[thread_idx] == true) { - int pos = atomicInc(i_used_source_node){ - unsorted_source_node_index[pos] = GetNodeIndex