I core dell'HT non sono core fisici, quindi molto probabilmente il programma rallenta.
Dalla struttura del programma, all'aumentare dei core il tempo di esecuzione dovrebbe rimanere uguale (perché aumenta anche la complessità computazionale di pari passo).
In realtà non è così. Tra i vari motivi che mi sono venuti in mente:
Non tutti i core vanno alla stessa velocità (nel senso che ci sono anche altri processi in esecuzione) e il programma deve aspettare i core più lenti.
I thread non sono indipendenti tra loro ma si "passano informazioni", quindi c'è da aspettarsi della latenza, soprattutto nel passare da 1 thread a più thread, ma questa differenza si nota anche per un numero maggiore di thread.
Probabilmente per questione di Power Limit della CPU, in single core raggiunge frequenze più elevate (almeno così credo che sia su Intel).
Sarebbe interessare vedere cosa succede su architetture con core diversificati, come M1, in cui i 4 core ad alta efficienza dovrebbero rallentare il programma e, paradossalmente, potrebbe essere vantaggioso eseguirlo solo sui 4 core ad alte prestazioni.
In teoria, all'aumentare dei thread eseguiti, il programma dovrebbe ridurre la complessità computazionale di ogni singolo thread. Non è così perché è pensato per essere eseguito in due casi: 1 core o 4 core e riducevo la complessità direttamente in fase di compilazione.
Questo significa però che su 64 thread è più probabile che il programma trova il risultato corretto, mentre su 12 thread si ferma a un risultato sub-optimale.
Vedendo i risultati qui sopra, i 14.7006 ± 4.55493 sono migliori dei risultati ottenuti su Intel con meno core. Per ottenere gli stessi risultati su meno core bisognerebbe allungare i tempi di esecuzione (e di tanto, perché più ti avvicini alla soluzione e più diventa difficile).
Adesso spero sia chiaro perché si dice spesso che le CPU 4C/4T sono decisamente meglio delle CPU 2C/4T.😅
Bei test, in ogni caso. Istruttivi.