/*---------------------------------------------------------------------------*/ usys test_full (usys test_num, usys arg) { switch (test_num) { case 0: test_core () ; return GOOD ; case 1: test_speed (arg) ; return GOOD ; case 2: test_timers (arg) ; return GOOD ; case 3: test_msgs (arg) ; return GOOD ; case 4: test_tasks (arg) ; return GOOD ; default: break ; } return GOOD ; } /* End of function test_full() */
int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "usage: %1$s --tasks <pid>\n" " %1$s --processes [---name <name>] [--uid <uid>]\n", program_invocation_short_name); return EXIT_FAILURE; } if (strcmp(argv[1], "--tasks") == 0) return test_tasks(argc - 1, argv + 1); if (strcmp(argv[1], "--processes") == 0) return test_processes(argc - 1, argv + 1); return EXIT_FAILURE; }
void test_tasks(unsigned int size, int nr_tasks) { int i; pid_t pid; int status; CUresult res; CUdevice dev; CUcontext ctx; CUdeviceptr data_addr; CUmodule module; CUfunction function; unsigned int *in, *out; unsigned int n = size / 4; res = cuInit(0); if (res != CUDA_SUCCESS) { printf("cuInit failed: res = %u\n", res); exit(-1); } res = cuDeviceGet(&dev, 0); if (res != CUDA_SUCCESS) { printf("cuDeviceGet failed: res = %u\n", res); exit(-1); } res = cuCtxCreate(&ctx, 0, dev); if (res != CUDA_SUCCESS) { printf("cuCtxCreate failed: res = %u\n", res); exit(-1); } res = cuMemAlloc(&data_addr, size); if (res != CUDA_SUCCESS) { printf("cuMemAlloc failed: res = %u\n", res); exit(-1); } in = (unsigned int *) malloc(size); out = (unsigned int *) malloc(size); res = cuMemcpyHtoD(data_addr, in, size); if (res != CUDA_SUCCESS) { printf("cuMemcpyHtoD failed: res = %u\n", res); exit(-1); } #if 1 res = cuModuleLoad(&module, "./loop_gpu.cubin"); if (res != CUDA_SUCCESS) { printf("cuModuleLoad() failed\n"); exit(-1); } res = cuModuleGetFunction(&function, module, "_Z4loopPjjj"); if (res != CUDA_SUCCESS) { printf("cuModuleGetFunction() failed\n"); exit(-1); } void *param1[] = {&data_addr, &size, &n}; //res = cuLaunchKernel(function, 1, 1, 1, 1, 1, 1, 0, 0, (void**)param1, 0); if (res != CUDA_SUCCESS) { printf("cuLaunchKernel failed: res = %u\n", res); exit(-1); } //cuCtxSynchronize(); #endif if (--nr_tasks) { pid = fork(); if (pid == 0) { /* child */ test_tasks(size, nr_tasks); printf("Child finished\n"); exit(0); } else { /* parent */ waitpid(pid, &status, 0); } } #if 0 res = cuModuleLoad(&module, "./loop_gpu.cubin"); if (res != CUDA_SUCCESS) { printf("cuModuleLoad() failed\n"); exit(-1); } res = cuModuleGetFunction(&function, module, "_Z4loopPjjj"); if (res != CUDA_SUCCESS) { printf("cuModuleGetFunction() failed\n"); exit(-1); } void *param1[] = {&data_addr, &size, &n}; res = cuLaunchKernel(function, 1, 1, 1, 1, 1, 1, 0, 0, (void**)param1, 0); if (res != CUDA_SUCCESS) { printf("cuLaunchKernel failed: res = %u\n", res); exit(-1); } #endif res = cuMemcpyDtoH(out, data_addr, size); if (res != CUDA_SUCCESS) { printf("cuMemcpyDtoH failed: res = %u\n", res); exit(-1); } res = cuModuleUnload(module); if (res != CUDA_SUCCESS) { printf("cuModuleUnload failed: res = %lu\n", res); exit(-1); } res = cuMemFree(data_addr); if (res != CUDA_SUCCESS) { printf("cuMemFree failed: res = %u\n", res); exit(-1); } res = cuCtxDestroy(ctx); if (res != CUDA_SUCCESS) { printf("cuCtxDestroy failed: res = %u\n", (unsigned int)res); exit(-1); } free(in); free(out); }
int main(int argc, char *argv[]) { int i; pid_t pid; int status; unsigned int size = 0x10000000; /* 256MB */ int nr_tasks = 2; CUresult res; CUdevice dev; CUcontext ctx; CUdeviceptr data_addr; struct timeval tv_start, tv_end, tv; float makespan; if (argc > 1) sscanf(argv[1], "%x", &size); if (argc > 2) sscanf(argv[2], "%d", &nr_tasks); res = cuInit(0); if (res != CUDA_SUCCESS) { printf("cuInit failed: res = %u\n", res); exit(-1); } res = cuDeviceGet(&dev, 0); if (res != CUDA_SUCCESS) { printf("cuDeviceGet failed: res = %u\n", res); exit(-1); } res = cuCtxCreate(&ctx, 0, dev); if (res != CUDA_SUCCESS) { printf("cuCtxCreate failed: res = %u\n", res); exit(-1); } #if 0 /* alloc big memory at the beginning. */ res = cuMemAlloc(&data_addr, 0x20000000); /* 512MB */ if (res != CUDA_SUCCESS) { printf("cuMemAlloc failed: res = %u\n", res); exit(-1); } #endif gettimeofday(&tv_start, NULL); pid = fork(); if (pid == 0) { /* child */ test_tasks(size, nr_tasks); printf("Child finished\n"); exit(0); } else { /* parent */ waitpid(pid, &status, 0); } gettimeofday(&tv_end, NULL); tvsub(&tv_end, &tv_start, &tv); makespan = tv.tv_sec * 1000.0 + (float) tv.tv_usec / 1000.0; printf("Makespan: %f\n", makespan); res = cuMemFree(data_addr); if (res != CUDA_SUCCESS) { printf("cuMemFree failed: res = %u\n", (unsigned int)res); exit(-1); } #if 0 res = cuCtxDestroy(ctx); if (res != CUDA_SUCCESS) { printf("cuCtxDestroy failed: res = %u\n", (unsigned int)res); exit(-1); } #endif printf("Root parent finished\n"); return 0; }