| 
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -49,7 +49,7 @@ void array_destroy(long **arr) | 
															
														
														
													
														
															
																 | 
																 | 
																
 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																int main(int argc, char *argv[]) | 
																 | 
																 | 
																int main(int argc, char *argv[]) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																	long **A=NULL, **B=NULL, **C=NULL, *B_rot=NULL, *vect=NULL; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	long **A=NULL, **B=NULL, **C=NULL, *B_rot=NULL, *vect=NULL, *vect_c=NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																	long rozmiar=0; | 
																 | 
																 | 
																	long rozmiar=0; | 
															
														
														
													
														
															
																 | 
																 | 
																	char *endptr; | 
																 | 
																 | 
																	char *endptr; | 
															
														
														
													
														
															
																 | 
																 | 
																	TTiming tt; | 
																 | 
																 | 
																	TTiming tt; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																			
																		
																	
																	
																		
																			
																		
																	
																	
																 | 
																@ -91,8 +91,11 @@ int main(int argc, char *argv[]) | 
															
														
														
													
														
															
																 | 
																 | 
																		array_alloc(B, rozmiar); | 
																 | 
																 | 
																		array_alloc(B, rozmiar); | 
															
														
														
													
														
															
																 | 
																 | 
																		vect_alloc(B_rot, rozmiar*rozmiar); | 
																 | 
																 | 
																		vect_alloc(B_rot, rozmiar*rozmiar); | 
															
														
														
													
														
															
																 | 
																 | 
																	} | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	int porcja = (rozmiar*rozmiar)/ntasks + (rozmiar*rozmiar)%ntasks; | 
															
														
														
													
														
															
																 | 
																 | 
																	array_alloc(C, rozmiar); | 
																 | 
																 | 
																	array_alloc(C, rozmiar); | 
															
														
														
													
														
															
																 | 
																 | 
																	vect_alloc(vect, rozmiar); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	vect_alloc(vect, porcja); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	vect_alloc(vect_c, porcja); | 
															
														
														
													
														
															
																 | 
																 | 
																	if (taskid == 0) | 
																 | 
																 | 
																	if (taskid == 0) | 
															
														
														
													
														
															
																 | 
																 | 
																	{ | 
																 | 
																 | 
																	{ | 
															
														
														
													
														
															
																 | 
																 | 
																		//wypelnienie macierzy A liczbami "losowymi"
 | 
																 | 
																 | 
																		//wypelnienie macierzy A liczbami "losowymi"
 | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -113,10 +116,37 @@ int main(int argc, char *argv[]) | 
															
														
														
													
														
															
																 | 
																 | 
																	 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																	//wysyłanie macierzy A do wszystkich
 | 
																 | 
																 | 
																	//wysyłanie macierzy A do wszystkich
 | 
															
														
														
													
														
															
																 | 
																 | 
																	MPI::COMM_WORLD.Bcast(&A[0][0], rozmiar*rozmiar, MPI::LONG, 0); | 
																 | 
																 | 
																	MPI::COMM_WORLD.Bcast(&A[0][0], rozmiar*rozmiar, MPI::LONG, 0); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	if (taskid == 0) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		cout << endl << "WEKTOR DANYCH: " << endl; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		for (i=0; i<rozmiar*rozmiar; ++i) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																			cout << B_rot[i] << " "; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		cout << endl; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	MPI::COMM_WORLD.Barrier(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	//MPI::COMM_WORLD.Scatter(&B_rot[0], porcja, MPI::LONG, &vect[0], porcja, MPI::LONG, 0);
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// każdy proces ma policzyć łącznie "porcja" pól, 
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// dlatego dostaje wektory kolumn, w których leżą porcje
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	long pos, pocz, kon; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for (i=0; i<ntasks; ++i) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	{	 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		porcja = (i == ntasks - 1) ? rozmiar*rozmiar%porcja : porcja; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		pos = i*porcja; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		pocz = pos - (pos%rozmiar); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		kon = pos+porcja - ((pos+porcja)%rozmiar) - 1; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		MPI::COMM_WORLD.Isend(&B_rot[pocz], kon-pocz, MPI::LONG, i, 0); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	}  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// w przypadku gdy iloraz wielkości macierzy i ilości programów daje resztę
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// wszystkie porcje zostają zwiększone, a ostatnia porcja w ostatnim programie
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	// jest mniejsza - należy policzyć tą porcję zawczasu...
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																	 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																	MPI::COMM_WORLD.Scatter(&B_rot[0], rozmiar, MPI::LONG, &vect[0], rozmiar, MPI::LONG, 0); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																	  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	/*
 | 
																 | 
																 | 
																	/*
 | 
															
														
														
													
														
															
																 | 
																 | 
																	tt.Begin(); | 
																 | 
																 | 
																	tt.Begin(); | 
															
														
														
													
														
															
																 | 
																 | 
																	for (i=0; i<rozmiar; ++i)  | 
																 | 
																 | 
																	for (i=0; i<rozmiar; ++i)  | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																			
																		
																	
																 | 
																@ -137,8 +167,13 @@ int main(int argc, char *argv[]) | 
															
														
														
													
														
															
																 | 
																 | 
																	array_destroy(C); | 
																 | 
																 | 
																	array_destroy(C); | 
															
														
														
													
														
															
																 | 
																 | 
																	*/ | 
																 | 
																 | 
																	*/ | 
															
														
														
													
														
															
																 | 
																 | 
																	 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																	cout << taskid << ": " << vect[2] << endl; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																	MPI::Finalize(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	/*
 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	cout << taskid << ": " ; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	for (i=0; i<porcja; ++i) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																		cout << vect[i] << " "; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	cout << endl; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																	*/MPI::Finalize(); | 
															
														
														
													
														
															
																 | 
																 | 
																	 | 
																 | 
																 | 
																	 | 
															
														
														
													
														
															
																 | 
																 | 
																	exit(0); | 
																 | 
																 | 
																	exit(0); | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} |