Computer Chess Club Archives


Search

Terms

Messages

Subject: High speed file access for tablebases under 32-bit Windows

Author: Roberto Waldteufel

Date: 17:36:30 12/23/98


Hi all,

I would like to share an idea I am currently looking into concerning hard disc
access. For many chess programs that use tablebases hard disc access can be a
serious problem when there are many hits on the tablebases deep in the search.
If the disc accesses could be sped up, the program would benefit very much in
these types of positions.

The idea is this: bypass everything and go directly to the data via hardware. Of
course this is technically much more complicated than simply opening the file
and retrieving the required byte in the normal way, but I suspect the speed
improvement may be substantial if it can be done, which I think it can. The
fastest way to access the hard disc is via the hardware ports. We need to know
the sector and the sector offset for the data in the file, but this information
can be read from the FAT. By using ports, we load just the data we want from
just the sector we want (not a cluster of sectors), and cut out all the
operating system overhead. The point is that we know the size of the file, we
know it is not going to be altered while the program runs, so all the FAT
information should be readable at start-up time, and then instead of calculating
a simple byte location in the file for a given position, we calculate the actual
sector/offset on disc and read the data via the ports directly from disc.

There is a problem in that Windows disallows direct hardware access, and goes to
great lengths to conceal the necessary API call (CallVxD0) in an effort to
prevent programmers from doing precisely the sort of thing I am proposing. By
writing the port access code in a virtual device driver, we can obtain the
required Ring0 privelege to read/write not only ports, but any area of memory
(protected or not). Micro$oft removed the vxdcall function from the export list
for kernel32.exe when the function's potential uses were publicised, but it is
still present - it just takes a bit of hacking to get at it, but there is a
"back door": it is still there and very useful indeed! Using this API call, I
have now a VxD in place that can, among other things, read and write the
hardware ports under 32-bit windows I think, if I can make this work with disc
accessing, the potential could extend beyond chess programming to other disc
byte-data intensive computer operations. If anyone has already tried anything
along these lines or has any comments I would be intersted to hear from you.

Merry Christmas to all,
Roberto



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.