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: Efi Fogel <>
  • To:
  • Subject: Re: [cgal-discuss] Slow Performance when Computing the Minkowski Sum of two Simple Squares
  • Date: Tue, 9 Jan 2024 12:31:50 +0200
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-data: A9a23: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
  • Ironport-hdrordr: A9a23:Cc4VT6pb1731skFrLq9IyKkaV5oSeYIsimQD101hICG9E/bo7v xG+c5w6faaskd1ZJhNo6HjBEDEewK+yXcX2+gs1NWZLW3bUQKTRekI0WKh+V3d8kbFh4lgPM lbAs5D4R7LYWSST/yW3OB1KbkdKRC8npyVuQ==
  • Ironport-phdr: A9a23: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 lsvllI7b71ypXHj5FA4IleMryw1whFZpA==
  • Ironport-sdr: 659d20a4_ZAc73QalDtJYHcPUwUrYPh0yzLMA2TpZqm8c2s+0PBajwEi e/VFbegycgvBl+vnstX3kb3Mdz+iLceDlHlYhxg==

Do you have any guarantee about the input polygons being convex?
   ____  _        ____             _
  /_____/_) o    /__________  __  //
 (____ (   (    (    (_/ (_/-(-'_(/
                         _/




On Tue, 9 Jan 2024 at 10:41, Valentin Pi <> wrote:

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


--
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