CONCLUSIONI E SVI-
LUPPI FUTURI
Molte tematiche sono state affrontate nel progetto di tesi volte alla comprensione ed allo svisceramento di tutte le componenti interne della libreria Muskel 2. Il discorso non poteva non cominciare da una lettura approfondita delle dinamiche che si celano die- tro la programmazione parallela, attraversando i punti di forza e di debolezza del linguag- gio su cui l’intero framework risulta essere costruito, ossia Java, per giungere infine alla formulazione di una serie di applicativi volti ad una reale manipolazione di taluni mecca- nismi. Punto fondamentale riguarda il fatto che gli applicativi implementati appartengono a kernel computativi così diversi, il ché valida Muskel 2 come un ambiente capace di rea- lizzare il parallelismo con parametri di performance soddisfacenti per un vasto range di applicazioni: questo è il reale punto di forza distintivo da ogni altro ambiente simile.
Tutto questo ha comportato un’immersione nelle specifiche interne della libreria grazie alle quali, in prima istanza, è stata data la possibilità al progettista di effettuare al- cuni commit principalmente relativi alla computazione remota: alcuni problemi derivava- no dalla cattiva serializzazione di oggetti prima del loro invio agli slaves. Questo difetto è
stato corretto prontamente, quindi la sperimentazione in campo remoto è potuta conti- nuare senza ulteriori intoppi. Per quanto riguarda quella locale nessun problema è stato rilevato se non un iniziale difficoltà nel manipolare gli operatori disponibili sostenuti da una documentazione troppo snella. In secondo luogo una validazione, verifica e testing così approfondita ha consentito di rilevare un insieme di lacune che versioni future della libreria potranno colmare, vediamone alcune:
La maggior parte della criticità e delle migliorie applicabili riguarda il campo distribuito strutturato nel modulo muskel.server. Ad esempio la distribu- zione dei task originati nel client e da distribuire fra gli slaves disponibili può avvenire solo in ROUND-ROBIN e non nella talvolta utilissima versione ON-DEMAND. Ciò è dovuto al funzionamento interno degli Executor di Hazelcast, ragion per cui è necessaria una modifica architetturale sostan- ziale per rendere disponibile un simile servizio all’utente.
Di fondamentale importanza è l’introduzione di un operatore che in manie- ra nativa e soprattutto parametrica consenta la creazione di un oggetto SerializablePublisher<> da passare come input alla factory Muskel- Processor.fromPublisher(). Molto spesso un siffatto oggetto è risultato essere necessario alla computazione ma troppo tempo viene richiesto per la sua corretta implementazione, potrebbe divenire senza problema un operatore capace di richiedere in input secondo quale logica e quali oggetti restituire in maniera on demand per gli operatori successivi.
Una notevole spinta verrebbe data alla libreria nel proprio utilizzo se fosse aggiunto qualche operatore che in maniera immediata e facilitata consenta di sfruttare il modello MapReduce di Google. Un grande range di applica- zioni può essere risolta attraverso questo valido strumento che è pur sem- pre emulabile, anche se in maniera farraginosa, all’interno della libreria co- sì come si presenta attualmente.
Molto spesso sarebbe stato utile poter utilizzare dei meccanismi capaci di realizzare uno scambio di informazioni fra task, parallelamente in esecu- zione, come avviene in MPI.
Ancora mentre nel campo locale viene data la possibilità di modificare di- namicamente la size della threadpool di default attualmente caricata nel contesto, questo non è possibile in un cluster, dove modificare la somma- toria dei threadNode messi a disposizione del client significa riavviare i ser- ver con il parametro –clientPoolSize opportunamente tarato. Un mec- canismo che consenta di ottenere lo stesso risultato manipolando le pool size degli slaves dal client sarebbe oltremodo vantaggioso.
Detto questo la libreria resta uno strumento davvero valido e potente nell’assistere e guidare l’utente nel programmare applicativi paralleli. Nasce e sfrutta un connubio di tecnologie leader nel relativo settore come Java, Hazelcast, i ReactiveStream e così via, dando vita ad uno strumento strutturato che può essere tranquillamente usato in programmi dalla natura molto più complessa. Concludo con una citazione di Steve Jobs davvero calzante e che incarna la necessità di strumenti come Muskel 2:
"The way the processor industry is going, is to add more and more cores, but no-
body knows how to program those things. I mean, two, yeah; four, not really; eight, forget it."
BIBLIOGRAFIA
[1] G. E. Moore, «Cramming more components,» Electronics, vol. 38, n. 8, p. 4, 1965.
[2] B. Dally, «Life After Moore's Law,» 2010. [Online]. Available:
https://www.forbes.com/2010/04/29/moores-law-computing-processing-opinions- contributors-bill-dally.html.
[3] D. B. Skillicorn, «Models for practical parallel computation,» International Journal of Parallel Programming, 1991.
[4] Vari, «Distributed Computing,» Wikipedia, 2017. [Online]. Available:
https://en.wikipedia.org/wiki/Distributed_computing.
[5] M. Danelutto, «PARALLEL DESIGN PATTERNS,» 2011. [Online]. Available:
http://backus.di.unipi.it/~marcod/PhD12/designpatterns.pdf.
[6] L. Horacio Gonzailez-Velez, «A Survey of Algorithmic Skeleton Frameworks: High-Level,»
Wiley InterScience, 2010. [Online]. Available:
http://backus.di.unipi.it/~marcod/SkandiumClone/skandium.niclabs.cl/publications/skeleton- survey.pdf.
[7] J. Darlinton e M. Ghanem, «Structured Parallel Programming,» IEEE Computer Society Press, 1993.
[8] M. Cole, «Algorithmic Skeletons: structured management of parallel computation,» MIT Press, Cambdridge, 1989.
[9] D. Aldinucci, «MUSKEL: A SKELETON LIBRARY SUPPORTING SKELETON SET EXPANDABILITY∗,» Scalable Computing: Practice and Experience, 2007.
[10] C. SIMONELLI, «Programmazione parallela strutturata in Java8: Muskel2,» 2015. [11] B. Moura e Silvia, Parallel Programming Models, 2011.
[12] L. L. Blaise Barney, «Introduction to Parallel Computing,» 2017. [Online]. Available: https://computing.llnl.gov/tutorials/parallel_comp/#DesignLoadBalance.
[13] I. Fonster, «Designing and Building Parallel Programs - Communication,» 1995. [Online]. Available: http://www.mcs.anl.gov/~itf/dbpp/text/node17.html.
[14] Vari, «Fork-Join Model,» Wikipedia, 2017. [Online]. Available:
[15] J. Reinders, «Understanding task and data parallelism,» 2007, [Online]. Available: http://www.zdnet.com/article/understanding-task-and-data-parallelism-3039289129/. [16] A. G. V Kumar, «Scalable Load Balancing Techniques for Parallel Computers,» Elsevier, 1994. [17] V. Mittal, «A survey of CPU-GPU heterogeneous computing techniques,» 2015.
[18] M. Z. S. Kasim, «Survey on Parallel Programming Model,» 2008.
[19] Intel, «Auto-Parallelization Overview,» software.intel.com, [Online]. Available: https://software.intel.com/en-us/node/522533.
[20] G. J. a. R. v. d. P. B. Chapman, « Using OpenMP: Portable Shared Memory Parallel,» The MIT Press, 2007.
[21] B. Winterberg, «Java 8 Stream,» 2014. [Online]. Available:
http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/.
[22] N. Coffey, «Java & Threads,» javamex.com, [Online]. Available:
http://www.javamex.com/tutorials/threads/.
[23] Benjamin, «Java 8 Concurrency Tutorial: Threads and Executors,» 2015. [Online]. [24] J. Jenkov, «Java Fork and Join using ForkJoinPool,» 2015. [Online].
[25] E. Harned, «A Java™ Fork-Join Calamity,» coopsoft.com, 2016. [Online].
[26] E. Harned, «A Java™ Parallel Calamity,» 2016. [Online]. Available:
http://www.coopsoft.com/ar/Calamity2Article.html.
[27] Oracle, «Java Parallelism,» 2016. [Online]. Available:
https://docs.oracle.com/javase/tutorial/collections/streams/parallelism.html.
[28] B. T. Weiss, «5 Features In Java 8 That WILL Change How You Code,» 2104. [Online]. Available: http://blog.takipi.com/5-features-in-java-8-that-will-change-how-you-code/. [29] Benjamin, «Java 8 Tutorial,» winterbe.com, 2014. [Online]. Available:
http://winterbe.com/posts/2014/03/16/java-8-tutorial/.
[30] LogicBig.com, «Java 8 Streams - Lazy evaluation,» 2017. [Online]. Available: http://www.logicbig.com/tutorials/core-java-tutorial/java-util-stream/lazy-evaluation/.
[31] Vari, «Algorithmic skeleton,» 2017. [Online]. Available:
https://en.wikipedia.org/wiki/Algorithmic_skeleton.
[32] K. H. a. G. Michelson, «Research Directions in Parallel Functional Programming,» Springer- Verlag, 1999.
[33] D. F. R. K. a. M. T. Jonas Bonér, «Reactive Manifesto,» 2014. [Online]. Available: https://www.reactivemanifesto.org/.
[34] V. Klang, «Reactive Streams,» 2016. [Online]. Available: https://github.com/reactive- streams/reactive-streams-jvm/tree/v1.0.1.
[35] Oracle, «Interface BiFunction<T,U,R>,» 2016. [Online]. Available: https://docs.oracle.com/javase/8/docs/api/java/util/function/BiFunction.html.
[36] V. Cardellini, «Data Intensive Computing: MapReduce and Hadoop,» Università di Roma, 2014.
[37] G. M. Kevin Hammond, «Research Directions in Parallel Functional Programming,» in Capitolo 19, Springer, 1999.
[38] R. P. Brent, «Parallel Algorithms for Integer Factorisation,» Australian National University, 2015.
[39] «Teorema fondamentale dell'aritmetica,» Wikipedia, 2017. [Online]. Available: https://it.wikipedia.org/wiki/Teorema_fondamentale_dell%27aritmetica.
[40] Oracle, «Class BigInteger,» 2017. [Online]. Available:
https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html.
[41] D. R. Miller, «Matrix Inversion using Parallel Gaussian Elimination,» 2014. [Online]. Available: http://www.cse.buffalo.edu/faculty/miller/Courses/CSE633/thanigachalam-Spring-2014- CSE633.pdf.
[42] Wikipedia, «k-nearest neighbors algorithm,» 2017. [Online]. Available: https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm.
[43] C. F. Olson, «Parallel Algorithms for Hierarchical Clustering,» University of California at Berkeley, 1993.
[44] A. Fred, «Unsupervisioned Learning,» 2009. [Online]. Available:
http://www.lx.it.pt/~afred/tutorials/B_Clustering_Algorithms.pdf.
[45] A. Moore, «K-means and Hierarchical Clustering,» 2001. [Online]. Available: https://www.autonlab.org/_media/tutorials/kmeans11.pdf.
[46] Wikipedia, «Hierarchical clustering,» 2017. [Online]. Available:
https://en.wikipedia.org/wiki/Hierarchical_clustering.
[47] P. Wessa, «Free Statistics Software, Office for Research Development and Education,» 2017.
[Online]. Available:
RINGRAZIAMENTI
Ringrazio dal più profondo del cuore il mio relatore il pro- fessor Marco Danelutto per la grande attenzione e pazienza che ha dimostrato e non di meno tutta la mia famiglia e gli amici che mi hanno aiutato a portare a termine gli studi universitari che con questo documento trovano la loro conclusione.
APPENDICE A
PUBBLICAZIONE
DEL
CODICE
Pubblicazione del CODICE nell’ordine: [1] Fattorizzazione numeri primi [2] Risoluzione sistemi lineari [3] K-nearest neighbor
[4] Hierarchical Clustering [5] Chiusura Transitiva