Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] AABBTree very slow performance when using openmp multithreading

Subject: CGAL users discussion list

List archive

[cgal-discuss] AABBTree very slow performance when using openmp multithreading


Chronological Thread 
  • 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



Archive powered by MHonArc 2.6.18.

Top of Page