Перейти к содержимому

Thread rendering что это

  • автор:

Вы отправили слишком много запросов, поэтому ваш компьютер был заблокирован.

Для того, чтобы предотвратить автоматическое считывание информации с нашего сервиса, на Linguee допустимо лишь ограниченное количество запросов на каждого пользователя.
Пользователям, браузер которых поддерживает Javascript, доступно большее количество запросов, в отличие от пользователей, чей браузер не поддерживает Javascript. Попробуйте активировать Javascript в настройках вашего браузера, подождать несколько часов и снова воспользоваться нашим сервером.
Если же ваш компьютер является частью сети компьютеров, в которой большое количество пользователей одновременно пользуется Linguee,сообщитеоб этом нам.

Вводные сведения о многопоточности в Direct3D 11

Многопоточность предназначена для повышения производительности за счет одновременного использования одного или нескольких потоков.

В прошлом это часто выполнялось путем создания одного потока main для отрисовки и одного или нескольких потоков для выполнения подготовительных работ, таких как создание, загрузка, обработка и т. д. Однако при встроенной синхронизации в Direct3D 11 целью многопоточности является использование каждого цикла ЦП и GPU, не заставляя процессор ждать другого процессора (особенно не заставляя GPU ждать, так как это напрямую влияет на частоту кадров). Таким образом, вы сможете создать наибольший объем работы, сохраняя при этом оптимальную частоту кадров. Концепция одного кадра для отрисовки больше не является необходимой, так как API реализует синхронизацию.

Для многопоточности требуется определенная форма синхронизации. Например, если несколько потоков, выполняемых в приложении, должны получать доступ к одному контексту устройства (ID3D11DeviceContext), это приложение должно использовать некоторый механизм синхронизации, например критические разделы, для синхронизации доступа к данному контексту устройства. Это связано с тем, что обработка команд отрисовки (обычно выполняется на GPU) и создание команд отрисовки (обычно выполняется в ЦП с помощью создания объектов, загрузки данных, изменения состояния, обработки данных) часто используют одни и те же ресурсы (текстуры, шейдеры, состояние конвейера и т. д.). Организация работы в нескольких потоках требует синхронизации, чтобы предотвратить изменение или чтение данных, которые изменяются другим потоком.

Хотя использование контекста устройства (ID3D11DeviceContext) не является потокобезопасным, использование устройства Direct3D 11 (ID3D11Device) является потокобезопасным. Так как каждый ID3D11DeviceContext является одним потоком, только один поток может вызывать ID3D11DeviceContext одновременно. Если нескольким потокам требуется доступ к одному ID3D11DeviceContext, они должны использовать некоторый механизм синхронизации, например критические разделы, для синхронизации доступа к id3D11DeviceContext. Однако для доступа к одному ID3D11Device не требуется использовать критические разделы или примитивы синхронизации. Таким образом, если приложение использует ID3D11Device для создания объектов ресурсов, это приложение не требуется использовать синхронизацию для одновременного создания нескольких объектов ресурсов.

Поддержка многопоточности разделяет API на две отдельные функциональные области:

  • Создание объектов с помощью многопоточности
  • Немедленная и отложенная отрисовка

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

Direct3D 11 был разработан с нуля для поддержки многопоточности. Direct3D 10 реализует ограниченную поддержку многопоточности, используя потокобезопасный уровень. На этой странице перечислены различия в поведении между двумя версиями DirectX: Потоковые различия между версиями Direct3D.

Многопоточность и DXGI

Только один поток за раз должен использовать непосредственный контекст. Однако приложение также должно использовать этот же поток для операций инфраструктуры графики Microsoft DirectX (DXGI), особенно когда приложение вызывает метод IDXGISwapChain::P resent .

Недопустимо использовать непосредственный контекст одновременно с большинством функций интерфейса DXGI. Для пакетов SDK DirectX за март 2009 г. и более поздних версий единственными безопасными функциями DXGI являются AddRef, Release и QueryInterface.

Дополнительные сведения об использовании DXGI с несколькими потоками см. в разделе Рекомендации по многопотоковой работе.

Многопоточность

