当前位置: 首页 > 编程笔记 >

数据并行与任务并行

郎弘业
2023-03-14
本文向大家介绍数据并行与任务并行,包括了数据并行与任务并行的使用技巧和注意事项,需要的朋友参考一下

数据并行

数据并行意味着在每个多个计算核心上并发执行同一任务。

让我们举个例子,对大小为N的数组的内容求和。对于单核系统,一个线程将简单地对元素[0]求和。。。[N-1]。但是,对于双核系统,在核0上运行的线程A可以对元素[0]求和。。。[N / 2-1],而在核心1上运行的线程B可以求和元素[N / 2]。。。[N-1]。因此,这两个线程将在单独的计算核心上并行运行。

任务并行

任务并行是指在多个计算核心上同时执行不同任务。

再次考虑上面的示例,任务并行性的示例可能涉及两个线程,每个线程对元素数组执行唯一的统计操作。同样,线程在单独的计算核心上并行运行,但是每个线程都执行唯一的操作。

数据并行性和任务并行性之间的主要区别是-

数据并行 任务并行
1.对相同数据的不同子集执行相同的任务。
1.对相同或不同的数据执行不同的任务。
2.执行同步计算。
2.执行异步计算。
3.由于只有一个执行线程对所有数据集进行操作,因此加快了速度。
3.由于每个处理器将对相同或不同的数据集执行不同的线程或进程,因此速度会降低。
4.并行化的数量与输入大小成正比。
4.并行化的数量与执行的独立任务的数量成正比。
5.专为在多处理器系统上实现最佳负载平衡而设计。
5.在这里,负载平衡取决于硬件的可用性以及诸如静态和动态调度之类的调度算法。
 类似资料:
  • 问题内容: 我有以下使用类的课程。所以我想做的是,在运行cp1实例处理方法的同时,我要并行运行。 但是,我要按顺序cp1,所以我要它运行并完成,如果cp2没有完成或失败,那就很好。如果确实失败,我想加入结果。该示例中未返回任何内容,但我想返回结果。 为此,应该使用TaskExecutor吗?还是线程? 我只希望cp2与cp1并行运行。或者,如果我添加更多内容,例如说cp3,我希望它也可以与cp1并

  • 我正试图找到一种很好的并行化代码的方法,对大数据集进行处理,然后将结果数据导入RavenDb。 数据处理是CPU绑定和数据库导入IO绑定。 我正在寻找一种在环境上并行处理的解决方案。ProcessorCount线程数。然后应将生成的数据导入到与上述进程并行的x(假设10)池化线程上的RavenDb中。 这里的主要问题是我希望在导入完成的数据时继续处理,以便在等待导入完成时继续处理下一个数据集。 另

  • 问题内容: 我有一些我想在JS中做的资源密集型任务。对于这个问题,让我们假设它们是一些繁重的计算,而不是系统访问。现在,我想同时运行任务A,B和C,并在完成后执行一些功能D。 该异步库为此提供了一个很好的脚手架: 如果我正在做的只是计算,那么它将仍然同步运行(除非库将任务本身放在不同的线程上,我希望情况并非如此)。我如何使它实际上是平行的?异步代码通常不阻止调用者的事情是什么(使用NodeJS时)

  • 假设我有几个任务要在Java中并行运行。每个任务要么返回成功,要么返回失败。每个任务都有一个相关的截止日期。如果任务未在截止日期前完成,它将被中断(所有任务都可中断)并返回失败。 如果其中一个任务失败(即返回失败),我们将中断所有仍在运行的其他任务。 我们应该等到所有任务都完成,最后如果所有任务都返回成功,则返回成功;如果至少有一个任务返回失败,则返回失败。 你将如何实施它?我将使用util。同时

  • 问题内容: 我正在编写一个新的Jenkins管道,并具有一组最终要并行运行的步骤。但是,在开发此管道时,我想强制其顺序运行。我没有看到任何指定并行步骤使用的线程数或类似方法的方法。这是到目前为止的基本代码: 我希望能够依次运行这些Shell脚本而无需更改很多代码。 问题答案: 而不是您可以这样使用:

  • 问题内容: 我正在使用python 2.7,我有一些看起来像这样的代码: 此处唯一的依赖项如下:dependent1需要等待任务1-3,Dependent2需要等待任务4-6,而dependent3需要等待依赖项1-2 …以下是可以的:首先运行全部6个任务并行,然后是前两个从属。 我希望尽可能多的任务并行运行,我已经在Google上搜索了一些模块,但是我希望避免使用外部库,并且不确定队列线程技术如