diff --git a/tests/performance/io/disk_io.cpp b/tests/performance/io/disk_io.cpp index 72b7229a0c71fbe8bf45f2f60506098230a602d5..877896759cc5637c52f5a3a18a567f6e2e2e5606 100644 --- a/tests/performance/io/disk_io.cpp +++ b/tests/performance/io/disk_io.cpp @@ -14,20 +14,22 @@ #include <communication/communicator.hpp> #include <communication/global_policy.hpp> #include <communication/export_manager.hpp> +#include <profiling/profiler.hpp> using namespace nest::mc; using global_policy = communication::global_policy; -using lowered_cell = nest::mc::fvm::fvm_cell<double, cell_local_size_type>; +using lowered_cell = fvm::fvm_cell<double, cell_local_size_type>; using cell_group_type = cell_group<lowered_cell>; using time_type = typename cell_group_type::time_type; using spike_type = communication::exporter_spike_file<time_type, global_policy>::spike_type; +using timer = util::timer_type; int main(int argc, char** argv) { //Setup the possible mpi environment - nest::mc::communication::global_policy_guard global_guard(argc, argv); + communication::global_policy_guard global_guard(argc, argv); // very simple command line parsing if (argc < 3) { @@ -72,7 +74,7 @@ int main(int argc, char** argv) } // Create the sut - nest::mc::communication::export_manager<time_type, global_policy> manager( + communication::export_manager<time_type, global_policy> manager( true, file_per_rank, true, "./", "spikes", "gdf"); // We need the nr of ranks to calculate the nr of spikes to produce per @@ -97,42 +99,40 @@ int main(int argc, char** argv) 0.0f + 1 / (0.05f + idx % 20) }); // semi random float } - int timings_arr[nr_repeats]; - int time_total = 0; + double timings_arr[nr_repeats]; + double time_total = 0; // now output to disk nr_repeats times, while keeping track of the times - for (int idx = 0; idx < nr_repeats; ++idx) { - int time_start = clock(); + for (auto idx = 0; idx < nr_repeats; ++idx) { + auto time_start = timer::tic(); manager.local_export_callback(spikes); - - int time_stop = clock(); - int run_time = (time_stop - time_start); + auto run_time = timer::toc(time_start); time_total += run_time; timings_arr[idx] = run_time; } - std::vector<int> timings; - for (int idx = 0; idx < nr_repeats; ++idx) - { + // create the vector here to prevent changes on the heap influencing the + // timeing + std::vector<double> timings; + for (auto idx = 0; idx < nr_repeats; ++idx) { timings.push_back(timings_arr[idx]); - } // Calculate some statistics - double sum = std::accumulate(timings.begin(), timings.end(), 0.0); - double mean = sum / timings.size(); + auto sum = std::accumulate(timings.begin(), timings.end(), 0.0); + auto mean = sum / timings.size(); std::vector<double> diff(timings.size()); std::transform(timings.begin(), timings.end(), diff.begin(), std::bind2nd(std::minus<double>(), mean)); - double sq_sum = std::inner_product(diff.begin(), diff.end(), diff.begin(), + auto sq_sum = std::inner_product(diff.begin(), diff.end(), diff.begin(), 0.0); - double stdev = std::sqrt(sq_sum / timings.size()); + auto stdev = std::sqrt(sq_sum / timings.size()); - int min = *std::min_element(timings.begin(), timings.end()); - int max = *std::max_element(timings.begin(), timings.end()); + auto min = *std::min_element(timings.begin(), timings.end()); + auto max = *std::max_element(timings.begin(), timings.end()); if (communication_policy.id() != 0) { @@ -141,23 +141,18 @@ int main(int argc, char** argv) // and output if (simple_stats) { - std::cout << time_total / double(CLOCKS_PER_SEC) * 1000 << "," - << mean / double(CLOCKS_PER_SEC) * 1000 << "," - << stdev / double(CLOCKS_PER_SEC) * 1000 << "," - << min / double(CLOCKS_PER_SEC) * 1000 << "," - << max / double(CLOCKS_PER_SEC) * 1000 << std::endl; + std::cout << time_total<< "," + << mean << "," + << stdev << "," + << min << "," + << max << std::endl; } else { - std::cout << "total time (ms): " - << time_total / double(CLOCKS_PER_SEC) * 1000 << std::endl; - std::cout << "mean time (ms): " - << mean / double(CLOCKS_PER_SEC) * 1000 << std::endl; - std::cout << "stdev time (ms): " - << stdev / double(CLOCKS_PER_SEC) * 1000 << std::endl; - std::cout << "min time (ms): " - << min / double(CLOCKS_PER_SEC) * 1000 << std::endl; - std::cout << "max time (ms): " - << max / double(CLOCKS_PER_SEC) * 1000 << std::endl; + std::cout << "total time (ms): " << time_total << std::endl; + std::cout << "mean time (ms): " << mean << std::endl; + std::cout << "stdev time (ms): " << std::endl; + std::cout << "min time (ms): " << min << std::endl; + std::cout << "max time (ms): " << max << std::endl; } return 0; diff --git a/tests/performance/io/disk_io.py b/tests/performance/io/disk_io.py index 12d9a10258c03b33c4604cfbbc965e41a4b1d8b9..e0ab58ef71e0b4cf662671f0b360c2245ec1bf95 100644 --- a/tests/performance/io/disk_io.py +++ b/tests/performance/io/disk_io.py @@ -4,7 +4,7 @@ import os current_script_dir = os.path.dirname(os.path.abspath(__file__)) -spikes_to_save = 100000 +spikes_to_save = 1000000 range_nr_rank = [1, 2, 4, 8, 16, 24, 32, 48, 64] mean = [] @@ -39,4 +39,4 @@ plt.errorbar(range_nr_rank, mean, yerr=std, fmt='-o', label="mean (std)") plt.errorbar(range_nr_rank, min, fmt='-', label="min") plt.errorbar(range_nr_rank, max, fmt='-', label="max") plt.legend() -plt.show() \ No newline at end of file +plt.show()