Спеціальна реалізація функції ArcGIS


9

Я хотів би дізнатися, що потрібно для створення власної реалізації функції ArcGIS. Зокрема, я хотів би реалізувати GeoAnalyst.ISurfaceOp2.Visibility (), щоб змусити його працювати швидше. На даний момент до Visibility () потрібно приблизно 3 секунди за дзвінок. З мого обмеженого розуміння, вузьким місцем є записування тимчасових растрових файлів у файлову систему. Якщо це можна зробити в пам'яті, я підозрюю, що час обробки значно скоротиться. Я роблю це в проекті .NET, але рішення будь-якою мовою вітаються.


Чому б просто не записати тимчасові растри на диск RAM? Тоді вам не доведеться кодувати опцію видимості з нуля, що пов'язано зі своїми ризиками та витратами.
whuber

Звучить чудово. Як би я пішов робити це? Хіба це не те, що заявляє @Radar, неможливо у відповіді нижче?
Росс Фурман

4
Ви встановлюєте диск оперативної пам’яті у вашу систему; деталі залежать від ОС. Тоді ви вказуєте на нього папку скретчів ArcGIS. Ви можете майже так само добре використовувати SSD, особливо якщо ваші растри величезні або якщо у вас немає великої оперативної пам’яті.
whuber

Мені подобається ідея диску RAM. SSD є ризикованим, оскільки вони не чудові для постійних операцій читання / запису, оскільки ви могли швидко їх зношувати.
Радар

2
На базі флеш-накопичувача SSD витримає 1 - 5 мільйонів, пише @Radar, але драйви DRAM взагалі "не зношаться". Відвідайте storagesearch.com для (багато) додаткової інформації.
whuber

Відповіді:


5

Ця відповідь запам'ятовує та розширює деякі обговорення в коментарях. RAM диск емулює диск зовнішнього диска , використовуючи деякі з оперативної пам'яті в обчислювальній системі. Він може читати і записувати зі швидкістю, порівнянною з кешуванням в пам'яті, мінус невеликі накладні витрати для протоколів перекладу для перетворення команд, орієнтованих на диск, до команд, орієнтованих на пам'ять. Диск ОЗУ створюється за допомогою спеціального програмного забезпечення на рівні операційної системи, "драйвера пристрою". Відкритий і безкоштовний диски оперативної пам’яті доступні для багатьох операційних систем, включаючи Windows.

Отже, один із способів прискорити вузьке місце через проміжний диск I / O - це встановити диск RAM (придбання додаткової оперативної пам’яті, якщо це необхідно) і помістити туди папку з подряпинами. (Зазвичай це налаштування програмного забезпечення.)

Інший варіант - встановити твердотільний пристрій DRAM високого класу (SSD), який по суті є блоком оперативної пам'яті в окремій упаковці з електронним інтерфейсом, щоб діяти як дисковий накопичувач. Він встановлюється в обчислювальній системі замість дискового накопичувача і буде вести себе точно так само, як інший диск без додаткового програмного забезпечення, але буде читати і записувати майже так само швидко, як і доступ до пам'яті. Вони відносно дорогі, але, ймовірно, потрібен лише невеликий навіть для дуже великого проміжного зберігання в растрі.

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

З огляду на кількість обчислень, необхідних для будь-якого обчислення повної видимості (у наївному алгоритмі, кожну комірку потрібно перевіряти на предмет видимості один раз для кожної точки огляду), слід хоча б підозрювати, що проблема в швидкості обчислення, а не введення / виведення диска, може бути проблемою. тут. Якщо це так, диски оперативної пам’яті або SSD будуть марною тратою часу і грошей. Натомість зусилля повинні бути спрямовані на аналіз та вдосконалення основного алгоритму .

Деяке обговорення того, чи допомагає оперативність диска оперативної пам'яті ArcGIS, з'явилося в іншій темі .


+1 Відмінна відповідь. Я думаю, що люди з ГІС повинні також слідкувати за загальним призначенням блоку обробки графіки або GPGPU . Я підозрюю, що більшість ігор шутера від першої особи використовують GPU для визначення видимості об'єкта з місця розташування стрільця. Було б чудово побачити реалізацію цієї проблеми в OpenCL . Можливо, якщо GIS більше використовував GPU, то це може привернути увагу дітей, які виросли, граючи у відеоігри.
Кірк Куйкендалл

Також я мав на увазі згадати, що GPU оптимізовано робити такі речі, як приховане визначення поверхні , що схоже на те, що робить ISurfaceOp2.Visibility.
Кірк Куйкендалл

Гарні ідеї, @Kirk. Manifold використовує графічні процесори NVIDIA (і робив це вже кілька років). На цьому фронті є також незалежні дослідження; Я був частиною деяких грантових пропозицій щодо розробки реалізацій на основі графічного алгебри карт.
whuber

Це відмінна відповідь. Я зробив запропоноване профілювання, і виявилося, що може бути вузьке місце вводу / виводу диска. Отже, я реалізував рішення, яке використовувало диск RAM (я вибрав IMDisk). Зрештою, це не скоротило час на завершення процесу.
Росс Фурман

Мені шкода, що покращення не було. Видимість - це дорогий розрахунок: в принципі кожну клітинку в DEM необхідно перевіряти для кожного спостерігача, і процес інспекції, можливо, повинен переглянути цілу лінію комірок між спостерігачем і коміркою DEM: це може означати мільярди обчислень на спостерігач навіть у скромній (мегапіксельній) сітці. Якщо час обчислення є проблемою, вірогідні два ваші варіанти (1) паралелізують роботу: розділіть спостерігачів по робочих станціях, обчисліть видимість, об'єднайте результати; та (2) написати власний код видимості.
whuber

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.