Programming‎ > ‎

Threading

I will call the next thread management code i make 'Loom'.

Threading or multicore programming is the fun activity of making a program run on more then one core. In 2005 the Free Lunch was Over and the focus shifted from increased clock speed to multiple cores among the chip designers. All the major target platforms are now multicore, that is they have more then one CPU's that (often) share instruction sets and memory.

Speed/Cores/Threads by platform
----Year----Platform----Speed------Cores----HW Threads---Architecture
    2000    PS2         0.
299 GHz  1        1            mps
    2001    XBox        0.733 GHz  1        1            x86
    2005    X360        3.2 GHz    3        6            PowerPC
    2006    Wii         0.729
GHz  1        1            PowerPC
    2006    PS3         3.2 GHz    1+7      2+7          Cell
    2011    3DS         ?          2        2            Arm11
    2012    WiiU       
1.24 GHz   3        3            PowerPC
    2014    PS4         1.6 GHz    8        8            x64
    2014    XBox1       1.75 GHz   8        8            x64
    2017    Switch      1.0 GHz    4        4            Arm8
     *      PC          *          2-4      2-8          x64

Hardware
Core: A core is another name for CPU so a dual-core processor contains two independent CPU's. The CPU is the part that read and execute program instructions. The cores share the same processor resource like cache and memory interface. The common setup is that all cores are of the same type but in the PS3 there where two different types of cores. Two to eight cores are common.

Threads: With two cores the processor can run one lines of execution, or a thread on each core at the same time. A program (process) that runs more then one thread is called multi-threaded. If it creates two threads each one can each be assigned to it's own core so they can both run at full speed. When the program is run on a single core processor the operating system need to switch between the threads in the application so each on gets to run a little at the time on the core. The two threads created by the program is called software threads and when they run they do it on the hardware thread on the core.

Software threads: A program such as a game can create multiple threads. All the threads share the same memory address space. The OS selects what hardware thread the thread will run on. The OS can switch a thread from a core to another.

Hardware thread: A core can also support more then one hardware thread. This is known as Simultaneous multi-threading (SMT) or as Intel call it Hyper-threading. The hardware threads share the cores resources such as l1 cache and execution unit. When one hardware thread is stalled due to things like a cache miss or a branch mispredict the other thread(s) can use the core resources to do some work. Most common is that there are support for two hardware threads per core.

The cores are often called physical cores and the hardware threads are listed as logical cores. A four core processor with SMT will be shown as an eight core logical processor in the OS.
Affinity
With processor affinity one can select what cores a thread is allowed to run on. On fixed hardware such as a console platform it is possible to use hard affinitys and lock a thread to a specific core. On open platforms such as PC it needs to play along with the rest of the system.

Threadsafe - How to handle shared data.
Synchronization - How to keep every thread arriving at the castle at the same time.
Concurrent programming - Concurrent programming is how to program multi-threaded programs.
Thread API - Choose your poison.

Parallel Computer Architecture and Programming - 2015
Multithreaded Gameplay - 2015
Multithreading for Gamedev Students - 2015
Multi-Threading Best Practices for Gamedev - 2014
A Look Back at Single-Threaded CPU Performance - 2012
Squeeze the Juice Out of the CPUs: Post Mortem of a Data-Driven Scheduler - 2010
Parallel Graphics in Frostbite – Current Future - 2009
Sponsored Feature: Two Brains Are Better Than One -- How to Thread Game AI - 2009
Sponsored Feature: Designing the Framework of a Parallel Game Engine - 2009
Sponsored Feature: Multi-Threaded Fluid Simulation for Games - 2009
Sponsored Feature: OMG, Multi-Threading is Easier Than Networking  - 2009
Sponsored Feature: Microsoft Flight Simulator X SOARS to New Heights with Multi-Threading - 2008
The Intersection of Game Engines and GPUs – Current & Future - 2008
Multithreading Optimization Basics - 2007
1024cores
http://concurrencyfreaks.blogspot.se