Пример #1
0
int
main(int argc, char ** argv)
{
  struct mandelbrot_param param;

  param.height = HEIGHT;
  param.width = WIDTH;
  param.lower_r = LOWER_R;
  param.upper_r = UPPER_R;
  param.lower_i = LOWER_I;
  param.upper_i = UPPER_I;
  param.maxiter = MAXITER;
  param.mandelbrot_color.red = (MANDELBROT_COLOR >> 16) & 255;
  param.mandelbrot_color.green = (MANDELBROT_COLOR >> 8) & 255;
  param.mandelbrot_color.blue = MANDELBROT_COLOR & 255;

  // Initializes the mandelbrot computation framework. Among other, spawns the threads in thread pool
  init_mandelbrot(&param);

#ifdef MEASURE
  struct mandelbrot_timing ** thread, global;
  GETTIME(&global.start);

  thread = compute_mandelbrot(param);

  GETTIME(&global.stop);
#elif GLUT == 1
  srand(time(NULL));
  gl_mandelbrot_init(argc, argv);
  gl_mandelbrot_start(&param);
#else
  compute_mandelbrot(param);
  ppm_save(param.picture, "mandelbrot.ppm");
#endif

#ifdef MEASURE
#if NB_THREADS > 0
  int i;

  for (i = 0; i < NB_THREADS; i++)
    {
      printf("%i %li %li %li %li %li %li %li %li\n", i + 1, thread[i]->start.tv_sec, thread[i]->start.tv_nsec, thread[i]->stop.tv_sec, thread[i]->stop.tv_nsec, global.start.tv_sec, global.start.tv_nsec, global.stop.tv_sec, global.stop.tv_nsec);
    }
#else
  printf("0 %li %li %li %li %li %li %li %li\n", thread[0]->start.tv_sec, thread[0]->start.tv_nsec, thread[0]->stop.tv_sec, thread[0]->stop.tv_nsec, global.start.tv_sec, global.start.tv_nsec, global.stop.tv_sec, global.stop.tv_nsec);
#endif
#endif

  // Final: deallocate structures
  destroy_mandelbrot(param);

  return EXIT_SUCCESS;
}
Пример #2
0
void
destroy_mandelbrot(struct mandelbrot_param param)
{
#if NB_THREADS > 0
	int i;

	// Initiate a stop order and resume threads in the thread pool
	thread_stop = 1;
	compute_mandelbrot(param);

	// Wait for the threads to finish
	for (i = 0; i < NB_THREADS; i++)
	{
#ifdef DEBUG
		assert(pthread_join(thread[i], NULL) == 0);
#else
		pthread_join(thread[i], NULL);
#endif
	}

	pthread_barrier_destroy(&thread_pool_barrier);

#else
	// Sequential version, nothing to destroy
#endif

#ifdef MEASURE
	free(timing);
#endif

	free(color);
	ppm_free(param.picture);
}
Пример #3
0
int main(int argc, char *argv[]){
    init(argc, argv);

    allocate_image_buffer();

    compute_mandelbrot();

    write_to_file();

    return 0;
};