Медленная параллельная сортировка по корням

Рассмотрим этот код:

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[] чтобы правильно сортировать.

Что мне интересно, есть ли другой способ решить эту проблему? Прохождение миллиона мест массивов - это много, и моя программа значительно замедляется.

0 ответов

Другие вопросы по тегам