feat: add CUDA raytracing benchmark and refactor VoxRaytracer::RayData to use DataAllocator for host/device memory management.
This commit is contained in:
@@ -94,7 +94,8 @@ int main() {
|
||||
|
||||
Raytracer::RayData rdata =
|
||||
ray.TraceBetweenPoints(HPoint3f(-3, -3, -3), HPoint3f(3, 3, 3));
|
||||
for (const Raytracer::RayData::Element &el : rdata.Data()) {
|
||||
for (size_t i = 0; i < rdata.Count(); ++i) {
|
||||
const Raytracer::RayData::Element &el = rdata.Data()[i];
|
||||
std::cout << " " << el.vox_id << " , " << el.L << "\n";
|
||||
}
|
||||
}
|
||||
@@ -105,7 +106,7 @@ int main() {
|
||||
Raytracer rt(img);
|
||||
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1, pt2);
|
||||
TEST1(ray.Data().size() == 2);
|
||||
TEST1(ray.Count() == 2);
|
||||
TEST1(ray.Data().at(0).vox_id == 6);
|
||||
TEST1(ray.Data().at(1).vox_id == 7);
|
||||
ray.PrintSelf(std::cout);
|
||||
@@ -117,7 +118,7 @@ int main() {
|
||||
Raytracer rt(img);
|
||||
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1, pt2);
|
||||
TEST1(ray.Data().size() == 2);
|
||||
TEST1(ray.Count() == 2);
|
||||
TEST1(ray.Data().at(0).vox_id == 6);
|
||||
TEST1(ray.Data().at(1).vox_id == 4);
|
||||
ray.PrintSelf(std::cout);
|
||||
@@ -129,7 +130,7 @@ int main() {
|
||||
Raytracer rt(img);
|
||||
|
||||
Raytracer::RayData ray = rt.TraceBetweenPoints(pt1, pt2);
|
||||
TEST1(ray.Data().size() == 4);
|
||||
TEST1(ray.Count() == 4);
|
||||
TEST1(ray.Data().at(0).vox_id == 6);
|
||||
TEST1(ray.Data().at(1).vox_id == 4);
|
||||
TEST1(ray.Data().at(2).vox_id == 5);
|
||||
@@ -141,6 +142,46 @@ int main() {
|
||||
{
|
||||
std::cout << "\n--- Testing CUDA Raytracer Accumulator ---\n";
|
||||
|
||||
Raytracer rt(img);
|
||||
|
||||
{
|
||||
HPoint3f pt1(1, -0.5, 1);
|
||||
HPoint3f pt2(1, 4.5, 1);
|
||||
HPoint3f pts1[1] = {pt1};
|
||||
HPoint3f pts2[1] = {pt2};
|
||||
Raytracer::RayData ray_cuda[1];
|
||||
rt.TraceBetweenPointsCUDA(pts1, pts2, 1, ray_cuda);
|
||||
TEST1(ray_cuda[0].Count() == 2);
|
||||
TEST1(ray_cuda[0].Data().at(0).vox_id == 6);
|
||||
TEST1(ray_cuda[0].Data().at(1).vox_id == 7);
|
||||
}
|
||||
|
||||
{
|
||||
HPoint3f pt1(5, 1, 1);
|
||||
HPoint3f pt2(-3, 1, 1);
|
||||
HPoint3f pts1[1] = {pt1};
|
||||
HPoint3f pts2[1] = {pt2};
|
||||
Raytracer::RayData ray_cuda[1];
|
||||
rt.TraceBetweenPointsCUDA(pts1, pts2, 1, ray_cuda);
|
||||
TEST1(ray_cuda[0].Count() == 2);
|
||||
TEST1(ray_cuda[0].Data().at(0).vox_id == 6);
|
||||
TEST1(ray_cuda[0].Data().at(1).vox_id == 4);
|
||||
}
|
||||
|
||||
{
|
||||
HPoint3f pt1(1, 1, 1);
|
||||
HPoint3f pt2(-1, 3, -1);
|
||||
HPoint3f pts1[1] = {pt1};
|
||||
HPoint3f pts2[1] = {pt2};
|
||||
Raytracer::RayData ray_cuda[1];
|
||||
rt.TraceBetweenPointsCUDA(pts1, pts2, 1, ray_cuda);
|
||||
TEST1(ray_cuda[0].Count() == 4);
|
||||
TEST1(ray_cuda[0].Data().at(0).vox_id == 6);
|
||||
TEST1(ray_cuda[0].Data().at(1).vox_id == 4);
|
||||
TEST1(ray_cuda[0].Data().at(2).vox_id == 5);
|
||||
TEST1(ray_cuda[0].Data().at(3).vox_id == 1);
|
||||
}
|
||||
|
||||
VoxImage<TestVoxel> img_cuda(Vector3i(4, 4, 4));
|
||||
img_cuda.SetSpacing(Vector3f(2, 2, 2));
|
||||
img_cuda.SetPosition(Vector3f(-4, -4, -4));
|
||||
|
||||
Reference in New Issue
Block a user