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 许可证中规定。
要使用 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运行时间(秒) |
---|---|
1 | 42.5 |
2 | 33.6 |
3 | 32.7 |
4 | 30.0 |
物联网机器需要iOS 9.0以上。
如果您想为此项目做出贡献,请创建一个拉取请求。我们将审查拉取请求并讨论更改。该项目的所有拉取请求贡献都将根据MIT许可证发布。
之前以开源许可证发布并经NGA工作人员修改的软件源代码被认为是一种“共同作品”(见17 USC § 101);它部分受版权保护,部分为公共领域,作为一个整体受到非政府作者版权的保护,并必须按照原始开源许可证的条款发布。
物联网机器利用以下开源项目