# Динамична адаптация на изчисленията

Chloros 1.1.0 въвежда интелигентно разпознаване на хардуера и автоматичен избор на стратегия за обработка. Двигателят за обработка се адаптира към вашия хардуер — от Jetson Nano до работна станция с няколко графични процесора — без никаква ръчна конфигурация.

***

## Как работи

Когато Chloros стартира, той автоматично профилира вашата система:

1. **Разпознава операционната система** — Windows или Linux
2. **Идентифицира ядрата на процесора и общата RAM**

3.**Открива наличието на GPU** — NVIDIA CUDA възможности, VRAM, модел 4. **Идентифицира модела на Jetson** (ако е приложимо) — чрез `/proc/device-tree/model` 5. **Проверява термичните сензори** (Jetson) — за обработка, съобразена с температурата 6. **Избира оптималната стратегия за изчисления** — въз основа на целия открит хардуер 7. **Конфигурира броя на работниците, типа на конвейера и разпределението на паметта** автоматично

Резултатът се кешира, за да започват по-бързо следващите изпълнения. Ако хардуерът се промени (например, добави се графичен процесор), Chloros препрофилира при следващото стартиране.

***

## Стратегии за изчисления

Chloros избира една от три стратегии за изчисления въз основа на вашия хардуер:

| Стратегия          | Необходим GPU                         | Работни процеси | Конвейер       | Най-подходящо за                                                     |
| ------------------ | ------------------------------------- | --------------- | -------------- | -------------------------------------------------------------------- |
| **`GPU_PARALLEL`** | Да (12 GB+ VRAM или 16 GB+ споделена) | 3-4             | `fused_gpu`    | Настолни графични процесори с 12 GB+, Jetson Orin NX 16 GB, AGX Orin |
| **`GPU_SINGLE`**   | Да (< 12 GB VRAM)                     | 1-3             | `tiled_gpu`    | Графични процесори от начален клас, Jetson Nano, Orin Nano           |
| **`CPU_PARALLEL`** | Не                                    | ядра - 1        | `cpu_fallback` | Системи без NVIDIA GPU                                               |

### Типове пипалини

* **`fused_gpu`** — Пълен път на обработка на GPU. Всички операции по дебайериране, корекция и индексиране се изпълняват на графичния процесор в един обединен цикъл. Най-висока производителност, но изисква повече VRAM.
* **`tiled_gpu`** — Път на графичния процесор с ефективно използване на паметта. Обработва изображенията на плочки, за да се побере в ограничената памет на графичния процесор. По-ниска производителност, но работи на устройства с ограничена памет.
* **`cpu_fallback`** — Обработка само на CPU с използване на многонишкова паралелност. Използва се, когато няма наличен NVIDIA GPU.\*\*\*

## Поведение, специфично за платформата

| Платформа                          | Стратегия      | Работници | Конвейер                   | Бележки                                                                         |
| ---------------------------------- | -------------- | --------- | -------------------------- | ------------------------------------------------------------------------------- |
| **Jetson Nano 8GB**                | `GPU_SINGLE`   | 1         | `tiled_gpu` (сериализиран) | Режим с ефективно използване на паметта, обработва по едно изображение наведнъж |
| **Jetson Orin NX 16GB**            | `GPU_PARALLEL` | 3         | `fused_gpu` (едновременна) | Препоръчително крайно устройство — истинска паралелна GPU обработка             |
| **Jetson AGX Orin 64GB**           | `GPU_PARALLEL` | 4         | `fused_gpu` (едновременна) | Максимална производителност на крайното устройство                              |
| **Настолен компютър с 8 GB GPU**   | `GPU_SINGLE`   | 3         | `tiled_gpu`                | Добра производителност на настолен компютър с паметно ефективни плочки          |
| **Настолен компютър с 12 GB+ GPU** | `GPU_PARALLEL` | 3-4       | `fused_gpu`                | Оптимална производителност на настолен компютър                                 |
| **Система само с CPU**             | `CPU_PARALLEL` | ядра - 1  | `cpu_fallback`             | Не се изисква GPU, използва ThreadPool                                          |

{% hint style="info" %}
**Унифицирана памет на Jetson**: Устройствата Jetson споделят паметта на GPU и CPU. Jetson Orin NX 16GB отчита \~15,3 GB VRAM, но това е същата физическа RAM, използвана от операционната система и процесите на CPU. Chloros отчита това при задаването на прагове за разпределение на паметта.
{% endhint %}

***

## Динамично разпределение на паметта на GPU

