Сортировка 128-битных значений по возрастанию. Процессор 32-битный.

Тема в разделе "WASM.A&O", создана пользователем nitrotoluol, 15 янв 2007.

  1. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Всем привет.
    вообщем есть массив:

    some_array db 10000h dup (0)

    в который в последствии генератором случайных чисел загоняются некоторые значения.

    Размер "структурной единицы" массива условно равен 128 битам

    Нужно отсортировать "структурные единицы" по возрастанию.


    Я использовал 4 регистра и пузырьковый алгоритм. Т.е. сперва происходит сортировка по старшим двордам, потом по более младшим и т.д.
    Хотя, понимаю, что устарело это все.
    Уже есть MMX, SSE и SSEII и прочие хитрости...

    Вообщем, посоветуйте, как лучше пересортировать эти значения.
     
  2. v_mirgorodsky

    v_mirgorodsky New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    53
    Ну, такое впечатление, что qsort даст в этом случае лучшие результаты.

    Если бы была более подробная информация о виде 128 битных чисел, можно было бы подумать о сравнении всего 128 битного числа за один раз, поскольку сортировка в пределах дворда - прямое замедление алгоритма в 4 раза.

    Еще многое зависит от процессора на который хочется запустить алгоритм - целочисленные SSEII не поддерживаются нигде ниже P4.
     
  3. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Нетрудно на регистрах делать сравнения не делая ветвлений. А в остальном бежать некуда - память всё равно не обгонишь...