<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Fastvideo</title><subtitle>Быстрая обработка изображений и видео.</subtitle><author><name>Fastvideo</name></author><id>https://teletype.in/atom/fastvideo</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/fastvideo?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@fastvideo?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fastvideo"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/fastvideo?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-07-27T19:55:44.652Z</updated><entry><id>fastvideo:jpeg2000-applications-part2</id><link rel="alternate" type="text/html" href="https://teletype.in/@fastvideo/jpeg2000-applications-part2?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fastvideo"></link><title>Часть 2: JPEG2000 в науке и медицине. Ограничения формата JP2</title><published>2021-01-13T19:24:43.097Z</published><updated>2021-01-13T19:24:43.097Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/60/48/60480868-9106-45f2-af83-3b3205242ea1.png"></media:thumbnail><category term="jpeg-2000" label="JPEG2000"></category><tt:hashtag>j2k</tt:hashtag><tt:hashtag>jpeg2000</tt:hashtag><tt:hashtag>cuda</tt:hashtag><tt:hashtag>fastvideo</tt:hashtag><tt:hashtag>cinema</tt:hashtag><summary type="html">&lt;img src=&quot;https://www.fastvideo.ru/img/blog/jpeg2000app/jpeg2000_science_healthcare.png&quot;&gt;В первой части серии статей “JPEG2000 в кино, науке, медицине и не только” мы поговорили о ключевых технологиях JPEG2000 и сфокусировались на его применимости в цифровом кино. В этой части мы хотели бы продолжить разговор об особенностях, рассказать о главном недостатке JPEG2000 и рассмотреть другие области, где он оказался крайне востребованным. А также представить решение, позволяющее сделать работу с ним существенно удобней.</summary><content type="html">
  &lt;p&gt;В первой части серии статей “JPEG2000 в кино, науке, медицине и не только” мы поговорили о ключевых технологиях JPEG2000 и сфокусировались на его применимости в цифровом кино. В этой части мы хотели бы продолжить разговор об особенностях, рассказать о главном недостатке JPEG2000 и рассмотреть другие области, где он оказался крайне востребованным. А также представить решение, позволяющее сделать работу с ним существенно удобней.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://www.fastvideo.ru/img/blog/jpeg2000app/jpeg2000_science_healthcare.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;JPEG2000 в науке и медицине&lt;/h2&gt;
  &lt;p&gt;&lt;strong&gt;Поддержка window mode&lt;/strong&gt; — одна из немаловажных особенностей, которая привлекает внимание к JPEG2000. Учёным нередко приходится работать с файлами просто огромного разрешения, ширина и высота которых могут превосходить 40 000 пикселей. Но интерес представляет лишь небольшая его часть. Привычному JPEG для работы с таким изображением пришлось бы декодировать его целиком, а JPEG2000 позволяет декодировать лишь выбранную область.&lt;/p&gt;
  &lt;p&gt;JP2 используется также и для съёмки в космосе. Все эти чудесные фотографии Марса, сделанные, например, на камеру &lt;a href=&quot;https://en.m.wikipedia.org/wiki/HiRISE&quot; target=&quot;_blank&quot;&gt;HiRISE&lt;/a&gt; — его заслуга. Однако, канал передачи данных из космоса на Землю подвержен влиянию помех, поэтому при передаче могут появиться ошибки или даже могут быть потеряны целые пакеты данных. Рассматриваемый формат при включении специального режима устойчив к ошибкам, возникающим, когда устройства связи или хранения ненадежны. Такой режим позволяет производить коррекцию ошибок, возникающих при потере данных во время передачи. Достигается это следующим образом: сперва изображение делится на небольшие блоки (например, 32x32 или 64x64 пикселя), затем после предварительных преобразований каждая битовая плоскость кодируется отдельно. Таким образом, потерянный бит может испортить лишь одну битовую плоскость, а это обычно незначительно сказывается на качестве изображения в целом. К слову, у JPEG потеря бита может привести к полной непригодности части или даже всего изображения.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://www.fastvideo.ru/img/blog/jpeg2000app/TRA_000823_1720_color.jpg&quot; width=&quot;799&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;em&gt;Самый первый снимок Марса в высоком разрешении от HiRISE (29 сентября 2006 года), &lt;a href=&quot;https://www.uahirise.org/TRA_000823_1720&quot; target=&quot;_blank&quot;&gt;оригинал здесь&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;О работе специального режима с проверкой на целостность информации в файле формата JPEG2000. В сжатый файл добавляется дополнительная информация, позволяющая проверить корректность данных. Без этой информации мы зачастую не можем определить при декодировании, есть ошибка или нет, и продолжаем процесс как ни в чём не бывало: в результате, всё ещё возможна ситуация, в которой даже один ошибочный бит портит достаточно большую часть картинки. А если такой режим включен, то мы обнаруживаем ошибку при её появлении и можем ограничить её влияние на другие части картинки.&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Формат не остался незамеченным и в медицине. Здесь крайне важна поддержка такой разрядности исходных данных, которая бы позволила зафиксировать все тонкости цвета каждой изучаемой области нашего организма. JPEG2000 используется в томографии, рентгеновских снимках, МРТ, КТ и т.д. И все получаемые изображения обязаны в соответствии с требованием FDA (Food and Drug Administration) храниться в том виде, в котором были получены — без потерь. JPEG2000 идеально подходит для этой задачи.&lt;/p&gt;
  &lt;p&gt;Ещё одна интересная возможность JPEG2000 — &lt;strong&gt;сжатие трёхмерных массивов данных&lt;/strong&gt;. Она может быть весьма актуальна как в науке, так и в медицине (например, трёхмерные результаты томографии). Сжатию таких данных посвящена 10-я часть стандарта JPEG2000: JP3D (volumetric imaging).&lt;/p&gt;
  &lt;h3&gt;Ограничения формата JP2&lt;/h3&gt;
  &lt;p&gt;К сожалению, с JP2 (JPEG2000) не все так просто — собственно, поэтому он практически не используется веб-браузерами (за исключением Safari). Формат является вычислительно сложным, и существующие кодеки с открытым исходным кодом на протяжении многих лет были слишком медленными для активного использования. Даже сейчас, когда скорость процессоров растет с каждым новым поколением, а кодеки оптимизируются и ускоряются, их возможности — всё ещё не предел мечтаний. Для иллюстрации важности скорости работы кодека вернёмся на минуту к разговору о цифровом кино. Конкретно — к созданию DCP (Digital Cinema Package) пакетов, того самого набора файлов, которым мы наслаждаемся в кинотеатрах. Напомним, что JPEG2000 является стандартом для цифрового кино, а, соответственно, необходим и для создания DCP-пакета. К сожалению, его вычислительная сложность делает данную задачу довольно ресурсоёмкой и затратной по времени. Более того, существующие кодеки с открытым исходным кодом не позволяют декодировать фильмы с требуемой частотой 25, 30 или 60 кадров в секунду для 12-битных данных при разрешениях уже в 2К или в 4К.&lt;/p&gt;
  &lt;h3&gt;Можно ли работать с JPEG2000 быстрее?&lt;/h3&gt;
  &lt;p&gt;В JPEG2000 предусмотрены режимы для работы на более высокой скорости, но достигается это за счёт небольшого снижения качества или коэффициента сжатия. Однако далеко не для всех задач даже такая небольшая цена приемлема.&lt;/p&gt;
  &lt;p&gt;Для ускорения работы с JPEG2000 мы в Fastvideo разработали свою реализацию &lt;a href=&quot;https://www.fastvideo.ru/products/cuda-jpeg2000-codec.htm&quot; target=&quot;_blank&quot;&gt;кодека JPEG2000&lt;/a&gt;. В основе нашего решения лежит технология NVIDIA CUDA, благодаря которой стало возможным сделать параллельную реализацию кодера и декодера, задействовав все ядра CPU и GPU. В результате, наше решение работает намного быстрее аналогов и дает принципиально новые возможности пользователям. Мы верим, что наше решение позволит существенно ускорить работу с форматом тех, кто уже выбрал JP2, и приумножить их число. А, соответственно, и сделать качественные изображения куда более доступными для всех специалистов в областях, нуждающихся в оригинальном качестве.&lt;/p&gt;
  &lt;tt-tags&gt;
    &lt;tt-tag name=&quot;j2k&quot;&gt;#j2k&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;jpeg2000&quot;&gt;#jpeg2000&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;cuda&quot;&gt;#cuda&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;fastvideo&quot;&gt;#fastvideo&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;cinema&quot;&gt;#cinema&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt;Оригинал статьи: &lt;a href=&quot;https://www.fastvideo.ru/blog/jpeg2000-applications-part2.htm&quot; target=&quot;_blank&quot;&gt;https://www.fastvideo.ru/blog/jpeg2000-applications-part2.htm&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fastvideo:jpeg2000-applications-part1</id><link rel="alternate" type="text/html" href="https://teletype.in/@fastvideo/jpeg2000-applications-part1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fastvideo"></link><title>JPEG2000 в кино, науке, медицине и бродкастинге</title><published>2021-01-13T19:21:29.412Z</published><updated>2021-01-13T19:21:29.412Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/4f/bc/4fbce8a5-1f2e-443a-994f-82ece5e380da.png"></media:thumbnail><category term="jpeg-2000" label="JPEG2000"></category><tt:hashtag>j2k</tt:hashtag><tt:hashtag>jpeg2000</tt:hashtag><tt:hashtag>cuda</tt:hashtag><tt:hashtag>fastvideo</tt:hashtag><summary type="html">&lt;img src=&quot;https://www.fastvideo.ru/img/blog/jpeg2000app/jpeg2000_digital_cinema.png&quot;&gt;Представляем вам серию из двух статей, посвященных JPEG2000. В первой части мы расскажем о ключевых технологиях алгоритма и о том, почему он стал таким востребованным в цифровом кино и телевещании. Во второй части разговор пойдёт о других областях его применимости и важных для них особенностях JPEG2000. Также расскажем о его главном недостатке и представим решение, позволяющее существенно повысить удобство работы с JPEG2000.</summary><content type="html">
  &lt;p&gt;Представляем вам серию из двух статей, посвященных JPEG2000. В первой части мы расскажем о ключевых технологиях алгоритма и о том, почему он стал таким востребованным в цифровом кино и телевещании. Во второй части разговор пойдёт о других областях его применимости и важных для них особенностях JPEG2000. Также расскажем о его главном недостатке и представим решение, позволяющее существенно повысить удобство работы с JPEG2000.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://www.fastvideo.ru/img/blog/jpeg2000app/jpeg2000_digital_cinema.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Часть 1: JPEG2000 в цифровом кино и телевещании. Особенности формата JP2&lt;/h2&gt;
  &lt;p&gt;Мир кино покорил сердца людей сразу с момента своего появления. Все смеялись над фильмами Чарли Чаплина и ужасались Птицам Хичкока. От немого и чёрно-белого кино (вдумайтесь — всего чуть больше, чем за век) индустрия шагнула в мир IMAX. Изображение стало настолько чётким и живым, что мы моментально погружаемся в новую реальность, рисуемую автором на экране.&lt;/p&gt;
  &lt;p&gt;Но знаете ли вы, что позволяет создавать такие сочные и завораживающие кадры? Почему картинка на экранах в IMAX так отлична от той, что мы видим дома на своем TV? Оказывается, дело в алгоритме сжатия и используемом формате изображений.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;JP2 - это формат файлов для изображений, сжатых по алгоритму JPEG2000.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3&gt;JPEG2000 в цифровом кино&lt;/h3&gt;
  &lt;p&gt;В цифровом кино (и не только, но об этом позже) уже давно и активно используется формат JP2. Он был создан в 2000 году, а выбран в качестве стандарта для цифрового кино инициативной группой Digital Cinema Initiatives (DCI), в состав которой входили такие компании как Disney, Fox, Paramount, MGM, Sony Pictures Entertainment, Universal и Warner Bros. Studios, в 2004 году. В этом же году в первую часть стандарта JPEG2000 были внесены поправки посвященные цифровому кино.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Для цифрового кино хорошее сжатие было просто необходимым. Полуторачасовой фильм в разрешении 2К или 4K с разрядностью цветовых каналов 12 бит и частотой 24 кадр/с, сжатый с помощью JPEG2000 при стандартном битрейте в 250 Мбит/с, занимает в результате не более 160 гигабайт.&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Алгоритм сжатия JPEG2000, благодаря которому мы можем наслаждаться прекрасным изображением в IMAX, основан на двух ключевых технологиях — дискретного вейвлет-преобразования (DWT) и встроенного блочного кодирования с оптимизированным усечением (EBCOT). У каждого из них своя важная роль:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;DWT создает многомасштабное представление картинки для выделения пространственных и частотных компонент изображения. Это позволяет, например, просматривать фильм, сохранённый с разрешением 4K, в разрешении 2K;&lt;/li&gt;
    &lt;li&gt;EBCOT позволяет упорядочивать информацию о пикселях каждого кодируемого блока по важности, обеспечивая таким образом плавное ухудшение качества картинки при увеличении степени сжатия.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;Особенности формата: 12 бит и опция сжатия без потерь&lt;/h3&gt;
  &lt;p&gt;Итак, поговорим о JPEG2000, его особенностях и областях применения. Почему же картинка в JP2 такая сочная? Глубина цвета! Одним из практически важных достоинств формата является работа с данными большой битности. Проще говоря, он позволяет описывать один пиксель изображения, используя большее количество бит, чем может отображать монитор, не предназначенный для профессиональной работы с цветом, а, значит, и хранить больше информации о цвете. Сравните изображения в привычном JPEG (8 бит на канал) с изображением в уже упоминаемом IMAX, где используются 12-битные изображения. 8-битная картинка просто не способна передать такой диапазон цвета и яркости, как 12-битная, в результате качество изображения отличается принципиально.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://www.fastvideo.ru/img/blog/jpeg2000app/8bit_vs_12bit.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Ещё одним немаловажным достоинством алгоритма JPEG2000 является &lt;strong&gt;соотношение между коэффициентом сжатия и качеством изображения&lt;/strong&gt; (измеренным по любой метрике). От сжатия зависит, сколько будет &amp;quot;весить&amp;quot; файл, а, соответственно, и как быстро будет осуществляться его передача. Также от сжатия зависит и качество восстановленного изображения — наличие артефактов, согласитесь, никого не приводит в восторг.&lt;/p&gt;
  &lt;p&gt;Благодаря использованию вейвлетов (DWT) при высоких степенях сжатия изображения в JP2 не обзаводятся такими бросающимися в глаза артефактами, как у его предшественника JPEG — при сжатии проявляются границы квадратов 8x8 пикселей. Полностью артефактов избежать невозможно, но визуально они куда менее заметны. В результате, JPEG2000 позволяет сжимать изображения сильнее, а терять в качестве гораздо меньше, чем при таких же степенях сжатия позволяет JPEG. Более подробное сравнение JPEG2000 с JPEG вы можете найти в одной из наших &lt;a href=&quot;https://www.fastcompression.com/blog/jpeg-j2k-png-review.htm&quot; target=&quot;_blank&quot;&gt;статей&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Стоит отметить, что JPEG2000 позволяет в рамках одной архитектуры сжимать как с потерями (изображение становится чуть более размытым при восстановлении), так и математически без потерь. Изображение, в зависимости от его содержимого, можно сжать без потерь до 2,5 раз, сократив при этом объем занимаемой им памяти до 60%. Конечно, всегда есть исключения, и не всякое изображение можно сжать настолько и совсем без потерь. Однако, для многих фотографий это вполне достижимо. В любом случае, такие возможности сжатия очень востребованы везде, где требуется длительное время в сжатом виде хранить большой объем данных: документацию, изображения и видео с сохранением возможности восстановления без потерь. Например, в библиотеках, музеях и т.д.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Сжатие без потерь актуально в задачах, где выполняется или в будущем будет выполняться глубокий анализ изображения или многоэтапная обработка (а каждый их этап может вносить дополнительные потери); там, где небольшие детали, полученные на пределе чувствительности камеры, могут иметь большое значение. Примеры: диагностика заболеваний на ранней стадии, исследования нанообъектов и процессов на пределе чувствительности микроскопа, изучение очень далёких космических объектов и процессов.&lt;/strong&gt;&lt;/p&gt;
  &lt;h3&gt;JPEG2000 в цифровом телевещании&lt;/h3&gt;
  &lt;p&gt;Продолжая разговор о сжатии, нельзя не сказать о спортивных трансляциях, например футбольных и баскетбольных матчей. Во время трансляции ещё не сжатое видео с камеры передается на специальную приставку, где происходит сжатие изображений JPEG2000. Далее, уже в формате JP2, они передаются на сервер, где вновь идет перекодировка для создания видео, подходящего для нашего с вами просмотра. В данном случае важны как быстрая передача изображений, так и сохранность его качества. В JPEG2000 используется, уже упоминаемое, кодирование EBCOT, которое позволяет выбирать порядок хранения разрешений, слоёв качества, цветовых компонент и позиций. Благодаря ему JPEG2000 поддерживает &lt;strong&gt;динамическое распределение качества&lt;/strong&gt;. Другими словами, он позволяет автоматически регулировать объём передаваемых данных в зависимости от пропускной способности канала. Таким образом на сервера быстро поступают изображения максимально возможного качества для данного IP-канала.&lt;/p&gt;
  &lt;p&gt;Продолжение следует...&lt;/p&gt;
  &lt;tt-tags&gt;
    &lt;tt-tag name=&quot;j2k&quot;&gt;#j2k&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;jpeg2000&quot;&gt;#jpeg2000&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;cuda&quot;&gt;#cuda&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;fastvideo&quot;&gt;#fastvideo&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;
  &lt;p&gt;Оригинальная статья: &lt;a href=&quot;https://www.fastvideo.ru/blog/jpeg2000-applications-part1.htm&quot; target=&quot;_blank&quot;&gt;https://www.fastvideo.ru/blog/jpeg2000-applications-part1.htm&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fastvideo:remote-colour-grading</id><link rel="alternate" type="text/html" href="https://teletype.in/@fastvideo/remote-colour-grading?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fastvideo"></link><title>Как сделать цветокор через удалённый доступ?</title><published>2021-01-12T06:53:08.362Z</published><updated>2021-01-12T06:54:36.941Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/13/d3/13d3171d-4e1e-4a3a-a77d-e0a136992d25.png"></media:thumbnail><category term="jpeg-2000" label="JPEG2000"></category><tt:hashtag>jpeg2000</tt:hashtag><tt:hashtag>j2k</tt:hashtag><tt:hashtag>fastvideo</tt:hashtag><tt:hashtag>cinema</tt:hashtag><summary type="html">&lt;img src=&quot;https://www.fastvideo.ru/img/blog/postproduction/remote-color-grading_black.png&quot;&gt;Одним из ключевых моментов в создании успешной кинематографической картины является качественная постобработка, когда вся команда трудится над созданием идеальных кадров. Ситуации, когда возникает необходимость организовать удаленную работу команды постобработки, не редкость в цифровом кино. Например, если вы хотите избежать дополнительных расходов на поездки и аренду помещения, или, возможно, вам необходимо собрать для работы вместе лучших специалистов, где бы они ни находились. Однако как лучше всего организовать удаленную работу?</summary><content type="html">
  &lt;p&gt;Одним из ключевых моментов в создании успешной кинематографической картины является качественная постобработка, когда вся команда трудится над созданием идеальных кадров. Ситуации, когда возникает необходимость организовать удаленную работу команды постобработки, не редкость в цифровом кино. Например, если вы хотите избежать дополнительных расходов на поездки и аренду помещения, или, возможно, вам необходимо собрать для работы вместе лучших специалистов, где бы они ни находились. Однако как лучше всего организовать удаленную работу?&lt;/p&gt;
  &lt;p&gt;Теоретически, для работы колористу можно перевести всё необходимое оборудование на дом. Однако, по какой-то причине это может оказаться непрактичным, и вопрос об организации удаленной работы остальных ченов команды остается открытым. Более жизнеспособным решением, является организация удаленного доступа. В таком случае, каждому из команды пост-обработки необходимо иметь под рукой профессиональный монитор и компьютер с одной из программ для удалённой работы (TeamViewer, AnyDesk, Google Remote Desktop и т.д.) и доступ в интернет. Основная сложность при таком варианте заключается в передаче высококачественного изображения. Дело в том, что ни Skype, ни Zoom, ни другие программы для видеоконференций не поддерживают передачу 10-битных или 12-битных кадров.&lt;/p&gt;
  &lt;p&gt;Мы в Fastvideo создали свое решение для такого рода задач: приложениe Live Remote Color Grading. Оно не заменяет программы для удаленной работы или программы цветокоррекции (Blackmagic Davinci Resolve, Adobe Premiere Pro, AVID Media Composer, Baselight и т. д.), а работает вместе с ними и решает конкретные задачи: приема, кодирования, передачи, декодирования и визуализации изображений в высоком качестве там, где это требуется.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://www.fastvideo.ru/img/blog/postproduction/remote-color-grading_black.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;На левом мониторе изображение, полученное с помощью Live Remote Color Grading с удаленного PC, на правом работа на удаленном PC в программе цветокоррекции Davinci Resolve&lt;/p&gt;
  &lt;h3&gt;Возможности софта&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Программное обеспечение с низкой задержкой&lt;/li&gt;
    &lt;li&gt;Быстрая и надежная передача данных по внутренней или общедоступной сети&lt;/li&gt;
    &lt;li&gt;Быстрое получение и обработка потоков SD / HD-SDI и 3G-SDI (распаковка, упаковка, преобразование)&lt;/li&gt;
    &lt;li&gt;Кодирование и декодирование JPEG2000 (J2K) в реальном времени (с потерями или без потерь)&lt;/li&gt;
    &lt;li&gt;Высокое качество изображения&lt;/li&gt;
    &lt;li&gt;Точная цветопередача&lt;/li&gt;
    &lt;li&gt;Максимальная разрядность (10 или 12 бит на канал)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Как работает наше приложение? Подробно со всеми техническими моментами можно ознакомиться на нашем сайте в статье, посвященной удалённой цветокоррекции, где мы дали исчерпывающие рекомендации по аппаратному и программному обеспечению. В данной статье ограничимся рассмотрением базовой схемы работы нашего приложения:&lt;/p&gt;
  &lt;h3&gt;Базовая схема работы софта и оборудования&lt;/h3&gt;
  &lt;p&gt;Источник видео (видео в основной полосе частот) -&amp;gt; Устройство захвата (DeckLink) -&amp;gt; Распаковка SDI на графическом процессоре -&amp;gt; Кодер J2K на графическом процессоре -&amp;gt; Брандмауэр объекта (IPsec VPN) -&amp;gt; Общедоступный Интернет -&amp;gt; Удаленный межсетевой экран (IPsec VPN) - &amp;gt; Декодер J2K на GPU -&amp;gt; Упаковка SDI на GPU -&amp;gt; Устройство вывода (DeckLink) -&amp;gt; Отображение видео (видео в основной полосе частот)&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://www.fastvideo.ru/img/blog/postproduction/remote-colour-grading-review.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Хотелось бы поделиться несколькими историями наших клиентов, уже оценивших удобство использования программы Live Remote Color Grading для удаленной цветокоррекции:&lt;/p&gt;
  &lt;p&gt;Одному из наших клиентов, колористу, в связи с Covid-19 пришлось уйти в оплачиваемый отпуск. Оставшись дома, он решил продолжить работу в своей сфере и стал брать заказы на удаленную цветокоррекцию. Его навыки оказались очень востребованными и ему пришлось вести несколько проектов одновременно. Более того, проекты были горящими и все корректировки, и согласования приходилось делать быстро и порой в режиме реального времени. Наше приложение позволило сделать этот процесс возможным и удобным как для колориста, так и для его заказчиков. Команды постобработки удаленно отсматривали вместе с ним получившийся материал и предлагала свои корректировки, которые колорист вносил по ходу просмотра и полученный результат сразу отображался у них на мониторах. Такой процесс позволил полностью избежать необходимости оффлайн встреч, к тому же позволил нашему клиенту вести несколько проектов одновременно и работать в привычных ему программах для цветокоррекции.&lt;/p&gt;
  &lt;p&gt;Другой клиент, кинематографическая компания, столкнулась с ситуацией, когда для успешной пост-обработки требовался узкий специалист из другого штата. Но бюджет не предполагал множественные командировки и компании пришлось выбирать между удаленной работой с известным профессионалом и поиском другого специалиста для цветокоррекции. Компания воспользовалась возможностями нашего приложения и без лишних затрат смогла быстро наладить удаленную работу с желаемым специалистом.&lt;/p&gt;
  &lt;p&gt;Как видно, наше приложение позволяет быстро внедрить удаленную цветокоррекцию в рабочий процесс без необходимости изучения новых программ для цветокоррекции или долгой настройки программного обеспечения. Для работы с ним достаточно обычного PC с видеокартой NVIDIA (необходима для работы Live Remote Color Grading), профессионального монитора и доступа к интернету. Стоит заметить, что существует ряд известных аппаратных решений для задачи удаленной цветокоррекции, такие как Nevion, Streambox, Sohonet. Они надежные, но очень дорогие. Решение Fastvideo требует для работы меньше оборудования, а предлагает такое же высокое качество, низкую задержку и меньшую стоимость. В результате вся команда постобработки без лишних затрат больше не будет привязана к конкретному месту, а для организации совместного просмотра картины и обсуждения спорных моментов достаточно иметь под рукой профессиональный монитор или TV поддерживающее высокую глубину цвета, домашний компьютер и интернет.&lt;/p&gt;
  &lt;tt-tags&gt;
    &lt;tt-tag name=&quot;jpeg2000&quot;&gt;#jpeg2000&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;j2k&quot;&gt;#j2k&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;fastvideo&quot;&gt;#fastvideo&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;cinema&quot;&gt;#cinema&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry><entry><id>fastvideo:cpu-vs-gpu-fast-image-processing</id><link rel="alternate" type="text/html" href="https://teletype.in/@fastvideo/cpu-vs-gpu-fast-image-processing?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fastvideo"></link><title>Быстрая обработка изображений: GPU vs CPU</title><published>2021-01-07T10:57:20.517Z</published><updated>2021-01-07T10:57:20.517Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/63/5f/635f3640-07de-46f2-b37c-a586882e0336.png"></media:thumbnail><category term="jpeg" label="JPEG"></category><summary type="html">&lt;img src=&quot;https://teletype.in/files/26/72/2672d199-ca7d-40ef-92e3-d6897fb005df.png&quot;&gt;За последнее десятилетие технологическое развитие графических процессоров продвинулось настолько далеко, что они могут с успехом конкурировать с традиционными решениями (например, с центральными процессорами) и применяться для широкого спектра задач, в том числе связанных с быстрой обработкой изображений.</summary><content type="html">
  &lt;h2&gt;I. Введение&lt;/h2&gt;
  &lt;p&gt;За последнее десятилетие технологическое развитие графических процессоров продвинулось настолько далеко, что они могут с успехом конкурировать с традиционными решениями (например, с центральными процессорами) и применяться для широкого спектра задач, в том числе связанных с быстрой обработкой изображений.&lt;/p&gt;
  &lt;p&gt;В данной статье пойдёт речь о возможностях графического и центрального процессоров выполнять задачи быстрой обработки изображений. Мы проведём сравнение двух типов процессоров и покажем преимущества GPU перед CPU, ответим на вопрос почему обработка изображений на GPU может быть более эффективной по сравнению с аналогичными решениями на CPU.&lt;/p&gt;
  &lt;p&gt;Кроме того, мы рассмотрим часто встречающиеся заблуждения пользователей и разработчиков, которые мешают им использовать GPU для быстрой обработки изображений.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/26/72/2672d199-ca7d-40ef-92e3-d6897fb005df.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;II. Особенности алгоритмов быстрой обработки изображений&lt;/h2&gt;
  &lt;p&gt;Для целей нашей статьи из всего многообразия алгоритмов быстрой обработки изображений мы возьмём только те, которые обладают такими характеристиками, как локальность, возможность распараллеливания и их относительная простота. Поясним более подробно, что мы имеем в виду:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Локальность&lt;/strong&gt;. Каждый пиксел вычисляется на основе ограниченного количества соседей.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Высокая способность к распараллеливанию&lt;/strong&gt;. Каждый пиксел не зависит по данным от других обработанных пикселей, что позволяет распараллелить процесс обработки.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;16/32-битная точность арифметики&lt;/strong&gt;. Как правило, при обработке изображений достаточно 32-битной вещественной (floating point) арифметики для обработки и 16-битного целочисленного типа данных для хранения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;Критерии, которые важны для быстрой обработки изображений&lt;/h3&gt;
  &lt;p&gt;Ключевыми критериями, важными для быстрой обработки изображений, являются:&lt;/p&gt;
  &lt;h4&gt;1. Производительность&lt;/h4&gt;
  &lt;p&gt;Как показывает практика, максимальной производительности можно добиться двумя способами - либо через увеличение аппаратных ресурсов, то есть с помощью наращивания количества процессоров, либо через оптимизацию программного кода. При сравнении возможностей графического процессора и центрального, в этом классе задач GPU выигрывает у CPU в соотношении цена/производительность, а реализация всего потенциала GPU возможна лишь при распараллеливании и тщательной многоуровневой оптимизации используемых алгоритмов.&lt;/p&gt;
  &lt;h4&gt;2. Качество обработки изображений&lt;/h4&gt;
  &lt;p&gt;Еще одним важным критерием является качество обработки изображений. Для одной и той же операции обработки изображений может существовать несколько алгоритмов, отличающихся ресурсоёмкостью и качеством получаемого результата. И тут важно понимать, что обычно ресурсоёмкие алгоритмы дают более качественный результат. Таким образом, многоуровневая оптимизация наиболее востребована для ресурсоёмких алгоритмов. После её выполнения сложные алгоритмы могут выдавать результат за приемлемое время, сравнимое со временем работы изначально быстрого, но более грубого алгоритма.&lt;/p&gt;
  &lt;h4&gt;3. Латентность&lt;/h4&gt;
  &lt;p&gt;Как уже говорилось выше, GPU имеет такую архитектуру, которая позволяет осуществлять параллельную обработку пикселов изображения, что приводит к сокращению латентности, или времени обработки одного изображения. Центральные процессоры обладают довольно скромными показателями латентности, поскольку в CPU параллелизм реализуется на уровне отдельных кадров, тайлов или строк изображений.&lt;/p&gt;
  &lt;h2&gt;III. Ключевые отличия между GPU и CPU&lt;/h2&gt;
  &lt;h4&gt;1. Количество потоков на CPU и GPU&lt;/h4&gt;
  &lt;p&gt;Архитектура центральных процессоров предполагает, что каждое физическое ядро на CPU может выполнять 2 потока вычислений при наличии 2 виртуальных ядер. В этом случае каждый поток выполняет инструкции независимо. В то же время количество потоков GPU в сотни раз больше, так как в этих процессорах используется программная модель SIMT (Single instruction, multiple threads). В этом случае группа потоков (обычно их 32) выполняет одну и ту же инструкцию. Таким образом, именно такую группу можно рассматривать в качестве эквивалента CPU потока, поэтому эту группу назвают истинным GPU потоком.&lt;/p&gt;
  &lt;h4&gt;2. Способ реализации потоков на CPU и GPU&lt;/h4&gt;
  &lt;p&gt;Ещё одним отличием GPU и CPU является то, как они скрывают латентность инструкций. CPU для этих целей использует внеочередное исполнение, а GPU использует ротацию истинных потоков, каждый раз запуская инструкции из разных потоков. Способ, используемый на GPU, является более эффективным при аппаратной реализации, но при этом необходимо, чтобы алгоритм был параллельным и нагрузка была высокой.&lt;/p&gt;
  &lt;p&gt;Из всего этого можно сделать вывод, что многие алгоритмы обработки изображений идеально подходят для реализации на GPU.&lt;/p&gt;
  &lt;h2&gt;IV. Преимущества GPU над CPU&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Наши лабораторные исследования показали, что при сравнении идеально оптимизированного софта для GPU и для CPU (с применением AVX2), преимущество GPU имеет глобальный характер: &lt;strong&gt;пиковые производительности CPU и GPU аналогичного года производства отличаются обычно на порядок&lt;/strong&gt; для 32- и 16-битных типов данных. Также &lt;strong&gt;на порядок отличается и пропускная способность подсистемы памяти&lt;/strong&gt;. В следующих пунктах мы рассмотрим эту ситуацию подробнее.&lt;/li&gt;
    &lt;li&gt;Если же использовать для сравнения софт для CPU без использования инструкций AVX2, то разница в производительности может достигать 50-100 раз в пользу GPU.&lt;/li&gt;
    &lt;li&gt;Все современные GPU оснащены разделяемой памятью, которая одновременно доступна всем «вычислителям» одного мультипроцессора, что, по сути, является программно-управляемым кэшем. Он &lt;strong&gt;идеально подходит для алгоритмов с высокой степенью локальности&lt;/strong&gt;. Скорость доступа к этой памяти в несколько раз превосходит возможности L1 кэша CPU.&lt;/li&gt;
    &lt;li&gt;Ещё одной важной особенностью GPU по сравнению с CPU является то, что &lt;strong&gt;количество доступных регистров можно менять динамически&lt;/strong&gt; (от 64 до 256 на один поток), тем самым позволяя снижать нагрузку на подсистему памяти. Для сравнения, в архитектурах x86 и х64 используется 16 универсальных регистров и 16 AVX регистров на один поток.&lt;/li&gt;
    &lt;li&gt;Наличие нескольких специализированных аппаратных модулей на GPU для одновременной работы над совершенно разными задачами: аппаратная обработка изображений (ISP) на Jetson, асинхронное копирование в GPU и обратно, вычисления на GPU, аппаратное кодирование и декодирование видео (NVENC, NVDEC), тензорные ядра для нейросетей, OpenGL, DirectX, Vulkan для визуализации.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;Но, как результат всех перечисленных выше преимуществ GPU перед CPU, за всё это приходится платить высокими требованиями к параллельности алгоритмов. Если для максимальной загрузки CPU достаточно десятков потоков, то для полной загрузки GPU нужны десятки тысяч потоков.&lt;/p&gt;
  &lt;h3&gt;Встраиваемые (embedded) приложения&lt;/h3&gt;
  &lt;p&gt;Следует помнить и о таком типе задач, как встраиваемые решения. Здесь GPU уже конкурируют со специализированными устройствами, такими как FPGA (программируемая пользователем вентильная матрица) и ASIC (интегральная схема специального назначения). Основным преимуществом GPU перед прочими решениями является их существенно большая гибкость. Для отдельных встраиваемых решений GPU может быть серьёзной альтернативой, так как мощные многоядерные процессоры не проходят по допустимым требованиям к размеру и энергопотреблению.&lt;/p&gt;
  &lt;h2&gt;V. Заблуждения пользователей и разработчиков&lt;/h2&gt;
  &lt;h4&gt;1. У пользователей нет опыта работы с GPU, поэтому они пытаются многое сделать на CPU&lt;/h4&gt;
  &lt;p&gt;Одно из ключевых заблуждений пользователей и разработчиков связано с тем, что ещё не так давно графические процессоры считались мало подходящими для высокопроизводительных вычислительных задач. Но технологии развиваются стремительно. И несмотря на то, что обработка изображений на GPU хорошо интегрируется с CPU обработкой, наилучшие результаты достигаются в тех случаях, когда быстрая обработка изображений осуществляется на GPU. На сегодняшний день есть огромное количество таких приложений.&lt;/p&gt;
  &lt;h4&gt;2. Многократное копирование данных на GPU и обратно &amp;quot;убивает&amp;quot; производительность&lt;/h4&gt;
  &lt;p&gt;Среди пользователей и разработчиков существует и такое предубеждение относительно обработки изображений на GPU. И здесь, как оказалось, это тоже всего лишь неверная интерпретация, поскольку надёжным решением в этом случае является реализация всей схемы обработки на GPU в рамках одной задачи. Исходные данные могут быть скопированы на GPU, а обратно на CPU отдаются только результаты расчётов. Таким образом, все промежуточные данные остаются на GPU. Кроме того, копирования могут выполняться асинхронно, в одно и то же время с вычислениями над предыдущим кадром.&lt;/p&gt;
  &lt;h4&gt;3. Размер разделяемой памяти составляет 96 кБайт на каждый мультипроцессор, что очень мало&lt;/h4&gt;
  &lt;p&gt;Несмотря на малый размер разделяемой памяти GPU в 96 кБайт, при экономичном подходе к управлению разделяемой памятью, этого объёма может хватить в полной мере. Именно в этом и состоит суть оптимизации ПО для CUDA/OpenCL. То есть нельзя просто перенести код с CPU на GPU, не принимая во внимание все особенности архитектуры GPU.&lt;/p&gt;
  &lt;h4&gt;4. Недостаточный размер глобальной памяти GPU для решения сложных задач&lt;/h4&gt;
  &lt;p&gt;Это существенный момент, который, с одной стороны, решают производители, выпуская новые видеокарты с увеличенным размером памяти. С другой стороны, возможны программные решения по управлению памятью для её повторного использования.&lt;/p&gt;
  &lt;h4&gt;5. Библиотеки по обработке на CPU тоже используют параллельные вычисления&lt;/h4&gt;
  &lt;p&gt;Действительно, у CPU есть возможности по параллельной работе в рамках векторных операций типа AVX и многопоточности (например, через OpenMP). Но в большинстве случаев распараллеливание происходит самым простым способом: каждый кадр обрабатывается в отдельном потоке, а сам код обработки одного кадра остаётся последовательным. Использование векторных инструкций сталкивается со сложностью написания и поддержки кода для разных архитектур, моделей процессоров и систем. Оптимизация кода в библиотеках конкретных вендоров, например, Intel IPP, находится на высоком уровне. Проблемы возникают тогда, когда нужный функционал отсутствует в библиотеках и приходится использовать сторонние открытые или проприетарные библиотеки, где оптимизация может отсутствовать.&lt;/p&gt;
  &lt;p&gt;Еще одним аспектом, который плохо сказывается на производительности массовых библиотек, является широкое распространение облачных вычислений. В большинстве случаев для разработчика значительно дешевле докупить мощности в облаке по запросу, чем заниматься развитием оптимизированных библиотек. Заказчики требуют ускорить выход готового продукта на рынок, потому разработчики вынуждены использовать относительно простые и не самые эффективные решения.&lt;/p&gt;
  &lt;p&gt;Тем не менее, современные промышленные камеры генерируют видеопотоки очень высокой интенсивности, которые часто исключают возможность передачи данных для обработки по сети в облако, поэтому для обработки видеопотока с таких камер обычно используются локальные ПК. Компьютер, используемый для вычислений, должен обладать требуемой производительностью для обработки, и, что важно по сравнению с облачным подходом, его необходимо приобрести на начальных этапах реализации решения. Производительность решения зависит как от аппаратного, так и от программного обеспечения. При планировании решения следует учитывать и то, какое аппаратное обеспечение используется. Если удаётся обойтись широко распространёнными аппаратными средствами, проблем не возникает, и можно использовать любое программное обеспечение. Как только возникает необходимость использования более дорогого оборудования, цена единицы производительности начинает быстро увеличиваться и это создает предпосылки для использования оптимизированного ПО.&lt;/p&gt;
  &lt;p&gt;Задача обработки данных с промышленных видеокамер характеризуется постоянной нагрузкой. Уровень нагрузки определяется набором применяемых алгоритмов и количеством данных в единицу времени. Система обработки изображений должна быть рассчитана на начальных этапах проекта, чтобы с гарантированным запасом справляться с данной нагрузкой, иначе обработка без потери данных будет невозможна. Это является ключевым отличием от web-систем, где нагрузка неравномерна.&lt;/p&gt;
  &lt;h2&gt;VI. Заключение&lt;/h2&gt;
  &lt;p&gt;Итак, подводя итоги всего вышесказанного, мы приходим к следующим выводам.&lt;/p&gt;
  &lt;p&gt;1. GPU является прекрасной альтернативой CPU для решения сложных задач по быстрой обработке изображений.&lt;/p&gt;
  &lt;p&gt;2. Производительность оптимизированных решений для обработки изображений на GPU намного выше, чем на CPU. В качестве подтверждения мысли, мы предлагаем вам обратиться к другой &lt;a href=&quot;https://www.fastcompression.com/pub/2021/Fastvideo_SDK_benchmarks.pdf&quot; target=&quot;_blank&quot;&gt;статье из блога Fastvideo&lt;/a&gt;, в которой описаны бенчмарки на разных GPU для часто используемых алгоритмов обработки и сжатия изображений.&lt;/p&gt;
  &lt;p&gt;3. GPU обладает архитектурой, благодаря которой осуществляется параллельная обработка пикселов изображения, что, в свою очередь, приводит к сокращению времени обработки одного изображения (латентности).&lt;/p&gt;
  &lt;p&gt;4. Стоимость владения системами обработки изображений на основе GPU, оказывается ниже чем у систем, использующих только CPU. Высокая производительность GPU позволяет уменьшить количество единиц оборудования в таких системах, а высокая энергоэффективность снизить потребление электричества.&lt;/p&gt;
  &lt;p&gt;5. GPU обладает необходимой гибкостью, высокой производительностью, низким энергопотреблением для того, чтобы конкурировать с узкоспециализированными решениями типа FPGA/ASIC для использования в мобильных и встраиваемых решениях.&lt;/p&gt;
  &lt;p&gt;6. Объединение возможностей CUDA/OpenCL и аппаратных тензорных ядер позволяет значительно увеличить производительность для задач с применением нейросетей.&lt;/p&gt;
  &lt;h2&gt;Приложение №1&lt;br /&gt;Сравнение пиковой производительности CPU и GPU на примере NVIDIA&lt;/h2&gt;
  &lt;p&gt;Сравнение выполним на типе float (32-битный вещественный тип). Этот тип отлично подходит для обработки изображений. Оценивать производительность будем для одного ядра. В случае с CPU всё просто, речь идет о производительности одного физического ядра. Для GPU всё несколько сложнее. То, что принято называть у GPU ядром – это по сути своей АЛУ, или, в терминологии NVIDIA – SP (Streaming Processor). Реальными аналогом CPU ядра является стриминговый мультипроцессор (в терминологии NVIDIA, Streaming Multiprocessor, SMP). Количество стриминговых процессоров в одном мультипроцессоре зависит от семейства GPU. Например, видеокарты NVIDIA Turing содержат 64 SP в одном SMP, а у NVIDIA Ampere их 128. За каждый такт один SP может выполнять одну инструкцию FMA (Fused Multiply–Add). Инструкция FMA выбрана здесь для сравнения, так как она используется для реализации свёртки в фильтрах. Её целочисленный аналог называется MAD. Инструкция (один из вариантов) выполняет следующее действие: B=AX+B, где B – аккумулятор, накапливающий значения свёртки, A – коэффициент фильтра, X – значение пиксела. Сама по себе такая инструкция выполняет два операции: умножение и суммирование. Это даёт нам производительность за такт для SMP: Turing - 2*64 =128 FLOP, Ampere - 2*128 = 256 FLOP&lt;/p&gt;
  &lt;p&gt;Современные CPU обладают возможностью за каждый такт выполнять 2 инструкции FMA из набора AVX2. Каждая такая инструкция содержит 8 float операндов и соответственно 16 операций (FLOP). Итого, одно CPU ядро выполняет 2*16=32 FLOP за такт.&lt;/p&gt;
  &lt;p&gt;Чтобы перейти к производительности в единицу времени, нужно умножить количество инструкций за такт на частоту устройства. В среднем, частота GPU находится в диапазоне 1.5–1.9 ГГц, а CPU при нагрузке на все ядра имеет частоту 3.5–4.5 ГГц. Инструкция FMA из набора AVX2 является сложной для CPU. При её исполнении участвует большое количество устройств и сильно возрастает тепловыделение. Это приводит к тому, что CPU вынужден снижать частоту, чтобы избежать перегрева. Для разных семейств CPU величина снижения частоты разная. Например, по этой &lt;a href=&quot;https://www.intel.com/content/dam/www/public/us/en/documents/white-papers/performance-xeon-e5-v3-advanced-vector-extensions-paper.pdf&quot; target=&quot;_blank&quot;&gt;статье&lt;/a&gt; можно оценить снижение до уровня 0.7 от полной. Далее будем брать коэффициент 0.8, он соответствует более новым поколениям CPU.&lt;/p&gt;
  &lt;p&gt;Условно можно считать, что CPU по частоте в 2.5 раза быстрее GPU. С учётом коэффициента снижения частоты при работе с AVX2 инструкциями получим 2.5*0.8 = 2. Итого, относительная производительность в FLOP для инструкции FMA при сравнении с CPU ядром получим: Turing SMP = 128 / (2.0*32) = 2 раза, а для Ampere SMP это 256 / (2.0*32) = 4 раза, т.е. один SMP лучше, чем одно ядро CPU.&lt;/p&gt;
  &lt;p&gt;Оценим производительность L1 для CPU ядра. Современные СPU могут выполнять загрузку двух 256-битных регистров из кэша L1 параллельно или 64 байта за такт. GPU обладает унифицированным блоком SM/L1, здесь SM – Shared Memory. Производительность блока одинакова для двух архитектур и составляет 32 float за такт, или 128 байт за такт. Воспользовавшись соотношением частот, получим отношение производительностей 128 (байт за такт) / (2 (частота CPU больше GPU) * 64 (байт за такт)) = 1.&lt;/p&gt;
  &lt;p&gt;Также сравним размеры L1 и SM для CPU и GPU. Для CPU стандартным размером кэша данных L1 является 32 кБайт. Turing SMP имеет 96 кБайт унифицированного SM/L1 (64 кБайт за вычетом SM), а у Ampere SMP имеется 128 кБайт унифицированного SM/L1 (100 кБайт за вычетом SM).&lt;/p&gt;
  &lt;p&gt;Для оценки общий производительности определимся с количеством ядер на SP. Для настольных CPU рассмотрим вариант из 16 ядер (&lt;strong&gt;AMD Ryzen, Intel i9&lt;/strong&gt;), у GPU (&lt;strong&gt;NVIDIA Quadro RTX 6000&lt;/strong&gt;) имеется 72 SP. Итого отношение по количеству ядер 72/16 = 4.5. Таким образом, для этой пары CPU/GPU пропускная способность L1 и SM отличается в 1 * 4.5 = 4.5 раза.&lt;/p&gt;
  &lt;p&gt;На основе этого рассчитаем общую производительность по float. Для топовых видеокарт Turing получаем: 4.5 (отношение по количеству ядер GPU/CPU) * 2 (отношение производительности SMP к производительности одного ядра CPU) = 9 раз.&lt;br /&gt;Для видеокарт Ampere получаем: 4.5 (отношение по количеству ядер GPU/CPU) * 4 (отношение производительности SMP к производительности одного ядра CPU) = 18 раз.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Мы получили численную оценку, которая отражает существенное преимущество GPU над CPU как по производительности, так и по скорости доступа к быстрой памяти в расчётах, связанных с обработкой изображений.&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Тут очень важно напомнить, что указанные соотношения получаются для CPU только при использовании AVX2 инструкций. В случае использовании обычных скалярных инструкций, производительность CPU ядра снижается в 8 раз, как по арифметическим операциям, так и по скорости обращения к памяти. Поэтому для современных CPU особую важность приобретает оптимизация программного кода.&lt;/p&gt;
  &lt;p&gt;Скажем пару слов и о новым наборе AVX-512 для CPU. Это следующее поколение SIMD инструкций с увеличенной до 512 бит длиной вектора. Ожидается удвоение производительности в будущем по сравнению с AVX2. Современные версии CPU обеспечивают реальное преимущество до 1.6 раз, так как требуют ещё большего снижения частоты, чем инструкции из набора AVX2. Набор AVX-512 пока не получил широкого распространения в массовом сегменте, но это скорее всего произойдёт в будущем. Минусами этого подхода станут необходимость адаптации алгоритмов на новую длину вектора и перекомпиляция кода для поддержки.&lt;/p&gt;
  &lt;p&gt;Попробуем сравнить пропускную способность системной памяти. Тут тоже можно увидеть значительный разброс значений. Для CPU начальные цифры – это 50 ГБайт/с (2-канальный контроллер DDR4 3200) для массовых CPU. В сегменте для рабочих станций доминирует CPU с четырёхканальными контроллерами – это 100 ГБайт/с. Для серверов можно встретить CPU с 6-8 канальными контроллерами и производительностью более 150 ГБайт/с.&lt;/p&gt;
  &lt;p&gt;У GPU значение пропускной способности глобальной памяти тоже находится в широком диапазоне. Начиная от 450 ГБайт/с у модели Quadro RTX 5000, и заканчивая 1550 ГБайт/с у старшей модели A100. В итоге можно сказать, что пропускная способность в сопоставимых сегментах отличается значительно, вплоть до разницы на порядок.&lt;/p&gt;
  &lt;p&gt;Из всего вышесказанного можно сделать вывод, что GPU существенно (иногда практически на порядок) превосходит CPU, который выполняет оптимизированный код. В случае неоптимизированного для CPU кода, разница по производительности может быть ещё больше, до 50–100 раз. Все это создаёт серьёзные предпосылки для увеличения производительности в реальных задачах.&lt;/p&gt;
  &lt;h2&gt;Приложение №2 - алгоритмы memory-bound и compute bound&lt;/h2&gt;
  &lt;p&gt;Когда мы говорим об этих типах алгоритмов, необходимо понимать, что речь идёт о конкретной реализации алгоритма на конкретной архитектуре. У каждого процессора есть некоторая пиковая арифметическая производительность. Если реализация алгоритма может на целевом участке достигнуть пиковой производительности процессора по вычислительным инструкциям, то тогда она &lt;strong&gt;compute-bound&lt;/strong&gt;, в противном случае основным ограничением станет память и реализация &lt;strong&gt;memory-bound&lt;/strong&gt;.&lt;/p&gt;
  &lt;p&gt;Подсистема памяти у всех процессоров является иерархической, состоящий из нескольких уровней. Чем уровень ближе к процессору, тем он меньше по объёму и тем он быстрее. На первом уровне находится кэш данных первого уровня, а на последнем уровне оперативная память.&lt;/p&gt;
  &lt;p&gt;Алгоритм может быть изначально &lt;strong&gt;compute-bound&lt;/strong&gt; на первом уровне иерархии, а затем стать &lt;strong&gt;memory-bound&lt;/strong&gt; на более высоких уровнях иерархии.&lt;/p&gt;
  &lt;p&gt;Рассмотрим несколько примеров. Допустим, мы хотим сложить два массива и записать результат в третий. Можно записать это как X = Y + Z, где X, Y, Z – массивы. Допустим, мы воспользуемся инструкциями AVX для реализации на процессоре. Тогда на один элемент нам потребуется два чтения, одно суммирование и одна запись. Современный CPU может выполнить два чтения и одну запись одновременно в кэш L1. Но вместе с тем, он может выполнить и две арифметические инструкции, а мы можем воспользоваться только одной. Это значит, что алгоритм суммирования массивов является &lt;strong&gt;memory-bound&lt;/strong&gt; уже на первом уровне иерархии памяти.&lt;/p&gt;
  &lt;p&gt;Рассмотрим второй алгоритм. Фильтрация изображения в окне 3×3. Фильтрация изображения основана на операции свёртки окрестности пиксела с коэффициентами фильтра. Для вычисления свёртки используется инструкция MAD (или FMA в зависимости от архитектуры). Для окна 3×3 потребуется 9 таких инструкций. Операция инструкции B = AX + B, где B – аккумулятор, накапливающий значения свёртки, A – коэффициент фильтра, X – значение пиксела. Значения A и B находятся в регистрах, а значения пиксела загружаются из памяти. В этом случае на одну инструкцию FMA требуется одна загрузка. Здесь CPU сможет за счёт двух загрузок снабжать данными два порта FMA и полностью загрузит процессор. Алгоритм можно считать &lt;strong&gt;compute-bound&lt;/strong&gt;.&lt;/p&gt;
  &lt;p&gt;Давайте рассмотрим этот же алгоритм на уровне доступа к оперативной памяти. Возьмём самую экономную по памяти реализацию, когда одно чтение пиксела обновляет все окна в которые он входит. В этом случае на одну операцию чтения будет приходиться 9 инструкций FMA. Таким образом, одно ядро CPU при обработке float данных на частоте 4 ГГц потребует 2 (инструкции за такт) × 8 (float в AVX регистре) × 4 (Байта в float) × 4 (ГГц) / 9 = 28.5 ГБайт/с. Двухканальный контролер с DDR4-3200 имеет пиковую пропускную способность в 50 ГБайт/с и по расчётам он способен быть источником данных только для двух CPU ядер в этой задаче. Поэтому такой алгоритм, запущенный на 8–16 ядерном процессоре является &lt;strong&gt;memory-bound&lt;/strong&gt;. Несмотря на то, что на нижнем уровне он сбалансирован.&lt;/p&gt;
  &lt;p&gt;Теперь рассмотрим этот же алгоритм при реализации на GPU. Сразу видно, что GPU имеет на уровне SMP менее сбалансированную архитектуру с уклоном в вычисления. Для архитектуры Turing отношение скорости арифметических операций (во float) к скорости загрузки из Shared Memory – 2:1, для Ampere 4:1. За счёт большего количества регистров на GPU можно реализовать указанную выше оптимизацию для CPU напрямую на регистрах GPU. Это позволяет сбалансировать алгоритм даже для Ampere. И на уровне Shared Memory реализация остается &lt;strong&gt;compute-bound&lt;/strong&gt;. С точки зрения памяти верхнего уровня (глобальной) расчёт для Quadro RTX 5000 (Turing) даёт следующие результаты: 64 (операций за такт) × 4 (Байт в float) × 1.7 (ГГц) / 9 = 48.3 ГБайт/с на один SMP. Отношение общей пропускной способности к пропускной способности SMP составит 450 / 48.3 = 9.3 раза. Общее количество SMP в Quadro RTX 5000 равно 48. Т.е. и для GPU алгоритм фильтрации на высоком уровне является &lt;strong&gt;memory-bound&lt;/strong&gt;.&lt;/p&gt;
  &lt;p&gt;По мере роста размера окна алгоритм становится всё более сложным и соответственно смещается в сторону &lt;strong&gt;compute-bound&lt;/strong&gt;. Большинство алгоритмов обработки изображений являются &lt;strong&gt;memory-bound&lt;/strong&gt; на уровне глобальной памяти. И так как пропускная способность памяти GPU во многих случаях на порядок больше чем у CPU, то это обеспечивает сопоставимый прирост производительности.&lt;/p&gt;
  &lt;h2&gt;Приложение №3&lt;br /&gt;Программные модели SIMD и SIMT, или почему у GPU так много потоков&lt;/h2&gt;
  &lt;p&gt;Для повышения производительности CPU используются SIMD (single instruction, multiple data) инструкции. Одна такая инструкция позволяет выполнить несколько однотипных операций над вектором данных. Плюсом этого подхода является рост производительности без существенной модификации instruction pipeline. Все современные CPU, как x86, так и ARM, имеют SIMD инструкции. Минусом данного подхода является сложность программирования. Основной подход к SIMD программированию — это использование intrinsic. Intrinsic – это встроенные функции компилятора, которые содержат одну или несколько SIMD-инструкций, плюс инструкции для подготовки параметров. Intrinsic формируют низкоуровневый язык, очень близкий к ассемблеру, который крайне трудоёмок в использовании. Кроме того, для каждого набора инструкций у каждого компилятора есть свой набор Intrinsic. Выходит новый набор инструкций – нужно всё переписывать, переходим на новую платформу (с x86 на ARM) нужно переписывать, переходим на другой компилятор - опять нужно всё переписывать.&lt;/p&gt;
  &lt;p&gt;Программная модель для GPU называется SIMT (Single instruction, multiple threads). Одна инструкция синхронно исполняется в нескольких потоках. Этот подход можно считать развитием SIMD. Скалярная программная модель скрывает векторную суть машины, автоматизируя и упрощая многие операции. Именно поэтому для большинства программистов писать привычный скалярный код на SIMT проще, чем векторный на чистом SIMD.&lt;/p&gt;
  &lt;p&gt;CPU и GPU по-разному решают вопрос латентности инструкций при исполнении их на конвейере. Латентность инструкции – это через сколько тактов следующая инструкция может воспользоваться её результатами. Например, если латентность инструкции равна 3 и CPU может запускать 4 таких инструкции за такт, то за 3 такта процессор запустит 2 зависимых инструкции или 12 независимых. Чтобы избежать такого существенного простоя, все современные процессоры используют внеочередное исполнение инструкций. В этом случае процессор в заданном окне CPU анализирует зависимости инструкций и запускает независимые инструкции вне очереди.&lt;/p&gt;
  &lt;p&gt;GPU использует другой подход, основанный на многопоточности. У GPU есть pool потоков. Каждый такт выбирается один поток и из него выбирается одна инструкция, которая отправляется на исполнение. На следующем такте выбирается следующий поток и так далее. После того, как из всех потоков в pool была запущена одна инструкция, возвращаемся к первому потоку и т.д. Такой подход позволяет скрыть латентность зависимых инструкций за счёт исполнения инструкций из других потоков.&lt;/p&gt;
  &lt;p&gt;При программировании GPU можно условно выделить два уровня потоков. Первый уровень потоков отвечает за формирование SIMT. Для GPU NVIDIA – это 32 соседних потока, которые называются warp. Известно, что SMP для Turing поддерживает 1024 потока. Это количество распадается на 32 настоящих потока, в рамках которых организуется SIMT исполнение. Настоящие потоки могут в один момент времени исполнять разные инструкции, в отличие от SIMT.&lt;/p&gt;
  &lt;p&gt;Таким образом, стриминговый мультипроцессор Turing – это векторная машина с размером вектора 32 и 32-мя независимыми потоками. Ядро CPU с AVX – это векторная машина с размером вектора 8 и двумя независимыми потоками.&lt;/p&gt;
  &lt;h2&gt;Дополнительные материалы по теме&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://www.fastvideo.ru/products/fastvideo-sdk.htm&quot; target=&quot;_blank&quot;&gt;Функционал Fastvideo SDK&lt;/a&gt; для обработки и сжатия изображений на NVIDIA GPU&lt;/li&gt;
  &lt;/ul&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;https://www.fastcompression.com/blog/jetson-benchmark-comparison.htm&quot; target=&quot;_blank&quot;&gt;Бенчмарки по обработке и сжатию изображений&lt;/a&gt; для разных моделей платформы NVIDIA Jetson&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;/p&gt;
  &lt;p&gt;Оригинальная статья: &lt;a href=&quot;https://www.fastvideo.ru/blog/cpu-vs-gpu-fast-image-processing.htm&quot; target=&quot;_blank&quot;&gt;https://www.fastvideo.ru/blog/cpu-vs-gpu-fast-image-processing.htm&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>fastvideo:jetson-performance-comparison</id><link rel="alternate" type="text/html" href="https://teletype.in/@fastvideo/jetson-performance-comparison?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=fastvideo"></link><title>Бенчмарки производительности для Jetson Nano, TX1, TX2, AGX Xavier</title><published>2021-01-05T10:56:44.219Z</published><updated>2021-01-05T11:02:16.385Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/6b/b6/6bb692ec-b2f0-4163-95cc-4e4cb3ef82d7.png"></media:thumbnail><category term="jetson" label="Jetson"></category><tt:hashtag>jetson</tt:hashtag><summary type="html">&lt;img src=&quot;https://teletype.in/files/29/27/2927d785-75f0-44e1-be61-8a3a98e310d0.png&quot;&gt;Компания NVIDIA выпустила серию аппаратных модулей Jetson для встраиваемых приложений. NVIDIA ® Jetson-это ведущая в мире встраиваемая платформа для обработки изображений и задач DL/AI. Эта платформа позволяет делать высокопроизводительные вычисления при минимальном энергопотреблении для глубокого обучения и компьютерного зрения, что крайне востребовано для мобильных вычислительных проектов.</summary><content type="html">
  &lt;h2&gt;&lt;strong&gt;Бенчмарки производительности для Jetson Nano, TX1, TX2, AGX Xavier&lt;/strong&gt;&lt;/h2&gt;
  &lt;p&gt;Компания NVIDIA выпустила серию аппаратных модулей Jetson для встраиваемых приложений. NVIDIA ® Jetson-это ведущая в мире встраиваемая платформа для обработки изображений и задач DL/AI. Эта платформа позволяет делать высокопроизводительные вычисления при минимальном энергопотреблении для глубокого обучения и компьютерного зрения, что крайне востребовано для мобильных вычислительных проектов.&lt;/p&gt;
  &lt;p&gt;Мы разработали &lt;a href=&quot;https://www.fastvideo.ru/products/fastvideo-sdk.htm&quot; target=&quot;_blank&quot;&gt;SDK&lt;/a&gt; для обработки изображений и видео для NVIDIA Jetson. Здесь мы представляем результаты тестов производительности для различных модулей. В качестве тестового конвейера обработки изображений мы рассмотрим стандартное приложение для обработки данных от камер машинного зрения.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/29/27/2927d785-75f0-44e1-be61-8a3a98e310d0.png&quot; width=&quot;800&quot; /&gt;
    &lt;figcaption&gt;Benchmarks: https://www.fastvideo.ru/pub/2021/Fastvideo_SDK_benchmarks.pdf&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Аппаратные возможности модулей Jetson Nano, TX1, TX2, AGX Xavier&lt;/h2&gt;
  &lt;p&gt;В таблице представлены краткие описания аппаратных возможностей различных модулей Jetson. Сравнивая возможности систем от Nano и до AGX Xavier, хорошо видны не только разнообразие существующих мобильных решения, но и прогресс в этой области.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/a1/d6/a1d6919c-147b-4caf-89d2-2255f1a7dd02.png&quot; width=&quot;1434&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В приложениях для видео камер мы обычно можем скрыть передачу данных от хоста к устройству с помощью режима zero-copy или благодаря перекрытию копирований и вычислений на GPU. Передача данных от устройства к хосту может быть скрыта с помощью перекрытия копирований / вычислений.&lt;/p&gt;
  &lt;h2&gt;Аппаратные и программные модули для тестирования&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;CPU/GPU NVIDIA Jetson Nano, TX1, TX2/TX2i, AGX Xavier&lt;/li&gt;
    &lt;li&gt;OS L4T (Ubuntu 18.04)&lt;/li&gt;
    &lt;li&gt;CUDA Toolkit 10.2 for Jetson Nano, TX2/TX2i, AGX Xavier&lt;/li&gt;
    &lt;li&gt;Fastvideo SDK 0.16.1&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2&gt;Сравнение модулей NVIDIA Jetson: Nano, TX1, TX2, AGX Xavier&lt;/h2&gt;
  &lt;p&gt;Для этих модулей NVIDIA Jetson мы провели измерения производительности для следующих стандартных задач обработки изображений, специфичных для приложений с промышленными видеокамерами: баланс белого, демозаика (дебайер), цветокоррекция, ресайз, кодирование JPEG и т.д. Это не полный набор имеющихся функций из &lt;a href=&quot;https://www.fastvideo.ru/products/fastvideo-sdk.htm&quot; target=&quot;_blank&quot;&gt;Fastvideo SDK&lt;/a&gt; - это просто пример того, какую производительность можно получить для каждого Jetson. Кроме того, тестовое приложение &lt;a href=&quot;https://github.com/fastvideo/gpu-camera-sample&quot; target=&quot;_blank&quot;&gt;gpu-camera-sample&lt;/a&gt; можно загрузить с GitHub, собрать и сделать измерения производительности для вашей схемы обработки данных.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/40/a2/40a2341d-4aca-4aec-b24e-9287222fa437.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3&gt;Время обработки (kernel time) на GPU для кадров 2K (1920×1080, 8/16-бит), в миллисекундах&lt;/h3&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/eb/a3/eba313d2-3526-4602-86ff-cfabe6968045.png&quot; width=&quot;1402&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Общее время обработки вычисляется для значений из серых строк таблицы. Это сделано для того, чтобы показать как возможности SDK, так и максимальный результат для каждого модуля Jetson. Приведенная схема обработки является упрощённой, но, тем не менее, она используется в реальных приложениях с промышленными видеокамерами.&lt;/p&gt;
  &lt;p&gt;Здесь мы сделали оценку времени работы только базового набора модулей обработки изображений из Fastvideo SDK, чтобы разработчики решений на платформе Jetson могли понять, какую производительность обработки они могут получить в своих приложениях. Преобразование изображений из RAW в RGB или из RAW в JPEG - это стандартные задачи, которые возникают в разных областях. Теперь разработчики могут заранее получать подробную информацию об ожидаемой производительности для выбранного конвейера в соответствии с приведенной выше таблицей. В сравнение пока не вошли кодек JPEG2000 для сжатия изображений, а также кодеры и декодеры Jetson H. 264 и H.265 (мы скоро их тоже добавим). Тут важно, что кодеры H.264 и H.265 работают на аппаратном уровне, т.е. кодирование можно будет выполнять параллельно с кодом на CUDA - это снизит нагрузку на видеокарту, а в некоторых случаях можно будет получить еще более высокую производительность.&lt;/p&gt;
  &lt;p&gt;Мы провели те же измерения времени ядра для графических процессоров NVIDIA GeForce и Quadro. &lt;a href=&quot;https://www.fastvideo.ru/pub/2021/Fastvideo_SDK_benchmarks.pdf&quot; target=&quot;_blank&quot;&gt;Здесь&lt;/a&gt; можно скачать документ с результатами тестов.&lt;/p&gt;
  &lt;h2&gt;Программное обеспечение для тестирования модулей Jetson&lt;/h2&gt;
  &lt;p&gt;Для приложений с промышленными камерами мы разработали программное обеспечение для NVIDIA Jetson и оно доступно для загрузки c Github как в виде бинарных файлов, так в исходных кодах (пример &lt;a href=&quot;https://github.com/fastvideo/gpu-camera-sample&quot; target=&quot;_blank&quot;&gt;gpu-camera-sample&lt;/a&gt;). Этот проект может работать на Windows 7/10, Linux Ubuntu 18.04 и L4T, т.е. не только с Jetson, но и с любыми другими видеокартами NVIDIA. Помимо реализации полного конвейера обработки изображений на графическом процессоре, реализованы опции онлайн-сжатия и потоковой передачи видео, измерения glass-to-glass (G2G) для оценки реальной задержки для камерных систем на Jetson. В настоящее время программное обеспечение работает с камерами машинного зрения XIMEA, Basler, JAI, Matrix Vision и Daheng Imaging.&lt;/p&gt;
  &lt;p&gt;Для тестирования этого программного обеспечения даже не обязательно иметь видеокамеру, т.к. в нём реализована возможность работы с RAW кадрами с диска, т.е. без участия камеры. Таким образом, можно измерить скорость обработки данных, а также оценить качество.&lt;/p&gt;
  &lt;p&gt;Чтобы проверить производительность &lt;a href=&quot;https://www.fastvideo.ru/products/fastvideo-sdk.htm&quot; target=&quot;_blank&quot;&gt;Fastvideo SDK&lt;/a&gt; на графическом процессоре ноутбука/настольного компьютера/сервера без какого-либо программирования, также можно скачать программное обеспечение &lt;a href=&quot;https://www.fastcinemadng.com/&quot; target=&quot;_blank&quot;&gt;Fast CinemaDNG Processor&lt;/a&gt; с графическим интерфейсом для Windows или Linux. Это программное обеспечение имеет окно тестов производительности, и там вы можете увидеть измеренное время для каждого этапа обработки изображений. Этот метод тестирования производительности вообще не требует программирования от пользователя, а конвейер обработки изображений в этом случае может быть довольно сложным - таким образом можно проверить и скорость, и качество. Также можно проверсти различные тесты на изображениях с различным разрешением, чтобы увидеть, насколько производительность зависит от размера изображения, его содержимого и других параметров.&lt;/p&gt;
  &lt;p&gt;Адрес оригинальной статьи: &lt;a href=&quot;https://www.fastvideo.ru/blog/jetson-performance-comparison.htm&quot; target=&quot;_blank&quot;&gt;https://www.fastvideo.ru/blog/jetson-performance-comparison.htm&lt;/a&gt;&lt;/p&gt;
  &lt;tt-tags&gt;
    &lt;tt-tag name=&quot;jetson&quot;&gt;#jetson&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry></feed>