Skip to Content.
Sympa Menu

cgal-discuss - [cgal-discuss] Speeding Up Arrangement Insertion

Subject: CGAL users discussion list

List archive

[cgal-discuss] Speeding Up Arrangement Insertion


Chronological Thread 
  • From: Bruno Silva <>
  • To: "" <>
  • Subject: [cgal-discuss] Speeding Up Arrangement Insertion
  • Date: Fri, 5 Nov 2021 11:20:43 +0000
  • Accept-language: pt-BR, en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=EwN6tNkwTcYuHBR2c33/n9cm5lhHI9ccSAzhS4pOooQ=; b=jvZOxvYFz9ka03nPaIILiy+dctxb2fOuMUtfxuCmJsuUnjS4g+/c6RyrdnRfn9tpNW4VygRMEpKfvJlG1R4Mhtl7BIMsx5qMhMZe1CojEGxSWPKEdK3bm3oJDP1XRIONFn/3JmQCfP6BpfnTvSe0GDtmBfc2m5N4MVEmSQvUf2dYEHB1YSEE4AXWAJos74vCLcU9xbjwsVqnAtYF6QTYA8kSyhKa4Z/mW7JD1lrTskO6bLZXR2xZWOhQn96262pmR8sf+TS9J9aOiu3ulwTK0FlpiWZ4ZXMQ+OmB+gI02BsURKrSj5/JERq8QE+qX2xsoTrkbWuJtOjoMElFWDeJgQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nqj7bRVhEi5xCLYenb/EC6T01whj8VVKMDMz17rS8Qu48SBn6Qu9x/NlkRTVS3WYmYyrxVh71OjOuZSQC79tVyvdylsWubGOcvB7r/LhCn6IYKEkY3OdYhHKEK7OOzGC93OZdrn23C9hBN4ZpATk9oTwqUmDWLZvjABJvahFF9kWuxhgu0Ef7vzbrHQbEwAiK7u+dRGa9v2xBwZTFxHLe1pN9W1DEf/qUIeS1hbUZIStQDM7BOdmKjYseJ5PIlQBW1NOXMA2Q3zdCGHDFtcgZtD5LBa6B2UgXAYwtzmrwf5XtDQX5V1m+uJrXSxAagKR/ogyPEXDRTrCn+Yrg3W/ww==
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=Pass
  • Ironport-data: A9a23:FcoGpa+GXNCE9kxp7OjqDrUDRn+TJUtcMsCJ2f8bfWQNrUoi1T1Rz2AYUT+COfaMajegeNknYIzio0xXsZXXxt9gTHM5pCpnJ55ogZqcVI7Bdi8cHAvLc5adFBo/hykmh2ipwPkcFhcwnT/wdOi+xZVA/fvQHOOlUbaZYnoZqTJMEU/Ntzozw4bVvaYz2bBVMyvV0T/Di5W31G2Ng1aYAUpIg063ky6Didyp0N8uUvPSUtgQ1LPWvyF94JvyvshdJVOgKmVfNrbSq+ouUNiEEm3lExcFUrtJk57dW2hTGPv3AlLLjXBbHa+/nhJFuyo+lL4hM+YRYltWjDPPmM1tzNJKttq7TgJB0q/kxLxbAkMeSXo4YvUuFLzveRBTteSZ1VDAdEz2yvBrC0dwM4kR0uZwHWRH9PheIzcIBvyGr7jvnuzrELAEasMLd5CwZ9x3Vmtb5TrWBPJjTZHYSLjR/vdDzTIoj4ZPG+zfbowXc1JSgL7od0UaYRFKHMtrxKHwkiOqK3sC9QzLsfFiuy6O2FMk+abLG9/zVtyuZMxzoly+mGPj6z2hV0lebMj3JSGt93utgqrKgnn9UYdLTrq89fgw2ALLgGsOFBcRSF235+GjjVKzUM5eLEpS/Tcyqa819wqgSdyVYvFxm1bc1jZ0ZjaaO7dSBMCxJqvoD8KxIEEhF2QETeN88cg8SHoty0ODmM7vCXp3qrqJRHmB97CS6zSvJSwSKmxEbigBJefAy8e2u5k913ojUf46eJNZTPWscd0z/9xOhCg5m7AajMpN3KK+lbwCqyz5vYDHF2bZ+S2ONl9ILWpFiEqNZ4u07FHa6bBLK4Pxopyp1JQbs5D20d3ixq1hWMBArCvh0V1pCzu43OXgvGNS
  • Ironport-hdrordr: A9a23:K2VcVaExbWcUIzg0pLqFVJHXdLJyesId70hD6qkvc3Bom52j+vxGws5w6fatskdoZJhSo6H6BEDgewKWyXcb2/h0AV7PZmjbUS6TXfhfBOjZsnfd8k/Fh4lgPM5bGsAUZ7PN5BpB/KDHCWGDYpIdKbK8gcOVbJLlvhJQpHZRGsNdBmlCajqzIwlTfk1rFJA5HJ2T6o5svDy7Y0kaacy9Gz0sQ/XDj8ejruOqXTc2QzocrCWehzKh77D3VzKC2A0Fbj9JybA+tUDYjg3C4Lm5uf3T8G6R64aT1eUYpDLS8KoDOCW+sLlUFtwqsHfqWG1VYczNgNnympDs1L9lqqiIn/5qBbUI15qYRBDJnfKq4Xim7B8er0XJ7Daj8D3eSIXCNU4HItsEioRDfhTD7U08+Nl6zaJQxmqc84FaFBXagU3Glq71vjxR5z6JSEAZ4JkuZr1kIPsjQa4UqZZa8FJeEZ8GEi6/4Ic7EPN2BMWZ4PpNa1uVY33Qo2EqmbWXLzwONwbDRlJHtt2e0jBQknw8x0wExNYHlnNF8J4mUZFL6+nNL6wtnrBTSc0da757GY46MIKKI32IRQiJPHOZIFzhGq1CM3XRq4Tv6LFw/+2ucIxg9upGpH0AaiIriYcfQTORNSS+5uw5zvmWehTDYd3E8LAu26RE
  • Ironport-phdr: A9a23:IsUr1RHTz3b3AKGIvDy9mJ1Gf29LhN3EVzX9CrIZgr5DOp6u447ldBSGo6k31RmRAM6CsasMy7KP9fy6ASpYudfJmUtBWaQEbwUCh8QSkl5oK+++Imq/EsTXaTcnFt9JTl5v8iLzG0FUHMHjew+a+SXqvnYdFRrlKAV6OPn+FJLMgMSrzeCy/IDYbxlViDanbr5+Mgi6oR/NusQWjoduN7g9xgbUqXdMZ+ha2HlkKF2Nkxrg/Mu84IJv/yFNsP896sBMVrn3cb4lRrJCFjQmNG415MzvtRbdSAaE+2URXGYLnBdWGgbJ9B71UIv/vSv8rep9xTKVPdbqQrAuWDSt9LlkRRn1gyoaLTE58WXXisttjKJHpR+quhJyz5LIbIyTKfFzeL7Wc9EHSmpbRstfVzJPDJ6gb4UBDOQOIelXopLnqFcSsRezHxWgCP/yxjJOm3T43bc60+MkEQzewQEgBc8OsHLTrN7oKakSUOS1zLfSwj7eaP5Zwi396JXOchAmuf6MR6h/cc/UyUkoEQPJlFuQqYj/MD6O1uQNtHSb7+96WuKuj24rsR1+oj+qxso1jITCm40axEze+ypj3IY1OcO3SFR9YdO8H5ZcqyGUOop4TM4sXW1lvCk3x6MatJOmYCQHyogqygDdZvGEcoWF7Q/vWPifLzp2hn9odr2xiwq8/EWg1uHxSs+520tJoCpditTBuWwB2wbX58SZUPdx4Ems1SyN2gzP8u1IP0E5mbbVJpMk37I8ioEcvEXGEyL5nUj5lrWZe0Ah9+S19ujqZKjtqIWGOI9ukA7+N7wjmsyhDuQ8NQgDR3CV9Pi72rH+40H1WbJEgf0onqXAt5DVPtoUqrS+Aw9IzoYs8BG/Dyqg0NsFh3UHNEhFeBWbj4f3J17OPPH4DfC5g1i2lzdr2uzGPrnmApXKLXjPiqvufbF460JEyQozy85Q545MB7wOPP7/QEv8uMLCAhMnPQG42eTqBMll2oMbQ22PA6uZMK3IsV+P4+IiO/KDZJUIuDb7LPgq/+TugmU8mV8Yeqmp24EbaH68Hvt8OEiZYX3sgssEEWgQvwo+SPbmh0GFUT5Wf3qyRb4z5iknCIK6CofOXpyigLOb0ye/B5FZe2FGCkuQHnf1bIWEQOwBaDmSI89kijwLT6KtS44n1RG0tQ/10aBrLuTO+n5QiZW2ntN67umWmRAp/iFvFOyc1XuMRid6hClAEzQ51aQ6rU1mwUqYyoB5heZZHJpd/aUafB09MMv21fF8DJjJWwbfd5/dQky7RNKRGzg0S9U3hdEKam59HMmnhxHHmSGtBulGxPSwGJUo//eEjDDKLMFnxiOevEHAp38PZ5IVcEiZ3Ot4/QWVAJPVmUKEkarsbb4bwCPG6GaEyyyJoV1cVwlzF67CWCJGDqM5hdT++kbLTrvoArMiYFIpISuqKqxWb9ToiRNNQ/KxYLzj
  • Suggested_attachment_session_id: fcfc3671-c58e-f041-1988-004313cf9adf

