int main() { int t, n; seive(MAX_NUM); scanf("%d", &t); while (t--){ scanf("%d", &n); printf("%d\n", euler_totient(n)); } return 0; }
int main(int argc, const char * argv[]) { static mach_timebase_info_data_t sTimebaseInfo; int seq = 0; int cpu = 0; // insert code here... int* data = (int*) malloc(sizeof(cl_int)*RANGE); for (int i = 0; i < RANGE; i ++) { data[i] = START + i; //printf("%d",data[i]); } int* out = (int*) malloc(sizeof(cl_int)*RANGE); printf("Hello, World!\n"); if (argc > 1){ if (strncmp(argv[1], "seq", 3) == 0) { seq = TRUE; } else if (strncmp(argv[1], "cpu", 3) == 0) { cpu = 1; } } uint64_t start = mach_absolute_time(); if (seq) euler_totient(data, out); else { dispatch_queue_t queue; if (cpu) queue = gcl_create_dispatch_queue(CL_DEVICE_TYPE_CPU, NULL); else queue = gcl_create_dispatch_queue(CL_DEVICE_TYPE_GPU, NULL); void *mem_in = gcl_malloc(sizeof(cl_int)*RANGE, data, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR); void *mem_out = gcl_malloc(sizeof(cl_int)*RANGE, NULL, CL_MEM_WRITE_ONLY); dispatch_sync(queue, ^{ size_t wgs; gcl_get_kernel_block_workgroup_info(euler_totient_kernel, CL_KERNEL_WORK_GROUP_SIZE, sizeof(wgs), &wgs, NULL); cl_ndrange range = { 1, {0, 0, 0}, {RANGE, 0, 0}, {wgs, 0, 0} }; euler_totient_kernel(&range,(cl_int*)mem_in, (cl_int*)mem_out); gcl_memcpy(out, mem_out, sizeof(cl_float) * RANGE); }); }