Information engineering is the engineering discipline that deals with the generation, distribution, analysis, and use of information, data, and knowledge in systems. The field first became identifiable in the early 21st century.
Machine learning is the field that involves the use of statistical and probabilistic methods to let computers "learn" from data without being explicitly programmed. Data science involves the application of machine learning to extract knowledge from data.
Causal inference is another related component of information engineering.
Control theory
Control theory refers to the control of (continuous) dynamical systems, with the aim being to avoid delays, overshoots, or instability. Information engineers tend to focus more on control theory rather than the physical design of control systems and circuits (which tends to fall under electrical engineering).
Information theory studies the analysis, transmission, and storage of
information. Major subfields of information theory include coding and data compression.
Computer vision
Computer vision is the field that deals with getting computers to understand image and video data at a high level.
Natural language processing
Natural language processing deals with getting computers to
understand human (natural) languages at a high level. This usually means
text, but also often includes speech processing and recognition.
Bioinformatics
Bioinformatics is the field that deals with the analysis, processing, and use of biological data. This usually means topics such as genomics and proteomics, and sometimes also includes medical image computing.
Cheminformatics
Cheminformatics is the field that deals with the analysis, processing, and use of chemical data.
Robotics
Robotics in information engineering focuses mainly on the algorithms and computer programs used to control robots. As such, information engineering tends to focus more on autonomous, mobile, or probabilistic robots. Major subfields studied by information engineers include control, perception, SLAM, and motion planning.
Tools
In the past some areas in information engineering such as signal processing used analog electronics, but nowadays most information engineering is done with digital computers. Many tasks in information engineering can be parallelized, and so nowadays information engineering is carried out using CPUs, GPUs, and AI accelerators. There has also been interest in using quantum computers for some subfields of information engineering such as machine learning and robotics.
The Institute of Electrical and Electronics Engineers
(IEEE) is one of the most important and influential organizations for
electronics engineers based in the US. On an international level, the International Electrotechnical Commission
(IEC) prepares standards for electronic engineering, developed through
consensus and thanks to the work of 20,000 experts from 172 countries
worldwide.
Relationship to electrical engineering
Electronics is a subfield within the wider electrical engineering
academic subject. An academic degree with a major in electronics
engineering can be acquired from some universities, while other
universities use electrical engineering as the subject. The term electrical engineer is still used in the academic world to include electronic engineers.
However, some people consider the term 'electrical engineer' should be
reserved for those having specialized in power and heavy current or high
voltage engineering, while others consider that power is just one
subset of electrical engineering, as well as 'electrical distribution engineering'. The term 'power engineering'
is used as a descriptor in that industry. Again, in recent years there
has been a growth of new separate-entry degree courses such as 'systems engineering' and 'communication systems engineering',
often followed by academic departments of similar name, which are
typically not considered as subfields of electronics engineering but of
electrical engineering.
History
Electronic engineering as a profession sprang from technological improvements in the telegraph industry in the late 19th century and the radio and the telephone
industries in the early 20th century. People were attracted to radio by
the technical fascination it inspired, first in receiving and then in
transmitting. Many who went into broadcasting in the 1920s were only
'amateurs' in the period before World War I.
To a large extent, the modern discipline of electronic engineering was born out of telephone, radio, and television equipment development and the large amount of electronic systems development during World War II of radar, sonar, communication systems, and advanced munitions and weapon systems. In the interwar years, the subject was known as radio engineering and it was only in the late 1950s that the term electronic engineering started to emerge.
The first working transistor was a point-contact transistor invented by John Bardeen and Walter Houser Brattain at Bell Labs in 1947. The MOSFET (metal-oxide-semiconductor field-effect transistor, or MOS transistor) was later invented by Mohamed M. Atalla and Dawon Kahng at Bell Labs in 1959. The MOSFET was the first truly compact transistor that could be miniaturised and mass-produced for a wide range of uses. The MOSFET revolutionized the electronics industry, becoming the most widely used electronic device in the world. The MOSFET is the basic element in most modern electronic equipment.
In designing an integrated circuit, electronics engineers first construct circuit schematics that specify the electrical components and describe the interconnections between them. When completed, VLSI engineers convert the schematics into actual layouts, which map the layers of various conductor and semiconductor materials needed to construct the circuit. The conversion from schematics to layouts can be done by software
but very often requires human fine-tuning to decrease space and power
consumption. Once the layout is complete, it can be sent to a fabrication plant for manufacturing.
Electronic engineering has many subfields. This section describes
some of the most popular subfields in electronic engineering; although
there are engineers who focus exclusively on one subfield, there are
also many who focus on a combination of subfields.
Signal processing deals with the analysis and manipulation of signals. Signals can be either analog, in which case the signal varies continuously according to the information, or digital, in which case the signal varies according to a series of discrete values representing the information.
Transmissions across free space require information to be encoded in a carrier wave in order to shift the information to a carrier frequency suitable for transmission, this is known as modulation. Popular analog modulation techniques include amplitude modulation and frequency modulation.
The choice of modulation affects the cost and performance of a system
and these two factors must be balanced carefully by the engineer.
Once the transmission characteristics of a system are determined, telecommunication engineers design the transmitters and receivers needed for such systems. These two are sometimes combined to form a two-way communication device known as a transceiver. A key consideration in the design of transmitters is their power consumption as this is closely related to their signal strength. If the signal strength of a transmitter is insufficient the signal's information will be corrupted by noise.
Electromagnetics is an in-depth study about the signals
that are transmitted in a channel (Wired or Wireless). This includes
Basics of Electromagnetic waves, Transmission Lines and Waveguides, Antennas, its types and applications with Radio-Frequency
(RF) and Microwaves. Its applications are seen widely in other
sub-fields like Telecommunication, Control and Instrumentation
Engineering.
Control engineers often utilize feedback when designing control systems. For example, in a car with cruise control, the vehicle's speed is continuously monitored and fed back to the system which adjusts the engine's power output accordingly. Where there is regular feedback, control theory can be used to determine how the system responds to such feedback.
Instrumentation engineering deals with the design of devices to measure physical quantities such as pressure, flow and temperature. These devices are known as instrumentation.
Often instrumentation is not used by itself, but instead as the sensors
of larger electrical systems. For example, a thermocouple might be used
to help ensure a furnace's temperature remains constant. For this
reason, instrumentation engineering is often viewed as the counterpart
of control engineering.
Computer engineering deals with the design of computers and computer systems. This may involve the design of new computer hardware, the design of PDAs or the use of computers to control an industrial plant. Development of embedded systems—systems made for specific tasks (e.g., mobile phones)—is also included in this field. This field includes the micro controller and its applications.
Computer engineers may also work on a system's software. However, the design of complex software systems is often the domain of software engineering, which is usually considered a separate discipline.
VLSI design engineeringVLSI stands for very large scale integration. It deals with fabrication of ICs and various electronic components.
Some electronics engineers also choose to pursue a postgraduate degree such as a Master of Science, Doctor of Philosophy in Engineering, or an Engineering Doctorate.
The master's degree is being introduced in some European and American
Universities as a first degree and the differentiation of an engineer
with graduate and postgraduate studies is often difficult. In these
cases, experience is taken into account. The master's degree may consist
of either research, coursework or a mixture of the two. The Doctor of
Philosophy consists of a significant research component and is often
viewed as the entry point to academia.
In most countries, a bachelor's degree in engineering represents
the first step towards certification and the degree program itself is
certified by a professional body. Certification allows engineers to
legally sign off on plans for projects affecting public safety.
After completing a certified degree program, the engineer must satisfy a
range of requirements, including work experience requirements, before
being certified. Once certified the engineer is designated the title of
Professional Engineer (in the United States, Canada, and South Africa), Chartered Engineer or Incorporated Engineer (in the United Kingdom, Ireland, India, and Zimbabwe), Chartered Professional Engineer (in Australia and New Zealand) or European Engineer (in much of the European Union).
A degree in electronics generally includes units covering physics, chemistry, mathematics, project management and specific topics in electrical engineering.
Initially, such topics cover most, if not all, of the subfields of
electronic engineering. Students then choose to specialize in one or
more subfields towards the end of the degree.
Fundamental to the discipline are the sciences of physics and
mathematics as these help to obtain both a qualitative and quantitative
description of how such systems will work. Today most engineering work
involves the use of computers and it is commonplace to use computer-aided design and simulation software
programs when designing electronic systems. Although most electronic
engineers will understand basic circuit theory, the theories employed by
engineers generally depend upon the work they do. For example, quantum mechanics and solid state physics might be relevant to an engineer working on VLSI but are largely irrelevant to engineers working with embedded systems.
Apart from electromagnetics and network theory, other items in the syllabus are particular to electronics engineering course. Electrical engineering courses have other specialisms such as machines, power generation and distribution. This list does not include the extensive engineering mathematics curriculum that is a prerequisite to a degree.
Network
graphs: matrices associated with graphs; incidence, fundamental cut
set, and fundamental circuit matrices. Solution methods: nodal and mesh
analysis. Network theorems: superposition, Thevenin and Norton's maximum
power transfer, Wye-Delta transformation.
Steady state sinusoidal analysis using phasors. Linear constant
coefficient differential equations; time domain analysis of simple RLC
circuits, Solution of network equations using Laplace transform:
frequency domain analysis of RLC circuits. 2-port network parameters:
driving point and transfer functions. State equations for networks.
Analog circuits: Equivalent circuits (large and
small-signal) of diodes, BJT, JFETs, and MOSFETs. Simple diode circuits,
clipping, clamping, rectifier. Biasing and bias stability of transistor
and FET amplifiers. Amplifiers: single-and multi-stage, differential,
operational, feedback and power. Analysis of amplifiers; frequency
response of amplifiers. Simple op-amp
circuits. Filters. Sinusoidal oscillators; criterion for oscillation;
single-transistor and op-amp configurations. Function generators and
wave-shaping circuits, Power supplies.
Basic control system components; block diagrammatic description, reduction of block diagrams — Mason's rule.
Open loop and closed loop (negative unity feedback) systems and
stability analysis of these systems. Signal flow graphs and their use in
determining transfer functions of systems; transient and steady state
analysis of LTI control systems and frequency response. Analysis of
steady-state disturbance rejection and noise sensitivity.
Tools and techniques for LTI control system analysis and design: root loci, Routh–Hurwitz stability criterion, Bode and Nyquist plots. Control system compensators: elements of lead and lag compensation, elements of Proportional-Integral-Derivative controller (PID). Discretization of continuous time systems using zero-order hold
and ADCs for digital controller implementation. Limitations of digital
controllers: aliasing. State variable representation and solution of
state equation of LTI control systems. Linearization of Nonlinear
dynamical systems with state-space realizations in both frequency and
time domains. Fundamental concepts of controllability and observability
for MIMO LTI systems. State space realizations: observable and controllable canonical form. Ackermann's formula for state-feedback pole placement. Design of full order and reduced order estimators.
Professional bodies of note for electrical engineers include the Institute of Electrical and Electronics Engineers (IEEE) and the Institution of Electrical Engineers (IEE) (now renamed the Institution of Engineering and Technology
or IET). Members of the Institution of Engineering and Technology
(MIET) are recognized professionally in Europe, as Electrical and
computer (technology) engineers. The IEEE claims to produce 30 percent
of the world's literature in electrical/electronic engineering, has over
430,000 members, and holds more than 450 IEEE sponsored or cosponsored
conferences worldwide each year. SMIEEE is a recognised professional designation in the United States.
Project engineering
For
most engineers not involved at the cutting edge of system design and
development, technical work accounts for only a fraction of the work
they do. A lot of time is also spent on tasks such as discussing
proposals with clients, preparing budgets and determining project
schedules. Many senior engineers manage a team of technicians or other
engineers and for this reason, project management skills are important.
Most engineering projects involve some form of documentation and strong
written communication skills are therefore very important.
The workplaces of electronics engineers are just as varied as the
types of work they do. Electronics engineers may be found in the
pristine laboratory environment of a fabrication plant, the offices of a
consulting firm or in a research laboratory. During their working life,
electronics engineers may find themselves supervising a wide range of
individuals including scientists, electricians, computer programmers and
other engineers.
Obsolescence of technical skills is a serious concern for
electronics engineers. Membership and participation in technical
societies, regular reviews of periodicals in the field and a habit of
continued learning are therefore essential to maintaining proficiency.
And these are mostly used in the field of consumer electronics products.
In computer engineering, microarchitecture, also called computer organization and sometimes abbreviated as µarch or uarch, is the way a given instruction set architecture (ISA) is implemented in a particular processor. A given ISA may be implemented with different microarchitectures; implementations may vary due to different goals of a given design or due to shifts in technology.
Computer architecture is the combination of microarchitecture and instruction set architecture.
Relation to instruction set architecture
A microarchitecture organized around a single bus
The ISA is roughly the same as the programming model of a processor as seen by an assembly language programmer or compiler writer. The ISA includes the execution model, processor registers,
address and data formats among other things. The microarchitecture
includes the constituent parts of the processor and how these
interconnect and interoperate to implement the ISA.
The microarchitecture of a machine is usually represented as
(more or less detailed) diagrams that describe the interconnections of
the various microarchitectural elements of the machine, which may be
anything from single gates and registers, to complete arithmetic logic units (ALUs) and even larger elements. These diagrams generally separate the datapath (where data is placed) and the control path (which can be said to steer the data).
The person designing a system usually draws the specific microarchitecture as a kind of data flow diagram. Like a block diagram, the microarchitecture diagram shows microarchitectural elements such as the arithmetic and logic unit and the register file
as a single schematic symbol. Typically, the diagram connects those
elements with arrows, thick lines and thin lines to distinguish between
three-state buses (which require a three-state buffer for each device that drives the bus), unidirectional buses (always driven by a single source, such as the way the address bus on simpler computers is always driven by the memory address register), and individual control lines. Very simple computers have a single data bus organization – they have a single three-state bus.
The diagram of more complex computers usually shows multiple
three-state buses, which help the machine do more operations
simultaneously.
Each microarchitectural element is in turn represented by a schematic describing the interconnections of logic gates used to implement it. Each logic gate is in turn represented by a circuit diagram describing the connections of the transistors used to implement it in some particular logic family.
Machines with different microarchitectures may have the same
instruction set architecture, and thus be capable of executing the same
programs. New microarchitectures and/or circuitry solutions, along with
advances in semiconductor manufacturing, are what allows newer
generations of processors to achieve higher performance while using the
same ISA.
In principle, a single microarchitecture could execute several different ISAs with only minor changes to the microcode.
The pipelineddatapath is the most commonly used datapath design in microarchitecture today. This technique is used in most modern microprocessors, microcontrollers, and DSPs.
The pipelined architecture allows multiple instructions to overlap in
execution, much like an assembly line. The pipeline includes several
different stages which are fundamental in microarchitecture designs.
Some of these stages include instruction fetch, instruction decode,
execute, and write back. Some architectures include other stages such as
memory access. The design of pipelines is one of the central
microarchitectural tasks.
Execution units are also essential to microarchitecture. Execution units include arithmetic logic units (ALU), floating point units (FPU), load/store units, branch prediction, and SIMD.
These units perform the operations or calculations of the processor.
The choice of the number of execution units, their latency and
throughput is a central microarchitectural design task. The size,
latency, throughput and connectivity of memories within the system are
also microarchitectural decisions.
System-level design decisions such as whether or not to include peripherals, such as memory controllers,
can be considered part of the microarchitectural design process. This
includes decisions on the performance-level and connectivity of these
peripherals.
Unlike architectural design, where achieving a specific
performance level is the main goal, microarchitectural design pays
closer attention to other constraints. Since microarchitecture design
decisions directly affect what goes into a system, attention must be
paid to issues such as chip area/cost, power consumption, logic
complexity, ease of connectivity, manufacturability, ease of debugging,
and testability.
Microarchitectural concepts
Instruction cycles
In general, all CPUs, single-chip microprocessors or multi-chip implementations run programs by performing the following steps:
Read an instruction and decode it
Find any associated data that is needed to process the instruction
Process the instruction
Write the results out
The instruction cycle is repeated continuously until the power is turned off.
Multicycle microarchitecture
Historically,
the earliest computers were multicycle designs. The smallest,
least-expensive computers often still use this technique. Multicycle
architectures often use the least total number of logic elements and
reasonable amounts of power. They can be designed to have deterministic
timing and high reliability. In particular, they have no pipeline to
stall when taking conditional branches or interrupts. However, other
microarchitectures often perform more instructions per unit time, using
the same logic family. When discussing "improved performance," an
improvement is often relative to a multicycle design.
In a multicycle computer, the computer does the four steps in
sequence, over several cycles of the clock. Some designs can perform the
sequence in two clock cycles by completing successive stages on
alternate clock edges, possibly with longer operations occurring outside
the main cycle. For example, stage one on the rising edge of the first
cycle, stage two on the falling edge of the first cycle, etc.
In the control logic, the combination of cycle counter, cycle
state (high or low) and the bits of the instruction decode register
determine exactly what each part of the computer should be doing. To
design the control logic, one can create a table of bits describing the
control signals to each part of the computer in each cycle of each
instruction. Then, this logic table can be tested in a software
simulation running test code. If the logic table is placed in a memory
and used to actually run a real computer, it is called a microprogram.
In some computer designs, the logic table is optimized into the form of
combinational logic made from logic gates, usually using a computer
program that optimizes logic. Early computers used ad-hoc logic design
for control until Maurice Wilkes invented this tabular approach and called it microprogramming.
Increasing execution speed
Complicating this simple-looking series of steps is the fact that the memory hierarchy, which includes caching, main memory and non-volatile storage like hard disks
(where the program instructions and data reside), has always been
slower than the processor itself. Step (2) often introduces a lengthy
(in CPU terms) delay while the data arrives over the computer bus.
A considerable amount of research has been put into designs that avoid
these delays as much as possible. Over the years, a central goal was to
execute more instructions in parallel, thus increasing the effective
execution speed of a program. These efforts introduced complicated logic
and circuit structures. Initially, these techniques could only be
implemented on expensive mainframes or supercomputers due to the amount
of circuitry needed for these techniques. As semiconductor manufacturing
progressed, more and more of these techniques could be implemented on a
single semiconductor chip. See Moore's law.
Instruction set choice
Instruction
sets have shifted over the years, from originally very simple to
sometimes very complex (in various respects). In recent years, load-store architectures, VLIW and EPIC types have been in fashion. Architectures that are dealing with data parallelism include SIMD and Vectors.
Some labels used to denote classes of CPU architectures are not
particularly descriptive, especially so the CISC label; many early
designs retroactively denoted "CISC" are in fact significantly simpler than modern RISC processors (in several respects).
However, the choice of instruction set architecture
may greatly affect the complexity of implementing high-performance
devices. The prominent strategy, used to develop the first RISC
processors, was to simplify instructions to a minimum of individual
semantic complexity combined with high encoding regularity and
simplicity. Such uniform instructions were easily fetched, decoded and
executed in a pipelined fashion and a simple strategy to reduce the
number of logic levels in order to reach high operating frequencies;
instruction cache-memories compensated for the higher operating
frequency and inherently low code density while large register sets were used to factor out as much of the (slow) memory accesses as possible.
Instruction pipelining
One of the first, and most powerful, techniques to improve performance is the use of instruction pipelining.
Early processor designs would carry out all of the steps above for one
instruction before moving onto the next. Large portions of the circuitry
were left idle at any one step; for instance, the instruction decoding
circuitry would be idle during execution and so on.
Pipelining improves performance by allowing a number of
instructions to work their way through the processor at the same time.
In the same basic example, the processor would start to decode (step 1) a
new instruction while the last one was waiting for results. This would
allow up to four instructions to be "in flight" at one time, making the
processor look four times as fast. Although any one instruction takes
just as long to complete (there are still four steps) the CPU as a whole
"retires" instructions much faster.
RISC makes pipelines smaller and much easier to construct by
cleanly separating each stage of the instruction process and making them
take the same amount of time—one cycle. The processor as a whole
operates in an assembly line fashion, with instructions coming in one side and results out the other. Due to the reduced complexity of the classic RISC pipeline,
the pipelined core and an instruction cache could be placed on the same
size die that would otherwise fit the core alone on a CISC design. This
was the real reason that RISC was faster. Early designs like the SPARC and MIPS often ran over 10 times as fast as Intel and Motorola CISC solutions at the same clock speed and price.
Pipelines are by no means limited to RISC designs. By 1986 the top-of-the-line VAX implementation (VAX 8800)
was a heavily pipelined design, slightly predating the first commercial
MIPS and SPARC designs. Most modern CPUs (even embedded CPUs) are now
pipelined, and microcoded CPUs with no pipelining are seen only in the
most area-constrained embedded processors.
Large CISC machines, from the VAX 8800 to the modern Pentium 4 and
Athlon, are implemented with both microcode and pipelines. Improvements
in pipelining and caching are the two major microarchitectural advances
that have enabled processor performance to keep pace with the circuit
technology on which they are based.
Cache
It was not long before improvements in chip manufacturing allowed for
even more circuitry to be placed on the die, and designers started
looking for ways to use it. One of the most common was to add an
ever-increasing amount of cache memory
on-die. Cache is simply very fast memory. It can be accessed in a few
cycles as opposed to many needed to "talk" to main memory. The CPU
includes a cache controller which automates reading and writing from the
cache. If the data is already in the cache it simply "appears", whereas
if it is not the processor is "stalled" while the cache controller
reads it in.
RISC designs started adding cache in the mid-to-late 1980s, often
only 4 KB in total. This number grew over time, and typical CPUs now
have at least 512 KB, while more powerful CPUs come with 1 or 2 or even
4, 6, 8 or 12 MB, organized in multiple levels of a memory hierarchy. Generally speaking, more cache means more performance, due to reduced stalling.
Caches and pipelines were a perfect match for each other.
Previously, it didn't make much sense to build a pipeline that could run
faster than the access latency of off-chip memory. Using on-chip cache
memory instead, meant that a pipeline could run at the speed of the
cache access latency, a much smaller length of time. This allowed the
operating frequencies of processors to increase at a much faster rate
than that of off-chip memory.
Branch prediction
One barrier to achieving higher performance through instruction-level
parallelism stems from pipeline stalls and flushes due to branches.
Normally, whether a conditional branch will be taken isn't known until
late in the pipeline as conditional branches depend on results coming
from a register. From the time that the processor's instruction decoder
has figured out that it has encountered a conditional branch instruction
to the time that the deciding register value can be read out, the
pipeline needs to be stalled for several cycles, or if it's not and the
branch is taken, the pipeline needs to be flushed. As clock speeds
increase the depth of the pipeline increases with it, and some modern
processors may have 20 stages or more. On average, every fifth
instruction executed is a branch, so without any intervention, that's a
high amount of stalling.
Techniques such as branch prediction and speculative execution
are used to lessen these branch penalties. Branch prediction is where
the hardware makes educated guesses on whether a particular branch will
be taken. In reality one side or the other of the branch will be called
much more often than the other. Modern designs have rather complex
statistical prediction systems, which watch the results of past branches
to predict the future with greater accuracy. The guess allows the
hardware to prefetch instructions without waiting for the register read.
Speculative execution is a further enhancement in which the code along
the predicted path is not just prefetched but also executed before it is
known whether the branch should be taken or not. This can yield better
performance when the guess is good, with the risk of a huge penalty when
the guess is bad because instructions need to be undone.
Superscalar
Even with all of the added complexity and gates needed to support the
concepts outlined above, improvements in semiconductor manufacturing
soon allowed even more logic gates to be used.
In the outline above the processor processes parts of a single
instruction at a time. Computer programs could be executed faster if
multiple instructions were processed simultaneously. This is what superscalar
processors achieve, by replicating functional units such as ALUs. The
replication of functional units was only made possible when the die area
of a single-issue processor no longer stretched the limits of what
could be reliably manufactured. By the late 1980s, superscalar designs
started to enter the market place.
In modern designs it is common to find two load units, one store
(many instructions have no results to store), two or more integer math
units, two or more floating point units, and often a SIMD
unit of some sort. The instruction issue logic grows in complexity by
reading in a huge list of instructions from memory and handing them off
to the different execution units that are idle at that point. The
results are then collected and re-ordered at the end.
Out-of-order execution
The addition of caches reduces the frequency or duration of stalls
due to waiting for data to be fetched from the memory hierarchy, but
does not get rid of these stalls entirely. In early designs a cache miss
would force the cache controller to stall the processor and wait. Of
course there may be some other instruction in the program whose data is available in the cache at that point. Out-of-order execution
allows that ready instruction to be processed while an older
instruction waits on the cache, then re-orders the results to make it
appear that everything happened in the programmed order. This technique
is also used to avoid other operand dependency stalls, such as an
instruction awaiting a result from a long latency floating-point
operation or other multi-cycle operations.
Register renaming
Register renaming refers to a technique used to avoid unnecessary
serialized execution of program instructions because of the reuse of the
same registers by those instructions. Suppose we have two groups of
instruction that will use the same register.
One set of instructions is executed first to leave the register to the
other set, but if the other set is assigned to a different similar
register, both sets of instructions can be executed in parallel (or) in
series.
Multiprocessing and multithreading
Computer architects have become stymied by the growing mismatch in CPU operating frequencies and DRAM
access times. None of the techniques that exploited instruction-level
parallelism (ILP) within one program could make up for the long stalls
that occurred when data had to be fetched from main memory.
Additionally, the large transistor counts and high operating frequencies
needed for the more advanced ILP techniques required power dissipation
levels that could no longer be cheaply cooled. For these reasons, newer
generations of computers have started to exploit higher levels of
parallelism that exist outside of a single program or program thread.
This trend is sometimes known as throughput computing. This idea originated in the mainframe market where online transaction processing
emphasized not just the execution speed of one transaction, but the
capacity to deal with massive numbers of transactions. With
transaction-based applications such as network routing and web-site
serving greatly increasing in the last decade, the computer industry has
re-emphasized capacity and throughput issues.
One technique of how this parallelism is achieved is through multiprocessing systems, computer systems with multiple CPUs. Once reserved for high-end mainframes and supercomputers,
small-scale (2–8) multiprocessors servers have become commonplace for
the small business market. For large corporations, large scale (16–256)
multiprocessors are common. Even personal computers with multiple CPUs have appeared since the 1990s.
With further transistor size reductions made available with semiconductor technology advances, multi-core CPUs
have appeared where multiple CPUs are implemented on the same silicon
chip. Initially used in chips targeting embedded markets, where simpler
and smaller CPUs would allow multiple instantiations to fit on one piece
of silicon. By 2005, semiconductor technology allowed dual high-end
desktop CPUs CMP chips to be manufactured in volume. Some designs, such as Sun Microsystems' UltraSPARC T1 have reverted to simpler (scalar, in-order) designs in order to fit more processors on one piece of silicon.
Another technique that has become more popular recently is multithreading.
In multithreading, when the processor has to fetch data from slow
system memory, instead of stalling for the data to arrive, the processor
switches to another program or program thread which is ready to
execute. Though this does not speed up a particular program/thread, it
increases the overall system throughput by reducing the time the CPU is
idle.
Conceptually, multithreading is equivalent to a context switch
at the operating system level. The difference is that a multithreaded
CPU can do a thread switch in one CPU cycle instead of the hundreds or
thousands of CPU cycles a context switch normally requires. This is
achieved by replicating the state hardware (such as the register file and program counter) for each active thread.
A further enhancement is simultaneous multithreading.
This technique allows superscalar CPUs to execute instructions from
different programs/threads simultaneously in the same cycle.