Подумалось тут. Всем известно, что макс многие операции делает одним потоком. Отсюда получается, что если включен НТ, т.е. вместо, скажем 4 физических ядер у вас 8 виртуальных потоков, то операция будет выполняться одним потоком, т.е. половиной одного ядра. Проверил в диспетчере задач. И действительно, при выполнении такой однопоточной задачи процессор нагружен на 12,5 % (1/8 от общей загрузки) вместо 25% если бы НТ не был включен и потоков было бы столько же, сколько и ядер. Т.е. выходит, что лучше НТ отключить что ли?
Вообщем я в недоумении.

Терен Тамабрахама
Мастер

Рейтинг 199
А что за НТ?

ЛМА
Смотритель

Рейтинг 1 172
А что за НТ?

. Странный вопрос. НТ это Hyper-threading Технология разделения физического ядра на два виртуальных для увеличения производительности многопоточных задач. С 2002 года применяется, еще с Пентиума 4. Повышает производительность на 30% в идеале. Система понимает эти виртуальные ядра как отдельные физические ядра и показывает их в диспетчере задач как отдельные ядра. Эта функция есть не у всех процессоров.
В характеристиках процессоров так и пишут, например : 8 ядер 16 потоков, вот эти 16 потоков и есть работа НТ. если эту функцию отключить в биосе, то будет 8 потоков, столько же, сколько и ядер.

Последнее редактирование: 22 ноя 2021

damien
Мастер

Рейтинг 833

. Странный вопрос. НТ это Hyper-threading Технология разделения физического ядра на два виртуальных для увеличения производительности многопоточных задач. С 2002 года применяется, еще с Пентиума 4. Повышает производительность на 30% в идеале. Система понимает эти виртуальные ядра как отдельные физические ядра и показывает их в диспетчере задач как отдельные ядра. Эта функция есть не у всех процессоров.
В характеристиках процессоров так и пишут, например : 8 ядер 16 потоков, вот эти 16 потоков и есть работа НТ. если эту функцию отключить в биосе, то будет 8 потоков, столько же, сколько и ядер.

А можете перечислить эти многопоточные задачи, где, когда надо их ставить и решать? Может и ссылку на информацию о них в уроках интернета?

ЛМА
Смотритель

Рейтинг 1 172
А можете перечислить эти многопоточные задачи, где, когда надо их ставить и решать?

Я то откуда могу знать чего вы там у себя на компе делаете. Включите диспетчер задач и сами посмотрите какие задачи у вас многопоточные, а какие однопточные, смотреть в разделе «быстродействие» в графике «Загрузка ЦП», там отображается загрузка всего ЦП, и в графиках «Хронология загрузки ЦП», там отображается загрузка потоков. И если у вас процессор без НТ, то количество потоков будет равно количеству ядер (в диспетчере задач это показывает количество графиков в разделе «Хронология загрузки ЦП», каждый график для одного потока) , а если процессор с НТ, то количество потоков (количество этих графиков) будет в 2 раза больше, чем количество ядер.

Что же касается 3Д, то там точно многопоточная задача это рендер, отсюда чем больше ядер и потоков, тем рендер быстрее.
А однопоточные задачи это в основном работа в вьюпорте (моделирование), отсюда чем выше производительность процессора на одно ядро, тем легче работать в вьюпорте. Вот последнее я и имел ввиду в этой теме, потому как получается, что работает не одно ядро все целиком, а только один поток, т.е. часть ядра разделенного на потоки технологией НТ.

А ставить (включать) их негде, они сами ставятся автоматически. Какие они есть, как их программисты написали, такие они и есть. Одни однопоточные, другие многопоточные. Программисты конечно стараются все задачи делать многопоточными, но не всегда это возможно технически. Вот работу в вьюпорте так и не смогли сделать многопоточной.

Последнее редактирование: 22 ноя 2021

damien
Мастер

Рейтинг 833

Я то откуда могу знать чего вы там у себя на компе делаете. Включите диспетчер задач и сами посмотрите какие задачи у вас многопоточные, а какие однопточные, смотреть в разделе «быстродействие» в графике «Загрузка ЦП», там отображается загрузка всего ЦП, и в графиках «Хронология загрузки ЦП», там отображается загрузка потоков. И если у вас процессор без НТ, то количество потоков будет равно количеству ядер (в диспетчере задач это показывает количество графиков в разделе «Хронология загрузки ЦП», каждый график для одного потока) , а если процессор с НТ, то количество потоков (количество этих графиков) будет в 2 раза больше, чем количество ядер.

