模拟并行代码

时间:2015-09-25 16:26:57

标签: asynchronous parallel-processing hpc

我对数据科学应用程序的异步并行程序有所了解。考虑一个共享内存系统与一个"主"和20"奴隶"。它将在主节点处具有矩阵;奴隶会读取矩阵的值,使用随机数做一些操作,返回值会修改矩阵的某些元素(异步,允许覆盖;即第二个来自的奴隶可以覆盖奴隶完成的一些工作谁来了第一名)。

我知道这可以在pthreads中完成,但在制作原型之前,我并不想花费精力进行编码。

我在MATLAB中编写了一个并行程序模拟器:

  • 一次一个地按顺序执行从站将要执行的操作并记录时间。将其存储在名为NEXT_EVENT_TIME_ARRAY的矢量中。
  • 在此时添加人为延迟 (= how_many_procs * BANDWIDTH_CONSTANT * size_of_M_in_megabytes)
  • 设置CURRENT_TIME = 0

现在,我们循环:

  • 以最短的时间挑选奴隶,因为"首先并行完成#34;
  • 将CURRENT_TIME的值设置为CURRENT_TIME +此(最小)时间。
  • 然后要求此从站再次使用更新的矩阵执行相同的操作(返回值将更改,因为该过程涉及随机数)。
  • 记录从站完成和更新相应所需的时间 NEXT_EVENT_TIME_ARRAY的元素为CURRENT_TIME +奴隶所用的时间 使用M的新值完成计算。
  • 循环几次!

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

1 个答案:

答案 0 :(得分:0)

我不太清楚你的模拟器有什么意义,所以我不确定我指出的缺陷对你来说是一个问题,但是我看到它的方式,你的BANDWIDTH_CONSTANT是据说代表你电脑上可用的内存带宽吧?

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

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