HPC - Frequenza di caratteri

Moreno Marzolla moreno.marzolla@unibo.it

Ultimo aggiornamento: 2021-10-13

Il file omp-letters.c contiene un programma seriale che calcola il numero di occorrenze di ciascuna delle 26 lettere dell'alfabeto in un testo ASCII letto da standard input; non si fa differenza tra maiuscole e minuscole. Vengono forniti alcuni testi in formato ASCII resi disponibili da Project Gutenberg; è interessante osservare che le frequenze dei caratteri sono molto simili in tutte le opere, perché sono scritte nella stessa lingua (inglese). Le frequenze dei caratteri cambiano da lingua a lingua; chi è interessato può sperimentare con altri libri reperibili sul sito del Project Gutenberg.

Modificare la funzione make_freq() per sfruttare il parallelismo OpenMP. Suggerisco di creare un array bidimensionale local_hist[num_threads][26], dove num_threads è la dimensione del pool di thread OpenMP. Dopo aver inizializzato l'array a zero, ogni thread incrementa il valore opportuno della propria riga. Alla fine il numero di occorrenze di ogni carattere si ottiene sommando la colonna di local_hist appropriata. La funzione make_hist() deve restituire il numero complessivo di lettere dell'alfabeto trovate.

Compilare con:

    gcc -std=c99 -Wall -Wpedantic -fopenmp omp-letters.c -o omp-letters

Eseguire con:

    ./omp-letters < the-war-of-the-worlds.txt

File