【发布时间】:2018-11-13 00:44:32
【问题描述】:
看了Phil Trelford的有趣讲座后
https://www.youtube.com/watch?v=hx2vOwbB-X0
我对通过将列表替换为数组以及更普遍地使用可变变量来加速我的代码的可能性很感兴趣。于是我做了一个简单的测试:
let xs = [0.0..1000000.00]
let axs = List.toArray xs
let f x = sin (x * x)
List.map f xs // Real: 00:00:00.170, CPU: 00:00:00.187, GC gen0: 5, gen1: 3, gen2: 1
Array.map f axs // Real: 00:00:00.046, CPU: 00:00:00.046, GC gen0: 0, gen1: 0, gen2: 0
通过数组映射比通过列表映射快三倍以上。此时我还没有测试当调用的函数计算量更大时的速度差异。差异可能只是因为在数组中的项目移动速度更快,并且在每次迭代计算密集型时可能变得微不足道。
不过,在某些情况下,使用数组或更一般的可变变量可能会产生重大影响。
在更改我的代码以使用数组而不是列表之前,我想更清楚地了解代码并行化时的后果。
一般来说,什么时候可以使用可变变量而不会有并行代码出现问题的风险?是否有一个简单的测试可以让我确定函数在并行调用时的稳健性?
【问题讨论】:
标签: parallel-processing f# mutable