Memory ordering, or reordering, is a process through which the central processing unit (CPU) takes requests for computer memory and orders them into the most optimized pattern. The process switches around the requests, often processes are completed out of order, but users and programmers do not see this. This usually can be done very easily on a single CPU system, but a system with several CPUs may experience a problem when ordering. If this process were not used, then computers would not be as efficient when completing user requests.
Whenever someone does anything on a computer — moves the mouse, opens a program or edits an image, for example — the CPU has to approve memory usage for the task. These requests normally come in linearly, but they rarely are processed that way. With memory ordering, the tasks are processed in the best possible way to make the computer faster. For example, if the CPU can easily take care of the second process before the first, it will use memory for that process before moving on to other ones.
Requests often are done out of order, which could confuse users and programmers. At the same time, the CPU is programmed to know that memory ordering can confuse them, so it performs everything in a way that makes it seem as if the processes are being completed linearly, even though they are not. This makes it easier for users to understand and usually keeps programmers from having to input excessive coding to ensure the CPU works efficiently.
Memory ordering normally can be done easily very on a computer with a single CPU, but there may be issues with a computer that has several CPUs. This is because it is easier for memory accesses to be approved and properly ordered around with one CPU, but two or more CPUs may falter when attempting to process several tasks. If there is adequate communication between the two or more CPUs, then this problem is usually mitigated.
Without memory ordering, tasks could be harder for the computer and the programmer. On the computer’s side, the CPU would only be able to satisfy requests as they came, meaning the entire process slows down and may keep users waiting. For the programmer, he would have to write excessive coding to ensure the CPU properly takes care of all tasks, which would make program creation take much longer.