Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-10-2019, 14:46   #1
PieceSpencer
Junior Member
 
Iscritto dal: Jun 2017
Messaggi: 14
[MPI/C] Problema con Recv e Send

Buonasera a tutti ragazzi, volevo chiedervi una cosa su questo programma che dovrei fare per l'universtita', ma purtroppo va in deadlock alla prima Recv.
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>


int main (int argc, char *argv[]){
	float *array_num,*array_sott;
	int i,j,start,n_fuori,z;
	char *ptr;
	int n=argc; //numero di reali immessi in input
	float resto,sum,sum_parz=0;
	int n_somme,numero_piu,num,menum,nproc,tag;
	MPI_Status info;
	
	MPI_Init(&argc,&argv);
	MPI_Comm_rank(MPI_COMM_WORLD,&menum);
	MPI_Comm_size(MPI_COMM_WORLD,&nproc);
	
	
   n_somme=n/nproc; //mi calcola il numero di somme da svolgere 
   
   
   resto=n%nproc;
   MPI_Bcast(&n_somme,1,MPI_INT,0,MPI_COMM_WORLD);
   
   if(resto > 0){ //significa che le somme sono di numero dispari (considerando ovviamente i processori di numero pari)
     numero_piu= (n-1)-(nproc * n_somme); //numero di somme in piu'
     MPI_Bcast(&numero_piu,1,MPI_INT,0,MPI_COMM_WORLD);
   } 
   if(menum==0) {
   	tag=10;
   	sum=(atof(argv[1]));
   	for(i=2;i<=n_somme;i++){
   	sum=sum+(atof(argv[i]));
   	
   	
     	}
     	
    array_num=malloc(n_somme+sizeof(float));
 
    for(j=0;j<n_somme;j++){
      array_num[j]=atof(argv[i]);
      i++;
     	
    } 	
    
     for(z=0;z<n_somme;z++){
      printf("\na[%d] vale %f\n",z,array_num[z]);
     	fflush(stdout);
    }
    
     	/*ptr=argv[i];
     	printf("%s",ptr);
     	printf("\n%p",ptr);
     	printf("\n%p\n",argv[i]);
     	printf("%c\n",(const char)(*ptr+sizeof(char)));*/
     	
     	
     	sum_parz=0;
     	//printf("\n%d\n",n_somme);
     	printf("\n il tag e'  %d\n",tag);
     	
     	MPI_Send(&array_num,n_somme,MPI_FLOAT,0,tag,MPI_COMM_WORLD);
     	
      //MPI_Send(&sum_parz,1,MPI_FLOAT,0,tag,MPI_COMM_WORLD);
      
      /*tag=tag+1;
      MPI_Recv(&sum_parz,1,MPI_FLOAT,1,tag,MPI_COMM_WORLD,&info);
      */
      
     	//sum=sum+sum_parz;
      //printf("\n 1 la somma e' %f\n",sum);
  
   }	
   else {
   	tag=10;
      printf("\n il tag e'  %d\n",tag);
      //printf("\n la somma e' %f\n",sum_parz);
      //printf("\n%d\n",n_somme);
      
     	MPI_Recv(&array_num,n_somme,MPI_FLOAT,0,tag,MPI_COMM_WORLD,&info);
     	
   	
   	printf("\n%d\n",n_somme);
      //MPI_Recv(&sum_parz,1,MPI_FLOAT,0,tag,MPI_COMM_WORLD,&info);
      //printf("\n la somma e' %f\n",sum_parz);
      
      sum_parz=0;
      //printf("\n la somma e' %f\n",sum_parz);
      sum_parz=array_num[0];
      //printf("\n la somma e' %f\n",sum_parz);
      for(j=1;j<=n_somme;j++) {
      	sum_parz=sum_parz+array_num[j];
      	printf("\n%f\n",sum_parz);
      }
      printf("\n 2 la somma e' %f\n",sum_parz);
      /*tag=tag+1;
      MPI_Send(&sum_parz,1,MPI_FLOAT,1,tag,MPI_COMM_WORLD);
     */
   }
	
	MPI_Finalize();
	
	return 0;
	
 }
In pratica alla prima Recv nell'else, mi va in deadlock e non capisco il perche'. Sono arrivato alla conclusione che sia qualcosa legato ad array_num e il suop numero di elementi (n_somme)
Ah dimenticavo....devo calcolare la somma dei primi n numeri reali .

Ultima modifica di PieceSpencer : 17-10-2019 alle 14:49.
PieceSpencer è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2019, 07:46   #2
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Quote:
Originariamente inviato da PieceSpencer Guarda i messaggi
Buonasera a tutti ragazzi, volevo chiedervi una cosa su questo programma che dovrei fare per l'universtita', ma purtroppo va in deadlock alla prima Recv.
[CODE
int n_somme,numero_piu,num,menum,nproc,tag;
MPI_Status info;

MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&menum);
MPI_Comm_size(MPI_COMM_WORLD,&nproc);
n_somme=n/nproc; //mi calcola il numero di somme da svolgere
[/code]

.
Purtroppo non conosco MPI quindi non saprei aiutarti, ma non mi torna questo punto
n_somme= n/nproc;
definisci n_somme come int ma la divisione potrebbe ritornarti anche un float.. è solo perchè ti serve la parte intera?
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 20-10-2019, 16:46   #3
melko
Member
 
L'Avatar di melko
 
Iscritto dal: Feb 2011
Messaggi: 46
non sono esperto di MPI ma:
Quote:
Originariamente inviato da PieceSpencer Guarda i messaggi
MPI_Send(&array_num,n_somme,MPI_FLOAT,0,tag,MPI_COMM_WORLD);
qui fai una send da rank 0 verso rank 0, mentre immagino quello che vorresti fare sia una send da rank 0 a tutti gli altri (che nel gergo di MPI sarebbe una Scatter).
Oltretutto occhio che ci potrebbero essere altre sviste, ad una rapida occhiata:
- sia nella send che nella recv passi l'indirizzo di array_num, che a sua volta è già un puntatore
- nella parte di ricezione array_num non è inizializzato
- argc conta sempre anche il comando usato per lanciare il programma (argv[0]), quindi il numero totale di reali immessi è argc-1
melko è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Le vendite di EV sono esplose in tutto i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v