-
Notifications
You must be signed in to change notification settings - Fork 16
configuration mechanism #242
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 10 commits
88c57b4
f6c9ff1
7419e16
21279b0
e2a2ad1
2ed3b03
fc33885
d680949
de27aa7
e0c9b47
0b8ca49
b880e9e
e0c730b
b5b7580
af09acd
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,213 @@ | ||
| # Сравнение библиотек для создания механизма конфигурирования | ||
| Вся информация взята из репозиториев соответствующих проектов. Дата обращения: 21.04.26. | ||
|
|
||
| ## Критерии сравнения | ||
|
|
||
| | Критерий | Метрика | Единицы измерения | | ||
| |:---|:---|:---| | ||
| | **Зависимости** | наличие | +/- | | ||
| | **Источники** | CLI (argv) / env / файлы | +/-, форматы | | ||
| | **Стандарт C++** | минимальная версия | C++хх | | ||
| | **Поддерживает стандарт иерархии** | Linux/Windows/MacOS | +/- | | ||
| | **Пакетные менеджеры** | vcpkg / Conan / Conda / apt / brew / pacman | +/- | | ||
| | **Способ распространения** | header-only / статическая / динамическая | — | | ||
| | **ОС** | Linux / Windows / macOS | +/-, компиляторы | | ||
| | **Активность** | среднее число коммитов | коммитов/мес (за последний мес) | | ||
| | **Issues** | open, closed/open | n, коэффициент | | ||
| | **Сообщество** | GitHub Stars | n | | ||
| | **Проходит ли CI** | CI | +/- | | ||
|
|
||
|
|
||
|
|
||
| ## Сравнение парсеров командной строки (CLI) | ||
|
|
||
| | Критерий | CLI11 | cxxopts | | ||
| |:---|:---:|:---:| | ||
| | Зависимости | - | - | | ||
| | **Источники** | | | | ||
| |  CLI (argv) | + | + | | ||
| |  env | + | - | | ||
| |  Файлы | - | - | | ||
| | Стандарт C++ | ≥ C++11 | ≥ C++11 | | ||
| | **Поддерживает стандарт иерархии** | | | | ||
| |  Linux | + | + | | ||
| |  Windows | + | + | | ||
| |  MacOS | + | + | | ||
| | **Пакетные менеджеры** | | | | ||
| |  vcpkg | + | + | | ||
| |  Conan | + | + | | ||
| |  Conda | + | ? | | ||
| |  apt | ? | ? | | ||
| |  brew | ? | + | | ||
| |  pacman | ? | ? | | ||
| | Способ распространения | header-only | header-only | ||
| | **ОС** | | | | ||
| |  Linux | + (GCC 4.8+, Clang 3.5+) | + (GCC ≥ 4.9, Clang ≥ 3.1) | | ||
| |  Windows | + (MSVC ≥ 2015) | + (MSVC ≥ 2015) | | ||
| |  macOS | + (AppleClang 7+) | + (Clang ≥ 3.1 с libc++) | | ||
| | **Сообщество** | | | | ||
| |  Активность (коммитов/мес) | 4 | 1 | | ||
| |  Issues всего | 506 | 307 | | ||
| |  Issues closed/open | 9 | 6 | | ||
| |  Stars | 4.3k | 4.7k | | ||
| | **Проходит ли CI** | + | + | + | | ||
|
|
||
|
|
||
| ## Парсеры файлов | ||
|
|
||
| | Критерий | nlohmann/json | yaml-cpp | toml++ | toml11 | | ||
| |:---|:---:|:---:|:---:|:---:| | ||
| | Зависимости | - | - | - | - | ||
| | **Источники** | | | | ||
| |  CLI (argv) | - | - | - | - | ||
| |  env | - | - | - | - | ||
| |  Файлы | JSON | YAML | TOML | TOML | ||
| | Стандарт C++ | ≥ C++11 | ≥ C++11 | ≥ C++17 | ≥ C++11 | ||
| | **Поддерживает стандарт иерархии** | | | | ||
| |  Linux | + | + | + | + | | ||
| |  Windows | + | + | + | + | | ||
| |  MacOS | + | + | + | + | | ||
| | **Пакетные менеджеры** | | | | ||
| |  vcpkg | + | + | + | + | ||
| |  Conan | + | + | + | ? | ||
| |  Conda | + | + | ? | ? | ||
| |  apt | + | + | ? | ? | ||
| |  brew | + | + | ? | ? | ||
| |  pacman | + | + | ? | ? | | ||
| | Способ распространения | header-only | статическая/динамическая¹ | header-only/статическая/динамическая¹ | header-only/статическая/динамическая¹ | ||
| | **ОС** | | | | ||
| |  Linux | + (GCC 4.8–14.2, Clang 3.4–21.0) | + (GCC, Clang) | + (Clang 8+, GCC 8+) | + (GCC, Clang) | ||
| |  Windows | + (MSVC 2015–2022) | + (MSVC) | + (MSVC VS2019+) | + (MSVC, MinGW) | ||
| |  macOS | + (AppleClang 9.1–16.0) | + (Xcode, AppleClang) | + (AppleClang) | + (AppleClang) | ||
| | **Сообщество** | | | | ||
| |  Активность (коммитов/мес) | 2 | 9 | 2 | 4 | ||
| |  Issues всего | 3271 | 905 | 193 | 194 | ||
| |  Issues closed/open | 68 | 3 | 8 | 5 | ||
| |  Stars | 49.4k | 15k | 2k | 1.3k | ||
| | **Проходит ли CI** | + | + | + | - | + | | ||
|
|
||
| > ¹ Опционально. | ||
|
|
||
| ## Сравнение универсальных инструментов | ||
|
|
||
| | Критерий | Boost.Program_options | ||
| |:---|:---:| | ||
| | Зависимости | +¹ | | ||
| | **Источники** | | | | ||
| |  CLI (argv) | + | + | | ||
| |  env | + | + | | ||
| |  Файлы | INI | | ||
| | Стандарт C++ | ≥ C++3 | | ||
| | **Поддерживает стандарт иерархии** | | | | ||
| |  Linux | + | | ||
| |  Windows | + | | ||
| |  MacOS | + | | ||
| | **Пакетные менеджеры** | | | | ||
| |  vcpkg | + | | ||
| |  Conan | + | | ||
| |  Conda | + | | ||
| |  apt | + | | ||
| |  brew | + | | ||
| |  pacman | + | | ||
| | Способ распространения | статическая/динамическая² | | ||
| | **ОС** | | | | ||
| |  Linux | + (GCC 5+, Clang 3.6+) | | ||
| |  Windows | + (MSVC 2015 (vc140)+) | | ||
| |  macOS | + (AppleClang) | | ||
| | **Сообщество** | | | | ||
| |  Активность (коммитов/мес) | 12 | | ||
| |  Issues всего | 400 | | ||
| |  Issues closed/open | 1 | | ||
| |  Stars | 9.4k | | ||
| | **Проходит ли CI** | + | + | | ||
|
|
||
| > ¹ Список зависимостей: | ||
| > 1. Boost.Any | ||
| > 2. Boost.Bind | ||
| > 3. Boost.Config | ||
| > 4. Boost.Core | ||
| > 5. Boost.Detail | ||
| > 6. Boost.Function | ||
| > 7. Boost.Iterator | ||
| > 8. Boost.Lexical Cast | ||
| > 9. Boost.Smart Ptr | ||
| > 10. Boost.ThrowException | ||
| > 11. Boost.Tokenizer | ||
| > 12. Boost.Type Traits | ||
|
|
||
| > ² Опционально. | ||
|
|
||
|
|
||
| ## Итог: | ||
| По результатам сравнения, вероятно, лучшим вариантом будет использование `CLI11` и `nlohmann/json`, так как они, в отличие от `Boost.program_options`, не требуют зависимостей и являются header-only. | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. А что не так с config-cxx?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Меньше issues и как будто активность поменьше. Я помню, Вы говорнили, что это дискуссионная характеристика. Всетаки config-cxx взять? |
||
|
|
||
|
|
||
| # Что нужно конфигурировать | ||
| 1. Выбор платформы | ||
| 2. Выбор устройства | ||
| 3. Количество очередей: сейчас создается только 1 очередь | ||
| 4. Приоритеты очередей | ||
| 5. Размер линейного аллокатора `DEFAULT_SIZE` | ||
| 6. Стратегия выбора аллокатора: \ | ||
| NVIDIA используют общий аллокатор \ | ||
| Все остальные используем линейный аллокатор | ||
| 7. Характеристики устройтсв:\ | ||
| `m_vendor_id` \ | ||
| `m_max_cu` \ | ||
| `m_default_wgs` \ | ||
| `m_max_local_mem` \ | ||
| `m_addr_align` \ | ||
| пороги `m_max_wgs`, `m_max_cu`, `m_wave_size` | ||
| 8. Строковые паттерны проверки девайса: возможно только 3 вариаета `m_vendor_name` | ||
| 6. Дефолтные значения характеристик \ | ||
| `m_addr_align` \ | ||
| `m_default_wgs` \ | ||
| `uint m_wave_size` \ | ||
| `uint m_num_of_mem_banks` | ||
| 7. Суффикс и имя \ | ||
| `m_name` \ | ||
| `m_suffix ` | ||
| 8. Тип устройства (чтобы можно было использовать CPU) | ||
| `getDevices` | ||
|
|
||
| # Структура конфига (JSON) | ||
|
|
||
| ```bash | ||
| config: | ||
|
|
||
| "platform": | ||
| "selection": | ||
|
gsvgit marked this conversation as resolved.
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Не понимаю по названию, что это за блок и почему он так назван.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. способ выбора платформы: можно по названию пользователя, по официальному имени и по вендору. Мне кажется, это естественные поля
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. для устройства то же самое |
||
| "user_alias": string | ||
| "official_name": string | ||
| "vendor": "nvidia" | "amd" | "intel" | "img" | "" | ||
| "index": int | ||
| "priority": int | ||
| "fallback": (???) # Нужен ли fallback | ||
|
|
||
| "device": | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. А почму устройство никак не свзянос оптимизациями? Предположим, я хочу сранвить, как разные параметры влияют на производительность. |
||
| "selection": | ||
| "user_alias": string | ||
| "official_name": string | ||
| "type": "gpu" | "cpu" | ||
| "index": int | ||
| "priority": int | ||
| "naming": | ||
| "accelerator_name" # m_name | ||
| "cache_suffix" # m_suffix | ||
| "tuning": | ||
| "default_work_group_size": int # m_default_wgs | ||
| "wave_size": int # m_wave_size | ||
| "memory_banks": int # m_num_of_mem_banks | ||
| "memory_alignment": int # m_addr_align | ||
| "fallback": (???) # Нужен ли fallback | ||
|
|
||
| "performance" | ||
| "memory" | ||
| "linear_allocator_size_mb": int # DEFAULT_SIZE | ||
| "allocator_strategy": "auto" | "linear" | "general" | "vendor" | ||
| "vendor_strategy": | ||
| "nvidia": "linear" | "general" | ||
| "amd": "linear" | "general" | ||
| "intel": "linear" | "general" | ||
| "img": "linear" | "general" | ||
| ``` | ||
Uh oh!
There was an error while loading. Please reload this page.