Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-10-2019, 15: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 15:49.
PieceSpencer è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2019, 08:46   #2
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3279
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, 17: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


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Gli obbligazionisti di Oracle intentano ...
Amazon scatenata: robot aspirapolvere, s...
007 First Light, requisiti sbagliati: IO...
Il secondo leasing sociale francese ragg...
Anche Chrome diventerà un browser...
Huawei FreeClip 2 in arrivo in Italia: c...
Honda promette la roulotte del futuro, m...
Rincari non solo per gli utenti: Intel e...
Gemini può usare i tuoi dati priv...
OPPO lancia in Italia la serie Reno15: n...
Stazione Spaziale Internazionale: rientr...
Forza Horizon 6: spunta la possibile dat...
Oral-B iO: sconti pazzeschi su spazzolin...
Intel Core Ultra 200 Plus: l'azienda pro...
Thinking Machines: la startup di Mira Mu...
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: 14:44.


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