コード例 #1
0
ファイル: image.cpp プロジェクト: leoyonn/image_classify
vector<float> GaussianKernel1D(float sigma) {

	assert (sigma > 0);

	int dim = (int) max(3.0f, 2 * GAUSSKERN * sigma + 1.0f);

	// make dim odd
	if (dim % 2 == 0)
		dim++;

	//printf("GaussianKernel1D(): Creating 1x%d vector for sigma=%.3f gaussian kernel\n", dim, sigma);

	vector<float> kern(dim);

	float s2 = sigma * sigma;

	int c = dim / 2;
  
	for (int i = 0; i < (dim + 1) / 2; i++) {
		float v = 1 / (2 * PI * s2) * exp(-(i*i) / (2 * s2));
		kern[c+i] = v;
		kern[c-i] = v;
		
	}
	
	normalizeVec(kern);
	
	//for (unsigned int i = 0; i < kern.size(); i++)
	//	printf("%f\n", kern[i]);

	return kern;
}
コード例 #2
0
ファイル: fit_quality.hpp プロジェクト: krivenko/som
 double operator()(configuration const& c) const {
  auto delta = (rhs - kern(c)) / error_bars;
  int M = first_dim(delta);
  double kappa = 0;
  for(int i = 1; i < M; ++i) kappa += corr(delta(i), delta(i-1));
  kappa /= M - 1;
  return kappa;
 }
コード例 #3
0
    void tune_impl(parameter_database& paras, std::string parent)
    {
      typedef typename VclBasicType::value_type::value_type   SCALARTYPE;

      // create dummy vectors; the kernels have to be created ..
      VclBasicType    dummy;

      // extract the kernels for which parameters are present
      std::string          kernel_str = parent+"/kernels/kernel/name/text()";
      pugi::xpath_node_set kernel_res = paras.doc.select_nodes(kernel_str.c_str());

      typedef std::vector<std::string>   kernels_type;
      kernels_type kernels;
      std::cout << "Retrieving kernels..." << std::endl;
      for (pugi::xpath_node_set::const_iterator it = kernel_res.begin(); it != kernel_res.end(); ++it)
      {
          std::stringstream ss;
          it->node().print(ss, "  ");
          std::string kern(ss.str());
          kern.erase(std::remove(kern.begin(), kern.end(), '\n'), kern.end()); //trim trailing linebreak
          kernels.push_back(kern);
      }

      // retrieve the actual parameters
      std::cout << "Retrieving actual parameters..." << std::endl;
      for(typename kernels_type::iterator iter = kernels.begin();
          iter != kernels.end(); iter++)
      {
          // retrieving the work group ..
          std::string          wg_str = parent+"/kernels/kernel[name='"+*iter+"']/params/param[name='"+val::globsize+"']/value/text()";
          pugi::xpath_node_set wg_res = paras.doc.select_nodes(wg_str.c_str());

          unsigned int global_size(0);

          std::stringstream ss;
          ss << wg_res[0].node().value();
          ss >> global_size;

          // retrieving the local_workers ..
          std::string          lw_str = parent+"/kernels/kernel[name='"+*iter+"']/params/param[name='"+val::locsize+"']/value/text()";
          pugi::xpath_node_set lw_res = paras.doc.select_nodes(lw_str.c_str());

          unsigned int local_workers(0);

          ss.clear();
          ss << lw_res[0].node().value();
          ss >> local_workers;

          //std::cout << "kernel: " << *iter << " wg: " << work_group << " lw: " << local_workers << std::endl;

          // set the parameters
          set_kernel_params<SCALARTYPE,1> (program_for_vcltype<VclBasicType>::get(), *iter, global_size, local_workers);
          //set_kernel_params<SCALARTYPE,4> (*iter, work_group * local_workers, local_workers);
          //set_kernel_params<SCALARTYPE,16>(*iter, work_group * local_workers, local_workers);
      }
    }