Что же касается 3Д, то там точно многопоточная задача это рендер, отсюда чем больше ядер и потоков, тем рендер быстрее.
А однопоточные задачи это в основном работа в вьюпорте (моделирование), отсюда чем выше производительность процессора на одно ядро, тем легче работать в вьюпорте. Вот последнее я и имел ввиду в этой теме, потому как получается, что работает не одно ядро все целиком, а только один поток, т.е. часть ядра разделенного на потоки технологией НТ.

А ставить (включать) их негде, они сами ставятся автоматически. Какие они есть, как их программисты написали, такие они и есть. Одни однопоточные, другие многопоточные. Программисты конечно стараются все задачи делать многопоточными, но не всегда это возможно технически. Вот работу в вьюпорте так и не смогли сделать многопоточной.

Спасибо, конечно, но я не об этом-то спрашивал, даже выделил жирным то, что интересовало, ну не знаете, что у меня, так напишите какие «многопоточные задачи» вы решаете на своём компе. Я же не программист, а для увеличения скорости мне достаточно увеличить оперативню память, это реально ощутимо будет.

Модель потоков¶

Рендерер React Native распределяет работу конвейера рендеринга между несколькими потоками.

Здесь мы определим модель потоков и приведем несколько примеров, иллюстрирующих использование потоков в конвейере рендеринга.

Рендерер React Native спроектирован таким образом, чтобы быть потокобезопасным. На высоком уровне безопасность потоков гарантируется использованием неизменяемых структур данных во внутренних компонентах фреймворка (что обеспечивается функцией «const correctness» в C++). Это означает, что каждое обновление в React создает или клонирует новые объекты в рендере вместо обновления структур данных. Это позволяет фреймворку предоставлять потокобезопасные и синхронные API для React.

Рендерер использует три различных потока:

  • Поток пользовательского интерфейса (часто называемый основным): Единственный поток, который может манипулировать представлениями хоста.
  • Поток JavaScript: Здесь выполняется фаза рендеринга React.
  • Фоновый поток: Поток, предназначенный для компоновки.

Давайте рассмотрим поддерживаемые сценарии выполнения для каждой фазы:

Threading model symbols

Сценарии рендеринга¶

Рендеринг в фоновом потоке¶

Это наиболее распространенный сценарий, когда большая часть конвейера рендеринга происходит на JavaScript и в фоновом потоке.

Threading model use case one

Рендеринг в потоке пользовательского интерфейса¶

Когда на UI Thread происходит событие с высоким приоритетом, рендерер может выполнить весь конвейер рендеринга синхронно на UI thread.

Threading model use case two

Прерывание по умолчанию или непрерывное событие¶

Этот сценарий показывает прерывание фазы рендеринга событием с низким приоритетом в потоке пользовательского интерфейса. React и рендерер React Native способны прервать фазу рендеринга и объединить ее состояние с событием с низким приоритетом, которое выполняется в потоке UI. В этом случае процесс рендеринга продолжает выполняться в фоновом потоке.

Threading model use case three

Прерывание по дискретному событию¶

Фаза рендеринга может прерываться. Этот сценарий показывает прерывание фазы рендеринга высокоприоритетным событием в потоке пользовательского интерфейса. React и рендерер могут прервать фазу рендеринга и объединить ее состояние с высокоприоритетным событием, которое было выполнено в потоке UI. Фаза рендеринга выполняется синхронно в потоке UI.

Threading model use case four

Фоновый поток собирает обновления от JavaScript¶

Прежде чем фоновый поток отправит обновление потоку UI, он проверяет, не поступило ли более новое обновление от JavaScript. Таким образом, рендерер не выводит устаревшее состояние, когда знает, что придет более новое состояние.

Threading model use case five

Обновление состояния C++¶

Обновление происходит в потоке пользовательского интерфейса и пропускает фазу рендеринга. Подробнее см. в React Native Renderer State Updates.

Threading model use case six

Комментарии

(C) 2021-2023, Справочник React Native разработчика

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the «Software»), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. —>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *