CS 475/575 -- Spring Quarter 2019
Test #2 Review
On-campus Edition
This page was last updated: June 3, 2019
This will be a multiple choice test on a Scantron (fill-in-the-bubble) form.
From the OSU Test Scoring User Guide:
"The scanner reads reflective optical marks and only a number 2 or softer (i.e., a smaller number)
lead pencil should be used.
Ball Point Pen and Marker type pencils should not be used."
Don't try to second-guess me about patterns in the answers -- I have a program that randomly tells me what letter to put each right answer under. :-)
Test date and time:
| Wednesday, June 12, 2019 |
| 6:00 - 7:30 PM |
| LiNC 210 |
Test rules:
-
This is Test #2, not a comprehensive final. However, . . .
- . . . I reserve the right to re-use a few verbatim multiple choice questions from Test #1.
-
The test is worth 100 points.
-
There will be 50 multiple-choice questions, worth 2 points each.
-
The test will be designed to be done in 60 minutes, but you will have 90 minutes.
Take your time!
-
It is closed notes.
-
You are responsible for
- what is in all handouts
- what was said in class
- what you have done in the projects.
-
The test is over promptly at 7:30.
Only the tests that have been turned in by then will be graded.
Hint #1: You won't have to write any code.
Hint #2: You won't need a calculator.
The test can potentially cover any of the following:
Class Topics:
-
Vectorization:
Single Instruction Multiple Data (SIMD).
How it works.
Why use it.
MMX, SSE, AVX, AVX-512.
Array multiplication, array multiplication + summing.
#pragma omp simd (followed by a for-loop)
A[0:N] (C Extensions for Array Notation)
You won't need to know any specifics about how the assembly code works, but know why we used it and what happened when we did.
-
GPU 101:
GPU performance vs. CPU performance,
"CUDA Cores" vs. "Intel cores",
what GPUs are good at vs. what CPUs are good at,
Compute Units,
Processing Elements,
the Yellow Robot.
-
OpenCL:
general idea,
two programs (C++ and .cl),
work-groups,
work-items,
1D or 2D or 3D,
thousands of threads,
get_num_groups( ),
get_global_size( ),
get_local_size( ),
get_global_id( ),
get_local_id( ),
SIMD parallelism (float4, etc.),
types of memory (and who can share them),
steps in creating and running an OpenCL program,
host memory vs. device memory,
command queue,
compiling and building .cl code,
enqueuing,
executing a kernel,
transferring buffers to/from the GPU,
performance.
-
OpenCL Reduction:
general idea,
local memory array,
mask, offset,
barriers.
-
OpenCL Events:
throwing events,
waiting for one or more events.
-
OpenCL Assembly Language:
Difference between distance( ), length( ), normalize( ) and
fast_distance( ), fast_length( ), fast_normalize( ).
Which you should use when.
Fused-Multiply Add (FMA):
what it is, how it works,
how it relates to your Project #5.
-
CUDA:
consists of a grid of blocks,
each block consists of a grid of threads,
a "warp" = 32 threads all executing the same instruction,
the special <<<...>>> syntax.
-
OpenCL / OpenGL Interoperability:
general idea,
OpenCL acquiring and releasing a buffer,
clCreateFromGLBuffer,
particles.cpp,
particles.cl.
You won't need to know any of the specifics of using OpenGL to create VBOs.
-
Message Passing Interface (MPI):
general idea,
multiple CPUs,
SPMD model,
broadcast,
sending,
receiving,
reduction,
scatter / gather,
barriers,
derived types.
You won't need to know the exact syntax of the function calls.
-
More Information.
Projects:
- Project #3: Functional Decomposition: the 3 barriers
- Project #4: Vectorized Array Multiplication and Reduction using SSE: speedup
- Project #5: OpenCL Array Multiplication and Reduction: losing the for-loop
- Project #6: CUDA Monte Carlo Simulation: losing the for-loop