Java 慢并行基数排序
考虑以下代码:Java 慢并行基数排序,java,arrays,multithreading,sorting,radix-sort,Java,Arrays,Multithreading,Sorting,Radix Sort,考虑以下代码: int maxElements = numElements + minElements; int mask = (1 << maskLen) - 1; for (int j = 0; j < a.length; j++) { if (minElements <= ((a[j] >> shift) & mask) && maxElements > ((a[j] >> shif
int maxElements = numElements + minElements;
int mask = (1 << maskLen) - 1;
for (int j = 0; j < a.length; j++) {
if (minElements <= ((a[j] >> shift) & mask)
&& maxElements > ((a[j] >> shift) & mask)) {
b[sumCount[(a[j] >> shift) & mask]++] = a[j];
}
}
int maxElements=numElements+minElements;
整数掩码=(1个移位)和掩码)
&&maxElements>((a[j]>>移位)和掩码)){
b[sumCount[(a[j]>>shift)和mask]+]=a[j];
}
}
这是2位radixSorting与线程的最后一部分,我们有一个赋值
排序工作非常完美,但是速度非常慢。我应该有一个大于1的加速(顺序时间/并行时间),但我几乎没有得到0.5
我明白了为什么,现在我不得不通过整个a[]
来获得正确的排序
我想知道的是,是否有其他方法可以解决这个问题?通过一百万个数组的位置是很多的,这大大减慢了我的程序 基数排序通常使用值的随机放置,我不明白为什么需要循环。我熟悉基数排序,但我不太明白您在这里做什么。在元素数组中循环排序和使用掩码做什么?同样,这个问题与多线程/并行算法无关