ArcGIS işlevinin özel uygulaması


9

Bir ArcGIS fonksiyonunun özel bir uygulamasını oluşturmak için ne gerektiğini öğrenmek istiyorum. Özellikle, daha hızlı çalışmasını sağlamak için GeoAnalyst.ISurfaceOp2.Visibility () uygulamak istiyorum . Şu anda Görünürlük () çağrısı başına ~ 3 saniye sürüyor. Sınırlı anlayışımdan, darboğaz, dosya sistemine geçici rasterlerin yazılmasıdır. Bu bellekte yapılabilirse, işlem süresinin önemli ölçüde azalacağından şüpheleniyorum. Bunu bir .NET projesinde yapıyorum, ancak herhangi bir dilde çözümler bekliyoruz.


Neden geçici rasterler bir RAM diske yazılmıyor? O zaman görünürlük op'unu kendi riskleri ve maliyetleriyle birlikte sıfırdan kodlamanız gerekmeyecek.
whuber

Kulağa harika geliyor. Bunu nasıl yapabilirim? Aşağıdaki cevapta @Radar devletleri mümkün değil mi?
Ross Fuhrman

4
Sisteminize bir RAM diski takıyorsunuz ; ayrıntılar işletim sistemine göre değişir. Daha sonra ArcGIS scratch klasörünü işaret ediyorsunuz. Özellikle de rasterleriniz büyükse veya fazla RAM'iniz yoksa bir SSD kullanarak neredeyse de yapabilirsiniz.
whuber

RAM disk fikrini seviyorum. Bir SSD risklidir çünkü hızlı okuma yapabileceğiniz için sürekli okuma / yazma işlemleri için mükemmel değildir.
Radar

2
Flash tabanlı bir SSD, 1-5 milyon yazarlık, @Radar'da hayatta kalacak, ancak DRAM SSD'leri hiç "yıpranmayacak". (Çok) daha fazla bilgi için storagesearch.com adresini ziyaret edin .
whuber

Yanıtlar:


5

Bu cevap yorumlardaki tartışmanın bazılarını anımsatır ve genişletir. Bir RAM diski , bir bilgisayar sistemindeki RAM'in bir kısmını kullanarak harici bir disk sürücüsüne öykünür. Disk yönelimli komutları bellek yönelimli komutlara dönüştüren çeviri protokolleri için eksi bellek içi önbellekleme ile karşılaştırılabilir hızlarda okuyabilir ve yazabilir. Bir RAM diski, özel işletim sistemi düzeyinde bir yazılım olan "aygıt sürücüsü" çalıştırılarak oluşturulur. Windows dahil birçok işletim sistemi için açık kaynaklı ve ücretsiz RAM diskler mevcuttur.

Bu nedenle, ara disk G / Ç'si nedeniyle bir tıkanıklığı hızlandırmanın bir yolu bir RAM diski kurmak (gerekirse ek RAM satın almak) ve çalışma klasörünü buraya yerleştirmektir. (Bu genellikle bir yazılım ayarıdır.)

Başka bir seçenek , temel olarak ayrı bir ambalajda bir disk sürücüsü gibi davranmak için elektronik bir arayüzle bir RAM bloğu olan üst düzey bir DRAM katı hal cihazı (SSD) takmaktır. Bir disk sürücüsü yerine bir bilgi işlem sistemine kurulur ve herhangi bir ek yazılım olmadan başka bir disk sürücüsü gibi davranır, ancak neredeyse bellek erişimi kadar hızlı bir şekilde okur ve yazar. Bunlar nispeten pahalıdır, ancak çok büyük ara raster depolaması için bile sadece küçük bir taneye ihtiyaç vardır.

