Jump to content

Computer architecture: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Reverting edit(s) by Diamondscoin1 (talk) to rev. 1226907885 by WikiLinuz: non-constructive (RW 16.1)
 
Line 1: Line 1:
{{Short description|Set of rules describing computer system}}
'''Computer architecture''' is the theory behind the design of a computer. In the same way as a building architect sets the principles and goals of a building project as the basis for the draftsman's plans, so too, a computer architect sets out the computer architecture as a basis for the actual design specifications.
{{Lead too short|date=November 2023}}
[[File:Computer architecture block diagram.png|alt=|thumb|481x481px|Block diagram of a basic computer with uniprocessor CPU. Black lines indicate control flow, whereas red lines indicate data flow. Arrows indicate the direction of flow.]]
In [[computer science]] and [[computer engineering]], '''computer architecture''' is a description of the structure of a [[computer]] system made from component parts.<ref>{{cite web|last=Dragoni|first=Nicole|title=Introduction to peer to peer computing|url=http://www2.imm.dtu.dk/courses/02220/2017/L6/P2P.pdf|website=DTU Compute – Department of Applied Mathematics and Computer Science|location=Lyngby, Denmark|date=n.d.}}</ref> It can sometimes be a high-level description that ignores details of the implementation.<ref>{{cite book|last1=Clements|first1=Alan|title=Principles of Computer Hardware|page=1|edition=Fourth|quote=Architecture describes the internal organization of a computer in an abstract way; that is, it defines the capabilities of the computer and its programming model. You can have two computers that have been constructed in different ways with different technologies but with the same architecture.}}</ref> At a more detailed level, the description may include the [[instruction set architecture]] design, [[microarchitecture]] design, [[logic design]], and [[implementation]].<ref>{{cite book|last1=Hennessy|first1=John|last2=Patterson|first2=David|title=Computer Architecture: A Quantitative Approach|page=11|edition=Fifth|quote=This task has many aspects, including instruction set design, functional organization, logic design, and implementation.}}</ref>


== History ==
There are several usages of the term, which can be used to refer to:
The first documented computer architecture was in the correspondence between [[Charles Babbage]] and [[Ada Lovelace]], describing the [[analytical engine]]. While building the computer [[Z1 (computer)|Z1]] in 1936, [[Konrad Zuse]] described in two patent applications for his future projects that machine instructions could be stored in the same storage used for data, i.e., the [[Stored-program computer|stored-program]] concept.<ref>{{citation |title=Electronic Digital Computers |journal=Nature |date=25 September 1948 |volume=162 |page=487 |url=http://www.computer50.org/kgill/mark1/natletter.html |access-date=2009-04-10 |doi=10.1038/162487a0 |archive-url=https://web.archive.org/web/20090406014626/http://www.computer50.org/kgill/mark1/natletter.html |archive-date=6 April 2009 |url-status=dead |last1=Williams |first1=F. C. |last2=Kilburn |first2=T. |issue=4117 |bibcode=1948Natur.162..487W |s2cid=4110351 |doi-access=free }}</ref><ref>Susanne Faber, "Konrad Zuses Bemuehungen um die Patentanmeldung der Z3", 2000</ref> Two other early and important examples are:
* [[John von Neumann]]'s 1945 paper, [[First Draft of a Report on the EDVAC]], which described an organization of logical elements;<ref>{{Cite book|title=First Draft of a Report on the EDVAC|last=Neumann|first=John|year=1945|pages=9}}</ref> and
*[[Alan M. Turing|Alan Turing]]'s more detailed ''Proposed Electronic Calculator'' for the [[Automatic Computing Engine]], also 1945 and which cited [[John von Neumann]]'s paper.<ref>Reproduced in B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", Oxford University Press, 2005, pp. 369-454.</ref>


The term "architecture" in computer literature can be traced to the work of Lyle R. Johnson and [[Fred Brooks|Frederick P. Brooks, Jr.]], members of the Machine Organization department in IBM's main research center in 1959. Johnson had the opportunity to write a proprietary research communication about the [[IBM 7030 Stretch|Stretch]], an IBM-developed [[supercomputer]] for [[Los Alamos National Laboratory]] (at the time known as Los Alamos Scientific Laboratory). To describe the level of detail for discussing the luxuriously embellished computer, he noted that his description of formats, instruction types, hardware parameters, and speed enhancements were at the level of "system architecture", a term that seemed more useful than "machine organization".<ref>{{cite web|url=https://archive.computerhistory.org/resources/text/IBM/Stretch/pdfs/05-10/102634114.pdf |last1= Johnson |first1=Lyle| title= A Description of Stretch|page=1|year=1960|access-date=7 October 2017}}</ref>
* The design of a computer's [[CPU architecture]], [[instruction set]], [[addressing mode]]s, and techniques such as [[SIMD]] and [[MIMD]] parallelism.
* More general wider-scale hardware architectures, such as [[cluster computing]] and [[Non-Uniform Memory Access]] (NUMA) architectures.
* The less formal usage refers to a description of the requirements (especially speeds and interconnection requirements) or design implementation for the various parts of a computer. (Such as [[computer memory|memory]], [[motherboard]], [[electronics|electronic]] [[peripheral]]s, or most commonly the [[Central Processing Unit|CPU]].)
* Architecture is often defined as the set of machine attributes that a programmer should understand in order to successfully program the specific computer (i.e., being able to reason about what the program will do when executed). For example, part of the architecture are the instructions and the width of operands manipulated by them. Similarly, the frequency at which the system operates is not part of the architecture. This definition reveals the two main considerations for computer architects: (1) Design hardware that behaves as the programmers think it should. (2) Utilize existing implementation technologies (e.g., semiconductors) to build the best computer possible (best can be defined in many different ways as described in ''Design Goals''). The latter consideration is often referred to as [[microarchitecture]].


Subsequently, Brooks, a Stretch designer, opened Chapter 2 of a book called ''Planning a Computer System: Project Stretch'' by stating, "Computer architecture, like other architecture, is the art of determining the needs of the user of a structure and then designing to meet those needs as effectively as possible within economic and technological constraints."<ref>{{Cite book |title= Planning a Computer System|last=Buchholz |first=Werner|year=1962|pages=5}}</ref>


Brooks went on to help develop the [[IBM System/360]] (now called the [[IBM zSeries]]) line of computers, in which "architecture" became a noun defining "what the user needs to know".<ref>{{Cite web|url=http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/system360/|title=System 360, From Computers to Computer Systems|website=IBM100|date=7 March 2012|access-date=11 May 2017}}</ref> Later, computer users came to use the term in many less explicit ways.<ref>{{cite book|last1=Hellige|first1=Hans Dieter|title=Geschichten der Informatik: Visionen, Paradigmen, Leitmotive|chapter=Die Genese von Wissenschaftskonzeptionen der Computerarchitektur: Vom "system of organs" zum Schichtmodell des Designraums| pages=411–472|year=2004}}</ref>
==Design goals==


The earliest computer architectures were designed on paper and then directly built into the final hardware form.<ref>ACE underwent seven paper designs in one year, before a prototype was initiated in 1948. [B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", OUP, 2005, p. 57]</ref>
The most common goals in computer architecture revolve around the tradeoffs between cost and performance (i.e. speed), although other considerations, such as size, weight, and power consumption, may be a factor as well.
Later, computer architecture prototypes were physically built in the form of a [[transistor–transistor logic]] (TTL) computer—such as the prototypes of the [[Motorola 6800#Development team|6800]] and the [[PA-RISC]]—tested, and tweaked, before committing to the final hardware form.
As of the 1990s, new computer architectures are typically "built", tested, and tweaked—inside some other computer architecture in a [[computer architecture simulator]]; or inside a FPGA as a [[soft microprocessor]]; or both—before committing to the final hardware form.<ref>{{Cite web|url=https://www.cise.ufl.edu/~mssz/CompOrg/CDAintro.html|title=Organization of Computer Systems|last=Schmalz|first=M.S.|website=UF CISE|access-date=11 May 2017}}</ref>


===Cost===
== Subcategories ==
The discipline of computer architecture has three main subcategories:<ref name=HennessyPattersonQuantitative>{{cite book|author=John L. Hennessy and David A. Patterson|title=Computer Architecture: A Quantitative Approach|edition=Third|publisher=Morgan Kaufmann Publishers}}</ref>
* '''[[Instruction set architecture]]''' (ISA): defines the [[machine code]] that a [[computer processor|processor]] reads and acts upon as well as the [[word size]], [[addressing mode|memory address modes]], [[processor register]]s, and [[data type]].
* '''[[Microarchitecture]]''': also known as "computer organization", this describes how a particular [[Central processing unit|processor]] will implement the ISA.<ref>{{cite book|title= Dictionary of Computer Science, Engineering, and Technology|last=Laplante|first=Phillip A.|year=2001|publisher=CRC Press|isbn=0-8493-2691-5|pages=94–95}}</ref> The size of a computer's [[CPU cache]] for instance, is an issue that generally has nothing to do with the ISA.
* '''[[Systems design]]''': includes all of the other hardware components within a computing system, such as data processing other than the CPU (e.g., [[direct memory access]]), [[virtualization]], and [[multiprocessing]].


There are other technologies in computer architecture. The following technologies are used in bigger companies like Intel, and were estimated in 2002<ref name=HennessyPattersonQuantitative /> to count for 1% of all of computer architecture:
Generally cost is held constant, determined by either system or commercial requirements, and speed and storage capacity are adjusted to meet the cost target.
* '''Macroarchitecture''': [[architectural layer]]s more abstract than microarchitecture
* '''Assembly instruction set architecture''': A smart assembler may convert an abstract [[assembly language]] common to a group of machines into slightly different [[machine language]] for different [[implementation]]s.
* '''Programmer-visible macroarchitecture''': higher-level language tools such as [[compiler]]s may define a consistent interface or contract to [[programmer]]s using them, abstracting differences between underlying ISA, UISA, and [[microarchitecture]]s. For example, the [[C (programming language)|C]], [[C++]], or [[Java (programming language)|Java]] standards define different programmer-visible macroarchitectures.
* '''[[Microcode]]''': microcode is software that translates instructions to run on a chip. It acts like a wrapper around the hardware, presenting a preferred version of the hardware's instruction set interface. This instruction translation facility gives chip designers flexible options: E.g. 1. A new improved version of the chip can use microcode to present the exact same instruction set as the old chip version, so all software targeting that instruction set will run on the new chip without needing changes. E.g. 2. Microcode can present a variety of instruction sets for the same underlying chip, allowing it to run a wider variety of software.
* '''UISA''': User Instruction Set Architecture, refers to one of three subsets of the '''[[RISC]]''' CPU instructions provided by '''[[PowerPC]]''' RISC Processors. The UISA subset, are those RISC instructions of interest to application developers. The other two subsets are VEA (Virtual Environment Architecture) instructions used by virtualization system developers, and OEA (Operating Environment Architecture) used by Operation System developers.<ref>{{cite web|last1=Frey |first1=Brad |title=PowerPC Architecture Book, Version 2.02 |publisher=IBM Corporation |date=2005-02-24 |url=https://www.ibm.com/developerworks/systems/library/es-archguide-v2.html }}</ref>
* '''Pin architecture''': The hardware functions that a [[microprocessor]] should provide to a hardware platform, e.g., the [[x86]] pins A20M, FERR/IGNNE or FLUSH. Also, messages that the processor should emit so that external [[CPU cache|caches]] can be invalidated (emptied). Pin architecture functions are more flexible than ISA functions because external hardware can adapt to new encodings, or change from a pin to a message. The term "architecture" fits, because the functions must be provided for compatible systems, even if the detailed method changes.

==Roles==

===Definition===
Computer architecture is concerned with balancing the performance, efficiency, cost, and reliability of a computer system. The case of instruction set architecture can be used to illustrate the balance of these competing factors. More complex instruction sets enable programmers to write more space efficient programs, since a single instruction can encode some higher-level abstraction (such as the [[X86 instruction listings|x86 Loop instruction]]).<ref>{{cite book |last1=Null |first1=Linda |title=The Essentials of Computer Organization and Architecture |date=2019 |publisher=Jones & Bartlett Learning |location=Burlington, MA |isbn=9781284123036 |page=280 |edition=5th}}</ref> However, longer and more complex instructions take longer for the processor to decode and can be more costly to implement effectively. The increased complexity from a large instruction set also creates more room for unreliability when instructions interact in unexpected ways.

The implementation involves integrated circuit design, packaging, power, and cooling. Optimization of the design requires familiarity with compilers, operating systems to logic design, and packaging.<ref>{{Cite web|url=https://www.cis.upenn.edu/~milom/cis501-Fall11/lectures/00_intro.pdf|title=What is computer architecture?|last=Martin|first=Milo|website=UPENN|access-date=11 May 2017}}</ref>

===Instruction set architecture===
{{Main|Instruction set architecture}}
{{Unreferenced section|date=March 2018}}
An [[instruction set architecture]] (ISA) is the interface between the computer's software and hardware and also can be viewed as the programmer's view of the machine. Computers do not understand [[high-level programming language]]s such as Java, C++, or most programming languages used. A processor only understands instructions encoded in some numerical fashion, usually as [[Binary numeral system|binary number]]s. Software tools, such as [[compiler]]s, translate those high level languages into instructions that the processor can understand.

Besides instructions, the ISA defines items in the computer that are available to a program&mdash;e.g., [[data type]]s, [[Processor register|registers]], [[addressing mode]]s, and memory. Instructions locate these available items with register indexes (or names) and memory addressing modes.

The ISA of a computer is usually described in a small instruction manual, which describes how the instructions are encoded. Also, it may define short (vaguely) mnemonic names for the instructions. The names can be recognized by a software development tool called an [[assembler (computer programming)|assembler]]. An assembler is a computer program that translates a human-readable form of the ISA into a computer-readable form. [[Disassembler]]s are also widely available, usually in [[debugger]]s and software programs to isolate and correct malfunctions in binary computer programs.

ISAs vary in quality and completeness. A good ISA compromises between programmer convenience (how easy the code is to understand), size of the code (how much code is required to do a specific action), cost of the computer to interpret the instructions (more complexity means more hardware needed to decode and execute the instructions), and speed of the computer (with more complex decoding hardware comes longer decode time). Memory organization defines how instructions interact with the memory, and how memory interacts with itself.

During design [[Emulator|emulation]], emulators can run programs written in a proposed instruction set. Modern emulators can measure size, cost, and speed to determine whether a particular ISA is meeting its goals.

===Computer organization===
{{main | Microarchitecture}}
Computer organization helps optimize performance-based products. For example, software engineers need to know the processing power of processors. They may need to optimize software in order to gain the most performance for the lowest price. This can require quite a detailed analysis of the computer's organization. For example, in an SD card, the designers might need to arrange the card so that the most data can be processed in the fastest possible way.

Computer organization also helps plan the selection of a processor for a particular project. Multimedia projects may need very rapid data access, while virtual machines may need fast interrupts. Sometimes certain tasks need additional components as well. For example, a computer capable of running a virtual machine needs [[virtual memory]] hardware so that the memory of different virtual computers can be kept separated. Computer organization and features also affect power consumption and processor cost.

===Implementation===
Once an instruction set and micro-architecture have been designed, a practical machine must be developed. This design process is called the ''implementation''. Implementation is usually not considered architectural design, but rather hardware [[Engineering design process|design engineering]]. Implementation can be further broken down into several steps:
* '''Logic implementation''' designs the circuits required at a [[Logic gate|logic-gate]] level.
* '''Circuit implementation''' does [[transistor]]-level designs of basic elements (e.g., gates, [[multiplexer]]s, [[Flip-flop (electronics)|latches]]) as well as of some larger blocks ([[Arithmetic logic unit|ALU]]s, caches etc.) that may be implemented at the logic-gate level, or even at the physical level if the design calls for it.
* '''Physical implementation''' draws physical circuits. The different circuit components are placed in a chip [[Floorplan (microelectronics)|floor plan]] or on a board and the wires connecting them are created.
* '''Design validation''' tests the computer as a whole to see if it works in all situations and all timings. Once the design validation process starts, the design at the logic level are tested using logic emulators. However, this is usually too slow to run a realistic test. So, after making corrections based on the first test, prototypes are constructed using Field-Programmable Gate-Arrays ([[FPGA]]s). Most hobby projects stop at this stage. The final step is to test prototype integrated circuits, which may require several redesigns.

For [[Central processing unit|CPU]]s, the entire implementation process is organized differently and is often referred to as [[CPU design]].

==Design goals==
The exact form of a computer system depends on the constraints and goals. Computer architectures usually trade off standards, power versus performance, cost, memory capacity, [[latency (engineering)|latency]] (latency is the amount of time that it takes for information from one node to travel to the source) and throughput. Sometimes other considerations, such as features, size, weight, reliability, and expandability are also factors.

The most common scheme does an in-depth power analysis and figures out how to keep power consumption low while maintaining adequate performance.


===Performance===
===Performance===
Modern computer performance is often described in [[instructions per cycle]] (IPC), which measures the efficiency of the architecture at any clock frequency; a faster IPC rate means the computer is faster. Older computers had IPC counts as low as 0.1 while modern processors easily reach nearly 1. [[Superscalar]] processors may reach three to five IPC by executing several instructions per clock cycle.{{citation needed|date=January 2020}}


Counting machine-language instructions would be misleading because they can do varying amounts of work in different ISAs. The "instruction" in the standard measurements is not a count of the ISA's machine-language instructions, but a unit of measurement, usually based on the speed of the [[VAX]] computer architecture.
Computer retailers describe the performance of their machines in terms of clock speed(usually in MHz or GHz). This refers to the cycles per second of the main clock of the CPU. However, this metric is somewhat misleading, as a machine with a higher clock rate may not necessarily have higher performance. Modern CPUs can [[superscalar|execute multiple instructions per clock cycle]], which dramatically speeds-up a program. Other factors aid speed, such as the mix of [[functional unit]]s, [[computer bus|bus]] speeds, available memory, and the type and order of instructions in the programs being run.


Many people used to measure a computer's speed by the clock rate (usually in MHz or GHz). This refers to the cycles per second of the main clock of the CPU. However, this metric is somewhat misleading, as a machine with a higher clock rate may not necessarily have greater performance. As a result, manufacturers have moved away from clock speed as a measure of performance.
But there are also different types of speed. [[interrupt latency|Interrupt latency]] is the guaranteed maximum response time of the system to an electronic event (e.g. when the disk drive finishes moving some data). This number is affected by a very wide range of design choices -- for example, adding [[CPU cache|cache]] usually makes latency worse (slower) but makes other things faster. Computers that control machinery usually need low interrupt latencies, because the machine can't, won't or should not wait. For example, computer-controlled anti-lock brakes should not wait for the computer to finish what it's doing - they should brake. Low latencies can often be had very inexpensively.


Other factors influence speed, such as the mix of [[functional unit]]s, [[computer bus|bus]] speeds, available memory, and the type and order of instructions in the programs.
[[Benchmark (computing)|Benchmark]]ing tries to take all these factors into account by measuring the time a computer takes to run through a series of test programs. Although benchmarking shows strengths, it may not help one to choose a computer. Often the measured machines split on different measures. For example, one system might handle scientific applications quickly, while another might play popular video games more smoothly. Furthermore, designers have been known to add special features to their products, whether in hardware or software, features which permit a specific benchmark to execute quickly but which do not offer similar advantages to other, more general computational tasks. Naïve users are apt to be unaware of such deceptive tricks.


There are two main types of speed: latency and throughput. Latency is the time between the start of a process and its completion. Throughput is the amount of work done per unit time. [[Interrupt latency]] is the guaranteed maximum response time of the system to an electronic event (like when the disk drive finishes moving some data).
The general scheme of optimization is to find the costs of the different parts of the computer. In a balanced computer system, the data rate will be constant for all parts of the system, and cost will be allocated proportionally to assure this. The exact form of the computer system will depend on the constraints and goals it was optimized for.


Performance is affected by a very wide range of design choices — for example, [[Pipeline (computing)|pipelining]] a processor usually makes latency worse, but makes throughput better. Computers that control machinery usually need low interrupt latencies. These computers operate in a [[real-time computing|real-time]] environment and fail if an operation is not completed in a specified amount of time. For example, computer-controlled anti-lock brakes must begin braking within a predictable and limited time period after the brake pedal is sensed or else failure of the brake will occur.
== Virtual memory ==
Another common problem involves [[virtual memory]].


[[Benchmark (computing)|Benchmark]]ing takes all these factors into account by measuring the time a computer takes to run through a series of test programs. Although benchmarking shows strengths, it should not be how you choose a computer. Often the measured machines split on different measures. For example, one system might handle scientific applications quickly, while another might render video games more smoothly. Furthermore, designers may target and add special features to their products, through hardware or software, that permit a specific benchmark to execute quickly but do not offer similar advantages to general tasks.
Historically, [[random access memory]] has been thousands of times more expensive than rotating mechanical storage, i.e. hard drives in a modern computer.


===Power efficiency===
For businesses, and many general computing tasks, it is a good compromise to never let the computer run out of memory, an event which would halt the program, and greatly inconvenience the user.
{{Main|Low-power electronics|Performance per watt}}
Power efficiency is another important measurement in modern computers. Higher power efficiency can often be traded for lower speed or higher cost. The typical measurement when referring to power consumption in computer architecture is MIPS/W (millions of instructions per second per watt).


Modern circuits have less power required per [[transistor]] as the number of transistors per chip grows.<ref>{{Cite web|url=http://eacharya.inflibnet.ac.in/data-server/eacharya-documents/53e0c6cbe413016f23443704_INFIEP_33/192/ET/33-192-ET-V1-S1__ssed_unit_4_module_10_integrated_circuits_and_fabrication_e-text.pdf|title=Integrated circuits and fabrication|access-date=8 May 2017}}</ref> This is because each transistor that is put in a new chip requires its own power supply and requires new pathways to be built to power it. However, the number of transistors per chip is starting to increase at a slower rate. Therefore, power efficiency is starting to become as important, if not more important than fitting more and more transistors into a single chip. Recent processor designs have shown this emphasis as they put more focus on power efficiency rather than cramming as many transistors into a single chip as possible.<ref>{{Cite web|url=http://www.samsung.com/semiconductor/minisite/Exynos/w/solution/mod_ap/8895/?CID=AFL-hq-mul-0813-11000170|title=Exynos 9 Series (8895)|website=Samsung|access-date=8 May 2017}}</ref> In the world of embedded computers, power efficiency has long been an important goal next to throughput and latency.
Instead of halting the program, many computer systems save less-frequently used blocks of memory to the rotating mechanical storage.
In essence, the mechanical storage becomes main memory.
However, mechanical storage is thousands of times slower than electronic memory.


===Shifts in market demand===
==Computer architecture on a future horizon==
Increases in clock frequency have grown more slowly over the past few years, compared to power reduction improvements. This has been driven by the end of [[Moore's Law]] and demand for longer battery life and reductions in size for mobile technology. This change in focus from higher clock rates to power consumption and miniaturization can be shown by the significant reductions in power consumption, as much as 50%, that were reported by Intel in their release of the [[Haswell (microarchitecture)|Haswell microarchitecture]]; where they dropped their power consumption benchmark from 30 to 40 watts down to 10-20 watts.<ref>{{Cite web|url=http://www.intel.com/content/dam/doc/white-paper/resources-xeon-measuring-processor-power-paper.pdf|title=Measuring Processor Power TDP vs ACP|date=April 2011|website=Intel|access-date=5 May 2017}}</ref> Comparing this to the processing speed increase of 3&nbsp;GHz to 4&nbsp;GHz (2002 to 2006)<ref>{{Cite web|url=https://www.cs.columbia.edu/~sedwards/classes/2012/3827-spring/advanced-arch-2011.pdf|title=History of Processor Performance|date=24 April 2012|website=cs.columbia.edu|access-date=5 May 2017}}</ref> it can be seen that the focus in research and development is shifting away from clock frequency and moving towards consuming less power and taking up less space.
A very notable approach in the research phase potentially breaks the structural limits of conventional processing architectures. It is called [[reconfigurable computing|configurable computing]]. Here the program code causes the [[compiler]] to create intermediate code suitable for runtime reconfigurable [[FPGA|field-programmable gate arrays]] in which during the scope of program [[Object (computer science)|objects]] the configurable logic represents the calculating structure able to perform as desired. Since many objects can potentially perform in parallel on [[streaming data]] this ultimatively constitutes an advanced [[parallel computing|parallel processing architecture]]. Configurable computing could be categorized under [[computing in memory]] which is inspired by the function of the neuronal brain, where the processor and the memory eventually cannot be distinguished from each other.


==See also==
==See also==
{{Portal|Electronics}}
{{cmn|colwidth=30em|
* [[Bit-serial architecture]]
* [[Comparison of CPU architectures]]
* [[Computer hardware]]
* [[Computer hardware]]
* [[CPU design]]
* [[CPU design]]
* [[Dataflow architecture]]
* [[Floating point]]
* [[Flynn's taxonomy]]
* [[Harvard architecture]] ([[Modified Harvard architecture|Modified]])
* [[Influence of the IBM PC on the personal computer market]]
* [[Orthogonal instruction set]]
* [[Orthogonal instruction set]]
* [[Reconfigurable computing]]
* [[:Category:computer architecture|List of computer architecture topics]]
* [[Software architecture]]
* [[Transport triggered architecture]]
* [[Von Neumann architecture]]
}}


== References==
==References==
{{Reflist}}

==Sources==
* {{Cite book |last=[[John L. Hennessy]] and [[David Patterson (scientist)|David Patterson]] |title=Computer Architecture: A Quantitative Approach |publisher=Morgan Kaufmann |edition=Fourth |year=2006 |isbn=978-0-12-370490-0 |url=http://www.elsevierdirect.com/product.jsp?isbn=9780123704900}}
* [[Robert S. Barton|Barton, Robert S.]], "Functional Design of Computers", ''Communications of the ACM'' 4(9): 405 (1961).
* Barton, Robert S., "A New Approach to the Functional Design of a Digital Computer", ''Proceedings of the Western Joint Computer Conference'', May 1961, pp.&nbsp;393–396. About the design of the Burroughs [[Burroughs large systems|B5000]] computer.
* [[Gordon Bell|Bell, C. Gordon]]; and [[Allen Newell|Newell, Allen]] (1971). [http://research.microsoft.com/en-us/um/people/gbell/Computer_Structures__Readings_and_Examples/contents.html "Computer Structures: Readings and Examples"], McGraw-Hill.
* [[Gerrit Blaauw|Blaauw, G.A.]], and [[Fred Brooks|Brooks, F.P., Jr.]], [http://domino.research.ibm.com/tchjr/journalindex.nsf/d9f0a910ab8b637485256bc80066a393/95dc427e3fd3024a85256bfa006859f7?OpenDocument "The Structure of System/360, Part I-Outline of the Logical Structure"], ''IBM Systems Journal'', vol. 3, no. 2, pp.&nbsp;119–135, 1964.
* {{Cite book |last= Tanenbaum |first=Andrew S. |author-link=Andrew S. Tanenbaum |title=Structured Computer Organization |year=1979 |publisher=Prentice-Hall |location=[[Englewood Cliffs, New Jersey]] |isbn=0-13-148521-0}}

==External links==
{{Commons category}}
* [http://portal.acm.org/toc.cfm?id=SERIES416&type=series&coll=GUIDE&dl=GUIDE&CFID=41492512&CFTOKEN=82922478 ISCA: Proceedings of the International Symposium on Computer Architecture]
* [http://portal.acm.org/toc.cfm?id=SERIES416&type=series&coll=GUIDE&dl=GUIDE&CFID=41492512&CFTOKEN=82922478 ISCA: Proceedings of the International Symposium on Computer Architecture]
* [http://www.microarch.org/ Micro: IEEE/ACM International Symposium on Microarchitecture]
* [http://www.microarch.org/ Micro: IEEE/ACM International Symposium on Microarchitecture]
* [http://www.hpcaconf.org/ HPCA: International Symposium on High Performance Computer Architecture]
* [https://web.archive.org/web/20050528085407/http://www.hpcaconf.org/ HPCA: International Symposium on High Performance Computer Architecture]
* [http://portal.acm.org/toc.cfm?id=SERIES311&type=series&coll=GUIDE&dl=GUIDE&CFID=41492415&CFTOKEN=3676847 ASPLOS: International Conference on Architectural Support for Programming Languages and Operating Systems]
* [http://portal.acm.org/toc.cfm?id=SERIES311&type=series&coll=GUIDE&dl=GUIDE&CFID=41492415&CFTOKEN=3676847 ASPLOS: International Conference on Architectural Support for Programming Languages and Operating Systems]
* [http://www.acm.org/tocs/ ACM Transactions on Computer Systems]
* [http://www.acm.org/taco/ ACM Transactions on Architecture and Code Optimization]
* [http://www.computer.org/ IEEE Computer Society]
* [https://www.computer.org/csdl/journal/tc IEEE Transactions on Computers]
* {{webarchive|url=https://web.archive.org/web/20171031185802/http://www-scf.usc.edu/~inf520/downloads/The%20von%20Neumann%20Architecture%20of%20Computer%20Systems.pdf|title=The von Neumann Architecture of Computer Systems|date=2017-10-31}}
* [http://www.mdronline.com/mpr/ Microprocessor Report]
{{Computer science}}
{{Digital electronics}}
{{Authority control}}


{{DEFAULTSORT:Computer Architecture}}
==External links==
Independent Web sites
* http://www.aceshardware.com
* http://www.anandtech.com
* http://www.dansdata.com
* http://www.barefeats.com
* http://www.cs.wisc.edu/~arch/www
[[Category:Computer architecture| ]]
[[Category:Computer architecture| ]]
[[Category:Central processing unit]]


[[bg:Компютърна архитектура]]
[[bn:কম্পিউটার স্থাপত্য]]
[[bs:Računarska arhitektura]]
[[de:Rechnerarchitektur]]
[[es:Arquitectura de ordenadores]]
[[fr:Architecture informatique]]
[[hu:Architektúra]]
[[ja:コンピュータ・アーキテクチャ]]
[[pl:Architektury komputerowe]]
[[pt:Arquitetura de computadores]]
[[th:สถาปัตยกรรมคอมพิวเตอร์]]
[[uk:Архітектура ЕОМ]]
[[zh:计算机系统结构]]

Latest revision as of 17:27, 5 June 2024

Block diagram of a basic computer with uniprocessor CPU. Black lines indicate control flow, whereas red lines indicate data flow. Arrows indicate the direction of flow.

In computer science and computer engineering, computer architecture is a description of the structure of a computer system made from component parts.[1] It can sometimes be a high-level description that ignores details of the implementation.[2] At a more detailed level, the description may include the instruction set architecture design, microarchitecture design, logic design, and implementation.[3]

History[edit]

The first documented computer architecture was in the correspondence between Charles Babbage and Ada Lovelace, describing the analytical engine. While building the computer Z1 in 1936, Konrad Zuse described in two patent applications for his future projects that machine instructions could be stored in the same storage used for data, i.e., the stored-program concept.[4][5] Two other early and important examples are:

The term "architecture" in computer literature can be traced to the work of Lyle R. Johnson and Frederick P. Brooks, Jr., members of the Machine Organization department in IBM's main research center in 1959. Johnson had the opportunity to write a proprietary research communication about the Stretch, an IBM-developed supercomputer for Los Alamos National Laboratory (at the time known as Los Alamos Scientific Laboratory). To describe the level of detail for discussing the luxuriously embellished computer, he noted that his description of formats, instruction types, hardware parameters, and speed enhancements were at the level of "system architecture", a term that seemed more useful than "machine organization".[8]

Subsequently, Brooks, a Stretch designer, opened Chapter 2 of a book called Planning a Computer System: Project Stretch by stating, "Computer architecture, like other architecture, is the art of determining the needs of the user of a structure and then designing to meet those needs as effectively as possible within economic and technological constraints."[9]

Brooks went on to help develop the IBM System/360 (now called the IBM zSeries) line of computers, in which "architecture" became a noun defining "what the user needs to know".[10] Later, computer users came to use the term in many less explicit ways.[11]

The earliest computer architectures were designed on paper and then directly built into the final hardware form.[12] Later, computer architecture prototypes were physically built in the form of a transistor–transistor logic (TTL) computer—such as the prototypes of the 6800 and the PA-RISC—tested, and tweaked, before committing to the final hardware form. As of the 1990s, new computer architectures are typically "built", tested, and tweaked—inside some other computer architecture in a computer architecture simulator; or inside a FPGA as a soft microprocessor; or both—before committing to the final hardware form.[13]

Subcategories[edit]

The discipline of computer architecture has three main subcategories:[14]

There are other technologies in computer architecture. The following technologies are used in bigger companies like Intel, and were estimated in 2002[14] to count for 1% of all of computer architecture:

  • Macroarchitecture: architectural layers more abstract than microarchitecture
  • Assembly instruction set architecture: A smart assembler may convert an abstract assembly language common to a group of machines into slightly different machine language for different implementations.
  • Programmer-visible macroarchitecture: higher-level language tools such as compilers may define a consistent interface or contract to programmers using them, abstracting differences between underlying ISA, UISA, and microarchitectures. For example, the C, C++, or Java standards define different programmer-visible macroarchitectures.
  • Microcode: microcode is software that translates instructions to run on a chip. It acts like a wrapper around the hardware, presenting a preferred version of the hardware's instruction set interface. This instruction translation facility gives chip designers flexible options: E.g. 1. A new improved version of the chip can use microcode to present the exact same instruction set as the old chip version, so all software targeting that instruction set will run on the new chip without needing changes. E.g. 2. Microcode can present a variety of instruction sets for the same underlying chip, allowing it to run a wider variety of software.
  • UISA: User Instruction Set Architecture, refers to one of three subsets of the RISC CPU instructions provided by PowerPC RISC Processors. The UISA subset, are those RISC instructions of interest to application developers. The other two subsets are VEA (Virtual Environment Architecture) instructions used by virtualization system developers, and OEA (Operating Environment Architecture) used by Operation System developers.[16]
  • Pin architecture: The hardware functions that a microprocessor should provide to a hardware platform, e.g., the x86 pins A20M, FERR/IGNNE or FLUSH. Also, messages that the processor should emit so that external caches can be invalidated (emptied). Pin architecture functions are more flexible than ISA functions because external hardware can adapt to new encodings, or change from a pin to a message. The term "architecture" fits, because the functions must be provided for compatible systems, even if the detailed method changes.

Roles[edit]

Definition[edit]

Computer architecture is concerned with balancing the performance, efficiency, cost, and reliability of a computer system. The case of instruction set architecture can be used to illustrate the balance of these competing factors. More complex instruction sets enable programmers to write more space efficient programs, since a single instruction can encode some higher-level abstraction (such as the x86 Loop instruction).[17] However, longer and more complex instructions take longer for the processor to decode and can be more costly to implement effectively. The increased complexity from a large instruction set also creates more room for unreliability when instructions interact in unexpected ways.

The implementation involves integrated circuit design, packaging, power, and cooling. Optimization of the design requires familiarity with compilers, operating systems to logic design, and packaging.[18]

Instruction set architecture[edit]

An instruction set architecture (ISA) is the interface between the computer's software and hardware and also can be viewed as the programmer's view of the machine. Computers do not understand high-level programming languages such as Java, C++, or most programming languages used. A processor only understands instructions encoded in some numerical fashion, usually as binary numbers. Software tools, such as compilers, translate those high level languages into instructions that the processor can understand.

Besides instructions, the ISA defines items in the computer that are available to a program—e.g., data types, registers, addressing modes, and memory. Instructions locate these available items with register indexes (or names) and memory addressing modes.

The ISA of a computer is usually described in a small instruction manual, which describes how the instructions are encoded. Also, it may define short (vaguely) mnemonic names for the instructions. The names can be recognized by a software development tool called an assembler. An assembler is a computer program that translates a human-readable form of the ISA into a computer-readable form. Disassemblers are also widely available, usually in debuggers and software programs to isolate and correct malfunctions in binary computer programs.

ISAs vary in quality and completeness. A good ISA compromises between programmer convenience (how easy the code is to understand), size of the code (how much code is required to do a specific action), cost of the computer to interpret the instructions (more complexity means more hardware needed to decode and execute the instructions), and speed of the computer (with more complex decoding hardware comes longer decode time). Memory organization defines how instructions interact with the memory, and how memory interacts with itself.

During design emulation, emulators can run programs written in a proposed instruction set. Modern emulators can measure size, cost, and speed to determine whether a particular ISA is meeting its goals.

Computer organization[edit]

Computer organization helps optimize performance-based products. For example, software engineers need to know the processing power of processors. They may need to optimize software in order to gain the most performance for the lowest price. This can require quite a detailed analysis of the computer's organization. For example, in an SD card, the designers might need to arrange the card so that the most data can be processed in the fastest possible way.

Computer organization also helps plan the selection of a processor for a particular project. Multimedia projects may need very rapid data access, while virtual machines may need fast interrupts. Sometimes certain tasks need additional components as well. For example, a computer capable of running a virtual machine needs virtual memory hardware so that the memory of different virtual computers can be kept separated. Computer organization and features also affect power consumption and processor cost.

Implementation[edit]

Once an instruction set and micro-architecture have been designed, a practical machine must be developed. This design process is called the implementation. Implementation is usually not considered architectural design, but rather hardware design engineering. Implementation can be further broken down into several steps:

  • Logic implementation designs the circuits required at a logic-gate level.
  • Circuit implementation does transistor-level designs of basic elements (e.g., gates, multiplexers, latches) as well as of some larger blocks (ALUs, caches etc.) that may be implemented at the logic-gate level, or even at the physical level if the design calls for it.
  • Physical implementation draws physical circuits. The different circuit components are placed in a chip floor plan or on a board and the wires connecting them are created.
  • Design validation tests the computer as a whole to see if it works in all situations and all timings. Once the design validation process starts, the design at the logic level are tested using logic emulators. However, this is usually too slow to run a realistic test. So, after making corrections based on the first test, prototypes are constructed using Field-Programmable Gate-Arrays (FPGAs). Most hobby projects stop at this stage. The final step is to test prototype integrated circuits, which may require several redesigns.

For CPUs, the entire implementation process is organized differently and is often referred to as CPU design.

Design goals[edit]

The exact form of a computer system depends on the constraints and goals. Computer architectures usually trade off standards, power versus performance, cost, memory capacity, latency (latency is the amount of time that it takes for information from one node to travel to the source) and throughput. Sometimes other considerations, such as features, size, weight, reliability, and expandability are also factors.

The most common scheme does an in-depth power analysis and figures out how to keep power consumption low while maintaining adequate performance.

Performance[edit]

Modern computer performance is often described in instructions per cycle (IPC), which measures the efficiency of the architecture at any clock frequency; a faster IPC rate means the computer is faster. Older computers had IPC counts as low as 0.1 while modern processors easily reach nearly 1. Superscalar processors may reach three to five IPC by executing several instructions per clock cycle.[citation needed]

Counting machine-language instructions would be misleading because they can do varying amounts of work in different ISAs. The "instruction" in the standard measurements is not a count of the ISA's machine-language instructions, but a unit of measurement, usually based on the speed of the VAX computer architecture.

Many people used to measure a computer's speed by the clock rate (usually in MHz or GHz). This refers to the cycles per second of the main clock of the CPU. However, this metric is somewhat misleading, as a machine with a higher clock rate may not necessarily have greater performance. As a result, manufacturers have moved away from clock speed as a measure of performance.

Other factors influence speed, such as the mix of functional units, bus speeds, available memory, and the type and order of instructions in the programs.

There are two main types of speed: latency and throughput. Latency is the time between the start of a process and its completion. Throughput is the amount of work done per unit time. Interrupt latency is the guaranteed maximum response time of the system to an electronic event (like when the disk drive finishes moving some data).

Performance is affected by a very wide range of design choices — for example, pipelining a processor usually makes latency worse, but makes throughput better. Computers that control machinery usually need low interrupt latencies. These computers operate in a real-time environment and fail if an operation is not completed in a specified amount of time. For example, computer-controlled anti-lock brakes must begin braking within a predictable and limited time period after the brake pedal is sensed or else failure of the brake will occur.

Benchmarking takes all these factors into account by measuring the time a computer takes to run through a series of test programs. Although benchmarking shows strengths, it should not be how you choose a computer. Often the measured machines split on different measures. For example, one system might handle scientific applications quickly, while another might render video games more smoothly. Furthermore, designers may target and add special features to their products, through hardware or software, that permit a specific benchmark to execute quickly but do not offer similar advantages to general tasks.

Power efficiency[edit]

Power efficiency is another important measurement in modern computers. Higher power efficiency can often be traded for lower speed or higher cost. The typical measurement when referring to power consumption in computer architecture is MIPS/W (millions of instructions per second per watt).

Modern circuits have less power required per transistor as the number of transistors per chip grows.[19] This is because each transistor that is put in a new chip requires its own power supply and requires new pathways to be built to power it. However, the number of transistors per chip is starting to increase at a slower rate. Therefore, power efficiency is starting to become as important, if not more important than fitting more and more transistors into a single chip. Recent processor designs have shown this emphasis as they put more focus on power efficiency rather than cramming as many transistors into a single chip as possible.[20] In the world of embedded computers, power efficiency has long been an important goal next to throughput and latency.

Shifts in market demand[edit]

Increases in clock frequency have grown more slowly over the past few years, compared to power reduction improvements. This has been driven by the end of Moore's Law and demand for longer battery life and reductions in size for mobile technology. This change in focus from higher clock rates to power consumption and miniaturization can be shown by the significant reductions in power consumption, as much as 50%, that were reported by Intel in their release of the Haswell microarchitecture; where they dropped their power consumption benchmark from 30 to 40 watts down to 10-20 watts.[21] Comparing this to the processing speed increase of 3 GHz to 4 GHz (2002 to 2006)[22] it can be seen that the focus in research and development is shifting away from clock frequency and moving towards consuming less power and taking up less space.

See also[edit]

References[edit]

  1. ^ Dragoni, Nicole (n.d.). "Introduction to peer to peer computing" (PDF). DTU Compute – Department of Applied Mathematics and Computer Science. Lyngby, Denmark.
  2. ^ Clements, Alan. Principles of Computer Hardware (Fourth ed.). p. 1. Architecture describes the internal organization of a computer in an abstract way; that is, it defines the capabilities of the computer and its programming model. You can have two computers that have been constructed in different ways with different technologies but with the same architecture.
  3. ^ Hennessy, John; Patterson, David. Computer Architecture: A Quantitative Approach (Fifth ed.). p. 11. This task has many aspects, including instruction set design, functional organization, logic design, and implementation.
  4. ^ Williams, F. C.; Kilburn, T. (25 September 1948), "Electronic Digital Computers", Nature, 162 (4117): 487, Bibcode:1948Natur.162..487W, doi:10.1038/162487a0, S2CID 4110351, archived from the original on 6 April 2009, retrieved 2009-04-10
  5. ^ Susanne Faber, "Konrad Zuses Bemuehungen um die Patentanmeldung der Z3", 2000
  6. ^ Neumann, John (1945). First Draft of a Report on the EDVAC. p. 9.
  7. ^ Reproduced in B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", Oxford University Press, 2005, pp. 369-454.
  8. ^ Johnson, Lyle (1960). "A Description of Stretch" (PDF). p. 1. Retrieved 7 October 2017.
  9. ^ Buchholz, Werner (1962). Planning a Computer System. p. 5.
  10. ^ "System 360, From Computers to Computer Systems". IBM100. 7 March 2012. Retrieved 11 May 2017.
  11. ^ Hellige, Hans Dieter (2004). "Die Genese von Wissenschaftskonzeptionen der Computerarchitektur: Vom "system of organs" zum Schichtmodell des Designraums". Geschichten der Informatik: Visionen, Paradigmen, Leitmotive. pp. 411–472.
  12. ^ ACE underwent seven paper designs in one year, before a prototype was initiated in 1948. [B. J. Copeland (Ed.), "Alan Turing's Automatic Computing Engine", OUP, 2005, p. 57]
  13. ^ Schmalz, M.S. "Organization of Computer Systems". UF CISE. Retrieved 11 May 2017.
  14. ^ a b John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach (Third ed.). Morgan Kaufmann Publishers.
  15. ^ Laplante, Phillip A. (2001). Dictionary of Computer Science, Engineering, and Technology. CRC Press. pp. 94–95. ISBN 0-8493-2691-5.
  16. ^ Frey, Brad (2005-02-24). "PowerPC Architecture Book, Version 2.02". IBM Corporation.
  17. ^ Null, Linda (2019). The Essentials of Computer Organization and Architecture (5th ed.). Burlington, MA: Jones & Bartlett Learning. p. 280. ISBN 9781284123036.
  18. ^ Martin, Milo. "What is computer architecture?" (PDF). UPENN. Retrieved 11 May 2017.
  19. ^ "Integrated circuits and fabrication" (PDF). Retrieved 8 May 2017.
  20. ^ "Exynos 9 Series (8895)". Samsung. Retrieved 8 May 2017.
  21. ^ "Measuring Processor Power TDP vs ACP" (PDF). Intel. April 2011. Retrieved 5 May 2017.
  22. ^ "History of Processor Performance" (PDF). cs.columbia.edu. 24 April 2012. Retrieved 5 May 2017.

Sources[edit]

External links[edit]