在过去的几个小时里,我一直在寻找,但我无法完全理解如何做到这一点——我是并行计算领域的新手。
我的任务:我希望更新粒子数组上的特定值(或三个)。目前,我有一个函数可以执行以下操作:
def velocity_update(particle_array, Field1, Field2)
for n in range(N)
particle_array[0,n] = # vx equation
particle_array[1,n] = # vy equation
particle_array[2,n] = # vz equation
return particle_array
其中粒子数组包含 2D numpy 数组中 N 个粒子的每个粒子的属性(位置、速度等)。Field1 和 Field2 是作用于这些粒子的场,但粒子不会相互影响,也不会影响场,因此这些只是用作查找表的其他数组。
我的问题:如何使用 joblib 来并行化这个循环?我是否必须从函数中删除循环并在主程序中进行迭代(只为特定粒子发送我的数组的一列,而不是整个数组),或者有没有办法在函数内并行化,所以我仍然可以返回我更新的粒子阵列?我知道每次复制整个数组似乎效率低下,但粒子的位置也很重要——所以我需要粒子上的所有数据(尽管我只是改变速度)。
通常我会玩弄它,但目前我正在努力理解如何应用它来提供示例代码。任何帮助将不胜感激!