自定义实现ArcGIS功能


9

我想了解创建ArcGIS函数的自定义实现所需要的内容。特别是,我想实现GeoAnalyst.ISurfaceOp2.Visibility(),以使其运行更快。现在,每次调用Visibility()大约需要3秒钟。据我有限的理解,瓶颈是将临时栅格写入文件系统。如果可以在内存中完成此操作,我怀疑处理时间将大大减少。我正在.NET项目中执行此操作,但是欢迎使用任何语言的解决方案。


为什么不只将临时栅格写入RAM磁盘?这样一来,您就不必从头开始编写可视性操作,而这本身就有风险和成本。
Whuber

听起来不错。我将如何去做?这不是@Radar在下面的答案中无法实现的状态吗?
罗斯·富曼

4
您在系统上安装了RAM磁盘;细节因操作系统而异。然后,将ArcGIS暂存文件夹指向该文件夹。使用SSD几乎可以达到同样的效果,特别是在栅格很大或没有太多RAM的情况下。
Whuber

我喜欢RAM磁盘的想法。SSD有风险,因为它们不适合进行持续的读/写操作,因为您可能很快就将其耗尽。
雷达

2
基于闪存的SSD可以幸存1-5百万次写入,@ Radar,但DRAM SSD根本不会“磨损”。访问storagesearch.com了解(更多)更多信息。
ub

Answers:


5

该答案纪念并扩展了评论中的某些讨论。甲RAM磁盘模拟使用一些在计算系统中的RAM的外部磁盘驱动器。它的读取和写入速度可与内存中的高速缓存相媲美,为转换协议将面向磁盘的命令转换为面向存储器的命令的开销少了一些。通过运行特殊的操作系统级别的软件(“设备驱动程序”)来创建RAM磁盘。开源和免费RAM磁盘可用于许多操作系统,包括Windows。

因此,加速由于中间磁盘I / O造成的瓶颈的一种方法是设置一个RAM磁盘(如果需要,请购买额外的RAM)并将暂存文件夹放置在此处。(这通常是一个软件设置。)

另一种选择是安装高端DRAM固态设备(SSD),该设备本质上是一块单独包装的RAM块,带有一个电子接口,像磁盘驱动器一样工作。它安装在代替磁盘驱动器的计算系统中,其行为与不带任何其他软件的另一个磁盘驱动器完全相同,但读写速度几乎与内存访问一样快。这些比较昂贵,但是即使对于非常大的中间栅格存储,也可能只需要一个很小的存储空间。

在执行任何这些步骤之前,必须进行概要分析确定瓶颈在哪里的过程。(Windows近年来提供了功能越来越强大的概要分析和监视应用程序,在Windows 7中可以作为“任务管理器/资源监视器”对使用,当然,其他操作系统也可以使用许多类似的应用程序。)许多系统是自动配置的,或者可以配置为在短期内在RAM中缓存磁盘读写。缓存的工作原理几乎与RAM磁盘相同,但可能甚至更快:软件认为它正在将中间文件写入磁盘,但是OS会先将它们临时写入RAM,而不是访问磁盘,以期尽快获得相同的数据。将被读回并删除,在这种情况下,将不再需要物理写入。

给定任何完整可见性计算所需的计算量(在幼稚算法中,每个视点必须对每个单元检查一次可见性),至少应该怀疑可能是计算速度而不是磁盘I / O这里。如果是这种情况,RAM磁盘或SSD将浪费时间和金钱。相反,应该将精力放在分析和改进底层算法上

关于RAM磁盘性能是否有助于ArcGIS的一些讨论出现在另一个线程中


+1好评。我认为GIS人员还应该注意图形处理单元(GPGPU)的通用用途。我怀疑大多数第一人称射击游戏都利用GPU从射击者的位置确定对象的可见性。看到这个问题的OpenCL实现将是很棒的。也许GIS如果更多地使用GPU,那么它可能会引起那些玩电子游戏的孩子的注意。
Kirk Kuykendall

我还要说的是,GPU已被优化以执行诸如确定隐藏表面的操作,这类似于ISurfaceOp2.Visibility。
Kirk Kuykendall

好主意,@ Kirk。Manifold使用NVIDIA GPU(并且已经使用了几年)。在这方面也有独立的研究。我参与了一些赠款提案工作,以开发基于GPU的地图代数实现。
ub

这是一个很好的答案。我进行了建议的性能分析,似乎可能存在磁盘I / O瓶颈。因此,我实现了一个使用RAM磁盘的解决方案(我选择了IMDisk)。最后,这并没有减少完成该过程的时间。
罗斯·富曼

得知没有任何改善,我感到抱歉。可见性是一个昂贵的计算:原则上,必须为每个观察者检查DEM中的每个像元,并且检查过程可能必须查看观察者和DEM像元之间的整个像元行:这可能意味着每一个数十亿次计算观察者,甚至在适度(百万像素)的网格上。如果计算时间成问题,则可能有两个最佳选择(1)并行处理工作:在工作站之间拆分观察者,计算可视性,合并结果;(2)编写您自己的可见性代码。
ub

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.