Subject: CGAL users discussion list
List archive
- 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
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
- [cgal-discuss] Speeding Up Arrangement Insertion, Bruno Silva, 11/05/2021
- RE: [cgal-discuss] Speeding Up Arrangement Insertion, Bruno Silva, 11/05/2021
- Re: [cgal-discuss] Speeding Up Arrangement Insertion, Andreas Fabri, 11/05/2021
- RE: [cgal-discuss] Speeding Up Arrangement Insertion, Bruno Silva, 11/05/2021
- Re: [cgal-discuss] Speeding Up Arrangement Insertion, Guillaume Damiand, 11/05/2021
- Re: [cgal-discuss] Speeding Up Arrangement Insertion, Efi Fogel, 11/09/2021
- Re: [cgal-discuss] Speeding Up Arrangement Insertion, Guillaume Damiand, 11/05/2021
- RE: [cgal-discuss] Speeding Up Arrangement Insertion, Bruno Silva, 11/05/2021
- Re: [cgal-discuss] Speeding Up Arrangement Insertion, Andreas Fabri, 11/05/2021
- RE: [cgal-discuss] Speeding Up Arrangement Insertion, Bruno Silva, 11/05/2021
Archive powered by MHonArc 2.6.19+.