Durante l'apprendimento del "linguaggio assembler" (in linux su un'architettura x86 che utilizza GNU come assemblatore), uno dei momenti aha era la possibilità di utilizzare system calls. Queste chiamate di sistema sono molto utili e talvolta sono addirittura necessarie come il tuo programma runs in user-space.
Tuttavia le chiamate di sistema sono piuttosto costose in termini di prestazioni in quanto richiedono un interrupt (e, naturalmente, una chiamata di sistema), il che significa che deve essere eseguito un cambio di contesto dal programma attivo corrente nello spazio utente al sistema in esecuzione nel kernel- spazio.È possibile creare thread senza chiamate di sistema nell'assembly GAS Linux x86?
Il punto che voglio fare è questo: attualmente sto implementando un compilatore (per un progetto universitario) e una delle funzionalità extra che volevo aggiungere è il supporto per il codice multi-threaded per migliorare le prestazioni del programma compilato. Poiché parte del codice multi-threaded verrà automaticamente generato dal compilatore stesso, questo garantirà quasi che ci siano anche minuscoli bit di codice multi-thread in esso. Per ottenere una vittoria in termini di prestazioni, devo essere sicuro che l'utilizzo di thread renderà questo possibile.
Il mio timore tuttavia è che, per utilizzare la filettatura, I deve effettuare chiamate di sistema e gli interrupt necessari. I minuscoli thread (generati automaticamente) saranno quindi molto influenzati dal tempo necessario per effettuare queste chiamate di sistema, il che potrebbe addirittura portare a una perdita di prestazioni ...
La mia domanda è quindi duplice (con un extra domanda bonus sotto di esso):
- E 'possibile scrivere assembler codice che può essere eseguito più thread contemporaneamente su più core in una volta, senza la necessità del sistema di chiamate?
- Otterrò un guadagno in termini di prestazioni se ho thread davvero minuscoli (piccoli come nel tempo di esecuzione totale del thread), perdita di prestazioni o non vale la pena?
La mia ipotesi è che il codice assembler multithreaded è non possibile senza chiamate di sistema. Anche se questo è il caso, hai un suggerimento (o anche meglio: qualche codice reale) per implementare i thread nel modo più efficiente possibile?
C'è un simile (anche se non duplicare IMHO) domanda qui: http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like Le risposte ci potrebbe dare qualche insight –