Domanda

In una scatola multicore, le decisioni pianificatori thread Java sono piuttosto arbitrari, assegna le priorità di thread in base a quando è stato creato il filo, filo da cui è stato creato, ecc.

L'idea è quella di eseguire un processo di sintonizzazione usando PSO che avrebbe stabilito casualmente priorità di thread e poi alla fine raggiungere priorità ottimali in cui la funzione di fitness è il tempo totale del programma

Naturalmente ci sarebbero più parametri, come le priorità sposterebbe durante la corsa di trovare una funzione di priorità ottimale.

Come pratico, interessante fa il suono idea? e gli eventuali suggerimenti. Solo un po 'di sfondo, Ive stato programmazione in Java / C / C ++ per alcuni anni ora con vari progetti, un'altra alternativa sarebbe fare un thread scheduler basato su questo in c, in cui lo scheduler filo di default è il sistema operativo.

È stato utile?

Soluzione

Il modo migliore per scoprire -. Iniziare un progetto open source e vedere delle persone l'uso / reazione

Sembra molto interessante per me - ma io personalmente non lo trovo molto utile. Forse noi non siamo al punto in cui la programmazione concorrente è come prevalente e facile come potrebbe essere.

Con la promozione della programmazione funzionale, immagino il mondo si muoverebbe verso evitando sincronizzazione filo il più possibile (rendendo scheduling filo minore impatto delle prestazioni complessive)

Dalla mia esperienza soggettiva personale, la maggior parte dei problemi di prestazioni in software può essere risolto migliorando una zona collo di bottiglia singola che rappresenta il 90% del rallentamento. Questo ottimizzatore può aiutare a trovare che fuori. Io non sono sicuro di quanto la strategia di pianificazione potrebbe migliorare le prestazioni generali, però.

Non scoraggiatevi, però! Sto solo parlando dal nulla. Sembra divertente, quindi perché non basta giocare con lo stesso:)

Altri suggerimenti

Il tuo approccio descritto è un approccio statico, vale a dire è necessario eseguire il programma più volte, poi trovare una soluzione di schedulazione, quindi spedire il vostro informazioni di programmazione con il programma.

Il problema è che per la maggior parte dei programmi non banali, le loro prestazioni dipenderà in parte i dati specifici che stanno lavorando. Anche se si trova un modo ottimale per le discussioni di pianificazione per un insieme di dati, non c'è assolutamente alcuna garanzia che possa migliorare la velocità su un altro. Nella maggior parte dei casi, in esecuzione quello che sarà un lungo e difficile l'ottimizzazione ogni volta che vogliono fare una nuova versione non sarà valsa la pena per sviluppatori, se non forse per i grandi sforzi di calcolo (in cui i programmi sono suscettibili di essere sintonizzate manualmente e non scritte in java comunque).

Direi un filo di pianificazione auto-apprendimento è una bella idea, ma non è possibile trattarlo come un problema di ottimizzazione classica qui. Si sia bisogno di essere sicuri che il vostro ordine programmazione rimarrà ottimale (improbabile) o trovare un metodo di ottimizzazione che le opere in fase di esecuzione. E il problema qui potrebbe essere che non ci sarebbe voluto molto per l'overhead del vostro scheduler per distruggere qualsiasi guadagno di prestazioni si potrebbe ottenere.

Credo che questa è una domanda un po 'soggettiva, ma nel complesso no, non credo che avrebbe funzionato.

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