This chapter is the first of three dealing with using multicore/multiprocessor/multithreading in AGI systems; the following two chapters will deal with problems and how to solve them.
AGI systems have quite pronounced specifics. The first is quite obvious: the need for high computing performance due to processing large amounts of information and the complexity of the corresponding processes, especially those related to visual data. Even though this complicates the development of systems, there are also positive aspects - in particular, the system core code requires the use of one highly efficient programming language, that is, in practice, C/C++; this eliminates the difficulties of integrating into a single system component in different languages (especially interpreted ones).
The second feature is the practical impossibility of using remote computational resources. Real-time (mostly soft real-time) requires both fast responses to events and reliability; both are unattainable when using remote computer resources due to the unacceptably low and unstable speed of information exchange (taking into account its large volumes). At first glance, the requirements may seem not distinct from Internet queuing services, but they are not. First, Internet services are measured by average performance and reliability, and it is essential for AGI that the worst possible situations should remain acceptable. Secondly, the requirements for reaction speed for controlling a car, aircraft, and other similar systems are much higher: the allowable decision time, that is, the complete data processing cycle from event detection to issuing event response commands, is commensurate with the time it takes to send data to a remote server and receive a response; that is, there is no time left for the actual processing of data on a remote server. As a result, all necessary computing resources must be local, which naturally limits their performance. This, accordingly, requires the maximally efficient use of available resources.
The third feature is a series of parallel logical processes (not processes in terms of the operating system) that operate on shared data, both in accessing existing data and updating them. Such logical processes are, for example, the stages of processing incoming sensory information, combining them into a single description of the current situation, making a forecast for changing the situation, developing a decision on current actions, drawing up an action plan, discovering new cause-and-effect relationships and new types of objects and situations. As in any complex control system, one can distinguish between the strategic level (concepts and relationships between them), tactical (planning), and operational (reaction to events). Differing in the degree of reactivity, they have in common that data sets are actively used by several logical processes developed and maintained independently of each other. The logic of these processes and the algorithms used require the involvement of specialists of various profiles, which radically complicates the analysis of the possible mutual influences of the processes both when developing the initial version of the system and when modifying its components. A similar situation is well known with distributed web services, including cloud computing, using databases by many services simultaneously, and so on.
The fourth feature arising from the speed requirements is the priority in using data permanently placed in large-capacity RAM (copied to disk memory only for the duration of the system shutdown). This increases performance (reducing the amount of data shuffling between RAM and the file system) and significantly reduces the operating system's role in coordinating computing processes, thereby increasing the part of how the system's code implements multithreading capabilities.
These features naturally require local computing resources with many processors/cores, ample RAM, and multithreading with many interacting threads operating on a shared data pool. Related problems are the subject of the next chapter.