[Openmcl-devel] Speeding up I/O
Tim Bradshaw
tfb at tfeb.org
Fri Jul 24 01:43:53 PDT 2009
On 23 Jul 2009, at 21:00, Ron Garret wrote:
> I'm trying to crunch a semi-large file (~500MB) and just reading the
> data via (while (read-line f nil nil)) take about seven times longer
> than it does in, say, Python (73 seconds versus 12). Is there some
> low-level I/O primitive that I can call that bypasses all the high-
> level stream stuff that would speed this up? %ioblock-unencoded-
> character-read-vector maybe? Or %ioblock-tyi? Can I call these
> directly without screwing things up?
READ-SEQUENCE & WRITE-SEQUENCE are your friends here. On a Mac laptop
with enough memory (4G) but an ordinary laptop disk, I can write a
500M file in about 11 seconds and read it in about 8 (if uncached by
the FS) or 2 (if cached by the FS), reading 1k blocks of (UNSIGNED-
BYTE 8)s. In both cases I wrote or read the same sequence multiple
times so that does not include consing overhead for sequences. It
doesn't actually take much longer to read the whole file into a single
large array though.
I guess reading characters would be slower because of the encoding/
decoding overhead.
--tim
More information about the Openmcl-devel
mailing list