если только вы не умеете формировать этот массив на лету на той же видеокарте
Естественно, на ней исходные данные (и сами состояния и массив с оценками популяции) создаваться и будут, тут особо проблем нет. Тем более, когда каждое состояние рождает почти фиксированное, что-то около дюжины потомков
А правда, какой размер данных (и тип числа)?
На 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 надо минимизировать.