91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

本程序是mandelbrot集的在MPI下的并行實(shí)現(xiàn),試驗(yàn)中采用了動態(tài)調(diào)度的并行程序設(shè)計(jì)方法。

資源截圖

代碼片段和文件信息

#include?“mpi.h“
#include?
#include?

#define?MAX_DEPTH?256 //最大的迭代次數(shù)
#define?WIDTH?40//1024
#define?HIGHT?40//768
#define?N?(WIDTH)*(HIGHT)


//實(shí)際坐標(biāo)的范圍
float?left_x?=?-2.0;
float?left_y?=?-2.0;
float?right_x?=?2.0;
float?right_y?=?2.0;

struct?complex1{
float?real;
float?img;
};

int?cal(struct?complex1?c);
void?write_count(int?*countschar?*strint?wint?h);

int?main(int?argcchar?*argv[])
{
int?myrankmsgtag1=1msgtag2=2nproclocal_Nnrecv;
int?ijjy;
int?*counts?*local_count;
int?*isIdleipiproc;
float?dxdyxy;
MPI_Status?status;
struct?complex1?c;
MPI_Init(&argc&argv);
MPI_Comm_size(MPI_COMM_WORLD?&nproc);
MPI_Comm_rank(MPI_COMM_WORLD?&myrank);

isIdle=(int?*)malloc(nproc*sizeof(int));//空閑標(biāo)志



MPI_Bcast(&left_x?1?MPI_FLOAT?0?MPI_COMM_WORLD);
MPI_Bcast(&left_y?1?MPI_FLOAT?0?MPI_COMM_WORLD);
MPI_Bcast(&right_x?1?MPI_FLOAT?0?MPI_COMM_WORLD);
MPI_Bcast(&right_y?1?MPI_FLOAT?0?MPI_COMM_WORLD);

dx?=?(right_x?-?left_x)?/?WIDTH;
dy?=?(right_y?-?left_y)?/?HIGHT;

if(myrank==0)?
{
for?(i=0;i {
isIdle[i]=1;
}
j=0;
counts?=?(int?*)malloc(N?*?sizeof(int));
local_count?=?(int?*)malloc(WIDTH?*?sizeof(int));

for?(ip=1;ip {
if(isIdle[ip])
{
isIdle[ip]=0;
printf(“rank:%d send?j:%d?->?rank:%d....\n“myrankjip);
MPI_Send(&j1MPI_INTipjMPI_COMM_WORLD);
printf(“rank:%d send?j:%d?->?rank:%d....done\n“myrankjip);
j++;
}
}
nrecv=0;?
while(j {
nrecv=nrecv+1;
MPI_Recv(&jy1MPI_INTMPI_ANY_SOURCEMPI_ANY_TAGMPI_COMM_WORLD&status);
iproc=status.MPI_SOURCE;
printf(“rank:%d receive?jy:%d?<-?rank:%d\n“myrankjyiproc);
MPI_Recv(local_countWIDTHMPI_FLOATiprocjyMPI_COMM_WORLD&status);
printf(“rank:%d receive?local_count?<-?rank:%d nrecv:%d\n“myrankiprocnrecv);
for?(i=0;i {
counts[i+jy*WIDTH]=local_count[i];
}
isIdle[iproc]=1;?
ip=iproc;
MPI_Send(&j1MPI_INTipjMPI_COMM_WORLD);//分配任務(wù)
printf(“rank:%d send?j:%d?->?rank:%d\n“myrankjip);
isIdle[ip]=0;?
j++;
}

printf(“rank:%d now?j:%d nrecv:%d this\n“myranknrecvj);
for?(;nrecv {
MPI_Recv(&jy1MPI_INTMPI_ANY_SOURCEMPI_ANY_TAGMPI_COMM_WORLD&status);
iproc=status.MPI_SOURCE;
printf(“rank:%d receive?jy:%d?<-?rank:%d\n“myrankjyiproc);
MPI_Recv(local_countWIDTHMPI_FLOATiprocjyMPI_COMM_WORLD&status);
printf(“rank:%d receive?local_count?<-?rank:%d\n“myrankiproc);

評論

共有 條評論