我想围绕如何使用GCD来并行化和加速蒙特卡罗模拟,大多数/所有简单示例都针对Objective C我真的需要斯威夫特一个简单的例子,因为雨燕是我的第一个“真正”的编程语言在Swift中使用Grand Central Dispatch来并行化并加速“for”循环?
在斯威夫特蒙特卡罗模拟的最低工作版本将是这样的:
import Foundation
import Cocoa
var winner = 0
var j = 0
var i = 0
var chance = 0
var points = 0
for j=1;j<1000001;++j{
var ability = 500
var player1points = 0
for i=1;i<1000;++i{
chance = Int(arc4random_uniform(1001))
if chance<(ability-points) {++points}
else{points = points - 1}
}
if points > 0{++winner}
}
println(winner)
代码作品直接粘贴到xcode 6.1的命令行程序项目中
由于在下一个循环中使用了变量“points”的新值,因此最内层的循环无法并行化。但是最外层的模拟运行1000000次,并计算出结果,应该是并行化的理想候选者。
所以我的问题是如何使用GCD来并行化最外面的for循环?
不知道,大约arc4random()!小心从多个线程修改数组 - 看到更多的问答:http://stackoverflow.com/questions/26693838/swift-process-array-in-parallel-using-gcd/26790019#26790019 – 2014-11-24 15:09:41
我想我的第二个答案(不是公认的),因为它显式地为数组获取连续的内存缓冲区。 – 2014-11-24 15:10:34
@NateCook:我已经有过这样的感觉,但是找不到它。感谢您的参考和解决方案(+1),我相应地更新了答案。 – 2014-11-24 15:20:28