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.