# cpuset showing 16 cpu-cores instead of 8



## Yelphos (May 12, 2017)

Ryzen is sold as 8-Core-CPU but within cpuset i have 16 cores and i can assign my tasks to it, this is working perfectly fine without any errors so far.

I know Ryzen has 16 physical true cores from previous readings but they paired them together into 8 units and called it a 8-core-processor.

Do i have to fear this will cause any bugs in future to have 16 cores or can i consider it to be an feature?

To me this has proven to be useful and i would dislike loosing this nice feature.

Shall i report this as a bug?


----------



## SirDice (May 12, 2017)

It's similar to Intel's Hyper-Threading. That gives you, for example, 6 cores and 12 threads. However, it will show up as 12 CPUs.


----------



## Yelphos (May 12, 2017)

All cores within htop show completely different loads and all of them are used, can it be compared to Hyper-Threading?

I know Hyper-Threading is causing problems if you assign the wrong cores, this CPU seems not.


----------



## SirDice (May 12, 2017)

Yelphos said:


> All cores within htop show completely different loads and all of them are used, can it be compared to Hyper-Threading?


I have the same on my dual 6-core Xeon machine. It shows 24 cores, all with different loads.

Ryzen is still quite new so there may still be issues lurking but I wouldn't worry about it too much.


----------



## Yelphos (May 12, 2017)

I remember reading Ryzen has 8 Units which are divided into 2 true physical cores, sharing something each together. Hyper-Threading instead has something like additional virtual-cores, no true physical.

e.x.:
My Virtualbox-VM does crash if i do assign 14 cores to it, it also crashes if i do set CPU to 100% to this VM. I dont know if this is related to this.

If i set core 2-15 to a game within wine with cpuset then i get no errors or any kind of problems.

I dont know if it is wise to use each of the 16 cores completely differently but it doesn't seem to harm my system in any way. I like it and loosing it wouldn't be good. The sharing-a-unit-thing does worry me a bit.


----------



## SirDice (May 12, 2017)

Yelphos said:


> Hyper-Threading instead has something like additional virtual-cores, no true physical.


There are two execution paths on one core. Giving the impression of having two cores.



> My Virtualbox-VM does crash if i do assign 14 cores to it,


There's a difference between _physical_ cores and _virtual_ cores (aka threads). You can only assign physical cores with VirtualBox. Xen for example does allow you to configure 6 cores and 12 threads for a VM.


----------



## Yelphos (May 12, 2017)

https://en.wikipedia.org/wiki/Zen_(microarchitecture)

"SMT (simultaneous multithreading) architecture allows for 2 threads per core, a departure from the CMT (clustered multi-thread) design used in the previous Bulldozer architecture."

Ah, yes. I did read it. This is not like Hyper-Threading, you are a bit wrong on this.

I have 8 cores and i can use them like 16.

The different execution-paths for Hyper-Threading are to perform different kinds of operations if i understand right?


----------



## SirDice (May 12, 2017)

I might be a bit off on Ryzen, I haven't looked very hard at the details. But SMT is just a generic name for Hyper-Threading. 



> The Intel Pentium 4 was the first modern desktop processor to implement simultaneous multithreading, starting from the 3.06 GHz model released in 2002, and since introduced into a number of their processors. *Intel calls the functionality Hyper-threading*, and provides a basic two-thread SMT engine.





> AMD Bulldozer microarchitecture FlexFPU and Shared L2 cache are multithreaded but integer cores in module are single threaded, so it is only a partial SMT implementation.[7][8]
> 
> AMD Zen microarchitecture has 2-way SMT.


https://en.wikipedia.org/wiki/Simultaneous_multithreading#Modern_commercial_implementations


----------



## Yelphos (May 12, 2017)

Mistaking SMT with Hyper-Threading might be something out of the folks-mouth, i know even teachers saying such wrong things. Hyper-Threading is a implementation of SMT from Intel.

https://en.wikipedia.org/wiki/Hyper-threading


> Hyper-Threading Technology is a form of simultaneous multithreading technology introduced by Intel, while the concept behind the technology has been patented by Sun Microsystems. Architecturally, a processor with Hyper-Threading Technology consists of two logical processors per core, each of which has its own processor architectural state. Each logical processor can be individually halted, interrupted or directed to execute a specified thread, independently from the other logical processor sharing the same physical core.[7]
> 
> Unlike a traditional dual-processor configuration that uses two separate physical processors, the logical processors in a hyper-threaded core share the execution resources. These resources include the execution engine, caches, and system bus interface; the sharing of resources allows two logical processors to work with each other more efficiently, and allows a logical processor to borrow resources from a stalled logical core (assuming both logical cores are associated with the same physical core). A processor stalls when it is waiting for data it has sent for so it can finish processing the present thread. The degree of benefit seen when using a hyper-threaded or multi core processor depends on the needs of the software, and how well it and the operating system are written to manage the processor efficiently.[7]



https://en.wikipedia.org/wiki/Simultaneous_multithreading


> The name multithreading is ambiguous, because not only can multiple threads be executed simultaneously on one CPU core, but also multiple tasks (with different page tables, different task state segments, different protection rings, different I/O permissions, etc.). Although running on the same core, they are completely separated from each other. Multithreading is similar in concept to preemptive multitasking but is implemented at the thread level of execution in modern superscalar processors.
> 
> Simultaneous multithreading (SMT) is one of the two main implementations of multithreading, the other form being temporal multithreading (also known as super-threading). In temporal multithreading, only one thread of instructions can execute in any given pipeline stage at a time. In simultaneous multithreading, instructions from more than one thread can be executed in any given pipeline stage at a time. This is done without great changes to the basic processor architecture: the main additions needed are the ability to fetch instructions from multiple threads in a cycle, and a larger register file to hold data from multiple threads. The number of concurrent threads can be decided by the chip designers. Two concurrent threads per CPU core are common, but some processors support up to eight concurrent threads per core.





> The Oracle Corporation Sparc T3 has eight fine-grained threads per core, Sparc T4, Sparc T5, Sparc M5, M6 and M7 have eight fine-grained threads per core of which two can be executed simultaneously.
> 
> Fujitsu Sparc64 VI has coarse-grained Vertical Multithreading(VMT)Sparc VII and newer have 2-way SMT.
> 
> ...



https://en.wikipedia.org/wiki/Zen_(microarchitecture)


> One of Zen's major goals is to focus on performance per-core, and it is targeting a 40% improvement in instructions per cycle (IPC) over its predecessor.[49] Excavator, in comparison, offered 4–15% improvement over previous architectures.[50][51] AMD announced the final Zen microarchitecture actually achieved 52% improvement in IPC over Excavator.[52] The inclusion of SMT also allows each core to process up to two threads, increasing processing throughput by better utilizing available resources.



Did you read it? SMT is just a generic word for something which can be completely different. Hyper-Threading is some form of SMT, not to be mistaken with the AMD-SMT.

I guess this is no bug then.


----------

