{"id":27091458,"url":"https://github.com/avitase/fast_frechet","last_synced_at":"2026-05-18T11:10:22.728Z","repository":{"id":222830117,"uuid":"756849226","full_name":"avitase/fast_frechet","owner":"avitase","description":"Comparison of different (fast) discrete Fréchet distance implementations in C++ and CUDA.","archived":false,"fork":false,"pushed_at":"2025-07-13T18:39:20.000Z","size":2813,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-12T18:44:28.004Z","etag":null,"topics":["benchmark","cpp","cuda","frechet-distance","simd"],"latest_commit_sha":null,"homepage":"https://github.com/avitase/fast_frechet","language":"BibTeX Style","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avitase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-02-13T12:36:40.000Z","updated_at":"2025-10-07T20:29:57.000Z","dependencies_parsed_at":"2024-02-16T13:46:59.310Z","dependency_job_id":"87d3c971-b394-4ae7-83c6-4423f15f1553","html_url":"https://github.com/avitase/fast_frechet","commit_stats":null,"previous_names":["avitase/fast_frechet"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/avitase/fast_frechet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avitase%2Ffast_frechet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avitase%2Ffast_frechet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avitase%2Ffast_frechet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avitase%2Ffast_frechet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avitase","download_url":"https://codeload.github.com/avitase/fast_frechet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avitase%2Ffast_frechet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33072970,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["benchmark","cpp","cuda","frechet-distance","simd"],"created_at":"2025-04-06T07:38:23.458Z","updated_at":"2026-05-18T11:10:22.703Z","avatar_url":"https://github.com/avitase.png","language":"BibTeX Style","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Fast Discrete Fréchet Distance \n[![arXiv](https://img.shields.io/badge/arXiv-2404.05708-b31b1b.svg)](https://arxiv.org/abs/2404.05708)\n\nThis is a collection of different C++ implementations for calculating the discrete [Fréchet distance](https://en.wikipedia.org/wiki/Fr%C3%A9chet_distance) between two polygonal curves:\n\n1. [`vanilla`](ffrechet-vanilla/source/ffrechet-vanilla.cpp): A recursion-free adaptation of the original algorithm as proposed in [_Computing Discrete Fréchet Distance_ by T. Eiter and H. Mannila (1994)][vanilla], used as a baseline.\n1. [`linear`](ffrechet-linear/source/ffrechet-linear.cpp): This formulation reduces the quadratic memory footprint to a linear one.\n1. [`SIMD`](ffrechet-simd/source/ffrechet-simd.cpp): Formulation using SIMD parallelization on a single CPU core.\n1. [`CUDA`](ffrechet-cuda/source/ffrechet-cuda.cu): Formulation using CUDA.\n\nImplementations of all these variants can be found under `ffrechet-{vanilla,linear,simd,cuda}/source/` or by simply clicking on the listed names above.\n\n## Toolchain Requirements ⚙️\n\nThis project has been primarily tested on Linux environments. Please note the following dependencies:\n\n1. [SIMD implementation][ffrechet-simd_toolchain.cmake]: Requires at least GCC-11, as it relies on the experimental SIMD implementation of the [Parallelism Technical Specification (TS) v2][std::experimental::simd].\n2. [CUDA implementation][ffrechet-cuda_toolchain.cmake]: Requires a compiler version compatible with the NVCC installation.\n\nYou can customize the compiler versions by editing the respective toolchain files [`ffrechet-simd/ffrechet-simd_toolchain.cmake`][ffrechet-simd_toolchain.cmake] and [`ffrechet-simd/ffrechet-cuda_toolchain.cmake`][ffrechet-cuda_toolchain.cmake].\n\n## Installation 🛠️\n\nFirst, make sure that you have checked out the dependencies ([google-benchmark][google-benchmark] and [google-test][google-test]) by running\n```bash\n$ git submodule init\n$ git submodule update\n```\n\nThen, you can customize the build options in `CMakeUserPresets.json` or simply copy the default one from [`CMakeUserPresets.json.EXAMPLE`](CMakeUserPresets.json.EXAMPLE):\n```bash\n$ cp CMakeUserPresets.json.EXAMPLE CMakeUserPresets.json\n```\n\nFinally, configure and build the entire project via\n```bash\n$ cmake --preset=release\n$ cmake --build --preset=release\n```\n\nIf you want to run the benchmark, type:\n```bash\n$ ./build/release/install/bin/ffrechet-benchmark \\\n--benchmark_out_format=json \\\n--benchmark_out=benchmark.json\n```\nthis will run the benchmark and store the results in `benchmark.json`.\nRemember to enable the performance mode on your CPU before running the benchmark, e.g., via\n```bash\n$ sudo cpupower frequency-set --governor performance\n```\n\nAfterwards, you can reset the performance mode back to _powersave_ via \n```bash\n$ sudo cpupower frequency-set --governor powersave\n```\n\n## Developer Mode 👷\n\nIn case you are interested in contributing to this project, you might find our `debug` preset helpful:\n```bash\n$ cmake --preset=debug\n$ cmake --build --preset=debug\n```\n\nYou can test your changes by running\n\n```bash\n$ ./build/debug/install/bin/ffrechet-test\n```\n\nPlease make sure to obey the [formatting](.clang-format), for example by running\n```bash\n$ cmake --build --preset=debug -t format-check\n$ cmake --build --preset=debug -t format-fix\n```\n\n## Benchmark results and other visualizations 🎨\n\nWe use Jupyter Notebooks to render the visualizations of the results of the benchmarks. You can find them [here][notebooks] alongside others.\n\n## Python Implementations 🐍\n\nPython implementations of the discrete Fréchet Distance can be found [here][fast_frechet-python].\n\n[vanilla]: http://www.kr.tuwien.ac.at/staff/eiter/et-archive/cdtr9464.pdf\n[std::experimental::simd]: https://en.cppreference.com/w/cpp/experimental/simd\n[ffrechet-simd_toolchain.cmake]: ffrechet-simd/ffrechet-simd_toolchain.cmake \n[ffrechet-cuda_toolchain.cmake]: ffrechet-cuda/ffrechet-cuda_toolchain.cmake \n[google-benchmark]: https://github.com/google/benchmark\n[google-test]: https://github.com/google/googletest\n[notebooks]: https://avitase.github.io/fast_frechet/\n[fast_frechet-python]: https://github.com/avitase/fast_frechet-python\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favitase%2Ffast_frechet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favitase%2Ffast_frechet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favitase%2Ffast_frechet/lists"}