Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming
Pannello QD-OLED da 32 pollici con risoluzione 4K, frequenza di aggiornamento a 240Hz e tempi di risposta rapidissimi: il Gigabyte MO32U24 evolve il progetto del suo predecessore MO32U e alza ulteriormente l'asticella delle prestazioni. È ancora una volta un monitor indirizzato ai giocatori più esigenti
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
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: 3301
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


Gigabyte MO32U24 OLED: il 4K a 240Hz su un pannello OLED ideale per il gaming Gigabyte MO32U24 OLED: il 4K a 240Hz su un panne...
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Grazie a GLIMPSE-17775 il telescopio spa...
Samsung Galaxy A27 5G è ufficiale...
TCL aggiorna la sua gamma di monitor per...
Anche OPPO avrà uno smartphone co...
La Radeon RX 9070 XT appare su Steam e m...
L'America si ribella ai datacenter: bloc...
'Artificial General Engineer': l'IA di J...
Il drone NASA Dragonfly, che voler&agrav...
Stop immediato a Fable 5 e Mythos 5: il ...
"Prime Day Amazon il 23-26 giugno": sì e...
Oggi 2 super MacBook Pro M5 e M5 Pro, 24...
Tineco Floor One Station S9 Artist: il s...
Raggiunte nuove altitudine e velocit&agr...
Apple Watch Series 11 GPS a 339€ su Amaz...
Come un MacBook, ma con la RTX 5070: MSI...
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: 23:46.


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