Медленная параллельная сортировка по корням
Рассмотрим этот код:
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];
}
}
Это последняя часть 2-битной сортировки radix с потоками, для которых у нас есть назначение.
Сортировка работает отлично, однако, она чертовски медленная. У меня должно быть ускорение (последовательное время / параллельное время)> 1, но я едва получаю 0,5.
Я могу понять, почему, на данный момент я вынужден пройти через все a[]
чтобы правильно сортировать.
Что мне интересно, есть ли другой способ решить эту проблему? Прохождение миллиона мест массивов - это много, и моя программа значительно замедляется.