Saya telah bekerja dengan algoritma Quicksort Paralel dan algoritma PSRS yang pada dasarnya menggabungkan quicksort secara paralel dengan penggabungan.
Dengan algoritma Quicksort Paralel, saya telah mendemonstrasikan speedup dekat linear dengan hingga 4 core (dual core dengan hyper-threading), yang diharapkan mengingat keterbatasan algoritma. Quicksort Paralel murni bergantung pada sumber daya tumpukan bersama yang akan menghasilkan pertentangan di antara utas, sehingga mengurangi setiap perolehan kinerja. Keuntungan dari algoritma ini adalah bahwa ia mengurutkan 'di tempat,' yang mengurangi jumlah memori yang dibutuhkan. Anda mungkin ingin mempertimbangkan ini ketika menyortir elemen 100M ke atas seperti yang Anda nyatakan.
Saya melihat Anda mencari untuk mengurutkan pada sistem dengan 8-32 core. Algoritma PSRS menghindari pertengkaran di sumber daya bersama, memungkinkan percepatan pada jumlah proses yang lebih tinggi. Saya telah mendemonstrasikan algoritme dengan hingga 4 core seperti di atas, tetapi hasil eksperimen orang lain melaporkan mendekati linear speedup dengan jumlah core yang jauh lebih besar, 32 dan lebih banyak. Kerugian dari algoritma PSRS adalah bahwa ia tidak di tempat dan akan membutuhkan lebih banyak memori.
Jika Anda tertarik, Anda dapat menggunakan atau membaca dengan teliti kode Java saya untuk masing-masing algoritma ini. Anda dapat menemukannya di github: https://github.com/broadbear/sort . Kode ini dimaksudkan sebagai pengganti Java Collections.sort (). Jika Anda mencari kemampuan untuk melakukan pengurutan paralel dalam JVM seperti yang Anda sebutkan di atas, kode di repo saya dapat membantu Anda. API sepenuhnya digeneralisasi untuk elemen yang mengimplementasikan Sebanding atau mengimplementasikan Pembanding Anda sendiri.
Bolehkah saya bertanya apa yang Anda cari untuk menyortir banyak elemen? Saya tertarik untuk mengetahui aplikasi potensial untuk paket sortir saya.