Hi everyone,

I'm having a problem with efficiency when computing arrangements by CGAL. Thus, I would like to know whether there's any way to improve the efficiency of this.

The code is:
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Arr_naive_point_location.h>
#include <CGAL/Arr_non_caching_segment_basic_traits_2.h>
#include <CGAL/Segment_2.h>
#include <CGAL/Arr_segment_traits_2.h>
#include <CGAL/Arrangement_2.h>
#include <CGAL/Delaunay_triangulation_2.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>


typedef CGAL::Exact_predicates_exact_constructions_kernel                       K1;
typedef CGAL::Arr_segment_traits_2<K1>                                          Traits_2;
typedef CGAL::Arrangement_2<Traits_2>                                           Arrangement_2;
typedef CGAL::Delaunay_triangulation_2<K1>                                      Delaunay2;
typedef CGAL::Constrained_Delaunay_triangulation_2<K1, CGAL::Default, Itag>     CDT2;
typedef Traits_2::Point_2                                                       Point_2;
typedef Traits_2::X_monotone_curve_2                                            Segment_2;
typedef CGAL::Arr_naive_point_location<Arrangement_2>                           WalkPL_2;

int main()
{
    ExternalDataSet datas("data1.txt","data2.txt");


    std::chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();

    std::vector<Segment_2> segmentSet1 = datas.externalData(0);
    CGAL::insert_non_intersecting_curves(arr, segmentSet1.begin(), segmentSet1.end());
    segmentSet1.clear();std::chrono::steady_clock::time_point
   
    end = std::chrono::steady_clock::now();
    if (verbose) std::cout << "Time spent - First Insertion: " << std::setprecision(6) <<          std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count()/1.0e+6 << std::fixed << " sec." << std::endl;
   
    // Insertion of the second set of segments
    begin = std::chrono::steady_clock::now();

    std::vector<Segment_2> segmentSet2 = datas.externalData(1);
    // #pragma omp parallel for //Parllellization is not working!!
    for(auto seg = segments1.begin(); seg < segments1.end(); ++seg)
    {
        CGAL::insert(arr, *seg, walkPL);
    }
    segmentSet2.clear();
   
    end = std::chrono::steady_clock::now();
    if (verbose) std::cout << "Time spent - Second Insertion: " << std::setprecision(6) << std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count()/1.0e+6 << std::fixed << " sec." << std::endl;  
   
    // Section 2 - It is using the constrained Delaunay package to triangulate the arrangement vertices and constrained edges
    begin = std::chrono::steady_clock::now();


    for (auto it = arr.edges_begin(); it != arr.edges_end(); ++it) {
        CDT.insert(it->source()->point(), it->target()->point());
    }
    end = std::chrono::steady_clock::now();
    if (verbose) std::cout << "Time spent - Creation of the Constrained Delaunay Triangulation: " << std::setprecision(6) << std::chrono::duration_cast<std::chrono::microseconds>(end - begin).count()/1.0e+6 << std::fixed << " sec." << std::endl;  
}


I have two distinct sets of segments (std::vector<Segment_2> segmentSet1 and std::vector<Segment_2> segmentSet2 ) that comes up from external data. The segments in segmentSet1 don't intersect with others segments in this set. This is also true for the segments in segmentSet2. However, the segments in segmentSet1 certainly intersects with the segments in segmentSet2.

I insert the first set of segments by the function CGAL::insert_non_intersecting_curves(arr, segmentSet1.begin(), segmentSet1.end()). The insertions of the second set of segments are performed by the function CGAL::insert(arr, *seg, walkPL). The efficiency first intersection is pretty good, but the second one is very inefficient. After these insertions, a Constrained Delaunay Triangulation is created.

I would like to know whether there is a way to improve the efficiency of this second insection. I've tried without success to perform a parallelization of the loop in the second insertion.

Is there any way to parallelize this for-loop for the second insertion? Or should I try another approach to improve the overall efficiency?

-------

Best, 

Bruno Souza




Archive powered by MHonArc 2.6.19+.

Top of Page