Implementasi kustom fungsi ArcGIS

9

Saya ingin mencari tahu apa yang diperlukan untuk membuat implementasi kustom dari fungsi ArcGIS. Secara khusus, saya ingin mengimplementasikan GeoAnalyst.ISurfaceOp2.Visibility () untuk membuatnya berjalan lebih cepat. Saat ini, dibutuhkan ~ 3 detik per panggilan ke Visibilitas (). Dari pemahaman saya yang terbatas, bottleneck adalah penulisan raster sementara ke sistem file. Jika ini bisa dilakukan dalam memori, saya curiga waktu pemrosesan akan berkurang secara signifikan. Saya melakukan ini dalam proyek .NET, tetapi solusi dalam bahasa apa pun dipersilakan.

Ross Fuhrman
sumber
Mengapa tidak hanya membuat raster sementara yang ditulis ke disk RAM? Maka Anda tidak perlu kode op visibilitas dari awal, yang datang dengan risiko dan biaya sendiri.
whuber
Kedengarannya bagus. Bagaimana saya bisa melakukan itu? Apakah itu yang menyatakan bahwa @Radar tidak dimungkinkan dalam jawaban di bawah ini?
Ross Fuhrman
4
Anda memasang disk RAM pada sistem Anda; detail bervariasi dengan OS. Lalu Anda arahkan folder awal ArcGIS ke sana. Anda bisa melakukannya dengan baik menggunakan SSD terutama jika raster Anda besar atau jika Anda tidak memiliki banyak RAM.
whuber
Saya suka ide disk RAM. SSD berisiko karena tidak bagus untuk operasi baca / tulis yang konstan karena Anda dapat memakainya dengan cepat.
Radar
2
SSD berbasis flash akan bertahan 1 - 5 juta tulis, @Radar, tetapi DRAM SSD tidak akan "aus" sama sekali. Kunjungi storagesearch.com untuk (banyak) info lebih lanjut.
whuber

Jawaban:

5

Jawaban ini mengenang dan memperluas beberapa diskusi dalam komentar. Sebuah RAM disk mengemulasi drive disk eksternal menggunakan beberapa RAM dalam sistem komputasi. Ia dapat membaca dan menulis dengan kecepatan yang sebanding dengan caching di memori, dikurangi sedikit overhead untuk protokol terjemahan untuk mengubah perintah yang berorientasi disk ke perintah yang berorientasi pada memori. Disk RAM dibuat dengan menjalankan perangkat lunak tingkat sistem operasi khusus, "driver perangkat." Open source dan disk RAM gratis tersedia untuk banyak sistem operasi, termasuk Windows.

Oleh karena itu, salah satu cara untuk mempercepat kemacetan karena disk I / O perantara adalah dengan mengatur disk RAM (membeli RAM tambahan jika perlu) dan meletakkan folder awal di sana. (Ini biasanya merupakan pengaturan perangkat lunak.)

Pilihan lain adalah menginstal DRAM high-end state state device (SSD), yang pada dasarnya adalah blok RAM dalam kemasan terpisah dengan antarmuka elektronik untuk bertindak seperti disk drive. Itu menginstal dalam sistem komputasi di tempat disk drive dan akan berperilaku persis seperti disk drive lain tanpa perangkat lunak tambahan, tetapi akan membaca dan menulis hampir secepat akses memori. Ini relatif mahal, tetapi kemungkinan hanya yang kecil diperlukan bahkan untuk penyimpanan raster menengah yang sangat besar.

Sebelum mengambil langkah-langkah ini, penting untuk membuat profilproses untuk memastikan kemacetan sebenarnya. (Windows telah dikirim dengan profil yang semakin kuat dan aplikasi pemantauan dalam beberapa tahun terakhir, tersedia di Win 7 sebagai pasangan Task Manager / Resource Monitor, dan tentu saja banyak aplikasi serupa juga tersedia untuk OS lain.) Banyak sistem yang secara otomatis dikonfigurasi, atau dapat dikonfigurasi, untuk cache disk membaca dan menulis dalam RAM untuk waktu yang singkat. Caching bekerja hampir sama dengan disk RAM, tetapi mungkin bahkan lebih cepat: perangkat lunak berpikir itu menulis file perantara ke disk, tetapi OS menulisnya sementara untuk RAM pertama, tidak mengakses disk, dengan harapan bahwa segera data yang sama akan dibaca kembali dan dihapus, dalam hal ini penulisan fisik tidak akan pernah diperlukan.

Mengingat jumlah perhitungan yang diperlukan untuk perhitungan visibilitas penuh (dalam algoritma naif, setiap sel harus diperiksa untuk visibilitas satu kali untuk setiap sudut pandang), orang harus setidaknya menduga bahwa kecepatan komputasi, bukan disk I / O, mungkin menjadi masalah sini. Jika demikian, disk RAM atau SSD akan membuang-buang waktu dan uang. Sebaliknya, upaya harus diarahkan untuk menganalisis dan meningkatkan algoritma yang mendasarinya .

Beberapa diskusi tentang apakah kinerja disk RAM membantu ArcGIS telah muncul di utas lainnya .

whuber
sumber
+1 Respons yang bagus. Saya pikir orang-orang GIS juga harus mengawasi penggunaan tujuan umum dari unit pemrosesan grafis, atau GPGPU . Saya menduga sebagian besar game penembak orang pertama memanfaatkan GPU untuk menentukan visibilitas objek dari lokasi penembak. Akan bagus untuk melihat implementasi OpenCL dari masalah ini. Mungkin jika GIS menggunakan GPU lebih banyak, maka itu mungkin menarik perhatian anak-anak yang tumbuh bermain video game.
Kirk Kuykendall
Juga saya bermaksud menyebutkan GPU dioptimalkan untuk melakukan hal-hal seperti penentuan permukaan tersembunyi , yang mirip dengan apa yang dilakukan ISurfaceOp2.Visibilitas.
Kirk Kuykendall
Ide bagus, @Kirk. Manifold menggunakan GPU NVIDIA (dan telah melakukannya selama beberapa tahun). Ada juga penelitian independen di bidang ini; Saya telah menjadi bagian dari beberapa upaya proposal hibah untuk mengembangkan implementasi aljabar peta berbasis GPU.
Whuber
Ini jawaban yang sangat bagus. Saya melakukan profil yang disarankan, dan sepertinya mungkin ada disk I / O bottleneck. Jadi, saya menerapkan solusi yang menggunakan disk RAM (saya memilih IMDisk). Pada akhirnya, ini tidak mengurangi waktu untuk menyelesaikan proses.
Ross Fuhrman
Maaf mendengar tidak ada perbaikan. Visibilitas adalah perhitungan yang mahal: pada prinsipnya, setiap sel dalam DEM harus diperiksa untuk setiap pengamat dan proses inspeksi mungkin harus melihat seluruh garis sel antara pengamat dan sel DEM: yang dapat berarti miliaran perhitungan per pengamat bahkan pada kotak sederhana (megapiksel). Jika waktu komputasi adalah masalahnya, dua pilihan terbaik Anda kemungkinan (1) memparalelkan pekerjaan: membagi pengamat di seluruh workstation, menghitung visibilitas, menggabungkan hasilnya; dan (2) tulis kode visibilitas Anda sendiri.
Whuber
3

Sayangnya, Anda tidak dapat mengatur IRasterAnalysisEnvironment untuk bekerja dengan ruang kerja di-memori.

Utas ini membahas masalah ini.

Radar
sumber