Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Slow Performance when Computing the Minkowski Sum of two Simple Squares

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Slow Performance when Computing the Minkowski Sum of two Simple Squares


Chronological Thread 
  • From: Valentin Pi <>
  • To:
  • Subject: Re: [cgal-discuss] Slow Performance when Computing the Minkowski Sum of two Simple Squares
  • Date: Tue, 9 Jan 2024 09:40:23 +0100
  • Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23: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 FurWpI6BNCOBWihc0UA30mD68iJxQvPadm1
  • Ironport-hdrordr: A9a23:oxKMja+J5Mf+5n8Drl9uk+AAI+orL9Y04lQ7vn2ZOiYlEPBw9v rDoB1/73TJYVkqNk3I9erwX5VoBEmsk6KdgrNxAV7BZmbbUQKTRekO0WKh+UyFJ8SUzJ8/6U 4PSdkaNPTNLRxdkdvw5hW+Hu0t2d+d7cmT9JzjJjtWLT2DcMtbnn5E4+ugYzVLrIIqP/AEKK Y=
  • Ironport-phdr: A9a23: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 4cSDLBeRBozG+9IUixY
  • Ironport-sdr: 659d068a_zFE4Lh75REVS54grk30qaf7vYV9SsfryyYKXG7DrJsoZnzg Cnvf8HiVz54DTm5mlQxPIEobIti12CTpuxLP4Jw==
  • Ui-outboundreport: notjunk:1;M01:P0:v7ncE0QvH2Y=;jkelD2TqhEGheEE7rSjj6U7o+wK xx9iGZZ/J2qQFh5bVjdjepNTltnvo3Qh8QrT4KsceiTG8p2xgN/cZmXku2TPM+Xdgx+FTFDln OT+/Dzb8b/DyQvBsPqXWP8fVMGS9k5Y2EUjNaRO59JKnMfHCreYLzRNOEihMt0gBA4D7hjcAC h+Qxad5ybZb4miniAh12pZ5HfmVHnvVhkD+R0ddqxI8w14kfwdyT8iHurDjk4JOLZBfNr1Ril 4AhcxiaLv0QskJAQ5Up7+R3ukAk73c0McrpW9/VeIXP2SY1+WzgpmTezG4zag11U/8VI0ucTU 0027w+VS6SyaENTMUI5tjAxwfaEYeRp122eXQHt+23l+w04bJZrKvvVh47gPZf+9H7hrXPKag i18Twna5rz5SVwdPNkUfLVGMBjAEkHoJgfp+6dpqxSge5L+3NTw/xmCaZ8246n5e39bSRrJLE 8EqJtqFQ9+3ziATU7wGJzMvqqZQztoQ9S5ujPprTOPM7bvIXaOK8EIsANyRBgRmUkZ40sDNLv LfLs3xt2eDoUBI35zc4V4aet+vWztKozN8C/fuEMntlnTSUD80EJTeOb6QXMBYlu+7poDDZuz ABtQy4gMgZ0ZdKgGrmtr4OriBGcr3kZJUna8J1Z+GfgZCDJotm40MWMZk2ulVzkhClrxkuxnd uBvt3xIRSnZrSCl+fAqu4WUbOadF8jebs2IF95EB1BfGFYKICjTLAH9rPcXyZPa1ROXj9rym9 dZEEXRXdhZPBDqScxNbqIUU/PNLtqG6FxMaI147ipTQl76erlRfoCDWXb5B+w5wTLDJ7phR82 pmdagX36OnQV3jzqOG6u9cFjtEBB/Qjpy+XNYCXrejOGvkrkYEvnguUdC2ogCdoZdKHWzgaVv LLgvrxBILoDtgYZMz7MqnV4WpYoecsQNtn9MdqCES1TTL/pawLAk78XfDQRt0lSw5kWEQ96e+ lI7hZREr7Kt1FP3cyMoumxcDfsE=

Thanks for the quick reply.
1. I have now tried a couple of versions, but only from the header-only versions. Denoted with the tag names each, I give the following table of observed average times. The numbers I gave initially were with v5.6, as already said.

Release tag - Observed average runtime
6.0-dev [1] - 200µs
       v5.6 - 200µs
       v5.5 - 185µs
       v5.4 - 275µs
       v5.3 - 300µs
       v5.2 - 275µs
       v5.1 - 250µs

