关于并行化任务的问题

时间:2009-09-25 08:21:10

标签: algorithm pthreads parallel-processing

我对并行化有疑问:

我有两个数据集。数据集1有m行和k列,数据集2有n行和k列。(m> n)我的程序从文件中读取这些数据集并将它们存储在内存中。任务是获取Dataset1的每个实例(让我们调用此查询实例)并与Dataset2的所有实例进行比较。

现在我的问题是:

  • (Option1)我应该将Dataset2分区为x个分区,并将这些分区分配给每个查询中的x个工作线程(这意味着,与Dataset2中的查询实例进行比较)的Dataset1  或
  • (Option2)我应该从数据集1中获取x个实例,分配x个工作线程以同时查询数据集2.

哪一个更有效率? //顺便说一下,我现在正在使用PThreads库。

1 个答案:

答案 0 :(得分:1)

我会使用选项1,即分区数据集2。

理由:

数据集1可能太大而无法容纳在缓存中,这就是为什么你要扫描它并将每个条目与数据集2中的所有条目进行比较。

现在,我们假设数据集2也太大而无法完全适合单个处理器的缓存,但如果它被分区为x分区,则它足够大以适应缓存,每个处理器的缓存包含一个分区。在这种情况下,如果使用选项1,每个处理器的缓存将足够大以包含其中一个分区。如果你使用选项2,每个处理器都需要处理整个数据集2,这个数据集太大而无法容纳在其缓存中,因此会发生颠簸。

如果数据集2小到足以完全适合缓存,那么它可能与您选择的选项无关。