本人新人一枚,最近在做一个项目,需要从三个数组中(每个数组 4.6-6 万组数据),每个数组分别代表直角坐标中的 X,Y,Z,这里以 x_arr,y_arr,z_arr 说明。需要一次同时遍历三个数组,分别按顺序取出相应的 X,Y,Z 值后,代入到另一个函数进行计算。完成这样一次遍历要 1 分钟左右。
因时间花的比较多,为提高效率,想利用好计算机的多核 CPU 的能力。因此,我找到了Parallel这个 Gem, https://github.com/grosser/parallel
x_arr.zip(y_arr,z_arr) do |x,y,z|
calculation(x,y,z)
end
然后我使用了Parallel,但无论如何也只能实现从其中一个数组中取值,首先将 x_arr 拆分成:x_arr1, x_arr2, x_arr3
Parallel.map([x_arr1, x_arr2, x_arr3]) do |x|
calculation(x)
end
实测,会自动用到到三个核去计算,时间确实缩短了。但是问题来了 前面只取到了一个数组的值,但“y_arr,z_arr”没有取到,怎么试也不行,难道要重写 GEM 吗?还请大家分享一下经验,有什么办法可以解。十分感谢!