FME2012快速前瞻——并行处理

原文发布时间:2012-02-14

翻译:糖糖

翻译文章地址:https://blog.safe.com/2011/12/fmeevangelist94/

大家好!

如果你已经安装了FME2012,或者从@FMEEvangelist on Twitter听说了,就会看到到2012的某些转换器有了一个新选项:在一个转换中运行多个进程。

虽然你可能没有意识到,但这是一个思路的重大变化,而不仅仅是一个新的功能,但对于FME来说是一个整体。

为什么这么说,现在我们就开始学习……

什么是并行处理?

你电脑里的每个FME转换通常都是一个单进程。并行处理就是用多个同步进程完成你的数据转换。实质目的是同时地运行使程序比以往的运行快几倍。

这个概念是由近期很普遍的多核处理器而设计出来的。

每个能够进行并行处理的转换器都有一个并行处理标准参数。你可以从“No Parallelism(不平行)”到“Extreme(极端)”中选择的各种级别的标准:

      

对于大多用户来说现在最明显的问题是,“每种标准分别表示什么意思呢?”,我将在下文将为您解答。首先要设定哪些要素类分配给哪个进程。这是一个很重要的问题,因为一个进程里的要素类要独立转换成另一个要素类,你不能在一个进程里使用正在运行的一个要素类的裁切范围裁剪另一个要素。

那么,你如何分配要素类给进程呢?用Group-By(分组)设置。当你设置一个group-by(分组)并选择一个并行进程,每一个组以一个单独的进程来运行。并且进程之间没有交互作用也没有关系,因为组与组是分别处理的。不同的是,在以前它们是被连续地处理,现在可以同时被处理。  

查看以下这个案例:

      

我正在给面要素做压盖设置,但只在同一个国家内的每个面上。通过设置一个并行进程标准,每个国家以独立的(同时的)进程来运行,就像这样:

          

看,我运行的这个工作空间有4个“工作者”进程,这样在无形之中就利用了多核机器为用户提供了一个巨大的省时机,对于转换来说有加倍提速的潜能。但是实际上它对于FME的理念来说,也代表了一种转变,让我们接着往下看……

为什么这是一个大事件?

试想,到目前为止一个FME许可可以进行一个FME进程。但是现在,你可以同时运行并行进程,并且全部使用同一个FME许可。

所以并行处理并不需要多个许可。我们确定你的FME也是如此。如果你可以利用一个多核机器来提高性能,我们为什么要阻止呢? 

你事先可能同时运行过多个FME,但我们并没有真的设计过这种方式。现在我们才真正确定并且正好使之正式有效。

这不仅在功能上是一个重大的变化,但我们这样认为FME。我觉得这也会改变用户如何去建立FME环境,并且将会看到它的发生是一件非常有意思的事。

那么,有规则吗?有,并且涉及到所有不同的进程标准。

并行处理参数

并行处理参数的值明显是主观的,你也许会想,他们是否对核或进程映射了特定的数值。是的,映射如下:

     

所以(比如说)一个四核机器,参数设置为“Minimal”时,将导致两个同步的FME进程。“Extreme(极端)” 并行时,8核机器会导致16个同步进程。  

然而,对不同标准的许可也有一个严格的限制。

     

所以,如果你是基本版本的许可,就不能一次获得4个以上的进程,不论你的机器类型和平行参数是如何。

NB:以上数值是暂时的,可能还会调整。

有哪些转换器

很多转换器都有这种功能。我们挑选出最有可能受益于并行处理的转换器(例如: 会有集中的处理或一般成组转换的要素类)

清单如下:
                Area/PolygonBuilder
                AreaOnAreaOverlayer
                Bufferer
                Clipper
                DEMGenerator
                Dissolver
                DonutBuilder
                ImageRasterizer
                Intersector
                NeighborFinder
                NumericRasterizer
                PolygonBuilder
                RasterDEMGenerator
                SurfaceModeller
                TINGenerator


        而且,你也可以将它们应用给自定义转换器,这也非常有用。

首先你可以只按自然分组并行进程数据,使用一个自定义转换器,以执行为目的。如果没有自然分组你仍可以利用ModuloCounter来给分组创建一个ID值,用这样的方式分配不同的要素类给不同的进程。只需要记住每个组要各自独立地安排给进程。

然后其次,你只可以在没有分组的转换器使用自己创建的分组。例如,查看转换器Tiler,它没有分组设置。如果你在自定义转换器中加了一个Tiler,并设置了并行进程,那么你需要创建一个分组才能有效。这里不是性能的问题,而是使用创新的方式完成一个功能。      

顺便提一下,要使用在自定义转换器中使用并行进程,简单打开转换器定义然后你就会在导航窗口中发现并行处理参数:

     

注意事项

并行处理可以改善FME性能,但它也可以使降低或者使性能效果不大,所以值得你学习的是什么时候不能使用这种技术。

多个小组

我建议在你有很多个组但每个组只有几个要素的时候避免使用并行进程。请记住,每组占用一次FME进程需要耗费时间。例如,有10000个包含10个要素的组,你就会发现它启动和停止FME10000次所耗费的时间,比并行处理所节约的时间要多得多。相反地,10个包含10000个要素的组却适合这么做。

其他系统资源

当然,你也需要确定其他系统资源,比如说运行内存是否够用。使用8个进程来生成大量多边形时,如果你有8个核固然是好,但是如果只有2g的内存,就会使机器卡机并且使其他进程也变慢。

有人告诉我说从别处下载时使用并行进处理非常有用。比如说你通过HTTPFetcher配置了多个请求,那么不妨使用并行处理。我可以尽可能多地分解并行处理,因为它对我的系统资源只有细微的影响。

写入到硬盘

关于写进硬盘的工作,这是我还没有用并行处理解决的瓶颈。我的同事Dmitri发现,序列化点云时就遇到这个问题。用4个进程既完成这个工作,再增加进程数量最终也几乎没有造成什么不同,其他进程只是争取磁盘的时间而已。

真的,如果你不确定即将进行的任务,我建议你尝试在并行处理模式下处理一个数据子集。这会帮助你决定是否可以投入全部数据集。

分组

最后一个问题——虽然有点不相关——就是分组和进程组是否在一起。你可能希望这样。比如说你想在8个组里处理,每个组都有各自的分组。最好的方法就是使用自定义转换器,因为你可以在一个转换器里面设置一个分组,然后在自定义转换器里设置一个“进程分组”。我想我们会在2013年将这改进为两个参数设置。

总结

总而言之。并行处理是一个非常有用的工具。如果你有一个高规格的机器和好的CPU用于转换,你就能够开发多核并且改善程序。当我知道一些用户的转换要花费几天时间时,我就很希望这个技术能够在很大程度上可以减短运行时间。

它仍然是一个实验阶段的技术,但是我们正在总结到底哪个转换将获益最大,该如何配置。一旦我们找到答案,就会在这里第一时间通知你们。

在这期间为何不下载一个基本版的FME2012来试用一下呢?每年的这个时候我们都会完成已发布的用于完善产品的试用版。

感谢大家2011的一路相随,希望2012也能一如既往。向大家致以节日的问候和良好的祝福,新年快乐。

      

     

猜你喜欢

转载自blog.csdn.net/fmechina/article/details/81160284
今日推荐