int main(int argc, char *argv[]) { perf_parse_args(argc, argv); std::cout << "size: " << PERF_N << std::endl; ::cl::Device device = bolt::cl::control::getDefault().getDevice(); std::cout << "device: " << device.getInfo<CL_DEVICE_NAME>() << std::endl; // create host vector std::vector<int> h_vec = generate_random_vector<int>(PERF_N); // create device vector bolt::cl::device_vector<int> d_vec(PERF_N); perf_timer t; for(size_t trial = 0; trial < PERF_TRIALS; trial++){ // transfer data to the device bolt::cl::copy(h_vec.begin(), h_vec.end(), d_vec.begin()); t.start(); bolt::cl::sort(d_vec.begin(), d_vec.end()); t.stop(); } std::cout << "time: " << t.min_time() / 1e6 << " ms" << std::endl; // transfer data back to host bolt::cl::copy(d_vec.begin(), d_vec.end(), h_vec.begin()); return 0; }
double NonRigid::computeArap(VectorXf &p_vec, VectorXf &g_vec) { VectorXf d_vec(VectorXf::Map(d_cur.data(), d_cur.cols()*d_cur.rows())); g_vec = L*p_vec - d_vec; return (0.5*p_vec.transpose()*L*p_vec - d_vec.transpose()*p_vec)(0, 0); }
int main(int argc, char *argv[]) { perf_parse_args(argc, argv); std::cout << "size: " << PERF_N << std::endl; bolt::cl::control ctrl = bolt::cl::control::getDefault(); ::cl::Device device = ctrl.getDevice(); std::cout << "device: " << device.getInfo<CL_DEVICE_NAME>() << std::endl; // create device vector (filled with zeros) bolt::cl::device_vector<int> d_vec(PERF_N, 0); perf_timer t; for(size_t trial = 0; trial < PERF_TRIALS; trial++){ t.start(); bolt::cl::fill(d_vec.begin(), d_vec.end(), int(trial)); t.stop(); } std::cout << "time: " << t.min_time() / 1e6 << " ms" << std::endl; return 0; }
std::vector<Vector3 *> Scene::traceLine(Camera const *cam, Image const *img, int j) const { std::vector<Vector3 *> results(img->width()); Ray ray; HitInfo hitInfo; Vector3 shadeResult; std::vector<float> refr_stack; std::vector<Vector3> colors(m_samples); for (int i = 0; i < img->width(); ++i) { for (int k = 0; k < m_samples; ++k) { ray = cam->eyeRay(i + (m_samples == 1 ? 0.5f : randone(g_rng) - 0.5f), j + (m_samples == 1 ? 0.5f : randone(g_rng) - 0.5f), img->width(), img->height()); if (m_focus_length >= 0.f) // if depth of field enabled { Vector3 focal_point = ray.o + m_focus_length * ray.d; Vector3 view_dir = cam->viewDir(); Vector3 d_vec(randone(g_rng) - 0.5f, randone(g_rng) - 0.5f, randone(g_rng) - 0.5f); d_vec.normalize(); d_vec = view_dir.cross(d_vec); ray.o += d_vec * randone(g_rng) * m_lens; ray.d = focal_point - ray.o; ray.d.normalize(); } refr_stack.clear(); refr_stack.push_back(1.f); ray.refractionStack = &refr_stack; ray.refractionIndex = 0; if (!results[i]) results[i] = new Vector3(); if (trace(hitInfo, ray)) { colors[k] = hitInfo.material->shade(ray, hitInfo, *this); } else { colors[k] = bgColor(); } *results[i] += colors[k]; } if (m_cutoffs > 0) { std::vector<int> biggest(m_cutoffs, -1); for (int c = 0; c < m_cutoffs; ++c) { if (biggest[0] == -1 || colors[c].length2() > colors[biggest[0]].length2()) { biggest[0] = c; for (int k = 1; k < m_cutoffs; ++k) { if (biggest[k] == -1 || colors[biggest[k - 1]].length2() > colors[biggest[k]].length2()) std::swap(biggest[k - 1], biggest[k]); else break; } } } for (int k = 0; k < m_cutoffs; ++k) *results[i] -= colors[biggest[k]]; } if (results[i]) *results[i] /= m_samples - m_cutoffs; } return results; }