/* * Part of fractal-gen - Generate iteration-based fractals in PNM format * Copyright (c) 2016 David Phillips * All rights reserved * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include #include typedef void* (*generator_func)(void *); struct frame { double x; double y; double scale; }; typedef struct data_section_s { volatile unsigned long idx; generator_func generator; struct frame parent_frame; unsigned long core; struct timespec time_start; struct timespec time_end; unsigned long width; unsigned long datasize; char* data; pthread_t thread; } data_section; unsigned long threads; unsigned long clust_id; unsigned long clust_total; unsigned long size; unsigned long iterat; double power; double thread_mult; /* number to multiply available cores by to get thread count */ char *argv0; void defaultsd(double*, double); int parse_args(int argc, char **argv); generator_func select_generator(const char* name); void show_help(); #include "algorithms.h"