aboutsummaryrefslogtreecommitdiff
path: root/pkg/bench/x_bench.x
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /pkg/bench/x_bench.x
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'pkg/bench/x_bench.x')
-rw-r--r--pkg/bench/x_bench.x229
1 files changed, 229 insertions, 0 deletions
diff --git a/pkg/bench/x_bench.x b/pkg/bench/x_bench.x
new file mode 100644
index 00000000..f6d6e3df
--- /dev/null
+++ b/pkg/bench/x_bench.x
@@ -0,0 +1,229 @@
+# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+
+include <time.h>
+include <mach.h>
+include <fset.h>
+include <knet.h>
+
+# BENCH -- IRAF benchmark tasks.
+
+task ptime = t_ptime,
+ getpar = t_getpar,
+ wipc = t_wipc,
+ rbin = t_rbin,
+ wbin = t_wbin,
+ rrbin = t_rrbin,
+ rtext = t_rtext,
+ wtext = t_wtext
+
+define SZ_RBBUF 16384
+define SZ_BBUF 4096
+define SZ_TBUF 64
+
+
+# PTIME -- Print the current clock time. This is essentially a no-op task,
+# used to test process connect/disconnect, IPC, and task startup/shutdown
+# overhead.
+
+procedure t_ptime()
+
+char tbuf[SZ_TIME]
+long clktime()
+
+begin
+ call cnvtime (clktime (long(0)), tbuf, SZ_TIME)
+ call printf ("%s\n")
+ call pargstr (tbuf)
+end
+
+
+# GETPAR -- Get a parameter from the CL repeatedly. Used to test the IPC
+# turnaround time.
+
+procedure t_getpar()
+
+int niter, i
+char paramval[SZ_FNAME]
+int clgeti()
+
+begin
+ niter = clgeti ("niter")
+ do i = 1, niter
+ call clgstr ("cl.version", paramval, SZ_FNAME)
+end
+
+
+# WIPC -- Write to IPC (tests IPC bandwidth).
+
+procedure t_wipc()
+
+int fd, i
+char bbuf[SZ_BBUF]
+long n, filesize, clgetl()
+
+begin
+ fd = STDOUT
+ filesize = clgetl ("filesize") / SZB_CHAR
+
+ do i = 1, SZ_BBUF
+ bbuf[i] = mod (i-1, 128) + 1
+
+ for (n=0; n < filesize; n = n + SZ_BBUF)
+ call write (fd, bbuf, SZ_BBUF)
+
+ call eprintf ("wrote %d bytes\n")
+ call pargl (n * SZB_CHAR)
+end
+
+
+# RBIN -- Read from a binary file.
+
+procedure t_rbin()
+
+long totchars
+char fname[SZ_FNAME]
+char bbuf[SZ_BBUF]
+int fd, open(), read()
+
+begin
+ call clgstr ("fname", fname, SZ_FNAME)
+ fd = open (fname, READ_ONLY, BINARY_FILE)
+ call fseti (fd, F_ADVICE, SEQUENTIAL)
+ totchars = 0
+
+ while (read (fd, bbuf, SZ_BBUF) == SZ_BBUF)
+ totchars = totchars + SZ_BBUF
+
+ call close (fd)
+ call printf ("read %d bytes\n")
+ call pargl (totchars * SZB_CHAR)
+end
+
+
+# WBIN -- Write to a binary file.
+
+procedure t_wbin()
+
+char fname[SZ_FNAME]
+char bbuf[SZ_BBUF]
+int fd, i, open()
+long n, filesize, clgetl()
+
+begin
+ call clgstr ("fname", fname, SZ_FNAME)
+ iferr (call delete (fname))
+ ;
+ fd = open (fname, APPEND, BINARY_FILE)
+ call fseti (fd, F_ADVICE, SEQUENTIAL)
+ filesize = clgetl ("filesize") / SZB_CHAR
+
+ do i = 1, SZ_BBUF
+ bbuf[i] = mod (i-1, 128) + 1
+
+ for (n=0; n < filesize; n = n + SZ_BBUF)
+ call write (fd, bbuf, SZ_BBUF)
+
+ call close (fd)
+ call printf ("wrote %d bytes\n")
+ call pargl (n * SZB_CHAR)
+end
+
+
+# RTEXT -- Read from a text file.
+
+procedure t_rtext()
+
+long totchars
+char fname[SZ_FNAME]
+char tbuf[SZ_TBUF]
+int fd, nchars, nlines
+int open(), getline()
+
+begin
+ call clgstr ("fname", fname, SZ_FNAME)
+ fd = open (fname, READ_ONLY, TEXT_FILE)
+ totchars = 0
+ nlines = 0
+
+ repeat {
+ nchars = getline (fd, tbuf)
+ if (nchars > 0) {
+ totchars = totchars + nchars
+ nlines = nlines + 1
+ }
+ } until (nchars == EOF)
+
+ call close (fd)
+ call printf ("read %d chars, %d lines\n")
+ call pargl (totchars)
+ call pargi (nlines)
+end
+
+
+# WTEXT -- Write to a text file.
+
+procedure t_wtext()
+
+char fname[SZ_FNAME]
+char tbuf[SZ_TBUF]
+int fd, op, open()
+long n, nlines, filesize, clgetl()
+
+begin
+ call clgstr ("fname", fname, SZ_FNAME)
+ iferr (call delete (fname))
+ ;
+ fd = open (fname, APPEND, TEXT_FILE)
+ filesize = clgetl ("filesize")
+ nlines = 0
+
+ for (op=1; op < SZ_TBUF; op=op+1)
+ tbuf[op] = '.'
+
+ tbuf[op] = '\n'
+ op = op + 1
+ tbuf[op] = EOS
+
+ for (n=0; n < filesize; n = n + SZ_TBUF) {
+ call putline (fd, tbuf)
+ nlines = nlines + 1
+ }
+
+ call close (fd)
+ call printf ("wrote %d chars, %d lines\n")
+ call pargl (n)
+ call pargi (nlines)
+end
+
+
+# RRBIN -- Raw (unbuffered) read from a binary file.
+
+procedure t_rrbin()
+
+char fname[SZ_FNAME]
+char bbuf[SZ_RBBUF]
+long totchars, offset, buflen
+int fd, chan, status
+int open(), fstati()
+
+begin
+ call clgstr ("fname", fname, SZ_FNAME)
+ fd = open (fname, READ_ONLY, BINARY_FILE)
+ chan = fstati (fd, F_CHANNEL)
+
+ buflen = SZ_RBBUF * SZB_CHAR
+ totchars = 0
+ offset = 1
+ status = 0
+
+ repeat {
+ totchars = totchars + (status / SZB_CHAR)
+ call zardbf (chan, bbuf, buflen, offset)
+ offset = offset + buflen
+ call zawtbf (chan, status)
+ } until (status <= 0)
+
+ call close (fd)
+ call printf ("read %d bytes\n")
+ call pargl (totchars * SZB_CHAR)
+end