【问题标题】:Simulating a Parallel Code模拟并行代码
【发布时间】: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


    【解决方案1】:

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

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

    评估这种共享影响的一个好方法是在同一台机器上同时运行您的代码的多个独立顺序版本,并记录这种并发与运行单个作业相比的性能影响......这种方式,您应该能够更好地将这个元素考虑到您的模型中(尽管我再次不确定这是否是您的模拟器的重要组成部分)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      相关资源
      最近更新 更多