/* * Generic example of master/worker program. "Tasks" just consist of * sleeping for a specified time; times to wait are generatedly randomly * from 1 to a specified maximum. * * Command-line arguments: total tasks, maximum task time, * (optional) "--verbose" for verbose output * * Sequential version. */ /* ugly nonportable hack to make millisleep() function compile with c99 */ #define _POSIX_C_SOURCE 199309L #include #include #include #include "timer.h" #include "cmdline.h" #include "master-worker-functions.h" int main(int argc, char *argv[]) { int num_tasks; int max_task_time; int seed; double start_time, end_time; int task_time; int total_task_time = 0; bool verbose = false; char* usage_msg = "usage is %s num_tasks max_task_time seed [--verbose]\n"; num_tasks = get_integer_arg(argc, argv, 1, 1, "num_tasks", usage_msg); max_task_time = get_integer_arg(argc, argv, 2, 1, "max_task_time", usage_msg); seed = get_integer_arg(argc, argv, 3, 1, "seed", usage_msg); int required_parms = 4; if (argc > required_parms) { if (strcmp(argv[required_parms], "--verbose") == 0) verbose = true; else { fprintf(stderr, usage_msg, argv[0]); return EXIT_FAILURE; } } start_time = get_time(); random_in_range_setup(seed); for (int i = 0; i < num_tasks; ++i) { task_time = random_in_range(1, max_task_time); total_task_time += task_time; if (verbose) printf("task time = %d\n", task_time); millisleep(task_time); } end_time = get_time(); printf("\nsequential version\n"); printf("number of tasks = %d\n", num_tasks); printf("max task time = %d, seed %d\n", max_task_time, seed); printf("total task time = %d\n", total_task_time); printf("running time = %g\n", end_time - start_time); return EXIT_SUCCESS; }