コード例 #4
0
void PartionedManualMPSimExecutor::simulate()
{
    try {

        PartionedMRTKernel kern("PartionedKern");
        TextTrace ttrace("run_log.txt");
        JSONTrace jtrace("run_trace.json");

        createSimCPUScheduler();
        createSimTaskCPU();
        createSimVMCPU();

        GUI_CONTEXT.addPeriodicTasks();
        GUI_CONTEXT.addVMs();

        addCPUs2Kernel(kern);
        addVMs2Kernel(kern, jtrace, ttrace);
        addTasks2Kernel(kern, jtrace, ttrace);

        SIMUL.run(_simulTime + 1);

    } catch (BaseExc &e) {

        GUI_CONTEXT.showMessageBox(e.what());
        GUI_CONTEXT.erasePeriodicTask();
        GUI_CONTEXT.erasePeriodicServerVM();

        cleanExecutionData();
        return;
    }

    showResult();

    GUI_CONTEXT.erasePeriodicTask();
    GUI_CONTEXT.erasePeriodicServerVM();
    cleanExecutionData();
}
コード例 #5
0
ファイル: Points.cpp プロジェクト: jbalma/string-transport
void Points::Rotate(char axis, int point_count, std::string title)
{
    int g=point_count;

    std::vector<int> index(g*g);
    std::vector<int> rindex(g*g);
    std::vector<int> It(g);
    std::vector<double> theta(g);
    std::vector<double> phi(g);
    std::vector<double> theta_rotated(g);
    std::vector<double> phi_rotated(g);



    std::vector<double> theta_index(g*g);
    std::vector<double> phi_index(g*g);
    Points::kernel_map.resize(g);
    Points::weight_map.resize(g);
    Points::fkernel_map.resize(g);
    Points::theta_prime.resize(g*g);
    Points:: phi_prime.resize(g*g);

    std::vector<std::vector<double> > kern(g);
    std::vector<std::vector<double> > fkern(g);
    std::vector<std::vector<double> > weight(g);
    std::vector<std::vector<double> > rkern(g);
    std::vector<std::vector<double> > rkern2(g);
    std::vector<std::vector<double> > rotated_kern(g);
    std::vector<double> r_weight(g*g);
    std::vector<std::vector<double> > rfkernel_value(g);

    std::vector<Vex> Original(g);
    std::vector<Vex> Rotated(g);
    Points::TtoZ.resize(g);

    theta=Points::Theta;
    phi=Points::Phi;






    if(axis=='X')
    {
        theta_rotated=Points::theta_rotatedX;
        phi_rotated=Points::phi_rotatedX;

    }
    else if(axis=='Y')
    {

        theta_rotated=Points::theta_rotatedY;
        phi_rotated=Points::phi_rotatedY;

    }
    else if(axis=='Z')
    {

        theta_rotated=Points::theta_rotatedZ;
        phi_rotated=Points::phi_rotatedZ;

    }
    else
    {

    }


    std::vector<int> i_it(g*g);
    std::vector<int> j_it(g*g);


      for(int i=0; i<g; i++)
    {

        Original[i].SphericaltoXYZ(theta[i],phi[i],1.0);
        Rotated[i].SphericaltoXYZ(theta_rotated[i], phi_rotated[i], 1.0);

       // std::cout <<"x, y, z =" << Original[i].GetX() << ", " << Original[i].GetY() << ", "<< Original[i].GetZ() << ", "<< std::endl;
    }


    for(int i=0; i<g; i++)
    {
        kern[i].resize(g);
        fkern[i].resize(g);
        weight[i].resize(g);

        rkern[i].resize(g);
        rkern2[i].resize(g);

        //std::cout << "original xyz = ("  << Original[i].GetX() << ", " << Original[i].GetY() << ", " << Original[i].GetZ() << ")" << std::endl;


    }



//------------ load unroated kernel matrix from file ------------------//


    std::cout <<axis+title << std::endl;
    std::ifstream kernel_read(title);
    kernel_read.precision(15);
    kernel_read.clear();                 // clear fail and eof bits
    kernel_read.seekg(0, std::ios::beg); // back to the start!

    int u=0;

    for(int i=0; i<g; i++)
    {
        kernel_map[i].resize(g);
        fkernel_map[i].resize(g);
        weight_map[i].resize(g);

        for(int j=0; j<g; j++)
        {
            //kernel_read >> theta_index[u] >> phi_index[u] >> kern[i][j] >> fkern[i][j] >> weight[i][j];
            kernel_read >> kern[i][j] >> fkern[i][j] >> weight[i][j];
            u++;
        }

    }

    kernel_read.close();


//--------------find index that matches rotation -----------------------//


    for(int i=0; i<g; i++)
    {
        for(int j=0; j<g; j++)
        {
            if(Original[i]==Rotated[j])
            {
                Points::TtoZ[i] = Rotated[j];
                It[i]=j;
            }
        }
    }





//-------------------use rotated index to map kernel ------------------------//

    for(int i=0; i<g; i++)
    {
        Points::theta_prime[i]=theta[ It[i] ];
        Points::phi_prime[i]=phi[ It[i] ];

        for(int j=0; j<g; j++)
        {
            Points::kernel_map[i][j]=kern[ It[i] ][ It[j] ];
            Points::fkernel_map[i][j]=fkern[ It[i] ][ It[j] ];
            Points::weight_map[i][j]=weight[ It[i] ][ It[j] ];

        }

    }




    std::cout << std::endl;
    std::cout << "Rotation Passed! " <<  std::endl;
    std::cout << std::endl;

}
コード例 #6
0
int main(int argc, char *argv[])
{
  Teuchos::oblackholestream blackhole;
  Teuchos::GlobalMPISession mpiSession(&argc,&argv,&blackhole);

  // 
  // Get the default communicator and node
  //
  auto &platform = Tpetra::DefaultPlatform::getDefaultPlatform();
  auto comm = platform.getComm();
  auto node = platform.getNode();
  const int myImageID = comm->getRank();
  const int numImages = comm->getSize();
  const bool verbose = (myImageID==0);

  // 
  // Say hello, print some communicator info
  //
  if (verbose) {
    std::cout << "\n" << Tpetra::version() << std::endl;
    std::cout << "Comm info: " << *comm;
    std::cout << "Node type: " << Teuchos::typeName(*node) << std::endl;
    std::cout << std::endl;
  }

  // 
  // Create a simple map for domain and range
  // 
  Tpetra::global_size_t numGlobalRows = 1000*numImages;
  auto map = Tpetra::createUniformContigMapWithNode<int,int>(numGlobalRows, comm, node);
  auto x = Tpetra::createVector<double>(map),
       y = Tpetra::createVector<double>(map);

  // Create a simple diagonal operator using lambda function
  auto fTwoOp = Tpetra::RTI::binaryOp<double>( [](double /*y*/, double x) { return 2.0 * x; } , map );
  // y = 3*fTwoOp*x + 2*y = 3*2*1 + 2*1 = 8
  x->putScalar(1.0);
  y->putScalar(1.0);
  fTwoOp->apply( *x, *y, Teuchos::NO_TRANS, 3.0, 2.0 );
  // check that y == eights
  double norm = y->norm1();
  if (verbose) {
    std::cout << "Tpetra::RTI::binaryOp" << std::endl
              << "norm(y) result == " << std::setprecision(2) << std::scientific << norm 
              << ", expected value is " << numGlobalRows * 8.0 << std::endl;
  }

  //
  // Create a finite-difference stencil using a Kokkos kernel and non-trivial maps
  //
  decltype(map) colmap;
  if (numImages > 1) {
    Teuchos::Array<int>           colElements;
    Teuchos::ArrayView<const int> rowElements = map->getNodeElementList();
    // This isn't the most efficient Map/Import layout, but it makes for a very straight-forward kernel
    if (myImageID != 0) colElements.push_back( map->getMinGlobalIndex() - 1 );
    colElements.insert(colElements.end(), rowElements.begin(), rowElements.end());
    if (myImageID != numImages-1) colElements.push_back( map->getMaxGlobalIndex() + 1 );
    colmap = Tpetra::createNonContigMapWithNode<int,int>(colElements(), comm, node);
  }
  else {
    colmap = map;
  }
  auto importer = createImport(map,colmap);
  // Finite-difference kernel = tridiag(-1, 2, -1)
  FDStencil<double> kern(myImageID, numImages, map->getNodeNumElements(), -1.0, 2.0, -1.0);
  auto FDStencilOp = Tpetra::RTI::kernelOp<double>( kern, map, map, importer );
  // x = ones(), FD(x) = [1 zeros() 1]
  FDStencilOp->apply( *x, *y );
  norm = y->norm1();
  if (verbose) {
    std::cout << std::endl
              << "TpetraExamples::FDStencil" << std::endl
              << "norm(y) result == " << std::setprecision(2) << std::scientific << norm 
              << ", expected value is " << 2.0 << std::endl;
  }

  std::cout << "\nEnd Result: TEST PASSED" << std::endl;
  return 0;
}