Subject: CGAL users discussion list
List archive
- From: Rash <>
- To: "" <>
- Subject: [cgal-discuss] AABBTree very slow performance when using openmp multithreading
- Date: Wed, 4 Jul 2018 20:32:56 +0200
- Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=None ; spf=None
- Ironport-phdr: 9a23:YDbChR1sDHIf5iBGsmDT+DRfVm0co7zxezQtwd8Zse0XIvad9pjvdHbS+e9qxAeQG9mDtbQc06L/iOPJYSQ4+5GPsXQPItRndiQuroEopTEmG9OPEkbhLfTnPGQQFcVGU0J5rTngaRAGUMnxaEfPrXKs8DUcBgvwNRZvJuTyB4Xek9m72/q99pHPYghEniaxba9vJxiqsAvdsdUbj5F/Iagr0BvJpXVIe+VSxWx2IF+Yggjx6MSt8pN96ipco/0u+dJOXqX8ZKQ4UKdXDC86PGAv5c3krgfMQA2S7XYBSGoWkx5IAw/Y7BHmW5r6ryX3uvZh1CScIMb7S60/Vza/4KdxUBLmiDkJOSM6/m/ZhMN/g75Urh26qhxjwYPZep2ZOOZwc67fe94RWGpPXtxWVyxEGo6yc5EAD/EBPe1FqIT9vUEBrQC+BQmtGezi0TpIhn7y3aIgz+shFgTG0BY9EN0QqXnZqsj+OqQKUe2tz6TFzS/PY+5Y1Dvn9YTFfBQsreuRUb9zcsfd0VQjGgDGg1mKrYHoPimZ2vkOvmSF9eZsS/6jhm4hpgpsuDag3N0shZPMho8NylDL6yF5wIEtKNKlVUF3fNqpHZROuyyVLYd2QdktQ3pzuCkk0L0Gp4C0fDIQxJs7wB7fbuSLc4mO4h39SOacOTR1iXJ/dL6iiRu+61Wsx+P4W8WuzVpHrSlInsHJtn8X1hzT7saHSuF6/kekwTuPzRrc6vpEIUA1iKXWMJshwr80lpUJrUvDGSr2lF/rg6CIbkkk4PSn6/z7YrX6oZ+RL5N7ig7kPaQqg8CwHOU4MhMSUGiG4uS8z6bu/Vb5QbVPlv05iLPVsJHcJcQBp662GRVZ0og560X3MzDzmt8XlH1CIFNecw+clKDoPUvPKbb2F73311+jmTMuy/HdNaD6Gb3MKGLCmfHvZ+AuxVRbzV8JxMtfr8ZOA6oBIf7bX071vdffC1k1PlrnkK7cFNxh29ZGCiq0CaiDPfaK6A7a1qcUO+CJIbQtlnP4Ivkh6eTpiCZjy1oceaCi2p5RZH3qRq06cXXcWmLlh5I6KUlPphA3Fba4jVyGWDVUYjC+UvBkv2xpOMedFY7GA7uVrvmB0SO8RMYEamwfWwzWTTHrfp6fVu0SZTjUKchkwGQJ
It looks like that AABBTree is locked when an other thread is using it. When you are using a single tree per thread you get the full speed. I am using the CGAL::Simple_cartesian<double> Kernel.
Runtime 16 secs, independ of #pragma omp parallel for, only one core is used in system manager (ubuntu):
#pragma omp parallel for
for(size_t y = 0; y < number_of_ray_y; y++)
{
for(size_t x = 0; x < number_of_ray_x; x++)
{
Ray_intersection hit = tree.first_intersection(rays[this->transformCoordinates(y,x)]);
}
}
Runtime 4 secs 4 cores are used:
#pragma omp parallel
{
Tree localtree(faces(mesh).first, faces(mesh).second, mesh);
std::cout << "Start: " << omp_get_wtime() << std::endl;
size_t tid = omp_get_thread_num();
size_t number_of_threads = omp_get_num_procs();
for(size_t y = tid; y < number_of_ray_y; y=y+number_of_threads)
{
if(y >= number_of_ray_y)
{
break;
}
for(size_t x = 0; x < number_of_ray_x; x++)
{
Ray_intersection hit = localtree.first_intersection(rays[this->transformCoordinates(y,x)]);
}
}
}
This is very troubling, an acceleration structure can have a pretty huge memory footprint. Am I using something wrong?
typedef CGAL::AABB_face_graph_triangle_primitive<Polyhedron> Primitive;
typedef CGAL::AABB_traits<Kernel, Primitive> Traits;
typedef CGAL::AABB_tree<Traits> Tree;
Kind regards
Rashid
- [cgal-discuss] AABBTree very slow performance when using openmp multithreading, Rash, 07/04/2018
Archive powered by MHonArc 2.6.18.