Just to clarify, hyper-threading would be superscalar + multi-threaded execution?
I don't think it's that clear-cut. Hyperthreading seems to be using simultaneous multithreading, while we discussed something more similar to temporal multithreading in class.
Temporal multithreading is when only one thread is actually running at a time, but when high latency operations would usually stall the processor, another thread is swapped in.
Simultaneous multithreading is when multiple threads are actually running at the same time (by pipelining instructions from the threads).
hopefully I'm correct, but I think OpenMP can be considered a multi-threaded execution based on this definition.