Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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);
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
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;
}