From: jmatthews@nova.wright.edu (Dr. John B. Matthews)
Subject: Re: CRC in Ada?
Date: 1997/03/09
Date: 1997-03-09T00:00:00+00:00 [thread overview]
Message-ID: <1997Mar9.011827@nova.wright.edu> (raw)
In-Reply-To: dewar.857652688@merv
In article <dewar.857652688@merv>, dewar@merv.cs.nyu.edu (Robert Dewar) writes:
> More likely to be efficient is using Read and Write directly on
> buffers of stream elements.
Yes. In the code below I tried to compare Sequential_IO to Stream_IO
for the two extremes of one-at-a-time vs all-at-once (imagining
a buffered approach to fall between). In the one-at-a-time
procedures, I assumed knowledge of the file's length instead of
calling the relevant End_Of_File predicate; in the all-at-once
procedures, I looped through the resulting buffer.
For Sequential_IO, all-at-once is clearly faster than
one-at-a-time. Stream_IO is more interesting: In Stream_All1,
String'Read is actually slower than looping with Character'Read, as
the former calls Character'Read in a loop, checking for EOF as it
goes. The fastest approach seems to be to read the stream elements
directly, as in Stream_All2.
John
----------------------------------------------------------------
John B. Matthews, M.D.
jmatthews@nova.wright.edu; john_matthews@ccmail.dayton.saic.com
"Whom the gods would destroy, they first invite to program in C"
------------------------------------------------------------------
--|
--| iotest: time IO
--|
--| Author: John B. Matthews, Wright State University
--| Last Modified: March 8, 1997
--|
------------------------------------------------------------------
-- results of 6 runs on a 451239 byte file:
-- ave. std.dev.
-- 1.00278 0.03391 sequential, one character at a time.
-- 0.72499 0.02679 sequential, entire file.
-- 1.26389 0.01146 stream, one character at a time.
-- 1.41389 0.09738 stream, entire file 1.
-- 0.65113 0.08572 stream, entire file 2.
------------------------------------------------------------------
-- build: gnatmake iotest -largs -Xlstack=500000 (or so)
with Ada.Command_Line;
with Ada.Sequential_IO;
with Ada.Streams.Stream_IO;
with Ada.Text_IO;
with Calendar; use type Calendar.Time;
procedure IOTest is
package CLI renames Ada.Command_Line;
package Text_IO renames Ada.Text_IO;
package Fixed_IO is new Ada.Text_IO.Fixed_IO (Duration);
Length : Natural;
Start, Stop : Calendar.Time;
-- Determine the size (in bytes) of the file, Name.
function File_Size (Name : in String) return Natural is
package SIO renames Ada.Streams.Stream_IO;
F : SIO.File_Type;
Size : Natural;
begin
SIO.Open (F, SIO.In_File, Name);
Size := Integer (SIO.Size(F));
SIO.Close (F);
return Size;
end File_Size;
procedure Sequential_One (Name : String; Length : Natural) is
package SIO is new Ada.Sequential_IO (Character);
F : SIO.File_Type;
C : Character;
begin
SIO.Open (F, SIO.In_File, Name);
for i in 1 .. Length loop
SIO.Read (F, C);
end loop;
SIO.Close (F);
end Sequential_One;
procedure Sequential_All (Name : String; Length : Natural) is
subtype Data is String (1 .. Length);
package SIO is new Ada.Sequential_IO (Data);
F : SIO.File_Type;
S : Data;
C : Character;
begin
SIO.Open (F, SIO.In_File, Name);
SIO.Read (F, S);
for i in 1 .. Length loop
C := S (i);
end loop;
SIO.Close (F);
end Sequential_All;
procedure Stream_One (Name : String; Length : Natural) is
package SIO renames Ada.Streams.Stream_IO;
F : SIO.File_Type;
S : SIO.Stream_Access;
C : Character;
begin
SIO.Open (F, SIO.In_File, Name);
S := SIO.Stream (F);
for i in 1 .. Length loop
Character'Read (S, C);
end loop;
SIO.Close (F);
end Stream_One;
procedure Stream_All1 (Name : String; Length : Natural) is
subtype Data is String (1 .. Length);
package SIO renames Ada.Streams.Stream_IO;
F : SIO.File_Type;
S : Data;
C : Character;
begin
SIO.Open (F, SIO.In_File, Name);
Data'Read (SIO.Stream (F), S);
for i in 1 .. Length loop
C := S (i);
end loop;
SIO.Close (F);
end Stream_All1;
procedure Stream_All2 (Name : String; Length : Natural) is
subtype Data is String (1 .. Length);
package SIO renames Ada.Streams.Stream_IO;
F : SIO.File_Type;
S : Ada.Streams.Stream_Element_Array
(1 .. Ada.Streams.Stream_Element_Offset(Length));
L : Ada.Streams.Stream_Element_Offset;
C : Ada.Streams.Stream_Element;
begin
SIO.Open (F, SIO.In_File, Name);
SIO.Read (F, S, L);
for i in 1 .. L loop
C := S (i);
end loop;
SIO.Close (F);
end Stream_All2;
begin
if CLI.Argument_Count = 1 then
Length := File_Size (CLI.Argument (1));
Start := Calendar.Clock;
Sequential_One (CLI.Argument (1), Length);
Stop := Calendar.Clock;
Fixed_IO.Put (Stop - Start, 0, 5);
Text_IO.Put_Line (" sequential, one character at a time.");
Start := Calendar.Clock;
Sequential_All (CLI.Argument (1), Length);
Stop := Calendar.Clock;
Fixed_IO.Put (Stop - Start, 0, 5);
Text_IO.Put_Line (" sequential, entire file." );
Start := Calendar.Clock;
Stream_One (CLI.Argument (1), Length);
Stop := Calendar.Clock;
Fixed_IO.Put (Stop - Start, 0, 5);
Text_IO.Put_Line (" stream, one character at a time.");
Start := Calendar.Clock;
Stream_All1 (CLI.Argument (1), Length);
Stop := Calendar.Clock;
Fixed_IO.Put (Stop - Start, 0, 5);
Text_IO.Put_Line (" stream, entire file 1.");
Start := Calendar.Clock;
Stream_All2 (CLI.Argument (1), Length);
Stop := Calendar.Clock;
Fixed_IO.Put (Stop - Start, 0, 5);
Text_IO.Put_Line (" stream, entire file 2.");
else
Text_IO.Put_Line ("Usage: iotest <filename>");
end if;
end IOTest;
next prev parent reply other threads:[~1997-03-09 0:00 UTC|newest]
Thread overview: 143+ messages / expand[flat|nested] mbox.gz Atom feed top
1997-03-02 0:00 CRC in Ada? Dr. John B. Matthews
1997-03-03 0:00 ` David Brown
1997-03-03 0:00 ` Tom Moran
1997-03-04 0:00 ` Jon S Anthony
1997-03-05 0:00 ` Robert Dewar
1997-03-04 0:00 ` Stephen Garriga
1997-03-04 0:00 ` Robert Dewar
1997-03-05 0:00 ` Stephen Garriga
1997-03-15 0:00 ` Michael & Amy Hartsough
1997-03-16 0:00 ` Robert Dewar
1997-03-16 0:00 ` Michael & Amy Hartsough
1997-03-16 0:00 ` Robert Dewar
1997-03-18 0:00 ` Michael & Amy Hartsough
1997-03-19 0:00 ` Robert Dewar
1997-03-20 0:00 ` Michael & Amy Hartsough
1997-03-22 0:00 ` Robert Dewar
1997-03-24 0:00 ` Sequential IO on OpenVMS (was: CRC in Ada?) Ken Garlington
1997-03-24 0:00 ` Larry Kilgallen
1997-03-22 0:00 ` CRC in Ada? Mark & Zurima McKinney
1997-03-22 0:00 ` Robert Dewar
1997-03-21 0:00 ` Tom Moran
1997-03-23 0:00 ` Robert Dewar
1997-03-23 0:00 ` Tom Moran
1997-03-24 0:00 ` Portable Code (was: CRC in Ada?) Larry Kilgallen
1997-03-24 0:00 ` CRC in Ada? Robert A Duff
1997-03-24 0:00 ` Larry Kilgallen
1997-03-24 0:00 ` Robert A Duff
1997-03-24 0:00 ` Robert A Duff
1997-03-24 0:00 ` Robert Dewar
1997-03-25 0:00 ` Robert I. Eachus
1997-04-01 0:00 ` David Emery
1997-03-04 0:00 ` Matthew Heaney
1997-03-04 0:00 ` Tom Moran
1997-03-04 0:00 ` Stephen Garriga
1997-03-07 0:00 ` John Apa
1997-03-04 0:00 ` David L Brown
1997-03-04 0:00 ` Robert Dewar
1997-03-05 0:00 ` Stephen Garriga
1997-03-05 0:00 ` Larry Kilgallen
1997-03-05 0:00 ` Robert A Duff
1997-03-05 0:00 ` Larry Kilgallen
1997-03-06 0:00 ` Fergus Henderson
1997-03-06 0:00 ` Robert Dewar
1997-03-06 0:00 ` Larry Kilgallen
1997-03-06 0:00 ` Robert A Duff
1997-03-07 0:00 ` Robert Dewar
1997-03-07 0:00 ` Larry Kilgallen
1997-03-07 0:00 ` Tom Moran
[not found] ` <1997Mar7.202252.1@eisner>
1997-03-08 0:00 ` Robert Dewar
1997-03-09 0:00 ` Geert Bosch
1997-03-11 0:00 ` Robert Dewar
1997-03-12 0:00 ` Mats Weber
1997-03-12 0:00 ` Robert Dewar
1997-03-10 0:00 ` Robert Dewar
1997-03-10 0:00 ` Tom Moran
1997-03-12 0:00 ` Robert Dewar
1997-03-10 0:00 ` Dr. John B. Matthews
1997-03-07 0:00 ` Robert A Duff
1997-03-10 0:00 ` Jim Balter
1997-03-10 0:00 ` Jim Balter
1997-03-06 0:00 ` Robert A Duff
1997-03-06 0:00 ` Robert Dewar
1997-03-06 0:00 ` Robert Dewar
1997-03-06 0:00 ` Robert Dewar
1997-03-09 0:00 ` Dr. John B. Matthews [this message]
1997-03-06 0:00 ` Larry Kilgallen
1997-03-10 0:00 ` Tarjei Jensen
1997-03-10 0:00 ` Robert Dewar
1997-03-10 0:00 ` Graham Hughes
1997-03-11 0:00 ` Robert Dewar
1997-03-11 0:00 ` Graham Hughes
1997-03-12 0:00 ` Robert Dewar
1997-03-10 0:00 ` Robert Dewar
1997-03-10 0:00 ` David Brown
1997-03-12 0:00 ` Robert Dewar
1997-03-11 0:00 ` Mark & Zurima McKinney
1997-03-12 0:00 ` Robert I. Eachus
1997-03-12 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-13 0:00 ` Jon S Anthony
1997-03-13 0:00 ` Robert Dewar
1997-03-14 0:00 ` Jim Balter
1997-03-14 0:00 ` Jon S Anthony
1997-03-15 0:00 ` Robert Dewar
1997-03-15 0:00 ` Dr. John B. Matthews
1997-03-17 0:00 ` Jon S Anthony
1997-03-06 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-07 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-07 0:00 ` Robert Dewar
1997-03-08 0:00 ` Robert A Duff
1997-03-10 0:00 ` Jim Balter
1997-03-11 0:00 ` Robert Dewar
1997-03-11 0:00 ` Jim Balter
1997-03-11 0:00 ` Robert Dewar
1997-03-12 0:00 ` Jim Balter
1997-03-14 0:00 ` Richard A. O'Keefe
1997-03-14 0:00 ` Jim Balter
1997-03-06 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-06 0:00 ` Larry Kilgallen
1997-03-09 0:00 ` Robert Dewar
1997-03-06 0:00 ` Graham Hughes
1997-03-06 0:00 ` Robert Dewar
1997-03-07 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-07 0:00 ` Robert Dewar
1997-03-08 0:00 ` Fergus Henderson
1997-03-10 0:00 ` Jim Balter
1997-03-11 0:00 ` Robert Dewar
1997-03-11 0:00 ` Jim Balter
1997-03-12 0:00 ` Robert Dewar
1997-03-12 0:00 ` Jim Balter
1997-03-14 0:00 ` Samuel Mize
1997-03-11 0:00 ` Jim Balter
1997-03-11 0:00 ` Robert Dewar
1997-03-12 0:00 ` Jim Balter
1997-03-07 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-07 0:00 ` David Brown
1997-03-10 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-10 0:00 ` Robert Dewar
1997-03-10 0:00 ` Jim Balter
1997-03-11 0:00 ` Robert Dewar
1997-03-11 0:00 ` Jim Balter
1997-03-11 0:00 ` Robert Dewar
1997-03-12 0:00 ` Jim Balter
1997-03-11 0:00 ` Fergus Henderson
1997-03-10 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-11 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-12 0:00 ` Jim Balter
1997-03-12 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-12 0:00 ` Ole-Hjalmar Kristensen FOU.TD/DELAB
1997-03-05 0:00 ` David C. Hoos, Sr.
1997-03-05 0:00 ` Laurent Pautet
1997-03-06 0:00 ` Jon S Anthony
2013-11-14 17:39 ` david
2013-11-14 18:55 ` Adam Beneschan
2013-11-14 19:35 ` tmoran
2013-11-14 20:09 ` Dmitry A. Kazakov
2013-11-14 20:40 ` John B. Matthews
-- strict thread matches above, loose matches on Subject: below --
1997-03-13 0:00 tmoran
1997-03-13 0:00 ` Robert Dewar
1997-03-14 0:00 ` Joakim Olsson
1997-03-14 0:00 ` Tom Moran
1997-03-15 0:00 ` Tom Moran
1997-03-14 0:00 ` Richard A. O'Keefe
1997-03-14 0:00 ` Jon S Anthony
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox