Skip to content
Open
Changes from 12 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
190 changes: 190 additions & 0 deletions src/opencl/Compare.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
# Сравнение библиотек для создания механизма конфигурирования
Вся информация взята из репозиториев соответствующих проектов. Дата обращения: 21.04.26.

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

| Критерий | Метрика | Единицы измерения |
|:---|:---|:---|
| **Зависимости** | наличие | +/- |
| **Источники** | CLI (argv) / env / файлы | +/-, форматы |
| **Стандарт C++** | минимальная версия | C++хх |
| **Поддерживает стандарт иерархии** | Linux/Windows/MacOS | +/- |
| **Способ распространения** | header-only / статическая / динамическая | — |
| **ОС** | Linux / Windows / macOS | +/-, компиляторы |
| **Активность** | среднее число коммитов | коммитов/мес (за последний мес) |
| **Issues** | open, closed/open | n, коэффициент |
| **Сообщество** | GitHub Stars | n |
| **Проходит ли CI** | CI | +/- |

> ? - не указано в README.


## Сравнение парсеров командной строки (CLI)

| Критерий | CLI11 | cxxopts |
|:---|:---:|:---:|
| Зависимости | - | - |
| **Источники** | | |
|  CLI (argv) | + | + |
|  env | + | - |
|  Файлы | - | - |
| Стандарт C++ | ≥ C++11 | ≥ C++11 |
| **Поддерживает стандарт иерархии** | | |
|  Linux | + | + |
|  Windows | + | + |
|  MacOS | + | + |
| Способ распространения | 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 | config-cxx | taocpp/config
|:---|:---:|:---:|:---:|:---:|:---:|:---:|
| Зависимости | - | - | - | - | - | - |
| **Источники** |
|  CLI (argv) | - | - | - | - | - | - |
|  env | - | - | - | - | + | + |
|  Файлы | JSON | YAML | TOML | TOML | JSON, YAML, XML | JSON, JAXN |
| Стандарт C++ | ≥ C++11 | ≥ C++11 | ≥ C++17 | ≥ C++11 | ≥ C++20 | ≥ C++17 |
| **Поддерживает стандарт иерархии** |
|  Linux | + | + | + | + | + | + |
|  Windows | + | + | + | + | + | + |
|  MacOS | + | + | + | + | + | + |
| Способ распространения | header-only | статическая/динамическая¹ | header-only/статическая/динамическая¹ | 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) | + (GCC 13+, Clang 16+) | +
|  Windows | + (MSVC 2015–2022) | + (MSVC) | + (MSVC VS2019+) | + (MSVC, MinGW) | + (MSVC 143+ (VS 2022)) | +
|  macOS | + (AppleClang 9.1–16.0) | + (Xcode, AppleClang) | + (AppleClang) | + (AppleClang) | + (AppleClang 16+) | +
| **Сообщество** | | |
|  Активность (коммитов/мес) | 2 | 9 | 2 | 4 | 2 | 13 |
|  Issues всего | 3271 | 905 | 193 | 194 | 24 | 5 |
|  Issues closed/open | 68 | 3 | 8 | 5 | 0 open | 0 open |
|  Stars | 49.4k | 15k | 2k | 1.3k | 31 | 194 |
| Проходит ли CI | + | + | + | - | + | ? |

> ¹ Опционально.

## Сравнение универсальных инструментов

| Критерий | Boost.Program_options
|:---|:---:|
| Зависимости | +¹ |
| **Источники** | | |
|  CLI (argv) | + | + |
|  env | + | + |
|  Файлы | INI |
| Стандарт C++ | ≥ C++3 |
| **Поддерживает стандарт иерархии** | | |
|  Linux | + |
|  Windows | + |
|  MacOS | + |
| Способ распространения | статическая/динамическая² |
| **ОС** | | |
|  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":
"selection":

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.

Такая же история.

"user_alias": string
"official_name": string
"type": "gpu" | "cpu"
"index": int
"priority": int

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.

priority не достаточно?

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.

Я вот про эти очереди: Количество очередей: сейчас создается только 1 очередь При чём тут priority?

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.

тогда я не очень понимаю, что в контексте спла значит очередь и какие у нее параметры

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