guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: How to read integers from file faster?


From: Daniel Llorens
Subject: Re: How to read integers from file faster?
Date: Mon, 2 Sep 2013 19:32:59 +0200

> Date: Sun, 01 Sep 2013 22:55:56 +0200
> From: "Pascal J. Bourguignon" <address@hidden>
> To: address@hidden
> 
> Darren Hoo <address@hidden> writes:
> 

>> It is way too slow to read numbers from a file simply by using `read' 
>> 
>> for example a txt file contains 10,000,000 line of numbers:
> 
> To get speed, I would:
> 
> 1- open a binary file,
> 
> 2- perform double-buffering I/O,  (ie. read a buffer while you process
>   another),
> 
> 3- assume the input format is as specified, ie. no check.
>   ?
>   (let ((byte (vector-ref buffer i)))
>     (if (= byte 10)
>        (begin (set! values (cons value values))
>               (set! value 0))
>        (set! value (+ (* value 10) (mod byte 16)))))
>   ?
> 
> 
> Actually, only using buffered I/O matters.  For big files, what slows
> down is I/O, not the handling of characters or checking of the syntax or
> anything that's done in memory.  If you want to read your data faster,
> keep it in RAM, or else in SSD.

I know this is not exactly a Scheme solution, but if you can choose your file 
format, consider using HDF5. You can read directly into a typed (srfi4) array, 
and a lot of languages have bindings (e.g. h5py), so it's a portable format. 
I've found it to be fast.

I haven't found bindings for Guile on the web (the ones I use depend on local 
stuff), but it shouldn't be a lot of work, and it's more flexible than a 
one-off integer reader. Of course, if that's all you need, then disregard this.

If you or someone else is interested in doing proper bindings using the ffi, I 
can lend a hand and test.

        Daniel





reply via email to

[Prev in Thread] Current Thread [Next in Thread]