From 31c471e28df1827750456edd5bd0c52340687cfa Mon Sep 17 00:00:00 2001 From: Jan Vogelsang <47158055+JanVogelsang@users.noreply.github.com> Date: Mon, 2 Sep 2024 20:43:35 +0200 Subject: [PATCH 1/5] Update hpc_benchmark.py --- hpc_benchmark/hpc_benchmark.py | 76 ++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 35 deletions(-) diff --git a/hpc_benchmark/hpc_benchmark.py b/hpc_benchmark/hpc_benchmark.py index 1a837aa..d54fe2d 100644 --- a/hpc_benchmark/hpc_benchmark.py +++ b/hpc_benchmark/hpc_benchmark.py @@ -396,43 +396,49 @@ def run_simulation(): step_data = {key: np.empty(total_steps) for key in step_data_keys} tic = time.time() - for d in range(presim_steps): - nest.Run(nest.min_delay) - times[d] = time.time() - tic - vmsizes[presim_steps] = get_vmsize() - vmpeaks[presim_steps] = get_vmpeak() - vmrsss[presim_steps] = get_rss() - for key in step_data_keys: - step_data[key][d] = getattr(nest, key) - - if presim_remaining_time > 0: - nest.Run(presim_remaining_time) - times[presim_steps] = time.time() - tic - vmsizes[presim_steps + sim_steps] = get_vmsize() - vmpeaks[presim_steps + sim_steps] = get_vmpeak() - vmrsss[presim_steps + sim_steps] = get_rss() - for key in step_data_keys: - step_data[key][presim_steps] = getattr(nest, key) - presim_steps += 1 + for d in range(presim_steps): + nest.Run(nest.min_delay) + times[d] = time.time() - tic + vmsizes[d] = get_vmsize() + vmpeaks[d] = get_vmpeak() + vmrsss[d] = get_rss() + for key in step_data_keys: + step_data[key][d] = getattr(nest, key) + + if presim_remaining_time > 0: + nest.Run(presim_remaining_time) + times[presim_steps] = time.time() - tic + vmsizes[presim_steps] = get_vmsize() + vmpeaks[presim_steps] = get_vmpeak() + vmrsss[presim_steps] = get_rss() + for key in step_data_keys: + step_data[key][presim_steps] = getattr(nest, key) + presim_steps += 1 + + PreparationTime = time.time() - tic + + intermediate_kernel_status = nest.kernel_status - PreparationTime = time.time() - tic - - intermediate_kernel_status = nest.kernel_status - - tic = time.time() + tic = time.time() - for d in range(sim_steps): - nest.Run(nest.min_delay) - times[presim_steps + d] = time.time() - tic - for key in step_data_keys: - step_data[key][presim_steps + d] = getattr(nest, key) - - if sim_remaining_time > 0: - nest.Run(sim_remaining_time) - times[presim_steps + sim_steps] = time.time() - tic - for key in step_data_keys: - step_data[key][presim_steps + sim_steps] = getattr(nest, key) - sim_steps += 1 + for d in range(sim_steps): + nest.Run(nest.min_delay) + times[presim_steps + d] = time.time() - tic + vmsizes[presim_steps + d] = get_vmsize() + vmpeaks[presim_steps + d] = get_vmpeak() + vmrsss[presim_steps + d] = get_rss() + for key in step_data_keys: + step_data[key][presim_steps + d] = getattr(nest, key) + + if sim_remaining_time > 0: + nest.Run(sim_remaining_time) + times[presim_steps + sim_steps] = time.time() - tic + vmsizes[presim_steps + sim_steps] = get_vmsize() + vmpeaks[presim_steps + sim_steps] = get_vmpeak() + vmrsss[presim_steps + sim_steps] = get_rss() + for key in step_data_keys: + step_data[key][presim_steps + sim_steps] = getattr(nest, key) + sim_steps += 1 SimCPUTime = time.time() - tic total_memory = str(get_vmsize()) From beeaec4bc7f39670a443a0bbec19bbfe56edbcbf Mon Sep 17 00:00:00 2001 From: Jan Vogelsang <47158055+JanVogelsang@users.noreply.github.com> Date: Tue, 17 Dec 2024 15:24:10 +0100 Subject: [PATCH 2/5] Add threaded-timer support to hpc-benchmark --- hpc_benchmark/hpc_benchmark.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/hpc_benchmark/hpc_benchmark.py b/hpc_benchmark/hpc_benchmark.py index 1a837aa..ca175f6 100644 --- a/hpc_benchmark/hpc_benchmark.py +++ b/hpc_benchmark/hpc_benchmark.py @@ -487,14 +487,20 @@ def run_simulation(): d.update(final_kernel_status) # Subtract timer information from presimulation period - timers = ['time_collocate_spike_data', 'time_communicate_prepare', - 'time_communicate_spike_data', 'time_deliver_spike_data', - 'time_gather_spike_data', 'time_update', 'time_simulate'] + timers = ['time_collocate_spike_data', 'time_communicate_prepare', 'time_communicate_spike_data', 'time_communicate_target_data', 'time_construction_connect', 'time_construction_create', 'time_deliver_secondary_data', 'time_deliver_spike_data', 'time_gather_secondary_data', 'time_gather_spike_data', 'time_gather_target_data', 'time_omp_synchronization_construction', 'time_omp_synchronization_simulation', 'time_mpi_synchronization', 'time_simulate', 'time_update'] + timers.append([timer + '_cpu' for timer in timers]) for timer in timers: try: d[timer + '_presim'] = intermediate_kernel_status[timer] - d[timer] -= intermediate_kernel_status[timer] + if type(d[timer]) == tuple or type(d[timer]) == list: + timer_array = tuple(d[timer][tid] - intermediate_kernel_status[timer][tid] for tid in range(len(d[timer]))) + d[timer] = timer_array[0] + d[timer + "_max"] = max(timer_array) + d[timer + "_max"] = min(timer_array) + d[timer + "_avg"] = np.mean(timer_array) + else: + d[timer] -= intermediate_kernel_status[timer] except KeyError: # KeyError if compiled without detailed timers, except time_simulate continue From f5653b84aa0ebe2afac80fa3e034736936cf8b06 Mon Sep 17 00:00:00 2001 From: Jan Vogelsang <47158055+JanVogelsang@users.noreply.github.com> Date: Wed, 18 Dec 2024 00:36:42 +0100 Subject: [PATCH 3/5] Update hpc_benchmark.py --- hpc_benchmark/hpc_benchmark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hpc_benchmark/hpc_benchmark.py b/hpc_benchmark/hpc_benchmark.py index ca175f6..eac3069 100644 --- a/hpc_benchmark/hpc_benchmark.py +++ b/hpc_benchmark/hpc_benchmark.py @@ -488,7 +488,7 @@ def run_simulation(): # Subtract timer information from presimulation period timers = ['time_collocate_spike_data', 'time_communicate_prepare', 'time_communicate_spike_data', 'time_communicate_target_data', 'time_construction_connect', 'time_construction_create', 'time_deliver_secondary_data', 'time_deliver_spike_data', 'time_gather_secondary_data', 'time_gather_spike_data', 'time_gather_target_data', 'time_omp_synchronization_construction', 'time_omp_synchronization_simulation', 'time_mpi_synchronization', 'time_simulate', 'time_update'] - timers.append([timer + '_cpu' for timer in timers]) + timers.extend([timer + '_cpu' for timer in timers]) for timer in timers: try: From fc13157093a7c4a87863c3b1b60e53c65ba026e5 Mon Sep 17 00:00:00 2001 From: Jan Vogelsang <47158055+JanVogelsang@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:14:35 +0100 Subject: [PATCH 4/5] Update hpc_benchmark.py --- hpc_benchmark/hpc_benchmark.py | 95 ++++++++++++++++------------------ 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/hpc_benchmark/hpc_benchmark.py b/hpc_benchmark/hpc_benchmark.py index d54fe2d..80057f7 100644 --- a/hpc_benchmark/hpc_benchmark.py +++ b/hpc_benchmark/hpc_benchmark.py @@ -396,55 +396,49 @@ def run_simulation(): step_data = {key: np.empty(total_steps) for key in step_data_keys} tic = time.time() - for d in range(presim_steps): - nest.Run(nest.min_delay) - times[d] = time.time() - tic - vmsizes[d] = get_vmsize() - vmpeaks[d] = get_vmpeak() - vmrsss[d] = get_rss() - for key in step_data_keys: - step_data[key][d] = getattr(nest, key) - - if presim_remaining_time > 0: - nest.Run(presim_remaining_time) - times[presim_steps] = time.time() - tic - vmsizes[presim_steps] = get_vmsize() - vmpeaks[presim_steps] = get_vmpeak() - vmrsss[presim_steps] = get_rss() - for key in step_data_keys: - step_data[key][presim_steps] = getattr(nest, key) - presim_steps += 1 - - PreparationTime = time.time() - tic - - intermediate_kernel_status = nest.kernel_status + for d in range(presim_steps): + nest.Run(nest.min_delay) + times[d] = time.time() - tic + vmsizes[d] = get_vmsize() + vmpeaks[d] = get_vmpeak() + vmrsss[d] = get_rss() + for key in step_data_keys: + step_data[key][d] = getattr(nest, key) + + if presim_remaining_time > 0: + nest.Run(presim_remaining_time) + times[presim_steps] = time.time() - tic + vmsizes[presim_steps] = get_vmsize() + vmpeaks[presim_steps] = get_vmpeak() + vmrsss[presim_steps] = get_rss() + for key in step_data_keys: + step_data[key][presim_steps] = getattr(nest, key) + presim_steps += 1 - tic = time.time() + PreparationTime = time.time() - tic + + intermediate_kernel_status = nest.kernel_status - for d in range(sim_steps): - nest.Run(nest.min_delay) - times[presim_steps + d] = time.time() - tic - vmsizes[presim_steps + d] = get_vmsize() - vmpeaks[presim_steps + d] = get_vmpeak() - vmrsss[presim_steps + d] = get_rss() - for key in step_data_keys: - step_data[key][presim_steps + d] = getattr(nest, key) - - if sim_remaining_time > 0: - nest.Run(sim_remaining_time) - times[presim_steps + sim_steps] = time.time() - tic - vmsizes[presim_steps + sim_steps] = get_vmsize() - vmpeaks[presim_steps + sim_steps] = get_vmpeak() - vmrsss[presim_steps + sim_steps] = get_rss() - for key in step_data_keys: - step_data[key][presim_steps + sim_steps] = getattr(nest, key) - sim_steps += 1 - - SimCPUTime = time.time() - tic - total_memory = str(get_vmsize()) - total_memory_rss = str(get_rss()) - total_memory_peak = str(get_vmpeak()) + tic = time.time() + for d in range(sim_steps): + nest.Run(nest.min_delay) + times[presim_steps + d] = time.time() - tic + vmsizes[presim_steps + d] = get_vmsize() + vmpeaks[presim_steps + d] = get_vmpeak() + vmrsss[presim_steps + d] = get_rss() + for key in step_data_keys: + step_data[key][presim_steps + d] = getattr(nest, key) + + if sim_remaining_time > 0: + nest.Run(sim_remaining_time) + times[presim_steps + sim_steps] = time.time() - tic + vmsizes[presim_steps + sim_steps] = get_vmsize() + vmpeaks[presim_steps + sim_steps] = get_vmpeak() + vmrsss[presim_steps + sim_steps] = get_rss() + for key in step_data_keys: + step_data[key][presim_steps + sim_steps] = getattr(nest, key) + sim_steps += 1 else: build_dict, sr = build_network() @@ -462,10 +456,13 @@ def run_simulation(): intermediate_kernel_status = nest.kernel_status tic = time.time() - nest.Run(params['presimtime']) - SimCPUTime = time.time() - tic - total_memory = str(get_vmsize()) + nest.Run(params['simtime']) + SimCPUTime = time.time() - tic + total_memory = str(get_vmsize()) + total_memory_rss = str(get_rss()) + total_memory_peak = str(get_vmpeak()) + average_rate = 0.0 if params['record_spikes']: average_rate = compute_rate(sr) From cfdf38c2f3b71cb3f4f0538eb68e1662dc5b1537 Mon Sep 17 00:00:00 2001 From: Jan Vogelsang <47158055+JanVogelsang@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:43:23 +0100 Subject: [PATCH 5/5] Update hpc_benchmark.py --- hpc_benchmark/hpc_benchmark.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/hpc_benchmark/hpc_benchmark.py b/hpc_benchmark/hpc_benchmark.py index 43ed553..d064902 100644 --- a/hpc_benchmark/hpc_benchmark.py +++ b/hpc_benchmark/hpc_benchmark.py @@ -490,20 +490,26 @@ def run_simulation(): d.update(final_kernel_status) # Subtract timer information from presimulation period - timers = ['time_collocate_spike_data', 'time_communicate_prepare', 'time_communicate_spike_data', 'time_communicate_target_data', 'time_construction_connect', 'time_construction_create', 'time_deliver_secondary_data', 'time_deliver_spike_data', 'time_gather_secondary_data', 'time_gather_spike_data', 'time_gather_target_data', 'time_omp_synchronization_construction', 'time_omp_synchronization_simulation', 'time_mpi_synchronization', 'time_simulate', 'time_update'] + timers = ['time_collocate_spike_data', 'time_communicate_spike_data', 'time_communicate_target_data', 'time_deliver_secondary_data', 'time_deliver_spike_data', 'time_gather_secondary_data', 'time_gather_spike_data', 'time_omp_synchronization_simulation', 'time_mpi_synchronization', 'time_simulate', 'time_update'] timers.extend([timer + '_cpu' for timer in timers]) for timer in timers: try: - d[timer + '_presim'] = intermediate_kernel_status[timer] if type(d[timer]) == tuple or type(d[timer]) == list: timer_array = tuple(d[timer][tid] - intermediate_kernel_status[timer][tid] for tid in range(len(d[timer]))) d[timer] = timer_array[0] d[timer + "_max"] = max(timer_array) - d[timer + "_max"] = min(timer_array) + d[timer + "_min"] = min(timer_array) d[timer + "_avg"] = np.mean(timer_array) + d[timer + "_all"] = timer_array + d[timer + '_presim'] = intermediate_kernel_status[timer][0] + d[timer + "_presim_max"] = max(intermediate_kernel_status[timer]) + d[timer + "_presim_min"] = min(intermediate_kernel_status[timer]) + d[timer + "_presim_avg"] = np.mean(intermediate_kernel_status[timer]) + d[timer + "_presim_all"] = intermediate_kernel_status[timer] else: d[timer] -= intermediate_kernel_status[timer] + d[timer + '_presim'] = intermediate_kernel_status[timer] except KeyError: # KeyError if compiled without detailed timers, except time_simulate continue