>

Пакеты Conan>

pthreadpool

pthreadpool

Портируемая и эффективная реализация пула потоков (thread pool) для языка C. Библиотека предоставляет функциональность, аналогичную директиве #pragma omp parallel for, но с дополнительными возможностями. Она позволяет легко параллелизировать выполнение циклов и других задач, эффективно распределяя работу между потоками с помощью алгоритма кражи задач.

Особенности

  • интерфейс на чистом C (совместимый с C++);
  • поддержка циклов с 1 по 6 измерений с возможностью задания шага;
  • автоматическое определение числа потоков или ручное указание;
  • алгоритм кражи задач для эффективной балансировки нагрузки;
  • наличие микро-бенчмарков для измерения пропускной способности и задержек.

Основные компоненты

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

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

Центральным объектом библиотеки является непрозрачный указатель pthreadpool_t, который представляет собой пул потоков. Функции этого раздела позволяют создавать пул с нужным количеством потоков, получать информацию о нём и уничтожать его.

Основные функции управления пулом:

  • pthreadpool_t pthreadpool_create(size_t threads_count) — создаёт пул с указанным числом потоков. Если threads_count равно 0, пул создаётся с количеством потоков, равным числу процессорных ядер в системе;
  • size_t pthreadpool_get_threads_count(pthreadpool_t threadpool) — возвращает фактическое количество потоков в созданном пуле;
  • void pthreadpool_destroy(pthreadpool_t threadpool) — завершает все потоки в пуле и освобождает связанные ресурсы. Доступ к пулу после вызова этой функции приводит к неопределённому поведению.

Выполнение параллельных задач

Основное назначение библиотеки — параллельное выполнение задач над набором элементов. Пользователь предоставляет функцию обратного вызова, которая будет вызвана для каждого элемента, а библиотека распределяет эти вызовы между потоками пула.

Основные функции для распараллеливания:

  • void pthreadpool_compute_1d(pthreadpool_t threadpool, pthreadpool_function_1d_t function, void* argument, size_t range) — выполняет function для каждого элемента в диапазоне [0, range-1]. Функция должна иметь тип void (*)(void*, size_t);
  • void pthreadpool_compute_2d(pthreadpool_t threadpool, pthreadpool_function_2d_t function, void* argument, size_t range_i, size_t range_j) — выполняет двухмерную итерацию по диапазонам i и j;
  • void pthreadpool_compute_2d_tiled(pthreadpool_t threadpool, pthreadpool_function_2d_tiled_t function, void* argument, size_t range_i, size_t range_j, size_t tile_i, size_t tile_j) — выполняет двухмерную итерацию, разбивая её на прямоугольные блоки (тайлы) размером tile_i x tile_j.

Внутренняя архитектура и оптимизация

pthreadpool спроектирован с учётом требований к производительности на современных многоядерных системах:

  • Work-stealing: простаивающие потоки могут «воровать» задачи у занятых потоков, что обеспечивает равномерную загрузку всех ядер процессора;
  • Структуры данных, выровненные по кэш-линии: внутренние структуры выровнены по границе 64 байт, что предотвращает ложный обмен кэша между потоками;
  • Синхронизация без блокировок: для доступа к разделяемым счётчикам задач используются атомарные операции (__sync_val_compare_and_swap), что снижает накладные расходы на синхронизацию;
  • Условные переменные: для эффективного управления состояниями потоков используются условные переменные.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "pthreadpool/cci.20231129@aurora",
    )    

Процесс локальной сборки описан в документации.

pthreadpool

pthreadpool is a portable and efficient thread pool
Лицензия
BSD-2-Clause
Версия
Домашняя страница
Скачать
armv8
33.75 Kb
MD5: 59fac1eb210c11b595b280769240d50c
Updated: 08.04.2026, 20:06:29
armv7
31.47 Kb
MD5: aa25645c3517a3d9d4d1960699880c75
Updated: 08.04.2026, 20:06:34
x86_64
46.08 Kb
MD5: c11a3634166f9c93adefeef090632751
Updated: 08.04.2026, 20:06:35
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.