Exemplo n.º 1
0
int hpx_main()
{
    typedef std::vector<std::size_t> vector_type;
    typedef std::vector<std::size_t>::iterator iterator_type;

    vector_type v1, v2;

    std::size_t count = 0;
    while (count < 2000)
    {
        v1.push_back(count);
        ++count;
    }

    iterator_type itr_b = v1.begin();
    iterator_type itr_e = v1.end();

    typedef boost::iterator_range<iterator_type> range_type;

    range_type my_range(itr_b, itr_e);

    v2.reserve(v1.size());
    iterator_type itr_o = v2.begin();
    (void)itr_o;

    std::size_t i = 0;
    for (std::size_t const& v : my_range)
    {
        hpx::async(hpx::util::protect(print_obj<std::size_t>()), v);
        ++i;
    }

    return hpx::finalize(); // Handles HPX shutdown
}
Exemplo n.º 2
0
int gather_array(void)
{
   if(get_GATHR()) return 0;   
   double buff[(MAXDIM+3)*DIR];
   
   for(int rank=1;rank<cpusize;rank++)
   {
   	 int iis, iit, jjs, jjt;   
     my_range(rank, iis, iit, jjs, jjt);
     int data_len = (jjt-jjs+1)*DIR;
     
     for(int i=iis;i<=iit;i++)
     {     	   
       	 if(myrank == rank)
       	 {
       	   int index=0;
       	   for(int j=jjs;j<=jjt;j++)
     	     for(int dir=0;dir<DIR;dir++)
     	     {
     	   	    buff[index] = Q[i][j][dir];
     	   	    index ++;
     	     }     	   
     	   
     	     MPI_Send(buff, data_len, MPI_DOUBLE, 0, i, MPI_COMM_WORLD);
     	   }
     	   	 
     	   
         if(myrank == 0)
         {
           	MPI_Status mpi_err;
            MPI_Recv(buff, data_len, MPI_DOUBLE, rank, i, MPI_COMM_WORLD, &mpi_err);
            //std::cout<<"Recieved data["<<i<<"] from CPU "<<rank<<std::endl;
            int index = 0;
            for(int j=jjs;j<=jjt;j++)
            for(int dir=0;dir<DIR;dir++)
       	    {
       	     	  Q[i][j][dir] = buff[index];
       	   	    index ++;
       	    }
   //    	    std::cout<<"Recieved Q["<<i<<"] from CPU["<<rank<<"]"<<std::endl;
         }
         
         MPI_Barrier(MPI_COMM_WORLD);
     	   
     }// loop i
   	
   }// loop rank
   
   set_GATHR();
   return 1;   
}
Exemplo n.º 3
0
void update_BC_node(void)
{
	const int row=2;
	double buff[MAXDIM*row*DIR];
	int data_len;
	
	for(int rank=0;rank<cpusize;rank++)
	{
		int iis, iit, jjs, jjt;   
        my_range(rank, iis, iit, jjs, jjt);
/*        
        if(iis==2)
     	{
     		data_len = (jjt-jjs+1)*DIR*row;
     		if(myrank==rank)  // setup buff for send
     		{
     		   int index = 0;
     		   for(int i=iis;i<=iis+row-1;i++)
     		   for(int j=jjs;j<=jjt;j++)
     		   for(int dir=0;dir<DIR;dir++)
			   {
     		      buff[index] = Q[i][j][dir];
     		      index ++;
     		   }
     		}
     		MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD);
     		//std::cout<<myrank<<" Complete broadcast of LEFT from "<<rank<<std::endl;
     		   int index = 0;
     		   for(int i=iis;i<=iis+row-1;i++)
     		   for(int j=jjs;j<=jjt;j++)
     		   for(int dir=0;dir<DIR;dir++)
     		   {
     		       Q[i][j][dir] = buff[index];
     		       index ++;
     		   }
     		
     	}
     	//MPI_Barrier(MPI_COMM_WORLD);
     	
     	
        if(iit==IDIM)
     	{
     		data_len = (jjt-jjs+1)*DIR*row;
     		if(myrank==rank)
     		{
     		   int index = 0;
     		   for(int i=iit-(row-1);i<=iit;i++)
     		   for(int j=jjs;j<=jjt;j++)
     		   for(int dir=0;dir<DIR;dir++)
			   {
     		      buff[index] = Q[i][j][dir];
     		      index ++;
     		   }
     		}
     		MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD);
     		//std::cout<<myrank<<" Complete broadcast of RIGHT from "<<rank<<std::endl;
     		   int index = 0;
     		   for(int i=iit-(row-1);i<=iit;i++)
     		   for(int j=jjs;j<=jjt;j++)
     		   for(int dir=0;dir<DIR;dir++)
     		   {
     		       Q[i][j][dir] = buff[index];
     		       index ++;
     		   }
     		
     	}     	
     	//MPI_Barrier(MPI_COMM_WORLD);
*/     	
        if(jjs==2)
     	{
     		data_len = (iit-iis+1)*DIR*row;
     		if(myrank==rank)
     		{
     		   int index = 0;
     		   for(int i=iis;i<=iit;i++)
     		   for(int j=jjs;j<=jjs+(row-1);j++)
     		   for(int dir=0;dir<DIR;dir++)
			   {
     		      buff[index] = Q[i][j][dir];
     		      index ++;
     		   }
     		}
     		MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD);
     		//std::cout<<myrank<<" Complete broadcast of BOTTOM from "<<rank<<std::endl;
     		   int index = 0;
     		   for(int i=iis;i<=iit;i++)
     		   for(int j=jjs;j<=jjs+(row-1);j++)
     		   for(int dir=0;dir<DIR;dir++)
     		   {
     		       Q[i][j][dir] = buff[index];
     		       index ++;
     		   }
     		
     	}
     	//MPI_Barrier(MPI_COMM_WORLD);

/*     	
        if(jjt==JDIM)
     	{
     		data_len = (iit-iis+1)*DIR*row;
     		if(myrank==rank)
     		{
     		   int index = 0;
     		   for(int i=iis;i<=iit;i++)
     		   for(int j=jjt-(row-1);j<jjt;j++)
     		   for(int dir=0;dir<DIR;dir++)
			   {
     		      buff[index] = Q[i][j][dir];
     		      index ++;
     		   }
     		}
     		MPI_Bcast( buff, data_len, MPI_DOUBLE, rank, MPI_COMM_WORLD);
     		//std::cout<<myrank<<" Complete broadcast of TOP from "<<rank<<std::endl;
     		   int index = 0;
     		   for(int i=iis;i<=iit;i++)
     		   for(int j=jjt-(row-1);j<jjt;j++)
     		   for(int dir=0;dir<DIR;dir++)
     		   {
     		       Q[i][j][dir] = buff[index];
     		       index ++;
     		   }
     		
     	}	
     	//MPI_Barrier(MPI_COMM_WORLD);	 
*/
	}
	
	
	
}