Author: Stephen A. Boak
Date: 16:25:22 02/05/06
Go up one level in this thread
On February 05, 2006 at 16:31:22, Joseph Ciarrochi wrote: >Is it possible for engines to improve their relative strength on faster hardware Of course (generally speaking). In general, chess program strength contributed by the hardware comes from speed of software execution, and any program optimized for speed on specific faster hardware will thus benefit accordingly (relatively, i.e. better than other programs not thus optimized), when moved between hardware platforms. From a programming perspective (chess or other application) there are always multiple competing resource or application considerations (i.e. design goals or user measures of success). For example: 1. Speed (loading and/or execution, RAM, use of cache & registers) 2. Size (permanent storage and/or temporary RAM storage, space required in cache & registers) 3. Understandability & Maintainability (clear program structures, understandable variable names, embedded comments). It is possible to pursue optimization of coding for any one or two of the above, but always at the cost of one or two of the other measures of success. EXAMPLES Seeking to write the fastest executing code will help with Goal#1, but may or may not help with Goal#2 and will not help with Goal#3. The fastest possible codings are usually the most unintelligable, least easily maintainable--since so many programming tricks are used to achieve optimization for speed that the likelihood of a human programmer to glance at the code and understand it is heavily impaired. The lack of Understandability & Maintainability means it will be very difficult to make fixes or improvements to the speed optimized code. Seeking to write the smallest possible code size that can execute a given set of program instructions will better achieve Goal#2, but it may or may not help with Goal#1, and will definitely not help with Goal#3. Seeking to write the most understandable and maintainable program code (Goal #3) will be adverse to Goal#1 and Goal#2--because clarity to the human programmer requires a certain amount of unnecessary size (length of code or duplication of coding portions, or long variable names which are self explanatory at a glance) to make the code easier to understand and hence maintain--for purpose of fixing bugs or developing a stronger program. Also note that programming (coding) is is normally performed in a higher level language, but is then transformed to a hardware executable code version via use of a compiler. Compilers have their strengths and weaknesses (including efficiencies, deficiencies, even outright bugs). Coding may be optimized for compilation by a certain compiler. Compilers may be chosen for how well they optimize their output for performance on a given hardware platform. BOTTOM LINE--it is impossible to optimize a given program simultaneously across all desirable Goals. Compromises are always made, of necessity. It is possible to relatively optimize a program for a specific subset (intentionally chosen or accidentally favored) of those goals. This means that anytime a user asks for a specific optimization (fastest possible code for running on XYZ hardware chip), there is theoretically a way to provide that. Doesn't mean it is practical to achieve that, doesn't mean it is cost effective to pursue that, but theoretically there is indeed a way to optimize the program to accomplish that specific subset of possible goals deemed most desirable by a specific customer, for that customer's specific hardware (or target hardware of choice). Professional programmers may be better able to explain or refine the above explanation, but that's my top-of-the-head answer, in a nutshell, to your question. --Steve
This page took 0 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.