Quantcast
Channel: Статьи Intel Developer Zone
Viewing all articles
Browse latest Browse all 357

Что нового? Конструктивный компонент Intel® Threading Building Block 4.2

$
0
0

Одна из наиболее известных библиотек C++ для многопоточной обработки конструктивного компонента Intel® Threading Building Blocks была недавно обновлена на новую версию – 4.2. Обновленная версия по сравнению с предыдущей версией 4.1 содержит несколько новых важных функций. Некоторые из них уже были добавлены в обновления библиотеки конструктивного компонента Intel Threading Building Blocks 4.1.

Новая функция примитивов синхронизации speculative_spin_mutexобеспечивает поддержку для спекулятивной блокировки. Это стало возможно благодаря использованию аппаратной функции Transactional Synchronization Extensions (Intel® TSX), доступной в процессорах Intel® Core™ четвертого поколения. В процессорах, поддерживающих память для аппаратных транзакций (таких как Intel® Transactional Synchronization Extensions), спекулятивные мьютексы работают, позволяя нескольким потокам использовать одну блокировку, пока не появятся "конфликты", которые могут привести к результатам, отличным от неспекулятивной блокировки. Таким образом, последовательная обработка исключается в случаях, когда не возникает конфликтов. Это может значительно повысить производительность и масштабируемость для "кратких"и важных секций данных. Если нет аппаратной поддержки для синхронизации транзакций, спекулятивные мьютексы работают подобно своим неспекулятивным аналогам, но, вероятно, с худшей производительности.

Библиотека конструктивного компонента Intel Threading Building Blocks теперь поддерживает функцию распространения точных исключений (на основе C++11 exception_ptr). Используя exception_ptr, объекты исключений могут безопасно копироваться между потоками. Это обеспечивает гибкость в обработке исключений в многопоточной среде. Сейчас распространение точных исключений доступно в предварительных сборках двоичных программ для всех платформ: OS X*, Windows* и Linux*. В системе OS X есть два набора двоичных файлов: первый связан со стандартной библиотекой gcc, которая используется по умолчанию и не поддерживает распространение точных исключений. Для использования этой функции вы должны применять второй набор двоичных файлов, связанных со стандартной библиотекой libc++, C++ в Clang. Для их использования нужно настроить среду конструктивного компонента Intel Threading Building Blocks и выполнить сборку приложения следующим образом:

     # tbbvars.sh libc++
     # clang++ -stdlib=libc++ -std=c++11 concurrent_code.cpp -ltbb

В дополнение к контейнерам concurrent_unordered_setи concurrent_unordered_mapтеперь существуют контейнеры concurrent_unordered_multisetи concurrent_unordered_multimap, работа которых основана на прототипе Microsoft* PPL. Контейнер concurrent_unordered_multisetимеет возможность вставки элементов более чем один раз, что невозможно в контейнере concurrent_unordered_set. Аналогично, concurrent_unordered_multimapпозволяет вставлять более одной пары <ключ,значение>с одним значением ключа. Для обоих мультиконтейнеров функция поиска вернет первый элемент (или пару <ключ,значение>) в таблице с соответствующим ключом поиска.

Контейнеры конструктивного компонента Intel Threading Building Blocks теперь можно удобно инициализировать со списками значений, как это делается в C++ 11 (списки инициализации):

tbb::concurrent_vector<int> v ({1,2,3,4,5} );

В настоящее время списки инициализации поддерживаются следующими контейнерами:

concurrent_vector
concurrent_hash_map
concurrent_unordered_set
concurrent_unordered_multiset
concurrent_unordered_map
concurrent_unordered_multimap
concurrent_priority_queue

Распределитель масштабируемой памяти имеет кэш для выделенной памяти в каждом потоке. Это делается ради производительности, но часто за счет расширенного использования памяти. Хотя распределитель памяти пытается избежать ее чрезмерного использования, в сложных ситуациях библиотека конструктивного компонента Intel Threading Building Blocks 4.2 предлагает программистам наиболее полный контроль: теперь можно уменьшить использование памяти посредством очистки кэш-блоков потоков с помощью функции scalable_allocation_command(). Также было выполнено несколько других улучшений для повышения общей производительности распределителя.

Библиотека конструктивного компонента Intel Threading Building Blocks широко используется на различных платформах. Сейчас разработчики мобильных систем могут найти готовые двоичные модули для ОС Android в пакете ОС Linux. В пакет ОС Windows также были добавлены двоичные модули для приложений, размещаемых в магазине Windows Store.

Элементарные переменные tbb::atomic<T>теперь имеют конструкторы, когда используется C++11. Это позволяет разработчикам выполнять проверку их инициализации во время объявления с корректно поддерживаемыми постоянными выражениями. В настоящее время это работает с компиляторами gcc и Clang:

tbb::atomic<int> v=5;

Новая функция предварительного просмотра в сообществе позволяет ожидать, пока не будут прекращены все рабочие потоки. Это может потребоваться, если приложений разделяет процессы или, если динамическая библиотека конструктивного компонента Intel Threading Building Blocks может быть выгружена во время выполнения (например, если библиотека является частью плагина). Для начала ожидания модулями нужно следующим способом инициализировать объект task_scheduler_init:

#define TBB_PREVIEW_WAITING_FOR_WORKERS 1
tbb::task_scheduler_init scheduler_obj (threads, 0, /*wait_workers=*/true);

Новую библиотеку конструктивного компонента Intel Threading Building Blocks 4.2 можно найти как на коммерческихсайтах, так и на сайтах с открытым исходным кодом. Загружайте и пользуйтесь новыми функциональными возможностями!


Viewing all articles
Browse latest Browse all 357

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>