【发布时间】:2015-09-25 16:26:57
【问题描述】:
我想到了一个用于数据科学应用程序的异步并行程序。考虑一个具有一个“主”和 20 个“从”的共享内存系统。它将在主节点上有一个矩阵;从机将读取矩阵的值,使用随机数进行一些操作,返回值将修改矩阵的某些元素(异步,允许覆盖;即第二名的从机可以覆盖从机所做的一些工作谁是第一名)。
我知道这可以在pthreads 中完成,但我不想在制作原型之前花费精力进行编码。
我在 MATLAB 中编写了一个并行程序模拟器:
- 一次一个且顺序地执行从站将执行的操作并记录时间。将其存储在名为 NEXT_EVENT_TIME_ARRAY 的向量中。
- 对该时间添加人为延迟 (= how_many_procs * BANDWIDTH_CONSTANT * size_of_M_in_megabytes)
- 设置 CURRENT_TIME = 0
现在,我们循环:
- 选择时间最短的从站作为“并行第一个完成”的从站
- 将 CURRENT_TIME 的值设置为 CURRENT_TIME + 此(最小)时间。
- 然后要求该从机对更新后的矩阵再次执行相同的操作(返回值会改变,因为该过程涉及随机数)。
- 记录slave完成并更新对应的时间所需的时间 NEXT_EVENT_TIME_ARRAY 的元素为 CURRENT_TIME + 从站花费的时间 以新的 M 值完成计算。
- 循环进行几次迭代!
我会选择 BANDWIDTH_CONSTANT 来匹配我的电脑。 这是一个合理的模型来获得我的算法是否可以在异步设置中工作的概念验证?
【问题讨论】:
标签: asynchronous parallel-processing hpc