标签:
杂谈 |
分类: 稚嫩痕迹 |
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "mpi.h"
#define TRUE 1
#define FALSE 0
int N,K;
int * AverageIndex;
double * Average;
double * AverageCopy;
double * AllData;
double ** Cluster;
int * ElementNum;
int ProcessNum;
int MyId;
int SourceId;
void CreateRandomArray(int n,int k,int * aveindex)
{
}
void AverageBackup()
{
}
void InitAverage()
{
}
void InitData()
{
}
int GetIndex(double value,double * ave)
{
int i=0;
//printf("value= %f
}
void UpdateAverage()
{
}
int EqualJudge(double * ave1,double * ave2)
{
}
void Print()
{
if(((j+1)%8)==0)
{
printf("\n");
}
}
int main(int argc,char *argv[])
{
int LocalStart;
int Flag=1;
int TemAveIndex;
int * TemArray;
int * TemArrayAdd;
int i=0;
MPI_Status Status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&MyId);
MPI_Comm_size(MPI_COMM_WORLD,&ProcessNum);
if(MyId==0)
{
InitData();
MPI_Bcast(&N,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
MPI_Bcast(&K,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
MPI_Bcast(AllData,N,MPI_DOUBLE,0,MPI_COMM_WORLD);
TemArrayAdd=(int *)malloc(sizeof(int)*(N-(N%ProcessNum)));
MPI_Barrier(MPI_COMM_WORLD);
}
else
{
//MPI_Barrier(MPI_COMM_WORLD);
MPI_Bcast(&K,1,MPI_DOUBLE,0,MPI_COMM_WORLD);
AllData=(double *)malloc(sizeof(double)*N);
Average=(double *)malloc(sizeof(double)*K);
MPI_Bcast(AllData,N,MPI_DOUBLE,0,MPI_COMM_WORLD);
MPI_Barrier(MPI_COMM_WORLD);
}
//printf("MYID is %d\n",MyId);
TemArray=(int *)malloc(sizeof(int)*(N/ProcessNum));
while(Flag)
{
if(MyId==0)
{
MPI_Barrier(MPI_COMM_WORLD);
MPI_Bcast(Average,K,MPI_DOUBLE,0,MPI_COMM_WORLD);
// for(i=0;i<K;i++) printf("%f ",Average[i]);
for(LocalStart=0;LocalStart<(N/ProcessNum);LocalStart++)
}
//for(i=0;i<N/ProcessNum;i++) printf("%d ",TemArrayAdd[i]);
for(i=1;i<ProcessNum;i++)
{
}
for(i=0;i<K;i++)
{
ElementNum[i]=0;
}
for(i=0;i<N-(N%ProcessNum);i++)
{
//printf("%d %d
Cluster[TemArrayAdd[i]][ElementNum[TemArrayAdd[i]]++]=AllData[i];
}
UpdateAverage();
//for(i=0;i<K;i++) printf("%f ",Average[i]);
if(EqualJudge(Average,AverageCopy))
{
Flag=0;
}
else
{
AverageBackup();
}
//printf("Flag = %d ",Flag);
}
else
{
MPI_Barrier(MPI_COMM_WORLD);
MPI_Bcast(Average,K,MPI_DOUBLE,0,MPI_COMM_WORLD);
i=0;
for(LocalStart=MyId*(N/ProcessNum);LocalStart<((MyId+1)*(N/ProcessNum));LocalStart++)
{
TemAveIndex=GetIndex(AllData[LocalStart],Average);
TemArray[i++]=TemAveIndex;
}
MPI_Send(TemArray,N/ProcessNum,MPI_INT,0,100,MPI_COMM_WORLD);
}
}
if(MyId==0)
{
Print();
}
MPI_Finalize();
//getchar();
return 0;
}

加载中…