/**************************************************************************** Message Handler: get_status(handle) -> status_res(handle, known, running, numerator, denominator) ****************************************************************************/ int msg_get_status(Client *cli, unsigned char *arg, int arg_len) { char *handle = (char*)arg; if (arg_len > MAX_HANDLE_LEN) { g_warning("[%s] Invalid handle length received: %d", cli->id, arg_len); return -1; } #if DEBUG g_debug("[%s] get_status(%s)", cli->id, handle); #endif char *known = "0"; char *running = "0"; int numerator = -1; int denominator = -1; Job *job = g_hash_table_lookup(g_jobs, handle); if (job) { known = "1"; if (job->worker) running = "1"; numerator = job->status[0]; denominator = job->status[1]; } MemBlock *block = new_response(MSG_STATUS_RES, 256, NULL); char *p = (char*)block->bytes + HEADER_SIZE; p += sprintf(p, handle) + 1; p += sprintf(p, known) + 1; p += sprintf(p, running) + 1; if (numerator >= 0) { p += sprintf(p, "%d", numerator) + 1; p += sprintf(p, "%d", denominator); } else { *(p++) = 0; } block->nbytes = (unsigned char*)p - block->bytes; set_message_size(block, block->nbytes - HEADER_SIZE); client_send(cli, block); return 0; }
enum po_ret_type process_options (int argc, char *argv[]) { extern char * optarg; extern int optind, optopt; char const * optstring = "+:hvfm:i:x:M:t:s:"; int c; if (accel_enabled) { optstring = (CUDA_KERNEL_ENABLED) ? "+:d:hvfm:i:x:M:t:r:s:" : "+:d:hvfm:i:x:M:t:s:"; } /* * SET DEFAULT OPTIONS */ options.accel = none; options.show_size = 1; options.show_full = 0; options.num_probes = 0; options.device_array_size = 32; options.target = cpu; options.min_message_size = DEFAULT_MIN_MESSAGE_SIZE; options.max_message_size = DEFAULT_MAX_MESSAGE_SIZE; options.max_mem_limit = MAX_MEM_LIMIT; options.iterations = 1000; options.iterations_large = 100; options.skip = 200; options.skip_large = 10; while ((c = getopt(argc, argv, optstring)) != -1) { bad_usage.opt = c; bad_usage.optarg = NULL; bad_usage.message = NULL; switch (c) { case 'h': return po_help_message; case 'v': return po_version_message; case 'm': if (set_message_size(optarg)) { bad_usage.message = "Invalid Message Size"; bad_usage.optarg = optarg; return po_bad_usage; } break; case 't': if (set_num_probes(atoi(optarg))){ bad_usage.message = "Invalid Number of Probes"; bad_usage.optarg = optarg; return po_bad_usage; } break; case 'i': if (set_num_iterations(atoi(optarg))) { bad_usage.message = "Invalid Number of Iterations"; bad_usage.optarg = optarg; return po_bad_usage; } break; case 'x': if (set_num_warmup(atoi(optarg))) { bad_usage.message = "Invalid Number of Warmup Iterations"; bad_usage.optarg = optarg; return po_bad_usage; } break; case 's': if (set_device_array_size(atoi(optarg))){ bad_usage.message = "Invalid Device Array Size"; bad_usage.optarg = optarg; return po_bad_usage; } break; case 'f': options.show_full = 1; break; case 'M': /* * This function does not error but prints a warning message if * the value is too low. */ set_max_memlimit(atoll(optarg)); break; case 'd': if (!accel_enabled) { bad_usage.message = "Benchmark Does Not Support " "Accelerator Transfers"; bad_usage.optarg = optarg; return po_bad_usage; } else if (0 == strncasecmp(optarg, "cuda", 10)) { if (CUDA_ENABLED) { options.accel = cuda; } else { bad_usage.message = "CUDA Support Not Enabled\n" "Please recompile benchmark with CUDA support"; bad_usage.optarg = optarg; return po_bad_usage; } } else if (0 == strncasecmp(optarg, "managed", 10)) { if (CUDA_ENABLED) { options.accel = managed; } else { bad_usage.message = "CUDA Managed Memory Support Not Enabled\n" "Please recompile benchmark with CUDA support"; bad_usage.optarg = optarg; return po_bad_usage; } } else if (0 == strncasecmp(optarg, "openacc", 10)) { if (OPENACC_ENABLED) { options.accel = openacc; } else { bad_usage.message = "OpenACC Support Not Enabled\n" "Please recompile benchmark with OpenACC support"; bad_usage.optarg = optarg; return po_bad_usage; } } else { bad_usage.message = "Invalid Accel Type Specified"; bad_usage.optarg = optarg; return po_bad_usage; } break; case 'r': if (CUDA_KERNEL_ENABLED) { if (0 == strncasecmp(optarg, "cpu", 10)) { options.target = cpu; } else if (0 == strncasecmp(optarg, "gpu", 10)) { options.target = gpu; } else if (0 == strncasecmp(optarg, "both", 10)) { options.target = both; } else { bad_usage.message = "Please use cpu, gpu, or both"; bad_usage.optarg = optarg; return po_bad_usage; } } else { bad_usage.message = "CUDA Kernel Support Not Enabled\n" "Please recompile benchmark with CUDA Kernel support"; bad_usage.optarg = optarg; return po_bad_usage; } break; case ':': bad_usage.message = "Option Missing Required Argument"; bad_usage.opt = optopt; return po_bad_usage; default: bad_usage.message = "Invalid Option"; bad_usage.opt = optopt; return po_bad_usage; } } return po_okay; }