------------------------------------------------------------------------------
-- --
-- WAVEFILES --
-- --
-- Wavefile benchmarking --
-- --
-- The MIT License (MIT) --
-- --
-- Copyright (c) 2020 Gustavo A. Hoffmann --
-- --
-- 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 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY --
-- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, --
-- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE --
-- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --
------------------------------------------------------------------------------
with Ada.Command_Line; use Ada.Command_Line;
with Ada.Text_IO; use Ada.Text_IO;
with System.Multiprocessors;
with System.Multiprocessors.Dispatching_Domains;
with Wavefile_Benchmarking; use Wavefile_Benchmarking;
with Wavefile_Benchmarking.Statistics; use Wavefile_Benchmarking.Statistics;
procedure Simple_Benchmarking is
CPU_MHz : Float := 2650.0;
Verbose : constant Boolean := True;
Results : Wavefile_Benchmark_Infos (1 .. 5);
task type Wavefile_Benchmark
with CPU => 1
is
entry Finish (Res : out Wavefile_Benchmark_Infos);
end Wavefile_Benchmark;
task body Wavefile_Benchmark is
Local_Results : Wavefile_Benchmark_Infos (Results'Range);
begin
if Verbose then
Display_Current_CPU : declare
use System.Multiprocessors;
use System.Multiprocessors.Dispatching_Domains;
begin
Put_Line ("Current CPU : " & CPU_Range'Image (Get_CPU));
end Display_Current_CPU;
end if;
Benchm_CPU_Time (CPU_MHz, Local_Results);
accept Finish (Res : out Wavefile_Benchmark_Infos) do
Res := Local_Results;
end Finish;
end Wavefile_Benchmark;
Benchmark_Using_Tasking : constant Boolean := False;
begin
if Argument_Count >= 1 then
CPU_MHz := Float'Value (Argument (1));
end if;
if Verbose then
Put_Line ("Using CPU @ " & Float'Image (CPU_MHz) & " MHz");
end if;
if Benchmark_Using_Tasking then
declare
Wav_Benchmark : Wavefile_Benchmark;
begin
Wav_Benchmark.Finish (Results);
end;
else
Benchm_CPU_Time (CPU_MHz, Results);
end if;
Calc_Statistics : declare
Stats : Wavefile_Benchmark_Statistics;
begin
Calculate_Statistics (Results, Stats);
Display (Stats);
end Calc_Statistics;
end Simple_Benchmarking;