一般来说,有两种并行性:

  • 数据并行性
  • 任务并行性。

数据并行性侧重于跨多个计算核心分布相同数据的子集,并在每个核心上执行相同的操作。例如,考虑一个大小为n的数组的内容,在单核系统中,一个线程可以简单地对[0] . .. [N - 1 ]元素求和。然而,在双核系统上,线程A运行在核心0上运,可以对元素[0] .. .[N/2 − 1]进行求和。而线程B则运行在,核心1上,可以对[N/2] . .. [N − 1]的元素求和。

任务并行性指的是并不是在多个处理器核心之间分配数据,而是分配任务(线程)。每个线程执行一个独特的操作。不同的线程可能在相同的数据上运行,或者它们可能在不同的数据上运行。再考虑我们上面的例子。与此相反,任务并行性的一个例子可能涉及两个线程,每个线程对元素数组执行一个惟一的统计操作。这些线程在单独的处理器内核中并行运行,但是每个线程都在执行一个唯一的的操作。

因此,从根本上说,数据并行性涉及跨多个核心上的数据分布,任务并行性则设计的是在多个核心上的任务分配。然而,很少有应用程序严格遵循数据或任务并行性。在大多数情况下,应用程序使用这两种策略的混合。

results matching ""

    No results matching ""