CSC 521 - Advanced Computer Architecture
Study Guide
Topics
I. Foundations of Computer Systems
1. Computer Architecture vs. Computer Organization
2. Programmer’s vs. Implementer’s view
3. Functional specification vs. hardware realization
II. Computational Models
1. Von Neumann Architecture
2. Harvard Architecture
3. Parallel Models (Flynn’s Taxonomy)
4. Other Models
III. Execution Models
1. Sequential vs. Parallel Execution
2. Parallel Execution Types
3. Advanced Execution Techniques
IV. Parallel Processing Essentials
1. Why Parallelism?
2. Concurrency vs. Parallelism
3. Available vs. Utilized Parallelism
i. Functional vs. Data parallelism
4. Techniques
• Pipelining (Stages)
• Multithreading
• SIMD/CUDA/GPU acceleration
V. Programming for Parallelism
1. Low-Level APIs
2. High-Level Models
3. Functional Programming & Parallelism
1
VI. Instruction-Level Parallelism (ILP)
1. 1. What is the purpose of ILP?
2. Different Dependency issues
i. RAW, WAR, WAW
ii. Branching
iii. Hardware unit conflicts
3. Instruction Scheduling
VII. VLIW vs. Superscalar Architectures
1. Properties of VLIW (Very Long Instruction Word)
2. Superscalar Processors
VIII. Other Topics
1. MESI Protocol
2. Register Renaming
3. Intel & ARM Microarchitecture
4. Edge AI & Heterogeneous Computing
5. Quantum and Neuromorphic Computing
2
Sample Questions
True/False & Multiple Choice
1. T F : Thread-level parallelism is most commonly used in distributed GPU
systems.
2. T F : Register renaming helps eliminate control dependencies in CPUs.
3. In Flynn’s Taxonomy, which model executes different instructions on different
data?
a. SIMD
b. SISD
c. MIMD
d. MISD
4. In pipelining, which stage comes after “Execute”?
a. Fetch
b. Decode
c. Memory
d. Write-back
5. The VLIW architecture relies on the for instruction scheduling.
a. Hardware
b. Compiler
c. Operating system
d. Scheduler thread
3
Short Answer
1. Differentiate between functional parallelism and data parallelism with one ex-
ample each.
2. Explain briefly why parallelism is very hard to achieve with our current systems.
Assembly Coding
1. Convert the following code into an ASM program, do not use the MUL in-
struction:
def multiply (a , b , c ) :
result = a * b * c
return result
print ( multiply (5 , 6 , -3) ) # should return -90
2. Write an Assembly program that will print out the word ‘success’ if the RAX
register contains a positive value and ‘failure’ if the RAX register contains a
negative value.