コード例 #1
0
ファイル: B.c プロジェクト: jpbat/aed2011
int main(int argc, char **argv)
{
	int size, i;
	nodePtr* POIs;
	double start, stop;
	
	scanf("%d", &size);
	
	POIs = (nodePtr*) malloc (size*sizeof(nodePtr));

	aux = (nodePtr*) malloc(size * sizeof(nodePtr));
	
	for (i=0 ; i<size ; i++)
	{	
		POIs[i]= (nodePtr) malloc (sizeof(node));
		aux[i]=(nodePtr) malloc (sizeof(node));
		scanf("%d", &POIs[i]->lat.d);
		scanf("%d", &POIs[i]->lat.m);
		scanf("%d", &POIs[i]->lat.s);
		scanf("%d", &POIs[i]->lon.d);
		scanf("%d", &POIs[i]->lon.m);
		scanf("%d", &POIs[i]->lon.s);
		POIs[i]->la = toDouble(POIs[i]->lat);
		POIs[i]->lo = toDouble(POIs[i]->lon);
		POIs[i]->ind = i;
		scanf("%[^\n]",POIs[i]->text);
	}
	
	start = getCurrentTimeNano();
 	mergesort(POIs, size);
	stop = getCurrentTimeNano();
 	
 	/*
 	for (i = 0; i < size - 1; i++)
	{
		if ( compare(POIs[i],POIs[i+1]) == 0 )
		{
			if (POIs[i]->ind > POIs[i+1]->ind)
				POIs = rem(POIs, i, &size);
			else
				POIs = rem(POIs, i+1, &size);
			i--;
		}
	}
	*/
	for (i=0 ; i<size ; i++)
		/*print(POIs[i]), */free(POIs[i]);

	free(POIs);
	
	printTimeElapsed(start, stop, "Nanosegundos");
	
	return 0;
}
コード例 #2
0
ファイル: matmul.c プロジェクト: camieac/clabs
void timeDirectImplementation( int count, float* in_a, float* in_b, float *out)
{
  float sum;

  clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &start);
  for (int i = 0; i < count; i++) {
    for (int j = 0; j < count; j++) {
      sum = 0.0;
      for (int k = 0; k < count; k++) {
        sum += in_a[i*count+k] * in_b[k*count+j];
      }
      out[i*count+j] =sum;
    }
  }
  clock_gettime( CLOCK_PROCESS_CPUTIME_ID, &stop);
  printTimeElapsed( "kernel equivalent on host");
}
コード例 #3
0
// Required entry point
//------------------------------------------------------------------------------
int sample_main( int argc, const char** argv )
{
  
  // show console and redirect printing
  NVPWindow::sysVisibleConsole();

  const Config config( argc, argv ); 
  
  Timer timer;

  //
  // Load scene
  //
  std::cerr << "Load scene ...              "; std::cerr.flush();

  timer.start();

  bake::Scene scene;
  SceneMemory* scene_memory;
  float scene_bbox_min[] = {FLT_MAX, FLT_MAX, FLT_MAX};
  float scene_bbox_max[] = {-FLT_MAX, -FLT_MAX, -FLT_MAX};
  if (!load_scene( config.scene_filename.c_str(), scene, scene_bbox_min, scene_bbox_max, scene_memory, config.num_instances_per_mesh )) {
    std::cerr << "Failed to load scene, exiting" << std::endl;
    exit(-1);
  }

  printTimeElapsed( timer ); 

  // Print scene stats
  {
    std::cerr << "Loaded scene: " << config.scene_filename << std::endl;
    std::cerr << "\t" << scene.num_meshes << " meshes, " << scene.num_instances << " instances" << std::endl;
    size_t num_vertices = 0;
    size_t num_triangles = 0;
    for (size_t i = 0; i < scene.num_meshes; ++i) {
      num_vertices += scene.meshes[i].num_vertices;
      num_triangles += scene.meshes[i].num_triangles;
    }
    std::cerr << "\tuninstanced vertices: " << num_vertices << std::endl;
    std::cerr << "\tuninstanced triangles: " << num_triangles << std::endl;
  }

  // OptiX Prime requires all instances to have the same vertex stride
  for (size_t i = 1; i < scene.num_meshes; ++i) {
    if (scene.meshes[i].vertex_stride_bytes != scene.meshes[0].vertex_stride_bytes) {
      std::cerr << "Error: all meshes must have the same vertex stride.  Bailing.\n";
      exit(-1);
    }
  }


  //
  // Generate AO samples
  //

  std::cerr << "Minimum samples per face: " << config.min_samples_per_face << std::endl;

  std::cerr << "Generate sample points ... \n"; std::cerr.flush();

  timer.reset();
  timer.start();
  

  std::vector<size_t> num_samples_per_instance(scene.num_instances);
  const size_t total_samples = bake::distributeSamples( scene, config.min_samples_per_face, config.num_samples, &num_samples_per_instance[0] );

  bake::AOSamples ao_samples;
  allocate_ao_samples( ao_samples, total_samples );

  bake::sampleInstances( scene, &num_samples_per_instance[0], config.min_samples_per_face, ao_samples );
  
  printTimeElapsed( timer ); 

  std::cerr << "Total samples: " << total_samples << std::endl;
  {
    const int sqrt_num_rays = static_cast<int>( sqrtf( static_cast<float>( config.num_rays ) ) + .5f );
    std::cerr << "Rays per sample: " << sqrt_num_rays * sqrt_num_rays << std::endl;
    std::cerr << "Total rays: " << total_samples * sqrt_num_rays * sqrt_num_rays << std::endl;
  }

  //
  // Evaluate AO samples 
  //
  std::cerr << "Compute AO ...             "; std::cerr.flush();
  
  timer.reset();
  timer.start();

  std::vector<float> ao_values( total_samples );
  std::fill(ao_values.begin(), ao_values.end(), 0.0f);


  float scene_maxdistance;
  float scene_offset;
  {
    const float scene_scale = std::max(std::max(scene_bbox_max[0] - scene_bbox_min[0],
                                                scene_bbox_max[1] - scene_bbox_min[1]),
                                                scene_bbox_max[2] - scene_bbox_min[2]);
    scene_maxdistance = scene_scale * config.scene_maxdistance_scale;
    scene_offset = scene_scale * config.scene_offset_scale;
    if (config.scene_offset){
      scene_offset = config.scene_offset;
    }
    if (config.scene_maxdistance){
      scene_maxdistance = config.scene_maxdistance;
    }
  }

  if (config.use_ground_plane_blocker) {
    // Add blocker for ground plane (no surface samples)
    std::vector<bake::Mesh> blocker_meshes;
    std::vector<bake::Instance> blocker_instances;
    std::vector<float> plane_vertices;
    std::vector<unsigned int> plane_indices;
    make_ground_plane(scene_bbox_min, scene_bbox_max, config.ground_upaxis, config.ground_scale_factor, config.ground_offset_factor,
      scene.meshes[0].vertex_stride_bytes, 
      plane_vertices, plane_indices, blocker_meshes, blocker_instances);
    bake::Scene blockers = { &blocker_meshes[0], blocker_meshes.size(), &blocker_instances[0], blocker_instances.size() };
    bake::computeAOWithBlockers(scene, blockers,
      ao_samples, config.num_rays, scene_offset, scene_maxdistance, config.use_cpu, config.conserve_memory, &ao_values[0]);
  } else {
    bake::computeAO(scene, ao_samples, config.num_rays, scene_offset, scene_maxdistance, config.use_cpu, config.conserve_memory, &ao_values[0]);
  }
  printTimeElapsed( timer ); 

  std::cerr << "Map AO to vertices  ...    "; std::cerr.flush();

  timer.reset();
  timer.start();
  float** vertex_ao = new float*[ scene.num_instances ];
  for (size_t i = 0; i < scene.num_instances; ++i ) {
    vertex_ao[i] = new float[ scene.meshes[scene.instances[i].mesh_index].num_vertices ];
  }
  bake::mapAOToVertices( scene, &num_samples_per_instance[0], ao_samples, &ao_values[0], config.filter_mode, config.regularization_weight, vertex_ao );

  printTimeElapsed( timer ); 

  if (!config.output_filename.empty())
  {
    std::cerr << "Save vertex ao ...              "; std::cerr.flush();
    timer.reset();
    timer.start();
    bool saved = save_results(config.output_filename.c_str(), scene, vertex_ao);
    printTimeElapsed(timer);
    if (saved){
      std::cerr << "Saved vertex ao to: " << config.output_filename << std::endl;
    }
    else{
      std::cerr << "Failed to save vertex ao to: " << config.output_filename << std::endl;
    }    
  }

  if (config.use_viewer){
    //
    // Visualize results
    //
    std::cerr << "Launch viewer  ... \n" << std::endl;
    bake::view(scene.meshes, scene.num_meshes, scene.instances, scene.num_instances, vertex_ao, scene_bbox_min, scene_bbox_max);
  }

  for (size_t i = 0; i < scene.num_instances; ++i) {
    delete [] vertex_ao[i];
  }
  delete [] vertex_ao;

  destroy_ao_samples( ao_samples );

  delete scene_memory;
  
  return 1;
}