In order to better employ the computational power of modern hardware, many sequential programs can be changed to encapsulate parallel instructions. Concurrent executions have the potential to significantly enhance overall application performance, reducing both the execution time and the resource requirements. Nevertheless, manually transforming a sequential application to a parallel version is a complex undertaking, involving a meticulous inspection of several lines of code which could be tedious and time-consuming, an in-depth analysis of the data dependencies to preserve the correctness of the transformations and a balance of the workload among threads to optimise the performance boost. In this context, I propose four distinct refactoring approaches to support developers in this complex task, providing a set of fully automatic tools tailored to different scenarios, encompassing data and control dependence analysis, parallelisation of method calls, transformation of for loops to stream pipelines and matching of algorithms for parallel optimisations. An efficacious test suite is necessary to preserve the source code from inadvertent changes during refactoring. Such changes may involve the editing, addition or deletion of code fragments, resulting in poor consistency between the refactored code and the testing suite. To address this issue, I additionally propose two automatic approaches to generate test cases, catering to both classes and methods. All six proposals are integrated into a framework named ReFrame, which serves the dual purpose of validating these approaches with real word scenarios, and providing a unified, modular interface for developers. Extensive testing has been conducted to demonstrate the correctness and efficiency of these approaches, revealing optimal results in each of the related tasks.

Per sfruttare meglio la potenza di calcolo dell'hardware moderno, molti programmi sequenziali possono essere modificati per incapsulare istruzioni parallele. Le esecuzioni simultanee hanno il potenziale per migliorare significativamente le prestazioni complessive dell'applicazione, riducendo sia il tempo di esecuzione che i requisiti di risorse. Tuttavia, trasformare manualmente un'applicazione sequenziale in una versione parallela è un'impresa complessa, che comporta un'ispezione meticolosa di diverse righe di codice che potrebbe risultare noiosa e dispendiosa in termini di tempo, un'analisi approfondita delle dipendenze dei dati per preservare la correttezza delle trasformazioni e un equilibrio del carico di lavoro tra i thread per ottimizzare l'aumento delle prestazioni. In questo contesto, propongo quattro distinti approcci di refactoring per supportare gli sviluppatori in questo compito complesso, fornendo una serie di strumenti completamente automatici su misura per diversi scenari, che comprendono l'analisi della dipendenza dai dati e dal controllo, la parallelizzazione delle chiamate di metodo, la trasformazione dei cicli for in pipeline di flusso e abbinamento di algoritmi per ottimizzazioni parallele. È necessaria una suite di test efficace per preservare il codice sorgente da modifiche involontarie durante il refactoring. Tali modifiche possono comportare la modifica, l'aggiunta o l'eliminazione di frammenti di codice, con conseguente scarsa coerenza tra il codice rifattorizzato e la suite di test. Per affrontare questo problema, propongo inoltre due approcci automatici per generare casi di test, soddisfacendo sia le classi che i metodi. Tutte e sei le proposte sono integrate in un framework denominato ReFrame, che ha il duplice scopo di convalidare questi approcci con scenari reali e fornire un'interfaccia unificata e modulare per gli sviluppatori. Sono stati condotti test approfonditi per dimostrare la correttezza e l'efficienza di questi approcci, rivelando risultati ottimali in ciascuna delle attività correlate.

ReFrame: un framework di refactoring per supportare gli sviluppatori nel miglioramento e nell'ottimizzazione del codice sorgente

MIDOLO, ALESSANDRO
2024

Abstract

In order to better employ the computational power of modern hardware, many sequential programs can be changed to encapsulate parallel instructions. Concurrent executions have the potential to significantly enhance overall application performance, reducing both the execution time and the resource requirements. Nevertheless, manually transforming a sequential application to a parallel version is a complex undertaking, involving a meticulous inspection of several lines of code which could be tedious and time-consuming, an in-depth analysis of the data dependencies to preserve the correctness of the transformations and a balance of the workload among threads to optimise the performance boost. In this context, I propose four distinct refactoring approaches to support developers in this complex task, providing a set of fully automatic tools tailored to different scenarios, encompassing data and control dependence analysis, parallelisation of method calls, transformation of for loops to stream pipelines and matching of algorithms for parallel optimisations. An efficacious test suite is necessary to preserve the source code from inadvertent changes during refactoring. Such changes may involve the editing, addition or deletion of code fragments, resulting in poor consistency between the refactored code and the testing suite. To address this issue, I additionally propose two automatic approaches to generate test cases, catering to both classes and methods. All six proposals are integrated into a framework named ReFrame, which serves the dual purpose of validating these approaches with real word scenarios, and providing a unified, modular interface for developers. Extensive testing has been conducted to demonstrate the correctness and efficiency of these approaches, revealing optimal results in each of the related tasks.
26-giu-2024
Italiano
Per sfruttare meglio la potenza di calcolo dell'hardware moderno, molti programmi sequenziali possono essere modificati per incapsulare istruzioni parallele. Le esecuzioni simultanee hanno il potenziale per migliorare significativamente le prestazioni complessive dell'applicazione, riducendo sia il tempo di esecuzione che i requisiti di risorse. Tuttavia, trasformare manualmente un'applicazione sequenziale in una versione parallela è un'impresa complessa, che comporta un'ispezione meticolosa di diverse righe di codice che potrebbe risultare noiosa e dispendiosa in termini di tempo, un'analisi approfondita delle dipendenze dei dati per preservare la correttezza delle trasformazioni e un equilibrio del carico di lavoro tra i thread per ottimizzare l'aumento delle prestazioni. In questo contesto, propongo quattro distinti approcci di refactoring per supportare gli sviluppatori in questo compito complesso, fornendo una serie di strumenti completamente automatici su misura per diversi scenari, che comprendono l'analisi della dipendenza dai dati e dal controllo, la parallelizzazione delle chiamate di metodo, la trasformazione dei cicli for in pipeline di flusso e abbinamento di algoritmi per ottimizzazioni parallele. È necessaria una suite di test efficace per preservare il codice sorgente da modifiche involontarie durante il refactoring. Tali modifiche possono comportare la modifica, l'aggiunta o l'eliminazione di frammenti di codice, con conseguente scarsa coerenza tra il codice rifattorizzato e la suite di test. Per affrontare questo problema, propongo inoltre due approcci automatici per generare casi di test, soddisfacendo sia le classi che i metodi. Tutte e sei le proposte sono integrate in un framework denominato ReFrame, che ha il duplice scopo di convalidare questi approcci con scenari reali e fornire un'interfaccia unificata e modulare per gli sviluppatori. Sono stati condotti test approfonditi per dimostrare la correttezza e l'efficienza di questi approcci, rivelando risultati ottimali in ciascuna delle attività correlate.
TRAMONTANA, EMILIANO ALESSIO
Università degli studi di Catania
Catania
File in questo prodotto:
File Dimensione Formato  
PhD_Thesis_Alessandro_Midolo.pdf

accesso aperto

Dimensione 1.38 MB
Formato Adobe PDF
1.38 MB Adobe PDF Visualizza/Apri

I documenti in UNITESI sono protetti da copyright e tutti i diritti sono riservati, salvo diversa indicazione.

Utilizza questo identificativo per citare o creare un link a questo documento: https://hdl.handle.net/20.500.14242/188483
Il codice NBN di questa tesi è URN:NBN:IT:UNICT-188483