Programmazione concorrente!

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
Saruman
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2378
Iscrizione: venerdì 16 marzo 2007, 22:29

Programmazione concorrente!

Messaggio da Saruman »

Salve a tutti, ho da fare questo esercizio di programmazione concorrente:

Scrivere un programma sequenziale che effettua la moltiplicazione righe per colonne di due matrici n x n  quindi scrivere un due versioni parallele utilizzando k processi, considerando prima una il caso che n sia multiplo di k e poi il cosa in cui n non sia multiplo di k.
Non capisco concettualmente come devo fare, nel caso dei produttori consumatori " esercizio precedente" è semplice a prescindere dai n Thread consumatori e k produttori , cioè alla fine tutti i consumatori vengono creati dalla stessa classe in java idem per i produttori, e si sincronizzavano su un buffer che li gestiva il tutto come monitor.. forse è meglio se leggete il codice..

Codice: Seleziona tutto

package santoro;
/***************************************************************/
/*             ----->BufferLimitato 2.0<-----                  */
/***************************************************************/
/* Implementa un biffer FIFO di dimensione prefissa accesibile */
/* da più thread. Ha un costruttore che prende come  parametro */
/* la dimensione del buffer.  L'accesso  al buffer  avviene in */
/* mutua esclusione.										   */
/***************************************************************/



public class BufferLimitato {
	private int in; 
    private int out;
    private int count;  
    private Object[] buffer;
    
    
    
    //Costruttore della classe
    //Inizializza le variabili e crea un array di oggetti di lunghezza pari a "size"
    public BufferLimitato(int size){
        in = 0;
        out = 0;
        count = 0;
        buffer = new Object[size]; 
    }
    
    // Metodo insert
    // Inserire oggetti nel buffer controllando che il buffer non sia pieno
    public synchronized void insert(Object item) throws InterruptedException{
        while (isFull()){
            try {
                wait();
                
            } catch (Exception ex){ System.err.println(" " +ex.getCause());
            }
        }
        count++;
        buffer[in] = item; 
        in = (in + 1) % buffer.length; 
        notifyAll();
    }
    
    // Rimuove oggetti dal buffer controllando che non sia vuoto
    public synchronized Object remove() throws InterruptedException {
        while (isEmpty()){
            try {
                wait();
                
            } catch (Exception ex){System.err.println(" " +ex.getCause());
            }
        }
        Object item = buffer[out]; 
        out = (out + 1) % buffer.length;
        count--;
        notifyAll();
        return item;
    }
    // metodo per verificare se il Buffer è Vuoto
    private boolean isEmpty(){
        return count == 0;
    }
    // Metodo per verificare se il Buffer è Pieno
    private boolean isFull(){
        return count == buffer.length;
    }

}
mi date un consiglio di come posso fare?
Avatar utente
Saruman
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2378
Iscrizione: venerdì 16 marzo 2007, 22:29

Re: Programmazione concorrente!

Messaggio da Saruman »

Per ora ecco il mio codice per le matrici..

Codice: Seleziona tutto

public class ProdottoTraMatrici {
	int riga;
	int colonna;
	int[][] matriceA;
	int[][] matriceB;
	
	int x=0;
	
	
	ProdottoTraMatrici(int numeroRiga, int numeroColonna){
		riga=numeroRiga;
		colonna=numeroColonna;
		matriceA = new int[riga][colonna];
		matriceB = new int[riga][colonna];
		
		//riempie il vettore di valori casuali
		
		int jA=0;
		while (jA<riga){
			int iA=0;
			while(iA<colonna){
			  matriceA[jA][iA] = (int)(32000 * Math.random());
			  iA++;
			}
			jA++;
		}
		
		int jB=0;
		while (jB<riga){
			int iB=0;
			while(iB<colonna){
				matriceB[jB][iB] = x;
				x++;
				//matriceB[iB][jB] = (int)(32000 * Math.random());
				iB++;
			}
			jB++;
		}
	}
	
