Юрий Копин, Константин Нагорнюк, компания Esri CIS, Web: www.esri-cis.ru
Multithreading, Multiprocessing, and 64- bit Computing in ArcGIS
Быстро развивающееся приложение нового поколения ArcGIS Pro является многопоточным и 64-битным. В статье рассказывается о том, что означают эти термины, и что это дает пользователям.
Многопоточность или многозадачность
Есть два основных подхода к построению приложений, способных выполнять параллельные вычисления в рамках одной операционной системы, — многопоточность и многозадачность. С точки зрения конечного пользователя они работают одинаково, а различия проявляются на стадии написания кода программ.
Многопоточные (multithreading) приложения запускаются в одном процессе и используют общее адресное пространство оперативной памяти. Многозадачные (multiprocessing) приложения запускаются в виде отдельных процессов, и каждому из этих процессов выделяется свой, отдельный участок памяти.
В арсенале пользователей настольной версии ПО ArcGIS сейчас есть два приложения: старый, добрый ArcMap и новое, флагманское — ArcGIS Pro, которое изначально является многопоточным (multithreading) приложением. При его запуске в диспетчере задач появляется один процесс ArcGISPro.exe, при этом приложение способно выполнять различные задачи параллельно. Например, можно запустить фоновый процесс геообработки и одновременно работать с картами или сценами в соответствующих окнах.
Являясь приложением нового поколения, ArcGIS Pro улучшается и расширяется в первую очередь. В частности речь идет и о многопоточной геообработке. В ArcGIS Pro доступно более 70 инструментов геообработки (вдвое больше, чем в ArcMap), которые поддерживают параллельные вычисления, то есть могут задействовать для расчётов все ядра вашего компьютера. К ним, например, относятся такие инструменты как Pairwise Buffer (построение буфера с поддержкой многопоточности), Pairwise Dissolve (слияние с поддержкой многопоточности), Find Hot Spots (поиск горячих точек), Detect Incidents (выявление инцидентов), переклассификация (Reclassify) и др.
Многопоточность в инструментах геообработки
Расчет может производиться на одном ядре или на нескольких. Часть инструментов геообработки ArcGIS Pro поддерживает многопоточность, часть нет. Поэтому для использования всех ядер вашего процессора необходимо убедиться, что тот или иной инструмент поддерживает многопоточность. Для этого удобнее всего воспользоваться интерактивной справкой ArcGIS. Если конкретный инструмент поддерживает параллельную обработку, то степень загрузки ядер процессора можно контролировать с помощью специального параметра Parallel Processing Factor. Но тут есть свои нюансы. Например, при хранении данных в SQL Server Express — это бесплатная версия СУБД — возможно не более трех одновременных подключений. Каждый работающий ЦП требует подключения к серверу. Кроме того, программное обеспечение, на котором работает инструмент, например, продукты ArcGIS Desktop, также считается одним подключенным процессом, в результате чего для параллельной обработки остаются только два подключенных процесса.
Рис. 1. Параллельная обработка данных в ГИС с использованием комбинации средств программирования и географии.
Некоторые подробности и список большей части инструментов ArcGIS Pro, которые поддерживают многопоточную обработку, описаны в блоге Esri CIS в статье «Обрабатываем геоданные быстрее с многопоточностью в ArcGIS Desktop». Приведенные в ней инструменты разделены на несколько групп: Анализ, Преобразования и конвертация, Геоаналитика, Управление данными (наборы растров и мозаики), Поиск и изучение закономерностей и типичных примеров по пространственным статистикам и временным рядам, Инструменты в модулях 3D Analyst, Spatial Analyst, Geostatistical Analyst и Image Analyst.
Стоит также заметить, что на скорость геообработки, связанной с большими размерами входных и выходных данных, например растров, оказывают влияние и характеристики жёстких дисков. Рекомендуется использовать физические накопители (SSD) на вашем компьютере. Максимальная производительность обычно достигается, если входные данные, выходные данные и временные данные находятся на SSD, а не на жестких дисках (HDD).
Новый набор инструментов геоаналитики GeoAnalytics Desktop Tools
В ArcGIS Pro версии 2.4 появился новый набор инструментов с поддержкой распределенных вычислений, который до этого был представлен только в серверном продукте ArcGIS GeoAnalytics Server. В них обработка пространственных данных осуществляется с помощью программного продукта Apache Spark, у которого есть собственный инструментарий параллельной обработки данных. В случае использования этих инструментов, ArcGIS Pro запускает внешний процесс Spark, передает ему задачу, отслеживает ее выполнение и конвертирует результаты расчетов в форматы, с которыми работает ArcGIS. Apache Spark изначально создан для обработки больших данных в кластерах серверов, но его применение в рамках настольной системы тоже дает существенный прирост в производительности, который достигается за счет загрузки всех ядер процессора.
Дополнительные возможности: Python multiprocessing
Что можно сделать, если какой-то инструмент не поддерживает параллельные вычисления, но при этом вам очень хочется ускорить процессы обработки больших объемов данных? Один из наилучших вариантов — написать скрипт на языке Python с использованием модуля Multiprocessing. При написании скриптов, которые используют многозадачность/многопоточность, нужно учитывать, что не все инструменты ArcGIS поддерживают работу в параллельных процессах и что два потока или процесса могут конфликтовать при попытке записи данных в один и тот же файл. Есть и ряд других технических моментов. Но, тем не менее, это задача вполне решаемая. Подробнее про имеющиеся возможности можно, например, узнать из презентации с конференции разработчиков Esri (ссылка на нее приведена на рис. 1). В ней же даются адреса некоторых полезных ресурсов по этой проблематике (см. рис. 2).
Рис. 2. Ссылки на некоторые полезные ресурсы по применению возможностей параллельной обработки.
32-бита или 64-бита
И, наконец, отдельная тема: 32-битные и 64-битные вычисления. Приложение ArcGIS Pro изначально является 64-битным приложением. А ArcMap по умолчанию 32-битное, но может запускать инструменты геообработки в 64-битном режиме в случае установки соответствующего расширения, которое входит в стандартный дистрибутив этого приложения, но запускается отдельно. Если приложение является 64-битным, это (как правило) никак напрямую не сказывается на его производительности, не делает его многозадачным. Количество бит означает только то, что процесс, внутри которого работает данное приложение, может получать от операционной системы большее количество оперативной памяти. Для 32-битных приложений в Windows максимальный размер выделенной оперативной памяти лежит в диапазоне от 2 до 4 GB. Для 64-битного приложения лимит увеличивается до 8 TB.
Поэтому использование 64-разрядности для выполнения анализа систем с большим ресурсом оперативной памяти позволяет обрабатывать такой объем данных, который в 32-разрядной среде было бы практически невозможно обработать. Поскольку все вычисления выполняются в родной 64-разрядной среде, может быть задействовано больше системных ресурсов.
Примеры тестирования многопоточности
В одном из тестов для оценки эффективности многопоточности мы в качестве исходных данных использовали 11 миллионов точек адресов на территорию РФ, чтобы построить вокруг них геодезический буфер с размером 500 метров. Для построения была задействована машина с процессором Intel Xeon (10 ядер), расчёт выполнялся в приложении ArcGIS Pro с использованием упомянутого выше инструмента Pairwise Buffer со значением 100% для параметра контроля загрузки системы Parallel Processing Factor, то есть для расчётов были задействованы все десять ядер процессора. Время на обработку этого массива данных составило 17 минут 40 секунд. При этом во время расчётов использовались только ресурсы CPU, а ресурсы оперативной памяти практически не были задействованы. Исходные данные были размещены в файловой БГД на SSD диске, сюда же был записан результат расчётов.
Рис. 3. Вычисление полей с помощью выражений Arcade в ArcGIS Pro работают гораздо быстрее.
При аналогичном расчете в приложении ArcMap на этой же машине классическим инструментом Buffer, который не поддерживает многопоточность, результаты оказались такими — за 2 часа работы инструмент так и не продвинулся дальше 0%.
В режиме многопоточности существенно быстрее работает и калькулятор полей с применением выражений Arcade. Так специалисты Esri заполняли атрибуты для 20 000 объектов, что заняло 3 секунды в ArcGIS Pro и около 1 минуты в ArcMap.
Таким образом, перевод всех, в том числе настольных компонентов платформы ArcGIS на 64-битную архитектуру – это как веление времени, так и большое подспорье пользователям при выполнении их работы на современном уровне. Одним их важных преимуществ, особенно при решении масштабных задач с использованием больших массивов данных, является поддержка их параллельной обработки и режима многопоточности с оптимизацией задействования имеющихся вычислительных мощностей.