浅谈并行编程语言 Unified Parallel C(5)

多线程的并行编程中,任务在不同线程之间的分配是通过 upc_forall 语句实现的。upc_forall 语句的原型是 upc_forall (表达式 1;表达式 2;表达式 3;亲缘关系表达式 )。upc_forall 语句与 C 语言中的 for 语句的区别就是增加了第四个参数亲缘关系表达式。upc_forall 语句中的前三个表达式在语法上与 C 语言中的 for 语句一样。

亲缘关系表达式根据以下的规则来给线程分配任务:  

如果亲缘关系表达式是一个整型表达式,则由线程 MYTHREAD == affinity % THREADS 来执行当前的循环体。 如果亲缘关系表达式是一个指向共享数据指针类型的表达式,则由线程 MYTHREAD == upc_threadof(affinity) 来执行当前的循环体。 若亲缘关系表达式不存在或者为关键字 continue,则每个线程执行当前的循环体。
清单 4. upc_forall 语句例子
// 假定 THREADS=5 upc_forall(i=0;i<9;i++;i) // 当 i=5 的时候,MYTHREAD=7%5=2, 则由线程 2 来执行以下循环体。 { … } upc_forall(i=0;i<9;i++;&A[i]) //A 是一个共享类型数组,则由线程 MYTHREAD=upc_threadof(affinity),即 // 和 A[i] 这个共享类型元素有亲缘关系的线程,来执行当前的循环体。 { … } upc_forall(i=0;i<9;i++;continue) // 每个线程执行当前的循环体。 { … }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwsgsg.html