multithreading - 跨度和平行循环

标签 multithreading dynamic

我在理解动态多线程时遇到问题。我有以下算法:

第 16 页,MAT-VEC
http://mitpress.mit.edu/books/chapters/0262033844chap27.pdf

并且在文本中他们说“对于 nxn 矩阵上的 MAT-VEC,第 3-4 行中的并行初始化循环具有 span theta(lg n)”

我的问题是为什么?我糊涂了。所以如果有人能解释他们的意思,那将是一个很大的帮助。

最佳答案

首先,“跨度”的定义,对于不知道的人来说,就是关键路径的长度。如果您有无限数量的 CPU,则跨度定义了完成算法所需的最短时间。

为了运行一个有 N 次迭代的循环,最短的方法是产生线程直到你有 N 个线程,然后让 N 个线程中的每一个执行一个工作单元。以下是生成 8 个线程的工作方式:

时间 0:线程 0 产生线程 1
时间 1:线程 0 产生线程 2,线程 1 产生线程 3
时间 2:线程 0 产生线程 4,线程 1 产生线程 5,线程 2 产生线程 6,线程 3 产生线程 7
时间 3:所有 8 个线程都执行它们的任务

这花费了 3 个单位的时间,所有东西都并行运行以创建 8 个线程。自 lg(8) = 3 ,算法的跨度为 Θ(lg n) .

关于multithreading - 跨度和平行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5918477/

相关文章:

c# - 在多线程应用程序中使用单例的危险是什么

多线程:线程多于内核有什么意义?

c - Linux内核中wake_up_sync/wake_up_interruptible_sync的用途

java - 动态类型转换 : Class and String to Comparable

python - 使用 Python 创建动态更新图

java - 在 Java 中动态转换为原语

c# - 如何杀死一个线程?

java - 设置 HashMap 线程安全吗?

来自行转换的 MySql 动态周期列

c# - 如何动态替换电子邮件模板中的占位符