static void print_game_chips(FILE *out, const game_driver *game, const machine_config *config) { const device_config *device; /* iterate over CPUs */ for (device = cpu_first(config); device != NULL; device = cpu_next(device)) { fprintf(out, "\t\t<chip"); fprintf(out, " type=\"cpu\""); fprintf(out, " tag=\"%s\"", xml_normalize_string(device->tag)); fprintf(out, " name=\"%s\"", xml_normalize_string(device_get_name(device))); fprintf(out, " clock=\"%d\"", device->clock); fprintf(out, "/>\n"); } /* iterate over sound chips */ for (device = sound_first(config); device != NULL; device = sound_next(device)) { fprintf(out, "\t\t<chip"); fprintf(out, " type=\"audio\""); fprintf(out, " tag=\"%s\"", xml_normalize_string(device->tag)); fprintf(out, " name=\"%s\"", xml_normalize_string(device_get_name(device))); if (device->clock != 0) fprintf(out, " clock=\"%d\"", device->clock); fprintf(out, "/>\n"); } }
// CPU threads----------------------------------------------------------------- void run_cpu_threads(XYZ *in, XYZ *outp, int n_tasks, float alpha, int n_threads, int n_gpu_threads, int in_size_i, int in_size_j, int out_size_i, int out_size_j #ifdef CUDA_8_0 , std::atomic_int *worklist #endif ) { std::vector<std::thread> cpu_threads; for(int k = 0; k < n_threads; k++) { cpu_threads.push_back(std::thread([=]() { #ifdef CUDA_8_0 Partitioner p = partitioner_create(n_tasks, alpha, k, n_threads, worklist); #else Partitioner p = partitioner_create(n_tasks, alpha, k, n_threads); #endif const int wg_in_J = divceil(out_size_j, n_gpu_threads); const int wg_in_I = divceil(out_size_i, n_gpu_threads); for(int t = cpu_first(&p); cpu_more(&p); t = cpu_next(&p)) { const int my_s1 = t / wg_in_J; const int my_s0 = t % wg_in_J; int Row = my_s1 * n_gpu_threads; int Col = my_s0 * n_gpu_threads; T bi; T bj; T mui, muj; for(int i = Row; i < Row + n_gpu_threads; i++) { mui = i / (T)(out_size_i - 1); for(int j = Col; j < Col + n_gpu_threads; j++) { muj = j / (T)(out_size_j - 1); if(i < out_size_i && j < out_size_j) { XYZ out = {0, 0, 0}; #pragma unroll for(int ki = 0; ki <= in_size_i; ki++) { bi = BezierBlend(ki, mui, in_size_i); #pragma unroll for(int kj = 0; kj <= in_size_j; kj++) { bj = BezierBlend(kj, muj, in_size_j); out.x += (in[ki * (in_size_j + 1) + kj].x * bi * bj); out.y += (in[ki * (in_size_j + 1) + kj].y * bi * bj); out.z += (in[ki * (in_size_j + 1) + kj].z * bi * bj); } } outp[i * out_size_j + j] = out; } } } } })); } std::for_each(cpu_threads.begin(), cpu_threads.end(), [](std::thread &t) { t.join(); }); }