Ci sono lavori orientati alla programmazione o all'assemblaggio di ottimizzazione

5

I programmatori di motori 3D devono preoccuparsi un po 'della velocità di esecuzione, ma per quanto riguarda i programmatori di ATI e nVidia? Quanto hanno bisogno di ottimizzare le loro applicazioni di driver?

Ci sono posti di lavoro là fuori che hanno solo scopo la velocità di esecuzione e l'ottimizzazione, o lavori che le persone possono programmare solo in assemblaggio?

Per favore, nessuna guerra di fiamma per "l'ottimizzazione prematura è la radice di tutti i mali", voglio solo sapere se tali lavori esistono, forse in sicurezza? Nella programmazione del kernel? Dove ? Niente affatto?

    
posta jokoon 14.03.2011 - 11:59
fonte

6 risposte

4

Un settore che non avrei mai pensato prima di leggerlo (ed è stato anni fa, quindi non ho il collegamento purtroppo) è il settore della Difesa. Gli appaltatori militari vengono utilizzati per aiutare la difesa cibernetica delle nazioni e anche per lanciare attacchi informatici. Ora, so che uno dei grandi appaltatori voleva persone che conoscessero l'assemblaggio, anche se non sono sicuro di quanto avrebbero dovuto usarlo.

Un altro campo è l'elettronica incorporata. Mentre alcune di queste architetture sono programmate per C, sarà comunque possibile utilizzare l'assembly per esse e probabilmente sarebbe dove la maggior parte dei lavori sarebbe in assembly.

    
risposta data 14.03.2011 - 12:55
fonte
5

Finanza - in particolare nelle attività di trading ad alta frequenza / market making in cui la velocità è il re.

Non sono a conoscenza di nessuno che sta andando giù per il montaggio in quest'area (almeno non ancora), ma certamente l'accelerazione hardware è utilizzata - il problema principale è che quest'area è molto riservata, quindi raramente sai quanto sono lontane le persone andare (dopotutto, è ciò che guadagna) ...

    
risposta data 14.03.2011 - 12:04
fonte
4

Sì, ci sono molte aree (principalmente sistemi embedded) in cui l'ottimizzazione è molto importante. In particolare per i sistemi in cui potrebbe essere necessaria una grande quantità di hardware della CPU, il miglioramento delle prestazioni può ridurre i costi / le dimensioni / il consumo di energia di un ordine di grandezza. Questo è comunemente raggiunto con tecniche come SIMD, GPGPU, coprocessori FPGA dedicati ecc. E i domini applicativi tendono ad essere ad es. militare, medico (sistemi di imaging ecc.), finanza (derivati, ecc.), esplorazione petrolifera (elaborazione di dati di rilievo), ecc., ovvero grandi quantità di dati 2D o 3D da scricchiolare il più rapidamente possibile (e / o con il minor hardware possibile ).

È raro usare il vero codice assembly, tranne forse per un piccolo numero di core routine "black box" ben definite - di questi tempi tende a essere programmato con intrinsics in C / C ++ (ad esempio per SIMD), o usando librerie di terze parti (ad es. IPL) o cose come CUDA e OpenCL per GPGPU.

    
risposta data 14.03.2011 - 15:47
fonte
3

In passato ne facevo parecchio 10-25 anni fa (principalmente le funzioni matematiche per i venditori di computer). Nei processori main stream (non incorporati) il maggior numero di persone che fanno assembler erano persone del sistema operativo (il sistema operativo deve salvare / ripristinare lo stato del registro macchina visibile del programmatore esatto sugli switch di contesto, ad esempio), e anche per le persone che verificano i progetti HW, tutte le istruzioni funzionano come pubblicizzato? E se avessi due o tre istruzioni che provano a usare lo stesso percorso dati nello stesso momento, la CPU produrrà ancora un comportamento corretto?). Ma queste persone sono molto meno interessate alle prestazioni della correttezza. Alcune persone scrivono ancora librerie di basso livello (ad esempio le funzioni trigonometriche) nell'assembler, ma sono poche e molto lontane tra loro.

    
risposta data 14.03.2011 - 17:45
fonte
1

Il codice di assembler non è così utile per l'ottimizzazione come una volta. Vorresti impararlo, ma se c'è un buon compilatore C per un'architettura, potresti solo programmarlo a volte. I compilatori moderni sono davvero dannatamente bravi. Dubito che ci siano molti lavori da assemblatore in giro, ma molti altri in cui a volte viene usato.

I lavori che richiedono l'ottimizzazione sono probabilmente più comuni. Non è davvero necessario per la maggior parte dei software per desktop e laptop, ma ci sono posti in cui è utile. La programmazione incorporata è solitamente volta a ridurre i costi unitari, quindi l'ottimizzazione è buona. Il software server può trarne vantaggio, poiché l'obiettivo è la riduzione del numero di server per un dato carico. Gli interni del sistema operativo dovrebbero essere efficienti, perché se non sono nulla possono essere efficienti su quel sistema operativo. I database devono essere efficienti. Alcune applicazioni scientifiche devono essere efficienti.

    
risposta data 14.03.2011 - 15:14
fonte
1

Le organizzazioni che fanno un sacco di cloud computing usano spesso i propri kernel personalizzati, richiedendo alle persone che possono fare Assembly e programmazione a basso livello. Questo è a causa di una semplice economia di numeri. Un aumento molto piccolo su una macchina finisce per costare un sacco di soldi se ridimensionato.

Inoltre, le aziende che costruiscono sistemi Avionics (o la guida missilistica / infrastruttura di difesa) fanno un sacco di assemblaggi personalizzati. Quando cerchi di intercettare un bersaglio in movimento, le ottimizzazioni sono importanti.

    
risposta data 14.03.2011 - 16:03
fonte

Leggi altre domande sui tag