====== Программирование с использованием MPI ======
#include
#include
#include
int main(int argc, char** argv) {
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d"
" out of %d processors\n",
processor_name, world_rank, world_size);
unsigned long int i;
double sum;
int sign;
srand(world_rank+1);
unsigned long int N = 10000000000;
unsigned long int N_CURRENT_PROC = N / world_size;
for (i=world_rank*N_CURRENT_PROC; i < (world_rank+1)*N_CURRENT_PROC; i++)
{
sign = rand();
if (sign > RAND_MAX/2)
sign = 1;
else
sign = -1;
sum += sign*rand();
}
printf("THREAD %d: %f\n",world_rank,sum);
// Finalize the MPI environment.
MPI_Finalize();
}
#include
#include
#include
#include
int main(int argc, char** argv) {
// Initialize the MPI environment
MPI_Init(NULL, NULL);
// Get the number of processes
int world_size;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// Get the rank of the process
int world_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Get the name of the processor
char processor_name[MPI_MAX_PROCESSOR_NAME];
int name_len;
MPI_Get_processor_name(processor_name, &name_len);
// Print off a hello world message
printf("Hello world from processor %s, rank %d"
" out of %d processors\n",
processor_name, world_rank, world_size);
srand(1);
struct sphere {
double x;
double y;
double z;
};
struct sphere spheres[1000];
unsigned long int i,j;
double x,y,r;
for (i=0; i<1000; i++)
{
spheres[i].x = (double)rand()/RAND_MAX;
spheres[i].y = (double)rand()/RAND_MAX;
spheres[i].z = (double)rand()/RAND_MAX;
}
// Sort spheres along Z coordinate
double sum;
int sign;
srand(world_rank+1);
unsigned long int N = 1000;
unsigned long int N_CURRENT_PROC = N / world_size;
double dobeg[N_CURRENT_PROC];
for (i=world_rank*N_CURRENT_PROC; i < (world_rank+1)*N_CURRENT_PROC; i++)
{
for (j=0;j<1000;j++)
{
x = (double)rand()/RAND_MAX;
y = (double)rand()/RAND_MAX;
r = sqrt(pow((x-spheres[j].x),2) + pow((y-spheres[j].y),2));
//printf("%f\n",r);
if (r < 0.1)
{
dobeg[i-world_rank*N_CURRENT_PROC] = spheres[j].z;
break;
}
else dobeg[i-world_rank*N_CURRENT_PROC] = 1;
//printf("%d\n",dobeg[i-world_rank*N_CURRENT_PROC]);
}
}
unsigned long int spectrum[100];
for (i=0;i<100;i++) spectrum[i] = 0;
for (i=0;i