	public void stampaMatriceA(){
		int j=0;
		while (j<riga){
			int i=0;
			while(i<colonna){
			  System.out.print("-"+matriceA[j][i]+"-\t");
			  i++;
			}
			System.out.println();
			j++;
		}
		System.out.println();
	}
	
	public void stampaMatriceB(){
		int j=0;
		while (j<riga){
			int i=0;
			while(i<colonna){
			  System.err.print("-"+matriceB[j][i]+"-\t");
			  i++;
			}
			System.out.println();
			j++;
		}
	System.out.println();	
	}
	
}
Devo risolvere il metodo prodotto
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Programmazione concorrente!

Messaggio da Zoff »

io non ho capito cosa devi far o_O
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Saruman
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2378
Iscrizione: venerdì 16 marzo 2007, 22:29

Re: Programmazione concorrente!

Messaggio da Saruman »

devo!

Scrivere un programma sequenziale che effettua la moltiplicazione righe per colonne di due matrici n x n  quindi scrivere un due versioni parallele utilizzando k processi, considerando prima una il caso che n sia multiplo di k e poi il cosa in cui n non sia multiplo di k.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Programmazione concorrente!

Messaggio da Zoff »

ybor4 ha scritto: devo!

Scrivere un programma sequenziale che effettua la moltiplicazione righe per colonne di due matrici n x n  quindi scrivere un due versioni parallele utilizzando k processi, considerando prima una il caso che n sia multiplo di k e poi il cosa in cui n non sia multiplo di k.
Non è che un copia/incolla del primo post sia di tanto aiuto...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Saruman
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2378
Iscrizione: venerdì 16 marzo 2007, 22:29

Re: Programmazione concorrente!

Messaggio da Saruman »

Questa è la tracci dell'esercizio... scritta da un docente universitario..
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Programmazione concorrente!

Messaggio da Zoff »

ybor4 ha scritto: Questa è la tracci dell'esercizio... scritta da un docente universitario..
Beh di sicuro non insegna italiano o almeno non ha confidenza con una tastiera...

Secondo me non è chiara come consegna... Non spiega come dividere il lavoro sui thread...

EDIT: Addirittura non si capisce se devi moltiplicare le righe di una matrice per le colonne dell'altra oppure moltiplicare in ogni matrice le righe per le colonne, anche se il buon senso fa pensare al primo caso... e pensare che quella è la parte in cui ancora non subentra la programmazione concorrente!
Ultima modifica di Zoff il venerdì 17 ottobre 2008, 19:30, modificato 1 volta in totale.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Ikitt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1816
Iscrizione: mercoledì 24 ottobre 2007, 12:05

Re: Programmazione concorrente!

Messaggio da Ikitt »

Zoff ha scritto: Secondo me non è chiara come consegna... Non spiega come dividere il lavoro sui thread...
Credo sia volutamente ambiguo carente perche` proprio questo e` il punto dell'esercizio.
Ultima modifica di Ikitt il venerdì 17 ottobre 2008, 21:11, modificato 1 volta in totale.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: Programmazione concorrente!

Messaggio da Zoff »

Ikitt ha scritto:
Zoff ha scritto: Secondo me non è chiara come consegna... Non spiega come dividere il lavoro sui thread...
Credo sia volutamente ambiguo carente perche` proprio questo e` il punto dell'esercizio.
Imparare a decifrare gli errori di battitura e la grammatica italianese ???

No dai, un prof se da un esercizio deve dire cosa vuole... Così è troppo generico...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Ikitt
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1816
Iscrizione: mercoledì 24 ottobre 2007, 12:05

Re: Programmazione concorrente!

Messaggio da Ikitt »

Zoff ha scritto:
Ikitt ha scritto:
Zoff ha scritto: Secondo me non è chiara come consegna... Non spiega come dividere il lavoro sui thread...
Credo sia volutamente ambiguo carente perche` proprio questo e` il punto dell'esercizio.
Imparare a decifrare gli errori di battitura e la grammatica italianese ???

No dai, un prof se da un esercizio deve dire cosa vuole... Così è troppo generico...
Anche, purtroppo :D
Ma credo che il punto sia decidere come ripartire la computazione (quale parte, in quale modo).
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti