我有一个仅包含0和1的未排序数组。使用n个处理器核在阵列中找到第一个1的位置的最佳方法是什么?
答案 0 :(得分:0)
让每个处理器测试一个值,并为1返回其自己的索引,为0返回其n。
接下来,每隔一个处理器返回它返回的值和其右邻居返回的最小值。
然后每四个处理器等等...
答案 1 :(得分:0)
假设您事先知道数组的长度,则将此长度称为k。将数组拆分为n个索引为[0,k / n],[k / n + 1,2 * k / n],...,[(n-1)k / n + 1,k)的部分。创建一个静态变量来存储最小部分的索引,并将其初始化为INT_MAX
(或等效值)。分配一个处理器内核(或线程)以依次遍历每个部分中的索引,对照静态变量的值检查找到第一个索引的索引,如果索引较小,则写入新索引(然后返回)。需要使用互斥量/信号量来控制对静态变量的读取/写入。使用thread_join
(或同等功能)为每个线程同步此操作的完成,然后从主线程打印(或返回)索引。