Сортировка с использованием MMX
От: IvanD  
Дата: 20.09.03 15:42
Оценка:
Доброго времени суток!
Задал мне препод задачку: отсортировать массив байтовых чисел с использованием MMX.
После нескольких часов упорного кодирования, я понял, что известные мне алгоритмы под эту задачу не подходят никоим образом, и, собственно, призадумался. Искал везде, вплоть до Яndexа, но — ничего.
Может есть какие-нибудь идеи?
Re: Сортировка с использованием MMX
От: Кирилл Осенков Украина
Дата: 20.09.03 19:50
Оценка: 1 (1)
Привет!

Я к сожалению, ничего не знаю о командах MMX — но твою задачу решал бы сортировкой подсчетом (было здесь
Автор: Кирилл Осенков
Дата: 19.08.03
).

А что ты имеешь ввиду

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

Не удается MMX прикрутить? Или как?
Re: Сортировка с использованием MMX
От: iLmaR Эстония http://www.hot.ee/thepit/
Дата: 20.09.03 21:55
Оценка:
Здравствуйте, IvanD, Вы писали:

ID>Доброго времени суток!

ID>Задал мне препод задачку: отсортировать массив байтовых чисел с использованием MMX.
ID>После нескольких часов упорного кодирования, я понял, что известные мне алгоритмы под эту задачу не подходят никоим образом, и, собственно, призадумался. Искал везде, вплоть до Яndexа, но — ничего.
ID>Может есть какие-нибудь идеи?

хехе! наскоко я знаю тут без ассемблера не обойтись, потому как в С/C++/... компилятор должен уметь создавать MMX оптимизированный код и не имеет значения какие ты функции использовал. MSVC вроде умеет, но доказать это можно только после компановки и сборки используя disassembler или debugger. (и желательно знать ассемблерные команды, например movd — MMX команда для перемещения из регистра в регистр или в ячейку памяти). к сожалению другого пути не знаю.
Re[2]: Сортировка с использованием MMX
От: IvanD  
Дата: 21.09.03 05:59
Оценка:
Здравствуйте, Кирилл Осенков, Вы писали:

КО>А что ты имеешь ввиду

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

Не удается MMX прикрутить? Или как?


Дело в том, что MMX предоставляет возможность сравнивать сразу 8 байт (элементов массива), ну и пересылать между регистрами и памятью тоже по 8 байт, за счет этого и достигается оптимизация. Вопрос в том, как это реализовать, чтобы еще и массив сортировался.
Re[2]: Сортировка с использованием MMX
От: IvanD  
Дата: 21.09.03 06:21
Оценка:
Здравствуйте, iLmaR, Вы писали:

LR>хехе! наскоко я знаю тут без ассемблера не обойтись, потому как в С/C++/... компилятор должен уметь создавать MMX оптимизированный код и не имеет значения какие ты функции использовал.


Это я понимаю. Но преподу нужна не программа, которая быстро сортирует, а именно алгоритм, использующий MMX, а насчет ассемблера — согласен, хотя можно MMX-функции и на C++ использовать.
Re[3]: Сортировка с использованием MMX
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.09.03 06:59
Оценка:
Здравствуйте, IvanD, Вы писали:

ID>Здравствуйте, Кирилл Осенков, Вы писали:


КО>>А что ты имеешь ввиду

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

Не удается MMX прикрутить? Или как?


ID>Дело в том, что MMX предоставляет возможность сравнивать сразу 8 байт (элементов массива), ну и пересылать между регистрами и памятью тоже по 8 байт, за счет этого и достигается оптимизация. Вопрос в том, как это реализовать, чтобы еще и массив сортировался.

Я не експерт по MMX и низкоуровневому кодингу, но, по-моему, MMX тут не поможет. Дело в том, что в задаче сортировки основную роль играют обращения к памяти, а им по барабану, какими инструкциями они делаются. Размер-то массива один и тот же!
Ну а если я все же не прав, то вот такая идея:
выровняй длину массива по 8, и представь, что это 8 массивов, вдвинутых друг в друга:
|arr1_1|arr2_1|arr3_1|arr4_1|arr5_1|arr6_1|arr7_1|arr8_1|arr1_2|...

используй MMX для одновременной сортировки этих 8ми массивов, а потом слей их в один массив.
... << RSDN@Home 1.1 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: Сортировка с использованием MMX
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 21.09.03 08:14
Оценка: 2 (1)
Здравствуйте, IvanD, Вы писали:

