处理执行中的并行性类型
数据并行
数据并行意味着在每个多个计算核心上并发执行同一任务。
让我们举个例子,对大小为N的数组的内容求和。对于单核系统,一个线程将简单地对元素[0]求和。。。[N-1]。但是,对于双核系统,在核0上运行的线程A可以对元素[0]求和。。。[N/2-1],而在核心1上运行的线程B可以求和元素[N/2]。。。[N-1]。因此,这两个线程将在单独的计算核心上并行运行。
任务并行
任务并行是指在多个计算核心上同时执行不同任务。
再次考虑上面的示例,任务并行性的示例可能涉及两个线程,每个线程对元素数组执行唯一的统计操作。同样,线程在单独的计算核心上并行运行,但是每个线程都执行唯一的操作。
位级并行
位级并行性是一种基于增加处理器字长的并行计算形式。在这种并行性中,随着字长的增加,处理器必须执行的指令数量才能对大小大于字长的变量执行运算。
例如,考虑8位处理器必须将两个16位整数相加的情况。首先,处理器必须将每个整数的8个低阶位相加,然后再将8个高阶位相加,然后再加上两条指令来完成单个操作。具有16位的处理器将能够用一条指令完成操作。
指令级并行
指令级并行性意味着可以同时执行一个程序中的多个指令。尽管流水线是ILP的一种形式,但我们必须利用它来实现指令流中指令的并行执行。
示例
for (i=1; i<=100; i= i+1) y[i] = y[i] + x[i];
这是一个并行循环。循环的每个迭代都可以与任何其他迭代重叠,尽管在每个循环迭代中几乎没有重叠的机会。