CS355 Syllabus & Progress
CS355 Syllabus & Progress (26 lectures)
- Logic elements and Boolean Algebra
Intro to Digital circuits:
click here
---- slides
Elementary digital circuits:
click here
---- slides
The Emory Digital Simulator (EDiSim) used in this course
is based on the simulator by
Richard Reid of Michigan State Univ -
1932--2022):
Intro to combinatorial circuits:
click here
---- slides
Combinatorial circuit design:
click here
---- slides
Another example of circuit design: Add 1 to a two bit binary numbers -
click here
---- slides
Yet another example of circuit design: Adding two 2-bits binary numbers -
click here
---- slides
Assign project 1 to re-inforce circuit design:
- You will need to use the basic components of
the logic-simimular:
click here
- And do the project assignment 1:
click here...
Switching Circuits...
how the CPU transports values from one place to another...
- Comment: you may have heard that a computer is one big switch...
you will soon find out why.....
- Filtering property of the AND gate:
click here
---- slides
- Collating property of the OR gates:
click here
---- slides
- Multiplexor circuit -
the many-to-one digital switching circuit:
click here
---- slides
- Defining your own components in EDiSim:
click here
---- slides
- Using multiplexors to switch registers to ALU's input:
click here
---- slides
- One-from-many digital selection circuit - the decoder:
click here
---- slides
- Using decoder to select a register for writing:
click here
---- slides
- Register → ALU → Register transfer:
click here
---- slides
Arithmetic (and Logic) Circuits.... see what the ALU look like
Sequential Circuits
Finite State Machines
- Constructing FSA with digital circuitry:
click here
---- slides
- Side note:
- A computer is a FSA, with a huge number of states
- The number of states is equal to 2N
where N is the number of bits of memory in the main memory
and other storage (disks, tapes, CD-roms, etc)
Bi-directional Transfer
- Review of the rules to connect (digital) circuit components:
click here
---- slides
- From tri-state-buffer to a bi-directional bus:
click here
---- slides
- A more efficient way to multiplex registers to the ALU input
(using tri-state-buffers):
click here
---- slides
Memory Organization
CPU Architecture: data path
How the CPU communicate with (reads/writes) the memory -
the system bus and its bus protocol:
How computer programs performs IO operations -
IO communication:
Midterm covers
material upto this point
The remaining material discusses how to make a computer runs
faster or safer...
Cache memory:
The Virtual Memory technique
SIMD Parallel Computers
- Overview of computer processors:
click here
--- slides
- SIMD - Single Instruction (stream) and Multiple Data (stream) computers:
GPU-programming using the CUDA programming language:
- The GPU-programming environment:
click here
--- slides
- The CUDA architecture:
- Intro to CUDA programming:
click here
--- slides
- The NVidia GPU
architecture
(that executes a CUDA program):
click here
--- slides
- Thread organization (and how thread, thread block, and grid map to
the GPU architecture):
click here
--- slides
- Intro to CUDA C-programming:
- Sharing variables between CPU and GPU functions using
CUDA unified memory:
- A simple parallel (vector addition) CUDA program:
click here
--- slides
- Vector addition in CUDA without using
Unified Memory:
---
slides only
- Matrix multiplication algorithm in CUDA C:
click here
--- slides
---
(2 dim grid) slides
- Advanced topics in parallel programming:
- A problem with parallel execution: simultaneous updates
to same variable --
click here
--- slides
- Another problem with parallel execution: when threads
must coorperate ---
__syncthreads( ):
click here
--- slides
- A parallel sort algorithm (odd-even sort) ---
intro to __shared__ variables:
--- slides 1
--- slides 2
Handout CUDA project:
click here
- Helpful CUDA material:
- CUDA C programming guide from NVidia:
click here
- An Even Easier Introduction to CUDA:
click here
- Intro tutorial:
click here
- Tutorial on CUDA unified memory (starting CUDA 6):
- Advanced stuff:
Programming Shared Memory MIMD using Posix threads:
- Introduction to MIMD (parallel) programming:
click here
---
slides
- Introduction to Posix threads
(compiling, ID, shared/non-shared variables):
click here
---
slides
- Background info. to PThread programming:
- A commonly used parallel program structure (find min):
- Accessing shared memory among threads (compute Pi):
Programming Shared Memory MIMD using the OpenMP API:
Message-Passing MIMD computers:
- Interconnection networks for message-passing MIMD computers:
click here
- Programming Message Passing MIMD using MPI:
- Intro to MPI:
click here
- Blocking send and receive operations:
click here
- Advanced sending and receiving operations:
click here
- NON-Blocking send and receive operations:
click here
- Group communication
- broadcast, scatter, reduce and gather operations:
click here
The END...