ID>Доброго времени суток!

ID>Задал мне препод задачку: отсортировать массив байтовых чисел с использованием MMX.
ID>После нескольких часов упорного кодирования, я понял, что известные мне алгоритмы под эту задачу не подходят никоим образом, и, собственно, призадумался. Искал везде, вплоть до Яndexа, но — ничего.
ID>Может есть какие-нибудь идеи?

Для сортировки подсчетом у тебя есть несколько основных операций.

1. Обнуление массива(самы короткий этап) — это можно оптимизировать для MMX
2. Подсчет элементов — на счет этого не знаю, MMX уже не помню.
3. Заполнение массива в нужном порядке(самый долгий этам) — это тоже можно оптимизировать для MMX
Re[2]: Сортировка с использованием MMX
От: IvanD  
Дата: 21.09.03 09:15
Оценка: :)
Здравствуйте, Plutonia Experiment, Вы писали:

PE>Для сортировки подсчетом у тебя есть несколько основных операций.


PE>1. Обнуление массива(самы короткий этап) — это можно оптимизировать для MMX

PE>2. Подсчет элементов — на счет этого не знаю, MMX уже не помню.
PE>3. Заполнение массива в нужном порядке(самый долгий этам) — это тоже можно оптимизировать для MMX

Попробую. Кирилл Осенков (выше) уже упоминал об этом методе, признаюсь, раньше не приходилось с ним сталкиваться.
Спасибо за наводку!
Re[4]: Сортировка с использованием MMX
От: IvanD  
Дата: 21.09.03 09:17
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Ну а если я все же не прав, то вот такая идея:

S>выровняй длину массива по 8, и представь, что это 8 массивов, вдвинутых друг в друга:
S>
S>|arr1_1|arr2_1|arr3_1|arr4_1|arr5_1|arr6_1|arr7_1|arr8_1|arr1_2|...
S>

S>используй MMX для одновременной сортировки этих 8ми массивов, а потом слей их в один массив.

Это вроде похоже на метод Шелла? Но в нем, если мне не изменяет память, делается несколько проходов с разными шагами. Таким методом, возможно, массив частично отсортируется, но шаг все равно нужно менять => MMX бесполезен.
Re[3]: Сортировка с использованием MMX
От: Plutonia Experiment Беларусь http://blogs.rsdn.org/ikemefula
Дата: 21.09.03 09:20
Оценка: :)
Здравствуйте, IvanD, Вы писали:

ID>Спасибо на водку!


Спасибо на водку будет мало.
Re[5]: Сортировка с использованием MMX
От: Tan4ik Россия  
Дата: 24.09.03 05:54
Оценка:
Здравствуйте, IvanD, Вы писали:

ID>Здравствуйте, Sinclair, Вы писали:


S>>Ну а если я все же не прав, то вот такая идея:

S>>выровняй длину массива по 8, и представь, что это 8 массивов, вдвинутых друг в друга:
S>>
S>>|arr1_1|arr2_1|arr3_1|arr4_1|arr5_1|arr6_1|arr7_1|arr8_1|arr1_2|...
S>>

S>>используй MMX для одновременной сортировки этих 8ми массивов, а потом слей их в один массив.

ID>Это вроде похоже на метод Шелла? Но в нем, если мне не изменяет память, делается несколько проходов с разными шагами. Таким методом, возможно, массив частично отсортируется, но шаг все равно нужно менять => MMX бесполезен.


Это больше на сортировку слиянием похоже. Только надо быстро находить минимум среди N/8 элементов. Для этого можно использовать структуру данных "куча".
Только в твоем случае все равно сортировка подсчетом быстрее будет.
---
С уважением,
Лазарев Андрей
Re[3]: Сортировка с использованием MMX
От: MaximE Великобритания  
Дата: 24.09.03 19:30
Оценка:
Здравствуйте, IvanD, Вы писали:

ID>Здравствуйте, iLmaR, Вы писали:


LR>>хехе! наскоко я знаю тут без ассемблера не обойтись, потому как в С/C++/... компилятор должен уметь создавать MMX оптимизированный код и не имеет значения какие ты функции использовал.


ID>Это я понимаю. Но преподу нужна не программа, которая быстро сортирует, а именно алгоритм, использующий MMX, а насчет ассемблера — согласен, хотя можно MMX-функции и на C++ использовать.


Под VC2003 на C++ можно пользовать MMX, SSE, and SSE2 Intrinsics
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.