Chloros използва [4-нишкова обработваща верига](https://mapir.gitbook.io/chloros/bg/arkhitektura-na-obrabotkata/processing-pipeline):

* **Нишка 1** (Откриване) — Зареждане на изображение, анализиране на EXIF, откриване на цел
* **Нишка 2** (Калибриране) — Изчисление на калибриране на отражателната способност
* **Нишка 3** (Обработка) — Дебайериране на GPU, корекция на винетиране, изчисляване на индекс
* **Нишка 4** (Експорт) — Записване на файлове, вграждане на метаданни

Когато по-ранните нишки от конвейера завършат работата си (например, всички изображения са били открити), разпределената им памет на GPU се освобождава и **преразпределя към останалите активни нишки**. Това означава, че нишка 3 (етапът с интензивно използване на GPU) получава все повече памет с напредването на процеса, подобрявайки производителността за най-интензивната изчислителна работа.

### Етапи на разпределение

| Етап             | Активни нишки | Разпределение на паметта на GPU      |
| ---------------- | ------------- | ------------------------------------ |
| **Ранен**        | 1, 2, 3, 4    | Разпределена между всички нишки      |
| **Средно-ранна** | 2, 3, 4       | Паметта на нишка 1 се преразпределя  |
| **Средно-късна** | 3, 4          | Паметта на нишки 1+2 отива към 3+4   |
| **Късна**        | 3 или 4       | Максимална памет за оставащата нишка |

## Обработка с разпознаване на текстури

Методът за дебайериране с разпознаване на текстури (само Chloros+) използва значително повече памет на GPU в сравнение със стандартния метод поради модела за отстраняване на шума с AI/ML:

* Системите с **< 7 GB VRAM** са принудени да използват синхронна циклична обработка за режим с разпознаване на текстури (по едно изображение наведнъж)
* Системите с **7 GB+ VRAM** могат да обработват Texture Aware едновременно, макар и с намален брой работници в сравнение със Standard\*\*\*

## Термично управление (Jetson)

Устройствата Jetson имат термични ограничения, особено при затворени или въздушни разгръщания. Chloros следи температурите на GPU и CPU и автоматично регулира обработката:

| Температура               | Реакция                                                        |
| ------------------------- | -------------------------------------------------------------- |
| **< 70°C**                | Нормална работа — пълна скорост                                |
| **70°C** (Предупреждение) | Намаляване на размера на партидата                             |
| **80°C** (Критично)       | Агресивно ограничаване — по-ниска паралелност и брой работници |
| **90°C** (Изключване)     | Пълно спиране на обработката на GPU                            |

Мониторингът на температурата използва `tegrastats` на Jetson платформи. На настолни системи с адекватно охлаждане термичното ограничаване рядко се задейства.

***

## Управление на натоварването на паметта

Chloros следи натоварването на системната памет по време на обработката:

* **Праг на паметта**: 85% използване задейства консервативно поведение
* **Намаляване при OOM**: Ако възникне събитие за изчерпване на паметта, разпределението се намалява с 25% (мултипликатор 0,75x)
* **Резервен вариант на конвейера**: При силен натиск върху паметта, пиплинът автоматично преминава от `fused_gpu` към `tiled_gpu`
* **Препоръки за суап**: На Jetson, Chloros ви предупреждава, ако пространството за суап е недостатъчно за размера на вашия набор от данни\*\*\*

## Мониторинг на адаптацията на изчислителната мощност

### Изход за състоянието на CLI

Когато започне обработката, CLI показва открития хардуерен профил:

```

Chloros CLI 1.1.0
Platform: Linux aarch64 (Jetson Orin NX 16GB)
Strategy: GPU_PARALLEL | Workers: 3 | Pipeline: fused_gpu
CUDA: Available | GPU Memory: 15.3 GB (shared)
```

### Системна диагностика

Изпълнете `chloros-cli selftest`, за да видите пълен хардуерен профил и да проверите изчислителните възможности:

```bash
chloros-cli selftest
```

Това проверява наличността на CUDA, паметта на GPU, моделите за отстраняване на шума и свързаността на бекенда.

***

## Следващи стъпки

* [Процесуален конвейер](https://mapir.gitbook.io/chloros/bg/arkhitektura-na-obrabotkata/processing-pipeline) — Разбиране на архитектурата на 4-нишковия конвейер
* [Ръководство за NVIDIA Jetson](https://mapir.gitbook.io/chloros/bg/linux-i-edge-computing/nvidia-jetson-guide) — Разгръщане и оптимизация, специфични за Jetson
* [CLI : Командна линия](https://mapir.gitbook.io/chloros/bg/cli) — Пълен справочник за CLI
