DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: B T

⟦34388bdff⟧ TextFile

    Length: 2979 (0xba3)
    Types: TextFile
    Names: »B«

Derivation

└─⟦180fe333a⟧ Bits:30000405 8mm tape, Rational 1000, SW CATALOG, 10_20_0
└─⟦180fe333a⟧ Bits:30000537 8mm tape, Rational 1000, SW Catalog 10_20_0
    └─⟦5cb1d1d7f⟧ »DATA« 
        └─⟦3b1ee7bd8⟧ 
            └─⟦this⟧ 

TextFile

--  PERFORMANCE MEASUREMENT  :  Measure effect of PRAGMA Optimize(Time)
--  on loop unwrapping.  Time reported indicates the loop is unwrapped if
--  the time is extremely small (within test error).
--  NOTE:  It may be necessary to restrict the automatic iteration
--  count sizing to prevent undue execution time.

with Remote_Global;
use Remote_Global;  -- control optimization
with Iteration;  -- obtain stable measurement
with Piwg_Io;  -- output results

procedure L000004 is -- main procedure to execute

    Cpu_Time : Duration;  -- CPU time for one feature execution
    Wall_Time : Duration;  -- WALL time for one feature execution
    Check_Times : constant := 100;  -- inside loop count and check
    Iteration_Count : Integer;  -- set and varied by ITERATION package
    Stable : Boolean; -- true when measurement stable
    Case_Count : constant := 5;

    pragma Optimize (Time);

begin

    Iteration.Start_Control; -- dummy to bring in pages on some machines

    delay 0.5;  -- wait for stable environment on some machines

    Iteration.Initialize (Iteration_Count);

    loop  -- until stable measurement , ITERATION_COUNT increases each time

--
-- Control loop
--

        Iteration.Start_Control;
        for J in 1 .. Iteration_Count loop
            Global := 0;
            for Inside_Loop in 1 .. Check_Times loop
                Global := Global + A_One; -- something to do
                Remote;                   -- that can not be pulled out of loop
                Global := Global + A_One;
                Remote;
                Global := Global + A_One;
                Remote;
                Global := Global + A_One;
                Remote;
                Global := Global + A_One;
                Remote;
            end loop;
        end loop;
        Global := Global / Case_Count;
        Iteration.Stop_Control (Global, Check_Times);

--
-- Test loop
--
        Iteration.Start_Test;
        for J in 1 .. Iteration_Count loop
            Global := 0;
            for Inside_Loop in 1 .. Check_Times loop
                for I in 1 .. 5 loop
                    Global := Global + A_One; --same computation as above
                    Remote;                    --now in loop
                end loop;
            end loop;  
        end loop;
        Global := Global / Case_Count;
        Iteration.Stop_Test (Global, Check_Times);
        Iteration.Test_Stable (Iteration_Count, Stable);
        exit when Stable;
    end loop;
--
    Iteration.Feature_Times (Cpu_Time, Wall_Time);
    Cpu_Time := Duration (Cpu_Time / Case_Count);
    Wall_Time := Duration (Wall_Time / Case_Count);

--
-- Printout
--
    Piwg_Io.Piwg_Output
       ("L000004", "Iteration", Cpu_Time, Wall_Time, Iteration_Count,
        "Measures Compiler's choice to UNWRAP a small loop",
        "of five (5) iterations when given a PRAGMA OPTIMIZE(TIME). ",
        "An execution time less than .05 microseconds indicates the unwrap occurred.");

end L000004;