To co się dzieje w DSP można nazwać superskalarnością, SIMDem, MIMDem etc
W x86 jest MMX, SSE, 3dNow! i tego typu rozszerzenia, też niby jeden wątek a 4 rzeczy równolegle. W Radeonach jest architektura shadera VLIW4, a same shadery pogrupowane są w SIMDach.
Wykonywanie jednego wątku na dwóch czy więcej rdzeniach (w necie widziałem określenie "reverse hyperthreading" na to) musi być cholernie nieefektywne, także pod względem zużycia powierzchni rdzenia. Zamiast tego stosuje się np parallel.for w C# czy równoległe kolekcje w nadchodzącej wersji Scali. Albo wspomniane wcześniej rozszerzenia wektorowe.
Procki o architekturze Nehalem mogą wykonywać naraz 4 różne instrukcje w jednym rdzeniu i taki bajer wymaga dużej kupy tranzystorów. Jeśli chciałbyś wykonywać naraz 50 różnych instrukcji z jednego strumienia kodu to sama logika zwiększyłaby rozmiar procka do wielkości porządnego kotleta.
Dwa procesy tym się różnią od dwóch wątków, że dwa procesy nie mogą sobie mieszać nawzajem w pamięci. Twój ulubiony sposób (tfu!) na wymianę danych między wątkami, czyli zmienne statyczne, nie ma szans bytu w przypadku wymiany danych między procesami.
MPI (albo pochodne) jest jedyną opcją (jak na razie, jeśli piszemy w C++), gdy piszemy programy na komputerki typu BlueGene, Roadrunner itp.
autor:
Polecam sprawdzić: http://akkasource.org/
Nie używałem, ale wygląda obiecująco. Udostępnia mechanizm Aktorów ze Scali w ulepszonej postaci z dobrym interfejsem do Javy.