[1] The current version at commit a15af8ef645c414956640348d036609b9a0a5c38.

I do not detect a degradation with any particular version, except for a slight jump from 275µs to 185µs between v5.4 and v5.5. For the complexity of the problem anything over a couple of µs is too much for our application, so all of these times are problematic for us. I could try older versions if you think it would make a difference.
2. I have tried convolution (in v5.6) and it gives about the same time.

Am 09.01.24 um 08:10 schrieb Efi Fogel ( via cgal-discuss Mailing List):
1. Have you measured it with a different version? I mean, are you detecting a degradation?
2. Have you tried other implemented alg, or at least other decomposition methods?
The call without a decomposition method invokes the partial-convolution method, which is the most efficient in most cases:
CGAL::minkowski_sum_2(square_1, square_2);
   ____  _        ____             _   /_____/_) o    /__________  __  //  (____ (   (    (    (_/ (_/-(-'_(/                          _/




On Tue, 9 Jan 2024 at 01:09, Valentin Pi <> wrote:

Hello everyone,

I hope this issue fits this list. In our current project we need to compute a lot of small Minkowski sums, and I wanted to ask if someone could please give me some help in speeding that process up. The following CGAL program computing the Minkowski sum of two small polygons demonstrates the problem.

main.cpp:

#include <CGAL/Polygon_2.h>
#include <CGAL/Polygon_convex_decomposition_2.h>
#include <CGAL/Polygon_triangulation_decomposition_2.h>
#include <CGAL/minkowski_sum_2.h>

#include <chrono>
#include <iostream>
#include <vector>

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef CGAL::Point_2<Kernel> Point;
typedef CGAL::Polygon_2<Kernel> Polygon;
typedef CGAL::Polygon_with_holes_2<Kernel> Polygon_with_holes;

int main(int argc, char** argv) {
    using std::vector;
    using std::chrono::high_resolution_clock;

    vector square_1_points({Point(0, 0), Point(4, 0), Point(4, 4)});
    vector square_2_points({Point(2, 1), Point(3, 1), Point(3, 2)});
    Polygon square_1(square_1_points.begin(), square_1_points.end());
    Polygon square_2(square_2_points.begin(), square_2_points.end());
    auto t1 = high_resolution_clock::now();
    Polygon_with_holes result =
        CGAL::minkowski_sum_2(square_1, square_2, CGAL::Hertel_Mehlhorn_convex_decomposition_2<Kernel>());
    auto t2 = high_resolution_clock::now();
    std::cout << std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count() << "µs" << std::endl;

    return EXIT_SUCCESS;
}


CMakeLists.txt:

cmake_minimum_required(VERSION 3.19.1)
# SotMS: "Slowness of the Minkowski Sum"
project(sotms)
find_package(CGAL 5.6 REQUIRED COMPONENTS Core)

add_compile_options(-O2)
set(CMAKE_BUILD_TYPE Release)

add_executable(sotms src/main.cpp)
target_link_libraries(sotms CGAL::CGAL_Core)


Compilation and execution (move the main.cpp in a folder named src and the CMakeLists.txt in a folder above before):

$ cd src
$ cmake ..
$ make -j
$ ./
sotms

I have observed the following:
1. The execution times for CGAL::minkowski_sum_2 for the above program lie around 200µs. This gives room for about 5000 Minkowski sums per second, which is not a lot, given the complexity of the above problem.
2. In the main project we usually have runtimes of about 1500µs. In some executions of our main project program the runtime jumps to several seconds up to minutes, but I cannot reproduce that well yet.
3. Repeating the above code (by introducing a for loop wrapping around the lines 23-27) yields runtimes of about 20µs, but I think this is due to optimizations, but 20µs is still too much.
4. Disabling optimizations (-O0) gives runtimes of about 1000µs for the first Minkowski sum, which then upon repetition of the computation breaks down to about 200µs again for some reason.

I have already tried changing the kernel to an inexact kernel, which still gives poor performance and does not suit our use case, since it often crashes. I am on an Arch Linux (x64) laptop, CGAL is compiled with GMP and MPFR, everything is up to date. The CGAL version in the Arch repository is 5.6

Best
Valentin


--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss


--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss




Archive powered by MHonArc 2.6.19+.

Top of Page