2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Многопоточная сортировка, эволюционный алгоритм
Сообщение23.09.2024, 00:24 
Аватара пользователя


07/02/12
1446
Питер
Возникла задача осуществлять сортировку огромного кол-ва элементов, причем интересует только около 10% рекордсменов, причем годятся они и в неотсортированном виде. Главная особенность - алгоритм должен быть многопоточный. Даже один раз линейно в один поток пройти по всему массиву - не устраивает. Очевидный способ - применить bitonic-sort, и взять рекордсменов. Не годится, нужно быстрее. В целом, годятся и вероятностные решения, но тут лишняя степень свободы появляется, и руками дополнительно махать придется.

Что б было легче понимать практическую ценность:
Применение: эволюционные алгоритмы
Платформа: видеокарты

 Профиль  
                  
 
 Re: Многопоточная сортировка, эволюционный алгоритм
Сообщение23.09.2024, 00:44 
Заслуженный участник
Аватара пользователя


16/07/14
9416
Цюрих
Про возможность реализации на GPU надо думать, но стандартный quick select можно распараллелить с небольшой хитростью для выбора очередного опорного элемента https://stanford.edu/~rezab/classes/cme ... 3_lec4.pdf.

 Профиль  
                  
 
 Re: Многопоточная сортировка, эволюционный алгоритм
Сообщение23.09.2024, 00:53 
Заслуженный участник
Аватара пользователя


28/07/09
1238
https://nvidia.github.io/cccl/cub/api/s ... xSort.html
https://nvidia.github.io/cccl/cub/api/s ... dSort.html
https://nvidia.github.io/cccl/cub/api/s ... xSort.html
https://nvidia.github.io/cccl/cub/api/s ... eSort.html

-- Пн сен 23, 2024 00:54:48 --

bondkim137 в сообщении #1655639 писал(а):
Даже один раз линейно в один поток пройти по всему массиву - не устраивает

Ну скорость чтения всё равно будет $O(n)$, если только вы не умеете формировать этот массив на лету на той же видеокарте (и его размер не много больше vram) , тогда скорость может быть "почти" $O(1)$

-- Пн сен 23, 2024 01:09:07 --

А правда, какой размер данных (и тип числа)?

 Профиль  
                  
 
 Re: Многопоточная сортировка, эволюционный алгоритм
Сообщение23.09.2024, 01:23 
Аватара пользователя


07/02/12
1446
Питер
Legioner93 в сообщении #1655642 писал(а):
если только вы не умеете формировать этот массив на лету на той же видеокарте

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

Legioner93 в сообщении #1655642 писал(а):
А правда, какой размер данных (и тип числа)?

На CPU сделали прототип с 10^6 популяций, хочется на 2-3 порядка его попробовать увеличить, ожидая качественного скачка =) Сортировать по метрике скалярной float-32 (можно привести к целочисленной и дискретизировать до 24 или даже 16 бит - там разброс почти равномерный).

-- 23.09.2024, 01:33 --

mihaild
С quick-sort-ом с отсечениями помучались, на CPU работало, но с GPU оно плохо параллелится на первых шагах. Merge-sort-наоборот, на последних. Плюс синхронизация итераций тоже дорогая. Как вероятностное решение, думаю попробовать разделить массив на N (~10K) одинаковых частей и параллельно отсортировать. Затем результат экспортировать в CPU в виде длинного фрагментированного индекса через DMA, а там отобрать рекордсменов (< 10%) merge-ем в один поток на быстром ядре попробовать. Но это гонять массив через шину, и нюансы с организацией массива есть, ибо весь индекс большой и кеш-промахи на чтение у CPU надо минимизировать.

 Профиль  
                  
 
 Re: Многопоточная сортировка, эволюционный алгоритм
Сообщение23.09.2024, 01:45 
Заслуженный участник
Аватара пользователя


28/07/09
1238
bondkim137 в сообщении #1655647 писал(а):
На CPU сделали прототип с $10^6$ популяций, хочется на 2-3 порядка его попробовать увеличить, ожидая качественного скачка =)


ИМХО проверить качественный скачок на $10^{8.5}$ элементах можно с любой внешней реализацией gpu sort; упомянутый cub идёт в поставке Nvidia Toolkit -- ничего дополнительно скачивать не надо.

Но конечно, всё упирается в скорость итераций.

bondkim137 в сообщении #1655639 писал(а):
причем интересует только около 10% рекордсменов, причем годятся они и в неотсортированном виде.


Содержательно по hpc задачке пока нечего прокомментировать

-- Пн сен 23, 2024 01:46:41 --

bondkim137 в сообщении #1655647 писал(а):
Сортировать по метрике скалярной float-32 (можно привести к целочисленной и дискретизировать до 24 или даже 16 бит - там разброс почти равномерный).


Не надо, оставьте float32

 Профиль  
                  
 
 Re: Многопоточная сортировка, эволюционный алгоритм
Сообщение23.09.2024, 01:51 
Аватара пользователя


07/02/12
1446
Питер
Legioner93 в сообщении #1655648 писал(а):
Не надо, оставьте float32

Это я на случай применения алгоритмов аля digital-sort. Но тут многопоточность, и мне нужны ссылки на конкретные состояния (относительно толстые), а не их гистограмма.

Legioner93 в сообщении #1655648 писал(а):
Но конечно, всё упирается в скорость итераций

10-100 в секунду. 1-10 минут окно рассматриваемое.
Хочется, конечно, в реальном времени, но пока не принципиально.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: granit201z


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group