Domanda

Come uno sviluppatore di software che si occupa per lo più con i linguaggi di programmazione di alto livello non sono sicuro di quello che posso fare per pagare in modo appropriato l'attenzione alla prossima omni-presenza di computer multicore. Scrivo applicazioni per lo più ordinarie e non esigente, tuttavia, penso che sia importante sapere se ho bisogno di cambiare qualsiasi paradigmi di programmazione o anche il linguaggio di padroneggiare il futuro.

La mia domanda quindi:
How to deal with increasing multicore presence in day-by-day hacking?

È stato utile?

Soluzione

Altri suggerimenti

La maggior parte dei problemi non richiedono un sacco di tempo di CPU. In realtà, singoli core sono abbastanza veloce abbastanza per vari scopi. Quando si fa trovare il vostro programma è troppo lento, primo profilo e guardare la vostra scelta di algoritmi, architettura, e il caching. Se questo non ottiene abbastanza, cercare di dividere il problema fino in processi separati. Spesso questo vale la pena farlo solo per l'isolamento dei guasti e in modo che tu possa capire l'utilizzo della CPU e della memoria di ogni processo. Inoltre, normalmente ogni processo viene eseguito su un nucleo specifico e fare buon uso delle cache del processore, così non dovrà subire la sostanziale riduzione delle prestazioni di mantenere linee di cache coerente. Se si va per un design multi processo e ancora trovare problema ha bisogno di più tempo di CPU che si ottiene con la macchina che hai, sono in grado di estendere il correre su un cluster.

Ci sono situazioni in cui è necessario più thread all'interno dello stesso spazio di indirizzamento, ma attenzione che le discussioni sono davvero difficili da ottenere. condizioni di gara, soprattutto in lingue non sicuri, a volte richiedere settimane per eseguire il debug; Spesso, la semplice aggiunta di tracciamento o l'esecuzione in un debugger cambierà i tempi sufficienti per nascondere il problema. Semplicemente mettendo serrature ovunque significa spesso si ottiene un sacco di bloccaggio in testa e, talvolta, Blocco tanto contesa che non si è davvero ottenere il vantaggio di concorrenza che speravano. Anche quando hai il diritto di blocco, è quindi necessario al profilo di sintonizzarsi per coerenza della cache. In definitiva, se si vuole veramente mettere a punto un codice altamente concorrente, probabilmente finirete per guardare in costrutti senza blocchi e schemi di bloccaggio più complessi rispetto a quelli attuali librerie multi-threading.

Scopri i vantaggi di concorrenza, ei limiti (per esempio legge di Amdahl).

Così si può, ove possibile, sfruttare l'unica via per prestazioni più elevate che sta per essere aperto. C'è un sacco di lavoro innovativo accadendo su approcci più semplici (futures e librerie di attività), e il vecchio lavoro che viene riscoperto (linguaggi funzionali e dati immutabili).

Il pranzo libero è finita, ma questo non significa che non c'è niente da sfruttare.

In generale, diventano molto amichevole con filettatura. E 'un meccanismo di terribile per la parallelizzazione, ma è quello che abbiamo.

Se non lavorate con .NET, guardare le estensioni parallele. Essi consentono di realizzare facilmente molte attività di programmazione parallela.

Per beneficiare di più che solo un core si dovrebbe considerare parallelizzazione del codice. Più thread, tipi immutabili, e un minimo di sincronizzazione sono i tuoi nuovi amici.

Credo che dipenderà da che tipo di applicazioni che si sta scrivendo.

Una specie di applicazioni beneficiare di più del fatto che sono eseguiti su una cpu mutli-core poi gli altri. Se l'applicazione può beneficiare del fatto multi-core, allora si dovrebbe essere pronti ad andare in parallelo. Il pranzo libero è finita; vale a dire: in passato, l'applicazione è diventata più veloce in caso di nuove cpu è stato rilasciato e non c'era bisogno di mettere qualsiasi sforzo nella vostra applicazione per ottenere quella velocità in più. Ora, per sfruttare le funzionalità di una CPU multi-core offre, devi fare in modo che l'applicazione può trarre vantaggio da esso. Cioè: hai per vedere quali compiti possono essere assolti multithread / contemporaneamente, e questo porta alcuni problemi al tavolo ...

Ulteriori Erlang / F # (a seconda della piattaforma)

  • Preferisco strutture di dati immutabili, il loro uso rende il software più facile da capire non solo nei programmi concorrenti.

  • Scopri gli strumenti per la concorrenza nella tua lingua (ad esempio java.util.concurrent, JCIP ).

  • Scopri un linguaggio funzionale (per esempio Haskell ).

Mi è stato chiesto la stessa domanda, e la risposta è, "dipende". Se il vostro Joe WinForms, forse non così tanto. Se il codice di scrittura che deve essere performante, sì. Uno dei più grandi problemi che posso vedere con la programmazione parallela è questo: se una cosa non può essere parallized, e si trovano comunicando il run-time per fare in parallelo in ogni modo, non sta andando in crash, è solo andando a fare cose sbagliate , e si otterrà risultati merda e la colpa del quadro.

Ulteriori OpenMP e MPI per il codice C e C ++.

OpenMP si applica anche ad altre lingue, nonché come Fortran suppongo.

Scrivere programmi più piccoli.

Altre lingue codice / stili ti consente di fare multithreading meglio (anche se il multithreading è ancora molto difficile in qualsiasi lingua), ma il grande vantaggio per gli sviluppatori regolari, secondo me, è la capacità di eseguire un sacco di programmi più piccoli contemporaneamente per eseguire alcune molto più grande compito.

Quindi, prendere l'abitudine di rompere i vostri problemi in componenti indipendenti che possono essere eseguiti in qualsiasi momento.

Potrai creare software più gestibile anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top