Bu adımlardan herhangi birini uygulamadan önce, profil oluşturmak önemlidir.darboğazın gerçekte nerede olduğunu belirleme süreci. (Windows son yıllarda giderek daha güçlü profil oluşturma ve izleme uygulamalarıyla birlikte teslim edildi, Win 7'de Görev Yöneticisi / Kaynak Monitörü çifti olarak kullanılabilir ve elbette diğer işletim sistemleri için de benzer birçok uygulama mevcuttur.) Birçok sistem otomatik olarak yapılandırılır veya disk okuma ve yazma işlemlerini RAM'de kısa süreliğine önbelleğe almak için yapılandırılabilir. Önbellek neredeyse bir RAM diskiyle aynı şekilde çalışır, ancak muhtemelen daha da hızlıdır: yazılım ara dosyaları diske yazdığını düşünür, ancak işletim sistemi, yakında aynı verilerin diske erişmeden, geçici olarak RAM'e yazar. okunacak ve silinecektir, bu durumda fiziksel yazma asla gerekli olmayacaktır.

Herhangi bir tam görünürlük hesaplaması için gereken hesaplama miktarı göz önüne alındığında (saf bir algoritmada, her hücrenin her bir bakış açısı için görünürlük açısından bir kez denetlenmesi gerekir), en azından disk hız / hızının değil, bilgi işlem hızının sorun olabileceğinden şüphelenilmelidir. buraya. Bu durumda, RAM diskler veya SSD'ler zaman ve para kaybı olacaktır. Bunun yerine, çaba temeldeki algoritmayı analiz etmeye ve geliştirmeye yönelik olmalıdır .

RAM disk performansının ArcGIS'e yardımcı olup olmadığı hakkında bazı tartışmalar başka bir iş parçacığında ortaya çıktı .


+1 Mükemmel yanıt. Bence GIS millet, grafik işleme biriminin veya GPGPU'nun genel amaçlı kullanımını da göz önünde bulundurmalıdır . Çoğu birinci şahıs nişancı oyununun, nesnenin atıcı konumundan görünürlüğünü belirlemek için GPU'dan yararlandığından şüpheleniyorum . Bu sorunun bir OpenCL uygulamasını görmek harika olurdu . Belki de GIS GPU'yu daha fazla kullandıysa, video oyunları oynayarak büyüyen çocukların dikkatini çekebilir.
Kirk Kuykendall

Ayrıca GPU'nun, gizli yüzey belirleme gibi ISurfaceOp2'nin yaptıklarına benzer şeyler yapmak için optimize edildiğinden bahsetmek istedim.
Kirk Kuykendall

İyi fikirler, @Kirk. Manifold NVIDIA GPU'ları kullanır (ve bunu birkaç yıldır yapmaktadır). Bu cephede bağımsız araştırmalar da var; GPU tabanlı harita cebiri uygulamalarını geliştirmek için bazı hibe teklif çabalarının bir parçası oldum.
whuber

Bu mükemmel bir cevap. Önerilen profili oluşturdum ve bir disk G / Ç darboğazı olabileceği ortaya çıktı . Bu yüzden, bir RAM disk kullanan bir çözüm uyguladım (IMDisk'i seçtim). Sonunda, bu işlemin tamamlanma süresini azaltmadı.
Ross Fuhrman

Hiçbir gelişme olmadığını duyduğuma üzüldüm. Görünürlük pahalı bir hesaplamadır: prensip olarak, DEM'deki her hücre her bir gözlemci için incelenmelidir ve inceleme süreci gözlemci ve DEM hücresi arasındaki tüm hücre çizgisine bakmak zorunda kalabilir: bu, milyarlarca hesaplama anlamına gelebilir mütevazı (megapiksel) bir ızgarada bile gözlemci. Hesaplama süresi sorunsa, en iyi iki seçeneğiniz muhtemelen (1) işi paralel hale getirir: gözlemcileri iş istasyonlarına ayırın, görünürlükleri hesaplayın, sonuçları birleştirin; ve (2) kendi görünürlük kodunuzu yazın.
whuber

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.