FogMachine 版本 4.0.3

FogMachine 版本 4.0.3

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2016年6月
SPM支持 SPM

Scott Wiedemann 维护。



FogMachine 版本 4.0.3

  • NGA, BIT Systems, Scott Wiedemann 和 Chris Wasko

Fog Machine 框架

viewshed on three phones

Fog Machine 是一个 iOS Swift 框架,用于并行处理。使用 Fog Machine 框架快速解决难题。

Fog Machine 框架是一个研究和开发项目,旨在利用多个本地连接的 iOS 设备的计算能力。通过使用移动设备的网状网络,并行处理技术允许 Fog Machine 快速有效地分析和回答复杂问题。通过利用共享资源(处理器、内存等),网状网络上的并行处理减少了解决问题的总体时间。通信依赖于 Wi-Fi 或蓝牙芯片组,并基于苹果的 Multipeer Connectivity 框架构建。

提供了两个演示应用。第一个演示应用是一个简单的文本搜索,它使用 Knuth-Morris-Pratt 字符串搜索算法在给定文本中查找搜索词。第二个应用计算位置的全景。全景是从地理位置可看到的地域。它包括与位置视线中的所有周围点,并排除horizon以外的点或被地形和其他特征阻挡的点。全景应用展示了 Fog Machine 框架的真实力量和灵活性。

Fog Machine 由国家地理空间情报局(NGA)开发,并与 BIT Systems 合作。政府有“无限权利”并将此软件发布,以通过为开发者提供机会将事情推向新方向来增加政府投资的成效。软件的使用、修改和分发权利在 MIT 许可证中规定。

Podfile

要使用 CocoaPods 将 Fog Machine 集成到您的 Xcode 项目中,请在其 Podfile 中指定它

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'

target 'TargetName' do
pod 'FogMachine', '~> 4.0.3'
end

然后,运行以下命令

$ pod install

从源构建

下拉最新源

git clone [email protected]:ngageoint/fog-machine.git

从 CocoaPods 下载 FogMachine 需要的依赖项

pod cache clean --all
pod install

启动 xcode 并微笑,你已经完成了

open FogMachine.xcworkspace

使用方法

Fog Machine 框架为您的应用提供了简单的生命周期。在扩展 FMTool 之后,您可以直接开始并行运行您的任务。

// What do I need help with?  How about saying hello?
public class HelloWorldTool : FMTool {
  public override func createWork(node:FMNode, nodeNumber:UInt, numberOfNodes:UInt) -> HelloWorldWork {
    return HelloWorldWork(nodeNumber: nodeNumber)
  }

  public override func processWork(node:FMNode, fromNode:FMNode, work: FMWork) -> HelloWorldResult {
    let helloWorldWork:HelloWorldWork = work as! HelloWorldWork
    print("Hello world, this is node \(helloWorldWork.nodeNumber).")
    return HelloWorldResult(didSayHello: true)
  }

  public override func mergeResults(node:FMNode, nodeToResult: [FMNode:FMResult]) -> Void {
    var totalNumberOfHellos:Int = 0
    for (n, result) in nodeToResult {
      let helloWorldResult = result as! HelloWorldResult
      if(helloWorldResult.didSayHello) {
        totalNumberOfHellos += 1
      }
    }
    print("Said hello \(totalNumberOfHellos) times.  It's a good day. :)")
  }
}


// Tell Fog Machine what we need help with
FogMachine.fogMachineInstance.setTool(HelloWorldTool())

// Look for friends/devices to help me
FogMachine.fogMachineInstance.startSearchForPeers()

// Run HelloWorldTool on all the nodes in the Fog Machine mesh-network and say hello to everyone!
FogMachine.fogMachineInstance.execute()

优点 & 缺点

通过网格网络的并行处理可以利用每个节点提供的共享资源(如处理器和内存)来减少解决问题的总体时间。以下是使用物联网机器框架的一些优缺点。

优点

  • 物联网机器允许您的应用程序轻松利用网格网络中所有设备的共享资源,如处理器、内存和存储,这可以显著提高性能。下表显示了增加节点网络的设备数量如何减少FogStringSearch应用程序提供的总体搜索时间。
设备数量 FogStringSearch运行时间(秒)
1 42.5
2 33.6
3 32.7
4 30.0
  • 物联网机器框架使用了苹果的多设备连接框架。多设备连接支持所有的iOS设备,这意味着iOS家族内部有很好的互操作性。
  • 该框架完全独立工作。它不依赖于任何后端连接,如LTE或Wi-Fi。
  • 如果,出于任何原因,节点网络中的设备未能处理其工作的一部分,该部分工作将在启动设备上自动重新处理。重新处理为网络提供了透明的灵活性。
  • 尽管物联网机器不是主要关注点,但该框架允许设备轻松地在节点网络中共享数据。

缺点

  • 节点网络通信依赖于Wi-Fi或蓝牙芯片组,如果您的设备彼此之间的距离不够近,可能不够可靠。
  • 将一个相对较慢的设备(相对于其他设备)引入您的网络可能会导致性能变差。
    • 例如:考虑一个由两个iPhone 6s和一部iPhone 4s组成的节点网络。如果每个节点设备必须处理相同数量的指令,那么两部iPhone 6s将比iPhone 4s快得多。在这两部iPhone 6s设备完成之后,它们将无所事事地等待iPhone 4s完成处理。
    • 如果您对使用不同处理能力的设备感到担忧,那么可以很容易地添加到FMTool的生命周期逻辑中,以处理差异。

  • 设备之间的通信开销基于您的FMWork和FMResult的大小。这些组件的大小可能不大,但在需要在不同设备之间发送大量数据的情况下,通信时间的增加可能会超过并行处理带来的减少。如果是这种情况,您可能需要重新评估您的架构。
  • 节点网络目前限制为8个设备。

要求

物联网机器需要iOS 9.0以上。

拉取请求

如果您想为此项目做出贡献,请创建一个拉取请求。我们将审查拉取请求并讨论更改。该项目的所有拉取请求贡献都将根据MIT许可证发布。

之前以开源许可证发布并经NGA工作人员修改的软件源代码被认为是一种“共同作品”(见17 USC § 101);它部分受版权保护,部分为公共领域,作为一个整体受到非政府作者版权的保护,并必须按照原始开源许可证的条款发布。

感谢

物联网机器利用以下开源项目