2015-09-25 74 views
1

我有一个数据科学应用的异步并行程序的想法。考虑一个拥有一个“主”和20个“奴隶”的共享存储系统。它将在主节点上有一个矩阵;奴隶会读矩阵的值,使用随机数和返回值将修改矩阵的一些元素(异步做一些操作,允许覆写,即谁来到第2可能会覆盖一些由奴隶所做的工作的奴隶谁来了第一)。模拟并行代码

我知道这可以在pthreads做,但我不想花精力有一些原型之前编码它。

我在MATLAB写并行程序模拟器:

  • 一在-A-时间和顺序,确实,从站会做的操作,并记录时间。将其存储在名为NEXT_EVENT_TIME_ARRAY的向量中。
  • 添加一个人为延迟到时间 (= how_many_procs * BANDWIDTH_CONSTANT * size_of_M_in_megabytes)
  • 集CURRENT_TIME = 0

现在,我们循环:

  • 挑选具有最小时间作为从该“完成第一并联”的一个
  • 设为CURRENT_TIME +这个(最小)时间CURRENT_TIME的值。
  • 这从随后要求用更新的矩阵(返回值会发生变化,因为该过程涉及随机数)做同样的操作。
  • 记录需要从站的时间来完成和更新NEXT_EVENT_TIME_ARRAY相应 元素是CURRENT_TIME +时间从花 完成计算与几个迭代M.
  • 循环的新的价值!

我会选择BANDWIDTH_CONSTANT来匹配我的电脑。 这是一个合理的模型来获得一个概念证明我的算法是否可以在异步设置中工作?

回答

0

我不太确定你的模拟器在这里有什么特点,所以我不确定我要指出的缺陷对你来说是一个问题,但是我看到它的方式,你的BANDWIDTH_CONSTANT应该代表内存带宽可用在您的计算机上,对吗?

如果是这样,麻烦在于,由于这个带宽是一个全局资源,可以在您的机器上同时运行的所有线程和进程之间共享,所以“slave”的实际行为很可能会有所不同,具体取决于它们有专门的访问资源(顺序模式),或者如果他们必须与其他从机(并行模式)共享...

评估这种共享的影响的一个好方法是运行几个独立的顺序版本你的代码同时在同一台机器上,并记录对性能的影响这并发有比运行一个单一的作业......这样一来,你应该能够更好地考虑到这个因素到你的模型(虽然再次我不确定这是y的重要组成部分我们的模拟器在第一位)。