1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/archermind-ti-hwcpipe

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

HWCPipe

Введение

Проект HWCPipe предназначен для получения данных с аппаратных счетчиков процессора CPU и графического процессора GPU на платформах ARM.

Возможности

  1. Получение данных с аппаратных счетчиков процессора CPU на платформах ARM.
  2. Получение данных с аппаратных счетчиков графического процессора GPU на платформах ARM (например, Mali).

Интеграция

Интеграция в OpenHarmony

  1. Добавьте репозиторий Maven Central в файл build.gradle проекта:

    allprojects {
        repositories {
            mavenCentral()
        }
    }
  2. Добавьте зависимость в модуль, где требуется использование библиотеки:

    implementation "com.gitee.archermind-ti:hwcpipelib:1.0.0"

Интеграция в C/C++

Скопируйте директорию library/src/main/cpp/HWCPipe в вашу директорию cpp, а затем добавьте следующие строки в файл CMakeLists.txt:

# Подключение CMakeLists.txt из указанной директории
add_subdirectory(HWCPipe)
# Указание пути для поиска заголовочных файлов
include_directories(HWCPipe)

# Подключение библиотеки hwcpipe, пример использования:
target_link_libraries(your_target_name hwcpipe hilog_ndk.z)

Инструкции по использованию

Если вы используете мобильное устройство (симулятор пока не поддерживается, пожалуйста, используйте реальное устройство), то сначала активируйте анализ производительности:

hdc shell setprop security.perf_harden 0

Использование в OpenHarmony

  1. Для конфигурирования HWCPipe используйте метод HwcPipeUtil.run(String):

    HwcPipeUtil.run("your_command");
    ```   ```java
    HwcPipeUtil.run(HwcPipeUtil.ALL_JSON);

    Аргумент метода HwcPipeUtil#run(String) — это JSON-строка, которая позволяет включать различные счетчики. Пример JSON-строки:

    {
        "cpu": ["Cycles", "Instructions"],
        "gpu": ["GpuCycles"]
    }

    Константа HwcPipeUtil.ALL_JSON указывает на включение всех доступных счетчиков. Её полная структура представлена ниже:

    {
        "cpu": ["Cycles", "Instructions", "CacheReferences", "CacheMisses", "BranchInstructions", "BranchMisses", "L1Accesses", "InstrRetired", "L2Accesses", "L3Accesses", "BusReads", "BusWrites", "MemReads", "MemWrites", "ASESpec", "VFPSpec", "CryptoSpec"],
        "gpu": ["GpuCycles", "VertexComputeCycles", "FragmentCycles", "TilerCycles", "VertexComputeJobs", "Tiles", "TransactionEliminations", "FragmentJobs", "Pixels", "EarlyZTests", "EarlyZKilled", "LateZTests", "LateZKilled", "Instructions", "DivergedInstructions", "ShaderCycles", "ShaderArithmeticCycles", "ShaderLoadStoreCycles", "ShaderTextureCycles", "CacheReadLookups", "CacheWriteLookups", "ExternalMemoryReadAccesses", "ExternalMemoryWriteAccesses", "ExternalMemoryReadStalls", "ExternalMemoryWriteStalls", "ExternalMemoryReadBytes", "ExternalMemoryWriteBytes"]
    }
  2. Получение образца с помощью метода HwcPipeUtil#getSample()

    HwcInfoEntity hwcInfo = HwcPipeUtil.getSample();
    CpuInfoEntity cpuEntity = hwcInfo.getCpuInfoEntity();
    GpuInfoEntity gpuEntity = hwcInfo.getGpuInfoEntity();
    // Все указанные объекты должны быть непустыми
  3. Остановка, использование метода HwcPipeUtil#stop()

    HwcPipeUtil.stop();

Примечание: В данный момент многократное конфигурирование HwcPipeUtil#run(String) в течение жизненного цикла приложения не поддерживается.

Использование в C++

HWCPipe базовое использование```c++ // HWCPipe автоматически распознает платформу для счетчиков CPU/GPU hwcpipe::HWCPipe h;

// Запуск HWCPipe один раз в начале сессии профилирования h.run();

while (main_loop) { // Вызов sample() для получения значений счетчиков с требуемой частотой auto measurements = h.sample();

[...]

}

// В конце сессии профилирования, остановка HWCPipe h.stop();


Функция `sample()` возвращает структуру `Measurements`, которую можно использовать следующим образом:

```c++
// Проверка доступности данных для процессора
if (measurements.cpu)
{
    // Поиск нужного счетчика в карте
    const auto& counter = measurements.cpu->find(CpuCounter::Cycles);
    if (counter != measurements.cpu->end())
    {
        // Получение значения счетчика, приведенного к типу float
        auto value = counter->second.get<float>();
    }
}
Включение счетчиков

Доступные счетчики указаны в перечислениях CpuCounter и GpuCounter (соответственно в файлах cpu_profiler.h и gpu_profiler.h).

Платформа поддерживает подмножество этих счетчиков, которое можно проверить следующими способами:

auto cpu_counters = h.cpu_profiler()->supported_counters();
auto gpu_counters = h.gpu_profiler()->supported_counters();

Вы можете указать счетчики, которые требуется включить, следующим образом:

// Включение набора стандартных счетчиков
auto h = hwcpipe::HWCPipe();

// Указание наборов счетчиков для ЦПУ и ГПУ соответственно
auto h = hwcpipe::HWCPipe({CpuCounter::Cycles, CpuCounter::Instructions}, {GpuCounter::GpuCycles});

// Указание строки JSON
auto h = hwcpipe::HWCPipe(json);
```Формат строки JSON должен выглядеть так:

```json
{
    "cpu": ["Cycles", "Instructions"],
    "method": "gpu": ["GpuCycles"]
}

Имена доступных счетчиков могут быть найдены в cpu_counter_names (cpu_profiler.h) и gpu_counter_names (gpu_profiler.h). Дополнительная информация о счетчиках производительности Mali см. в разделе Mali Performance Counters.

Журнал отображает см. журнал HiLog устройства Просмотр журнала HiLog устройства

Указания по сборке

  1. Клонируйте проект с помощью git на локальную машину.
  2. Откройте этот проект в DevEco Studio, затем дождитесь завершения процесса сборки Gradle.
  3. Нажмите Run, чтобы запустить его (для запуска на реальном устройстве может потребоваться конфигурация подписи).

Информация о правах и лицензиях

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/archermind-ti-hwcpipe.git
git@api.gitlife.ru:oschina-mirror/archermind-ti-hwcpipe.git
oschina-mirror
archermind-ti-hwcpipe
archermind-ti-hwcpipe
master