Kurze Antwort: Nein.
Etwas längere Antwort: Kerne auf einem Multicore-Chip sind im Wesentlichen separate physische Prozessoren. Hyperthreading ermöglicht das Aufteilen eines physischen Kerns in z. B. zwei Threads. Dies hat den Vorteil, dass der einzelne Kern zwischen Threads hin- und herwechseln kann, so dass, wenn ein Thread wartet (beispielsweise für E / A), der andere Thread wieder aufgenommen werden kann. Zwei Threads auf einem Hyper-Threaded-Core nutzen Ressourcen gemeinsam, wodurch ein sehr effizienter Kontextwechsel zwischen Threads ermöglicht wird.
Warum kannst du nicht das Gegenteil tun? Nun, stell es dir einfach vor. Sie haben zwei physische Kerne, aber nur einen einzigen Prozess. Es gibt zwei mögliche Szenarien:
Der ausführende Code kann parallel ausgeführt werden. In diesem Fall hätten Sie nur zwei Threads, einen für jeden Kern. Auf diese Weise können beide Threads gleichzeitig ausgeführt werden.
Der ausführende Code kann nicht parallel ausgeführt werden. Darum fragen Sie. In diesem Fall haben Sie einen einzelnen Thread. Da der Code nicht gleichzeitig ausgeführt werden kann, können Sie ihn nicht gleichzeitig auf zwei separaten Prozessoren ausführen. Um einen einzelnen Thread auf beiden Kernen auszuführen, wechseln Sie einfach den Thread zwischen den beiden Kernen hin und her. Dies würde zu keinem Leistungsgewinn führen und würde die Performance aufgrund unnötiger Kontextwechsel beeinträchtigen.
Dies ist ein ungünstiger Nachteil von Multicore-Systemen. Sie sehen nur dann einen Leistungsgewinn, wenn die Anwendung mehrere Aufgaben parallel ausführen kann und dafür geschrieben wurde. Selbst dann ist der Gewinn nicht direkt proportional zur Anzahl der Kerne (siehe Amdahls Gesetz ).