I initially thought i5 had 4 cores but i think i am wrong. My understanding of a thread is it is a chunk of code that can run simultaneously(concurrently) with other threads. So, what does 4 threads mean in that specs sheet? Is it different from the programmatic threads. Is the number of threads in there different from the program thread that we create. If it has just 2 cores then is it correct that you can only run 2 parallel programs even though it has 4 threads?

Once you do some background research on en.wikipedia.org/wiki/Hyper-threading it should make better sense to you. The processor you have does indeed have the capability to do 4 instructions at a time. You should understand that even a single core CPU has the ability to run multiple programs. Its just does NOT have the ability to do 2 instructions at a time. You don't seem clear how on a program actually works.
–
RamhoundJan 12 '14 at 0:08

@Ramhound You presumably meant 4 instruction streams. Since the i5 is superscalar it can execute multiple instructions in parallel even from a single instruction stream. Simultaneous multithreading allows thread-level parallelism to be converted into instruction-level parallelism, increasing utilization of execution resources.
–
Paul A. ClaytonOct 31 '14 at 19:03

I minimized my statement the number of instructions per clock cycle is the difference between a Pentium D and 4th Core i5 minus the size of the die, and the power requirements of course (again simplified)
–
RamhoundOct 31 '14 at 20:21

4 Answers
4

Your i5 has two cores, each core can run two threads because of intel's hyperthreading, making 4 threads, beyond that it switches at high speeds between processes. Here's a nice explation of multithreading if you want to know more, but in essence your CPU can run 4 processes simultaniously, and switch at high speed between processes.

I'm not sure about your level of expertise on Computer Architecture, however the Core i5 you've mentioned here implements a form of multi-threading known as Simultaneous multithreading (SMT). Intel's trademark for their implementation of SMT is hyperthreading.

Apart from SMT there are other forms of multi-threading, temporal multi-threading being one. For instance fine grained temporal multi-threading where the processor may switch between different threads every cycle and thus enable pseudo-parallel execution of several programs. Similarly there can be coarse grained temporal multi-threading where a processor may switch between threads when it hits a high latency operation such as a main memory access on the current thread. The exact switch points can vary based on implementation and requirements, such as fairness or real time deadlines.

SMT deviates from the context switch philosophy for multi-threading in that it actually has two or more threads executing on one processor at the same time. While the implementation can vary, the primary goal is to exploit the functional units in the processor which are idling if only one thread was executing, and also to exploit the wide issue superscalar nature of the processor. You can imagine temporal multi-threading as time slicing the processors resources, while SMT as spacial slicing of the resources.

"If it has just 2 cores then is it correct that you can only run 2 parallel programs even though it has 4 threads?"
If it has 2 cores the calculation is divide by 2 = parallelism
However if you system has hyper threading it can do the 2 calculation in the same core, why, the same core shows to the OS up as 2 cores...logical cores.

Take the number of threads and divide it by the number of cores and that will give you the number of threads can be run simultaneously per processor core.

In earlier times [on earlier Intel models] hyperthreading was limited to 1 core running 2 threads simultaneously OR multiple cores running 1 instruction set (aka, thread) per core (pretty inefficient if you ask me). But with better computation power and later developments such as your i5 processor, you have what I like to call, a multi-core hyperthreaded processor, which has multiple cores running multiple instruction sets (aka, threads) per core.

In your case, 1 core gets 2 threads, so when you do the math you have a total of = 4 instruction sets (threads).

Another example: # of Cores = 4 , # of threads = 8 | 8/4 = 2, so each core processes 2 threads simultaneously (not sure which processor model does this but I'm almost certain that one exists).