Penyortiran mengambil O (n log n) dalam case serial. Jika kita memiliki prosesor O (n), kita akan berharap untuk peningkatan linear. O (log n) algoritma paralel ada tetapi mereka memiliki konstanta yang sangat tinggi. Mereka juga tidak berlaku pada perangkat keras komoditas yang tidak memiliki prosesor O (n). Dengan prosesor p, algoritma yang masuk akal seharusnya membutuhkan waktu O (n / p log n).
Dalam kasus serial, pengurutan cepat memiliki kompleksitas runtime terbaik rata-rata. Algoritma pengurutan cepat paralel mudah diterapkan (lihat di sini dan di sini ). Namun itu tidak berfungsi dengan baik karena langkah pertama adalah mempartisi seluruh koleksi pada satu inti. Saya telah menemukan informasi tentang banyak algoritma pengurutan paralel tetapi sejauh ini saya belum melihat apa pun yang menunjuk pada pemenang yang jelas.
Saya mencari untuk mengurutkan daftar 1 juta hingga 100 juta elemen dalam bahasa JVM yang berjalan pada 8 hingga 32 core.
sumber
Jawaban:
Artikel berikut (unduhan PDF) adalah studi perbandingan algoritma penyortiran paralel pada berbagai arsitektur:
Algoritma pemilahan paralel pada berbagai arsitektur
Menurut artikel itu, jenis sampel tampaknya paling baik pada banyak jenis arsitektur paralel.
Pembaruan untuk mengatasi masalah usia Mark:
Berikut adalah artikel yang lebih baru memperkenalkan sesuatu yang lebih baru (dari 2007, yang, masih dibandingkan dengan jenis sampel):
Perbaikan pada jenis sampel
AA-Sort
Ujung pendarahan (sekitar 2010, beberapa hanya beberapa bulan):
Pola pemilahan
paralel Pemilahan paralel berbasis banyak inti GPU
Hybrid CPU / GPU parallel sorting
Algoritma Pengurutan Paralel Acak dengan Studi Eksperimental
pemilahan paralel yang sangat skalabel
Menyortir N-Elements Menggunakan Natural Order: Pendekatan Penyortiran Adaptif Baru
Pembaruan untuk 2013: Berikut adalah tepi yang berdarah sekitar Januari, 2013 (Catatan: Beberapa tautan ditujukan ke surat kabar di Citeseer dan memerlukan pendaftaran yang gratis):
Perkuliahan Universitas:
Partisi Paralel untuk Seleksi dan Pemilahan
Algoritma Pemilahan Paralel Kuliah Algoritma Pemilahan
Paralel Kuliah 2
Algoritma Pemilahan Paralel Kuliah 3
Sumber dan makalah lain:
Algoritma pemilahan novel untuk arsitektur banyak-inti berdasarkan jenis bitonic adaptif
Penyortiran Paralel yang Dapat Disejajarkan 2
Paralel Paralel yang Menggabungkan
Paralel Menggabungkan 2
Sistem Self-Sorting Paralel untuk
Kinerja Objek Perbandingan Urutan Quick Sort dan Algoritma Quick Sort Paralel
Memori Bersama, Lewat Pesan, dan Urutan Penggabungan Hibrid untuk SMP Mandiri dan Berkelompok
Berbagai algoritma paralel (pengurutan et al) termasuk implementasi
GPU dan CPU / GPU sumber hibrida dan kertas:
Sebuah Cara OpenCL dari Paralel Sorting Algoritma untuk GPU Arsitektur
data Sorting Menggunakan Graphics Processing Unit
Efisien Algoritma untuk Sorting pada GPU
Merancang algoritma sorting yang efisien untuk manycore GPU
deterministik Contoh Urutkan Untuk GPU
Cepat di tempat penyortiran dengan CUDA berdasarkan jenis bitonik Penyortiran
GPU paralel cepat menggunakan algoritma hybrid Algoritma
Penyortiran Paralel Cepat pada GPU Penyortiran
cepat pada CPU dan GPU: kasus untuk bandwidth yang tidak disadari SIMD sortir jenis
sampel
GPU GPU-ABiSort: Penyortiran Paralel Optimal pada Arsitektur Stream
GPUTeraSort: tinggi grafik kinerja prosesor sorting untuk manajemen database besar
Algoritma pemilahan berbasis perbandingan yang berkinerja tinggi pada GPU banyak-inti
Pengurutan eksternal paralel untuk GPU yang mendukung CUDA dengan penyeimbangan beban dan overhead transfer rendah
Menyortir pada GPU untuk kumpulan data skala besar: Perbandingan menyeluruh
sumber
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.
sumber
Lihatlah makalah ini: Algoritma Pemilahan Paralel yang Dapat Diukur Menggunakan Pemisahan Yang Tepat . Ini berkaitan dengan lebih dari 32 core. Namun, itu menjelaskan secara rinci suatu algoritma, yang memiliki kompleksitas waktu berjalan O (n / p * log (n) + p * log (n) ** 2) dan berlaku untuk pembanding yang sewenang-wenang.
sumber
Makalah "Perbandingan Algoritma Penyortiran Paralel pada Berbagai Arsitektur" mungkin merupakan tempat yang baik untuk Anda mulai.
sumber