Пользовательская реализация функции ArcGIS

9

Я хотел бы узнать, что нужно для создания пользовательской реализации функции ArcGIS. В частности, я хотел бы реализовать GeoAnalyst.ISurfaceOp2.Visibility (), чтобы он работал быстрее. Прямо сейчас на вызов Visibility () уходит ~ 3 секунды. Из моего ограниченного понимания узким местом является запись временных растров в файловую систему. Если бы это можно было сделать в памяти, я подозреваю, что время обработки значительно уменьшится. Я делаю это в .NET-проекте, но приветствуются решения на любом языке.

Росс Фурман
источник
Почему бы просто не записать временные растры на диск RAM? Тогда вам не придется кодировать опцию видимости с нуля, что сопряжено с собственными рисками и затратами.
whuber
Это звучит великолепно. Как бы я поступил так? Разве не то, что @Radar заявляет, невозможно в ответе ниже?
Росс Фурман
4
Вы устанавливаете RAM-диск в вашей системе; детали меняются в зависимости от ОС. Затем вы указываете на нее в папке с нулями ArcGIS. Вы можете сделать это почти так же хорошо, используя SSD, особенно если ваши растры огромны или у вас мало оперативной памяти.
whuber
Мне нравится идея RAM-диска. SSD опасен, так как он не подходит для постоянных операций чтения / записи, так как его можно быстро изнашивать.
Радар
2
Флэш-накопитель на основе флэш-памяти переживет 1–5 миллионов операций записи @Radar, но твердотельные накопители DRAM вообще не «изнашиваются». Посетите storagesearch.com для получения дополнительной информации.
whuber

Ответы:

5

Этот ответ увековечивает и расширяет некоторые обсуждения в комментариях. RAM диск эмулирует диск внешнего диска , используя некоторые из оперативной памяти в вычислительной системе. Он может читать и записывать со скоростью, сравнимой с кэшированием в памяти, за исключением небольших накладных расходов на протоколы перевода для преобразования дисковых команд в команды, ориентированные на память. Диск RAM создается с помощью специального программного обеспечения уровня операционной системы, «драйвера устройства». Диски с открытым исходным кодом и бесплатные ОЗУ доступны для многих операционных систем, включая Windows.

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

Другой вариант заключается в установке высокопроизводительного твердотельного устройства DRAM (SSD), которое по сути представляет собой блок оперативной памяти в отдельной упаковке с электронным интерфейсом, действующим как дисковод. Он устанавливается в вычислительную систему вместо дисковода и будет вести себя точно так же, как другой диск без какого-либо дополнительного программного обеспечения, но будет читать и записывать почти так же быстро, как доступ к памяти. Это относительно дорого, но, вероятно, нужен только маленький, даже для очень большого промежуточного растрового хранилища.

Прежде чем предпринимать какие-либо из этих шагов, важно составить профильпроцесс, чтобы определить, где на самом деле находится узкое место. (В последние годы Windows поставляется со все более мощными приложениями для профилирования и мониторинга, которые доступны в Win 7 в виде пары Диспетчер задач / Монитор ресурсов и, конечно, многие аналогичные приложения доступны и для других ОС.) Многие системы настраиваются автоматически, или можно настроить для кэширования чтения и записи на диск в ОЗУ на короткие периоды времени. Кэширование работает почти так же, как RAM-диск, но, вероятно, даже быстрее: программное обеспечение считает, что оно записывает промежуточные файлы на диск, но операционная система сначала записывает их временно в RAM, не обращаясь к диску, в надежде, что скоро те же данные будет прочитан и удален, и в этом случае физическая запись никогда не понадобится.

Учитывая объем вычислений, необходимый для любого вычисления полной видимости (в простом алгоритме каждую ячейку необходимо проверять на предмет видимости один раз для каждой точки обзора), следует, по крайней мере, подозревать, что проблема может заключаться в скорости вычислений, а не в дисковых операциях ввода-вывода. Вот. Если это так, то диски RAM или SSD будут пустой тратой времени и денег. Вместо этого, усилия должны быть направлены на анализ и улучшение основного алгоритма .

Некоторое обсуждение того, помогает ли производительность RAM-диска ArcGIS, появилось в другом потоке .

Whuber
источник
+1 Отличный ответ. Я думаю, что люди из ГИС должны также следить за общим назначением графического процессора или GPGPU . Я подозреваю, что большинство шутеров от первого лица используют графический процессор для определения видимости объекта с его местоположения. Было бы здорово увидеть OpenCL реализацию этой проблемы. Возможно, если бы ГИС больше использовала графический процессор, то это могло бы привлечь внимание детей, которые выросли, играя в видеоигры.
Кирк Куйкендалл
Также я хотел упомянуть, что графический процессор оптимизирован для таких вещей, как определение скрытой поверхности , что аналогично тому, что делает ISurfaceOp2.Visibility.
Кирк Куйкендалл
Хорошие идеи, @Kirk. Коллектор использует графические процессоры NVIDIA (и делал это в течение нескольких лет). Там также независимые исследования в этом направлении; Я участвовал в некоторых проектах по грантовым предложениям по разработке реализаций картографической алгебры на основе GPU.
whuber
Это отличный ответ. Я сделал предложенное профилирование, и оказалось, что может быть узкое место дискового ввода / вывода. Итак, я реализовал решение с использованием RAM-диска (я выбрал IMDisk). В конце концов, это не сократило время для завершения процесса.
Росс Фурман
Мне жаль слышать, что улучшения не было. Видимость - это дорогостоящий расчет: в принципе, каждая ячейка в ЦМР должна проверяться для каждого наблюдателя, и в процессе проверки может потребоваться просмотр всей линии ячеек между наблюдателем и ячейкой ЦМР: это может означать миллиарды вычислений на Наблюдатель даже на скромной (мегапиксельной) сетке. Если время вычислений является проблемой, ваши два наилучших варианта, вероятно, (1) распараллеливают работу: разделите наблюдателей по рабочим станциям, вычислите видимости, объедините результаты; и (2) написать свой собственный код видимости.
whuber