Skip to content
Open
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
213 changes: 213 additions & 0 deletions src/opencl/Compare.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
# Сравнение библиотек для создания механизма конфигурирования
Вся информация взята из репозиториев соответствующих проектов. Дата обращения: 21.04.26.

## Критерии сравнения
Comment thread
gsvgit marked this conversation as resolved.

| Критерий | Метрика | Единицы измерения |
|:---|:---|:---|
| **Зависимости** | наличие | +/- |
| **Источники** | 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.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А что не так с config-cxx?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The 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":
Comment thread
gsvgit marked this conversation as resolved.
Outdated

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не понимаю по названию, что это за блок и почему он так назван.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

способ выбора платформы: можно по названию пользователя, по официальному имени и по вендору. Мне кажется, это естественные поля

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The 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":

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The 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"
```
Loading