Abstrak Program dapat memilih nilai-nilai yang lebih kecil dari dua vektor
menggunakan vektor membandingkan dan vektor pilih petunjuk tanpa
Banyak algoritma pengurutan telah dipelajari di masa lalu, tetapi cabang bersyarat. Manfaat dari pengurangan jumlah cabang kondisional
hanya ada beberapa algoritma yang dapat secara efektif adalah signifikan bagi banyak beban kerja. Misalnya, Zhou et al. [ 3]
memanfaatkan kedua instruksi SIMD dan benang-tingkat paralelisme. melaporkan bahwa instruksi SIMD dapat mempercepat banyak operasi
Dalam tulisan ini, kami mengusulkan paralel algoritma sorting baru, database dengan menghapus biaya overhead cabang.
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
Algoritma out-of-core didasarkan pada mergesort dan mempekerjakan 2. SIMD set instruksi
algoritma merge vektoralisasi kami baru. Ini memiliki memori yang lebih
baik akses lokalitas dari algoritma di-inti kami. kompleksitas komputasi Dalam makalah ini kami menggunakan Vector Multimedia ekstensi
adalah DI • log ( N)) [2] (VMX, juga dikenal sebagai AltiVec) instruksi dari instruksi PowerPC
bahkan dalam kasus terburuk. set untuk menyajikan algoritma sorting baru. Ini menyediakan satu set
Lengkap AA-semacam algoritma membagi pertama semua data ke 128-bit vektor register, yang masing-masing dapat digunakan sebagai
dalam blok yang cocok di L2 cache masing-masing inti prosesor. enam belas nilai-nilai 8-bit, delapan nilai 16-bit, atau empat nilai 32-bit.
Berikutnya itu macam setiap blok dengan algoritma sorting inti in. Akhirnya Instruksi VMX berikut ini berguna untuk menyortir: vektor
menggabungkan blok diurutkan dengan algoritma merge vektoralisasi kami membandingkan, vektor pilih, dan vektor permutasi.
untuk menyelesaikan penyortiran. Kedua fase menyortir dan fase
penggabungan dapat dilaksanakan oleh beberapa thread secara paralel. Instruksi vektor membandingkan membaca dari dua register masukan
dan menulis ke satu output mendaftar. Membandingkan setiap nilai dalam
pertama masukan mendaftar dengan nilai yang sesuai pada input kedua
Kami dilaksanakan dan dievaluasi AA-semacam sistem dengan 4 mendaftar dan mengembalikan hasil dari perbandingan sebagai masker
core dari PowerPC ® prosesor 970MP dan sistem dengan 16 core dari dalam output mendaftar.
Cell Broadband Mesin TM ( Sel BE) prosesor [7]. Singkatnya, versi
berurutan dari instruksi SIMD AA-semacam menggunakan Vektor pilih instruksi mengambil tiga register sebagai input dan satu
mengungguli yang dioptimalkan perpustakaan pemilahan sekuensial untuk output. Ini memilih nilai untuk setiap bit dari register masukan
IBM sebesar 1,8 kali dan GPUTeraSort [8], yang ada state-of-the-art pertama atau kedua dengan menggunakan isi dari ketiga masukan
algoritma sorting untuk prosesor SIMD, dengan 3,3 kali pada PowerPC mendaftar sebagai masker untuk seleksi.
970MP ketika menyortir 32 M dari 32-bit bilangan bulat acak. Selain
itu, versi paralel dari skalabilitas AA-semacam menunjukkan lebih baik Instruksi vektor permutasi juga mengambil tiga register sebagai input
dengan peningkatan jumlah core dari versi paralel dari GPUTeraSort. dan satu untuk output. instruksi dapat menyusun ulang nilai-nilai
Ini dicapai kecepatan up dari 12.2x dengan 16 core pada BE Sel, sedangkan single-byte dari input sewenang-wenang. Dua register pertama
GPUTeraSort dicapai 7.1x. Akibatnya AA-semacam itu 4,2 kali lebih diperlakukan sebagai array dari 32 nilai single-byte, dan register ketiga
cepat pada 4 core dari PowerPC 970MP dan 4,9 kali lebih cepat pada digunakan sebagai array dari indeks untuk memilih 16 byte
16 core prosesor Sel BE dibandingkan dengan GPUTeraSort. sewenang-wenang dari input mendaftar.
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
juga dapat menghindari warung pipa yang disebabkan oleh prediksi
cabang miss. Selain itu, algoritma kami memungkinkan untuk mengambil a [0] a [1] a [2] a [3] a [4] a [5] a [6] a [7] a [8] · · ·
keuntungan dari paralelisme data instruksi SIMD. va [0] va [1]
Govindaraju et al. [8] disajikan penyortiran sebuah Gambar 2. Pseudocode dari combsort.
arsitektur disebut GPUTeraSort. Ini termasuk algoritma sorting baru untuk
instruksi SIMD yang meningkat pada Batcher ini bitonic semacam
jumlah elemen dalam array, N, merupakan kelipatan dari empat untuk
penggabungan [13]. Kami mengacu pada algoritma ini, tidak
kemudahan penjelasan. Gambar 1 menggambarkan tata letak array, sebuah].
seluruh arsitektur, sebagaiitu
Array nilai integer sebuah] adalah setara dengan sebuah array bilangan bulat
GPUTeraSort. The bitonic merge menyortir memiliki
vektor mobil van/ 4]. Unsur vektor bilangan bulat va [i] terdiri dari empat nilai
kompleksitas komputasi DI • log ( N) 2) dan dapat dijalankan hingga N prosesor
integer a [i * 4] untuk a [i * 4 + 3].
secara paralel. The GPUTeraSort meningkatkan algoritma ini dengan
mengubah urutan perbandingan untuk meningkatkan efektivitas dari
AA-semacam terdiri dari dua algoritma, algoritma di-core memilah dan
perbandingan SIMD dan juga meningkatkan memori akses wilayah untuk
out-of-inti algoritma sorting. The keseluruhan AA-semacam mengeksekusi
mengurangi cache misses. Membandingkan AA-semacam ke
tahap-tahap berikut menggunakan dua algoritma: (1) Bagi semua data ke
GPUTeraSort, kedua algoritma dapat secara efektif diimplementasikan
dalam blok yang masuk ke dalam cache prosesor. (2) Menyortir setiap blok
dengan instruksi SIMD dan keduanya dapat memanfaatkan benang-tingkat
dengan algoritma di-core penyortiran. (3) Menggabungkan blok diurutkan
paralelisme. Sebuah keuntungan dari kami AA-sort adalah kompleksitas
dengan algoritma out-of-core. Pertama kami menyajikan dua algoritma
komputasi yang lebih kecil dari
pengurutan dan kemudian menggambarkan skema keseluruhan
penyortiran.
DI • log ( N)) dibandingkan dengan kompleksitas DI • log ( N) 2)
untuk GPUTeraSort tersebut.
meningkatkan kinerja seluruh jenis hingga 22%. Mereka mengevaluasi [6], perpanjangan semacam gelembung. Bubble sort membandingkan setiap
kinerja manfaat untuk instruksi SSE dan petunjuk VMX. AA-semacam elemen ke elemen berikutnya dan swap mereka jika mereka berada di luar
dapat mengambil keuntungan dari instruksi SIMD tidak hanya di rangka diurutkan. Combsort membandingkan dan swap dua elemen
bagian terakhir dari pemilahan tetapi juga seluruh tahapan. non-berdekatan. Membandingkan dua nilai dengan pemisahan besar
meningkatkan kinerja secara drastis, karena masing-masing nilai bergerak
menuju posisi akhir lebih cepat. Gambar 2 menunjukkan pseudocode dari
combsort. Pemisahan (berlabel
algoritma 4. AA-semacam
celah pada Gambar 2) dibagi oleh sejumlah disebut
menyusut faktor di setiap iterasi sampai menjadi satu. Para penulis
Pada bagian ini, kami menyajikan algoritma sorting baru yang kita sebut
menggunakan 1.3 untuk faktor psikiater. Kemudian loop akhir diulang
AA-macam. Kami menggunakan bilangan bulat 32-bit sebagai tipe data dari
sampai semua data diurutkan. Kompleksitas komputasi mendekati
elemen yang akan diurutkan. Oleh karena itu salah satu vektor 128-bit
combsort
register berisi empat nilai. Perhatikan bahwa algoritma kami tidak terbatas
N • log ( N) rata-rata [6].
pada tipe data ini dan tingkat paralelisme data selama petunjuk SIMD
Operasi dasar banyak algoritma penyortiran termasuk combsort,
mendukung mereka. Kami berasumsi elemen pertama dari array yang akan
merge bitonic semacam, dan GPUTeraSort, adalah untuk
diurutkan sejajar pada batas 128-bit dan
membandingkan dua nilai dan pertukaran mereka
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
urutan asli: kesenjangan = (N / 4) / SHRINK_FACTOR;
0 1 2 3 4 5 6 7 8 9 · · · sementara (gap> 1) {
/ * Lurus perbandingan */
Agar dialihkan:
untuk (i = 0; i <N / 4 - gap; i ++)
0 n 2n 3n 1 n+12n+13n+1 2 n+2·
vector_cmpswap (va [i], va [i + gap]); / * Perbandingan
miring */
n = N / 4: jumlah vektor / * Ketika saya + kesenjangan melebihi N / 4 * / for (i = N /
(A) agar Asli dan dialihkan dalam memori 4 - gap; i <N / 4; i ++)
vector_cmpswap_skew (va [i],
elemen dalam vektor va [i + gap - N / 4]);
menyusun ulang
· · ·
· · ·
setelah menyortir
untuk (i = 0; i <N / 4 - 1; i ++)
n1 2 n 1 3 n 1 N- 1 N- 4 N- 3 N- 2 N- 1 vector_cmpswap (va [i], va [i + 1]); vector_cmpswap_skew
agar dialihkan urutan asli (va [N / 4-1], va [0]); } Sementara (tidak benar-benar diurutkan);
(B) Skema penataan kembali setelah menyortir
cabang bersyarat.
Combsort memiliki dua masalah yang mengurangi efektivitas yang lebih besar ke samping MAX
instruksi SIMD: (1) akses memori unaligned dan (2) loop-dilakukan Gambar 5. vector_cmpswap dan operasi
dependensi. Mengenai akses memori unaligned, combsort vector_cmpswap_skew.
membutuhkan memori unaligned mengakses ketika nilai kesenjangan
Langkah 2 mengeksekusi combsort pada array vektor bilangan bulat
bukan kelipatan dari tingkat paralelisme data instruksi SIMD. Sebuah
loop-dilakukan mencegah ketergantungan mengeksploitasi paralelisme mobil van/ 4] ke dalam urutan yang dialihkan. Gambar 4 menunjukkan
pseudocode untuk Langkah 2 dari algoritma di-inti kami. Dalam kode ini, vector_cmpswap
data instruksi SIMD ketika nilai kesenjangan yang lebih kecil dari
adalah sebuah operasi yang membandingkan dan nilai-nilai swap di setiap
derajat paralelisme data.
elemen dari vektor mendaftar A dengan yang sesuai elemen dari vektor
register B seperti yang ditunjukkan pada Gambar 5. Demikian pula
seperti yang ditunjukkan pada Gambar 3 (b). Kami algoritma di-core menyortir
elemen terakhir dari vektor mendaftar A dan elemen pertama dari
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
diurutkan diurutkan APOS = BPOS = 0; Vmin = va [apos ++]; Vmax = vb [BPOS
++]; sementara (APOS <aend && BPOS <Bend) {
vektor mendaftar A vektor register B
A0 A1 A2 A3 B0 B1 B2 B3 memasukkan
*/
tahap 3 jika (a [apos * 4] <b [BPOS * 4])
< < <
Vmin = va [apos ++]; lain
A0 A1 A2 A3 B0 B1 B2 B3 keluaran
Vmin = vb [BPOS ++]; }
vektor mendaftar A vektor register B
diurutkan
dari dua input (masing-masing satu) dan mengirimkan nilai yang lebih
MIN MAX
Gambar 6. Data yang mengalir dari operasi vektor merge. kecil untuk output kiri dan yang lebih besar ke kanan. Operasi gabungan
tidak dikenakan overhead merepotkan. petunjuk permutasi vektor yang aneh-bahkan membutuhkan log ( P) + 1 tahap untuk menggabungkan
efisien dapat menjalankan langkah ini. dua register vektor, yang masing-masing mengandung P elemen. Sini P = 4
dan log ( P) + 1 = 3. Setiap mengeksekusi tahap satu vektor
Singkatnya, kami di-core algoritma sorting terdiri dari tiga langkah. membandingkan, dua vektor pilih dan satu atau dua instruksi vektor
Ketiga langkah-langkah dapat dilaksanakan dengan instruksi SIMD permutasi. Jika set instruksi SIMD tidak mendukung operasi vektor
tanpa akses memori unaligned. Juga semua dari mereka dapat permutasi, mengulangi vector_cmpswap
algoritma didominasi oleh Langkah 2 dan adalah sama dengan bukannya log ( P) + 1 tahap.
Operasi gabungan untuk dua array besar yang disimpan dalam memori dapat
combsort, mendekati DI • log ( N)) rata-rata dan DI 2) dalam kasus
diimplementasikan dengan menggunakan operasi gabungan ini untuk register
terburuk.
vektor. Gambar 7 menunjukkan pseudocode untuk penggabungan dari dua array
Kami di-core algoritma sorting menderita dari miskin akses memori
bilangan bulat vektor va
lokalitas. Sehingga kinerjanya dapat menurunkan jika data tidak bisa
dan vb. Dalam kode ini, vector_merge operasi adalah operasi gabungan untuk
masuk ke cache prosesor. Kami mengusulkan algoritma lain
penyortiran, algoritma out-of-core menyortir, yang mengambil masalah register vektor yang ditunjukkan pada Gambar 6. Dalam setiap iterasi, kode ini
itu ke rekening. (1) mengeksekusi sebuah operasi gabungan dari dua register vektor,
(3) membandingkan elemen berikutnya dari setiap array input, dan (4)
Untuk out-of-inti menyortir, kami mengusulkan sebuah metode
beban empat nilai ke dalam Vmin dari array yang
inovatif untuk mengintegrasikan algoritma merge aneh-bahkan [13]
Unsur berikutnya adalah lebih kecil dan uang muka pointer untuk
diimplementasikan dengan instruksi SIMD ke dalam algoritma merge
array.
biasa. Metode kami memungkinkan untuk operasi gabungan untuk
mengambil keuntungan dari SIMD instruksi sementara Memuat unsur-unsur baru dari hanya satu input array cukup, karena
masih penyimpanan itu empat nilai data di VMAX tidak lebih besar dari setidaknya salah satu
kompleksitas komputasi DI). Kompleksitas ini lebih kecil dari elemen berikutnya dari array setiap masukan dan karenanya lebih
kompleksitas DI • log ( N)) untuk menggabungkan aneh-bahkan atau besar dari dua elemen berikutnya tidak harus terkandung dalam empat
gabungan bitonic. nilai output berikutnya. Hanya ada satu cabang bersyarat untuk output
Gambar 6 menunjukkan data mengalir dari operasi merge aneh-bahkan dari setiap P elemen, sementara operasi gabungan naif membutuhkan
selama delapan nilai yang disimpan dalam dua register vektor, yang satu cabang bersyarat untuk setiap elemen output.
mengandung empat nilai diurutkan masing-masing. Dalam gambar kotak
dengan simbol ketimpangan menandakan operasi perbandingan.
Masing-masing berbunyi dua nilai Kami out-of-core algoritma sorting rekursif mengulangi operasi
gabungan dijelaskan sebelumnya. itu tidak
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
tidak memerlukan akses memori unaligned. Namun, itu mencapai kinerja Tabel 1. Perbandingan algoritma
yang lebih rendah dibandingkan dengan algoritma di-inti kami untuk kompleksitas
algoritma benang SIMD
sejumlah kecil data yang dapat ditampung dalam cache. Di sisi lain, paralel rata-rata terburuk
out-of-core menyortir algoritma mencapai kinerja yang lebih tinggi AA-semacam iya nih iya nih N • log ( N) ←
daripada algoritma di-core ketika data tidak dapat disimpan dalam cache. GPUTeraSort iya nih iya nih N • log ( N) 2 ←
Hal ini karena algoritma out-of-core memiliki jauh lebih baik akses memori Essl Tidak Tidak N • log ( N) N2
wilayah dibandingkan dengan kami algoritma sorting di-core. STL (introsort) Tidak Tidak N • log ( N) ←
4.3. Secara keseluruhan paralel skema menyortir dari AA-macam Dalam beban kerja dunia nyata, menyortir sebagian besar digunakan
untuk struktur data pemesanan ulang sesuai dengan kunci mereka. Kita bisa
The keseluruhan AA-semacam mengeksekusi tahap-tahap berikut memperpanjang AA-semacam untuk tujuan tersebut. Untuk itu, kami
menggunakan dua algoritma: (1) Bagilah semua data yang akan diurutkan menjadi mempertimbangkan pemilahan untuk pasangan yang terdiri dari kunci nilai
blok yang integer 32-bit dan sepotong 32-bit dari data yang terkait, seperti pointer ke
muat dalam cache atau memori lokal prosesor. (2) Menyortir setiap struktur data yang berisi kunci. Dengan asumsi kunci dan data terlampir
blok dengan algoritma di-core menyortir disimpan dalam array yang berbeda, operasi membandingkan dan swapping
secara paralel oleh beberapa thread, dimana setiap benang memproses dapat diimplementasikan dengan menggunakan hasil perbandingan untuk
sebuah blok independen. (3) Menggabungkan blok diurutkan dengan out-of-core kunci untuk memindahkan kedua kunci dan data. Ketika kunci dan data
penyortiran terlampir disimpan dalam satu array demi satu, membandingkan dan
algoritma oleh beberapa thread. bertukar dari {kunci, Data} pasang dapat diimplementasikan dengan
Ukuran blok untuk menyortir di-core merupakan parameter penting. menambahkan satu vektor instruksi permutasi setelah instruksi vektor
Pemilihan ukuran blok tergantung pada bandwidth dan latency untuk dibandingkan dengan menggantikan hasil perbandingan dari data dengan
setiap tingkat hirarki memori. Pada prosesor PowerPC 970MP, hasil perbandingan kunci. Oleh karena itu data selalu bergerak dengan
misalnya, setengah dari ukuran L2 cache yang terbaik untuk ukuran tombol terkait dalam kedua kasus.
Jika jumlah elemen data adalah N dan bahwa jumlah elemen dalam 5. Hasil penelitian
satu blok B, maka jumlah blok untuk di-core algoritma adalah ( N / B). Waktu
komputasi untuk inti di-menyortir setiap blok sebanding dengan B • log ( B) Kami menerapkan AA-jenis dan GPUTeraSort untuk PowerPC
rata-rata dan karenanya total kompleksitas komputasi dalam-core fase 970MP dan Cell BE dengan dan tanpa menggunakan instruksi SIMD.
menyortir adalah DI), karena B adalah konstanta. Penyortiran setiap Kami menggunakan GPUTeraSort untuk perbandingan karena itu
blok independen dari blok lain, sehingga mereka dapat dijalankan adalah yang terbaik yang ada algoritma sorting untuk instruksi SIMD.
secara paralel pada beberapa thread hingga jumlah blok. Pada tahap prosesor tujuan umum dengan instruksi SIMD, bagaimanapun, tidak
out-of-core menyortir, penggabungan blok diurutkan melibatkan log ( N platform terbaik untuk mengeksekusi algoritma karena awalnya
/ B) tahap dan kompleksitas komputasi dari setiap tahap adalah DI), dirancang untuk GPU dengan paralelisme benang-tingkat yang lebih
tinggi dan bandwidth memori dari prosesor tujuan umum. Kami juga
dievaluasi
dan dengan demikian total kompleksitas komputasi dari fase ini adalah O ( N dua fungsi perpustakaan, IBM
• log ( N)), bahkan dalam kasus terburuk. Untuk parallelizing beberapa Teknik dan Subroutine Perpustakaan Ilmiah (Essl) versi 4.2 [16] dan
tahap terakhir dari out-of-core menyortir, jumlah blok menjadi lebih kecil perpustakaan STL disampaikan dengan gcc menerapkan introsort [17],
dari jumlah benang, dan karenanya beberapa thread harus bekerja sama pada PowerPC 970MP. Tabel 1 merangkum karakteristik
dalam satu operasi gabungan untuk sepenuhnya memanfaatkan masing-masing algoritma.
paralelisme benang-tingkat [15]. Sistem PowerPC 970MP digunakan untuk evaluasi kami
dilengkapi dengan dua prosesor PowerPC 970MP 2,5 GHz dual-core
Seluruh AA-semacam memiliki komputasi yang dan 8 GB memori sistem. Secara total, sistem memiliki 4 core, yang
kompleksitas DI • log ( N)) bahkan dalam kasus terburuk. Juga dapat masing-masing memiliki 1 MB L2 cache memory. Kernel Linux
dieksekusi secara paralel oleh beberapa thread dengan kompleksitas DI
• log ( N) / k) dengan asumsi jumlah benang, k, lebih kecil dari jumlah 2.6.20 berjalan pada sistem. Kami juga mengevaluasi kinerja program
blok, ( N / B). pemilahan pada sistem
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
3,5
dilengkapi dengan dua prosesor Sel BE 2,4 GHz dengan 1 GB memori tanpa SIMD petunjuk dengan
sistem. Cell BE adalah asimetris prosesor multi-core yang menggabungkan petunjuk SIMD
2,5 3
inti PowerPC dengan delapan core accelerator disebut SPE. Kami x 7,87
Program-program untuk PowerPC 970 ditulis dalam C menggunakan Gambar 8. Percepatan dengan instruksi SIMD untuk
intrinsik AltiVec [18]. Kami mengumpulkan semua program dengan IBM XL menyortir 16 K bilangan bulat acak pada satu inti dari
C / C ++ compiler untuk v8 Linux. Program-program untuk BE Sel juga PowerPC 970MP
ditulis dalam C menggunakan intrinsik untuk SPE [19]. Kami 0,08
mengumpulkan program-program kami dengan IBM XL C Compiler untuk 0,07 tanpa SIMD petunjuk dengan
SPE. Semua program yang digunakan memori dengan ukuran halaman 16 0,06
petunjuk SIMD
platform. 0,04
0,03
ukuran L2 cache atau memori lokal sebagai ukuran blok untuk tahap 0.01
dan 128 KB (32 K dari nilai 32-bit) pada SPE. Faktor psikiater untuk algoritma out-of-core GPUTeraSort Essl STL
dalam-inti algoritma
kami di-core algoritma sorting adalah 1,28. Kami memilih parameter ini AA-semacam AA-semacam
yang dibaca dari 4 sungai dan output ke output stream gabungan. Ini
mengurangi jumlah tahap penggabungan dari log 2 ( N / B) Bagian ini berfokus pada kinerja implementasi berurutan
masing-masing algoritma dengan penekanan besar pada efek instruksi
untuk log 4 ( N / B). implementasi kami dari GPUTeraSort untuk BE Sel SIMD. Kami menggunakan kedua algoritma di-core memilah dan
mengurangi jumlah data yang dibaca dari memori sistem dengan data algoritma out-of-inti menyortir dari AA-jenis secara terpisah untuk
secara langsung menyalin dari memori lokal inti SPE lain bukan dari menggambarkan efek instruksi SIMD untuk setiap algoritma.
memori sistem bila memungkinkan. Ini bisa mendapatkan keuntungan Perhatikan bahwa out-of-core algoritma sorting yang tidak digunakan
dari bandwidth yang besar dari on-chip bus dari BE Sel. dengan sejumlah kecil seperti data ketika menjalankan seluruh
AA-macam.
operasi gabungan independen selama ada cukup blok untuk merge. GPUTeraSort secara drastis ditingkatkan dengan menggunakan
Dalam beberapa tahap terakhir, jumlah blok menjadi lebih kecil dari petunjuk SIMD dan di- inti algoritma sorting dengan instruksi SIMD
jumlah benang, dan karenanya beberapa thread harus bekerja sama mencapai kinerja tertinggi di antara semua algoritma diuji. Kami juga
dalam satu operasi gabungan. pelaksanaan membagi pertama aliran dilaksanakan dan dievaluasi combsort asli menggunakan instruksi
masukan kami menjadi potongan ukuran yang sama untuk setiap SIMD. Tingkat percepatan dengan instruksi SIMD untuk combsort asli
thread, dan kemudian menemukan titik awal dan finishing titik yang hanya 2,2. Itu tidak signifikan dibandingkan dengan algoritma di-inti
sesuai untuk input stream lain dengan menjalankan pencarian biner. kami karena manfaatnya
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
instruksi SIMD berkurang akses memori teralign dan loop-dilakukan Tabel 2. Rincian keuntungan kinerja
dependensi. mempercepat pengurangan perbaikan
algoritma = X
Derajat percepatan dengan instruksi SIMD untuk kami oleh SIMD petunjuk † di CPI ‡
di-core algoritma dan di-core
7,87 4.06 1,94
GPUTeraSort lebih besar dari tingkat algoritma
out-of-core
paralelisme tersedia dengan instruksi SIMD (4x) karena jumlah 3.33 2,92 1.14
algoritma
berkurang dari mispredictions cabang. Gambar 9 menunjukkan tingkat
GPUTeraSort 7.97 4.69 1,70
misprediction cabang diukur dengan menggunakan counter monitor
kinerja prosesor. Tingkat misprediction cabang berkurang lebih dari † pengurangan petunjuk
faktor 10 untuk algoritma di-inti kami dan GPUTeraSort. Perubahan = instruction_count skalar / instruction_count SIMD
tingkat misprediction lebih kecil untuk algoritma kami out-of-core ‡ peningkatan CPI = CPI skalar / CPI SIMD
karena data- cabang kondisional tergantung berkurang tetapi tidak
benar-benar dihilangkan.
100
dataset dari dua algoritma lainnya. Hal ini karena dua implementasi
dengan instruksi SIMD tidak menderita mispredictions cabang bahkan
untuk input acak. Kinerja Essl dan STL terdegradasi berat untuk
beberapa kasus. Kami algoritma di-core juga dapat menunjukkan
5.3. Kinerja untuk 32-bit bilangan bulat kinerja yang buruk untuk beberapa dataset, karena menggunakan
pendekatan heuristik. algoritma inti out-of-kita, bagaimanapun, tidak
Pada bagian ini, kita membahas kinerja pemilahan untuk array menunjukkan kinerja bencana bahkan untuk kasus terburuk.
integer 32-bit yang besar. Gambar 10 membandingkan kinerja versi Akibatnya, secara keseluruhan AA-semacam itu juga tidak bergantung
berurutan dari empat algoritma pada PowerPC 970MP. AA-macam terlalu banyak pada input data, karena ukuran masukan untuk
dan GPUTeraSort dilaksanakan dengan instruksi SIMD. Sumbu x algoritma di-core terbatas pada ukuran blok.
menunjukkan jumlah elemen hingga 128 elemen M (512 MB) dan
menunjukkan y-sumbu waktu eksekusi. AA-semacam mencapai hasil
yang terbaik di antara semua algoritma untuk setiap ukuran data. Itu Gambar 12 menunjukkan waktu eksekusi dari versi paralel dari
lebih cepat 1,8 kali dari Essl dan sebesar 3,0 kali dari STL ketika AA-jenis dan GPUTeraSort atas 1, 2, dan 4 core PowerPC 970MP
menyortir 32 M bilangan bulat. Hal ini juga melampaui kinerja untuk 32 M bilangan bulat acak. Hal ini juga menunjukkan kinerja Essl
GPUTeraSort oleh 3,3 kali. Keuntungan kinerja AA-semacam selama dan STL pada hanya satu inti. AA-semacam dicapai kecepatan lebih
GPUTeraSort menjadi lebih besar dengan ukuran data yang lebih besar up dengan menggunakan beberapa core dari GPUTeraSort.
besar karena kompleksitas komputasi yang lebih besar dari Akibatnya, kinerja AA- semacam itu 4,2 kali lebih tinggi kinerja
GPUTeraSort. GPUTeraSort dengan 4 core dari PowerPC 970MP. Untuk melihat
skalabilitas dengan jumlah yang lebih besar dari core, Gambar 13
menunjukkan skalabilitas dari kedua algoritma pada Cell BE hingga 16
core ketika menyortir 32 M dari 32-bit bilangan bulat. Kedua algoritma
Gambar 11 menggambarkan bagaimana kinerja masing-masing algoritma menunjukkan kecepatan hampir linear untuk sampai 4 core. Dengan
tergantung pada empat dataset masukan seperti yang ditunjukkan pada Tabel lebih dari 4 core, kami AA-semacam
3. AA-semacam dan GPUTeraSort menunjukkan ketergantungan jelas jauh
lebih kecil pada input
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
Tabel 3. Deskripsi dataset.
dataset deskripsi pseudocode inisialisasi
SEBUAH acak untuk (i = 0; i <N; i ++) {Data [i] = random32 (); }
B hampir presorted untuk (i = 1; i <N; i ++) {Data [i] = i; } Data [0] = N;
C presorted (forward) untuk (i = 0; i <N; i ++) {Data [i] = i; }
D presorted (terbalik) untuk (i = 0; i <N; i ++) {Data [i] = Ni; }
10
dataset A (random) dataset B (hampir 356 sec
9
0,158 sec
presorted) dataset C (presorted maju)
8
dataset D (presorted terbalik)
14
7
waktu eksekusi (detik)
0.776 sec
mempercepat
6 12
5
10 dengan 1 inti AA-semacam: 1,92
4 sec GPUTeraSort: 5.54 sec
68
AA-semacam GPUTeraSort
3
24
Essl dan STL tidak
2
mendukung Sel BE
1
0
0 1 2 4 8 16
AA-semacam GPUTeraSort Essl STL jumlah core prosesor
Gambar 11. Perbandingan kinerja pada satu inti PowerPC Gambar 13. Skalabilitas dengan meningkatnya jumlah core pada
970MP untuk berbagai dataset input dengan 32 juta bilangan Sel BE untuk 32 juta bilangan bulat.
bulat.
dengan 1 core
4.5 5
dengan 2 core
dengan 4 core
2,5 3
tipe data kunci
x 2,7
0.01 32-bit integer 32-bit floating
dengan 4 core
point 64-bit integer 10-byte
1,5 2 AA-semacam
0,5 1 GPUTeraSort
0 0,001
1M 2M 4M 8M 16 M
AA-semacam GPUTeraSort Essl STL
Ukuran data (jumlah {kunci, data} pasang)
implementasi kami untuk kunci yang lebih luas, 64-bit bilangan bulat dan
10-byte string ASCII, menggunakan metode pendekatan hybrid algoritma
dan radix sort kami. Govindaraju
5.4. Kinerja untuk {kunci, data} pasang et al. [ 8] juga menggunakan pendekatan hybrid yang sama untuk meningkatkan
semacam penggabungan bitonic dan radix sort di GPUTeraSort. Pertama itu
Bagian ini berfokus pada pemilahan untuk pasang kunci dan data ekstrak beberapa byte pertama dari kunci dan mengkodekan mereka ke nilai
yang terkait seperti pointer ke struktur memiliki nilai kunci. Gambar 14 integer 32-bit, kemudian macam pasangan sesuai dengan kunci dikodekan.
menunjukkan waktu penyortiran dari AA-jenis dan GPUTeraSort untuk Setelah penyortiran oleh pertama beberapa byte, jika dan hanya jika beberapa
menyortir pasangan dengan berbagai jenis data untuk kunci saat pasangan memiliki kunci dikodekan yang sama, pasangan memiliki kunci
menggunakan 16 core pada BE Sel. Sumbu x menunjukkan jumlah encoded yang sama diurutkan menggunakan
elemen up
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.
beberapa byte berikutnya. Hasil yang ditunjukkan pada Gambar 14 [5] DE Knuth. The Art of Pemrograman Komputer. Vol.
termasuk waktu untuk ekstraksi dan encoding kunci. Input untuk fungsi 3: Sorting dan Searching, 1973.
[6] S. Lacey dan R. Box. Sebuah Cepat, Mudah Sort. Byte Magazine,
menyortir kami pasang {kunci, pointer}, dan output adalah array
April, pp. 315-320, 1991. [7] D. Pham et al. Desain dan
diurutkan dari pointer. Kinerja AA-semacam untuk menyortir 16 pasang
Implementasi dari
M dengan kunci integer acak adalah sekitar 1,6 kali lebih lambat dari itu
Pertama-Generation CELL Processor. Di Prosiding IEEE
untuk menyortir 16 M dari sederhana 32-bit integer nilai-nilai. Namun
International Sirkuit Solid-State Conference, pp. 184-185, 2005. [8] NK
AA-semacam ini mencapai hingga 5,0 kali lebih cepat hasil dari Govindaraju, J. Gray, R. Kumar, dan D. Manocha. GPUTeraSort:
GPUTeraSort untuk {kunci, pointer} pasang dengan 32-bit integer kunci. Graphics Kinerja Tinggi Coprocessor Sorting
Untuk tombol yang lebih luas, kinerja itu sedikit terdegradasi karena
overhead dari encoding kunci dan diulang penyortiran. Bahkan kasus untuk Manajemen Database besar. Di
paling lambat dengan AA-macam, untuk tombol string ASCII 10-byte, Prosiding ACM SIGMOD Internasional
Konferensi tentang Pengelolaan Data, pp. 325-336,
jauh lebih cepat daripada GPUTeraSort untuk pasangan dengan tombol
2006.
integer 32-bit.
[9] RM Ramanathan. Memperluas Dunia Paling Populer Arsitektur
Processor. Teknologi @ intel Magazine, 2006.
dicapai 7.1x. Akibatnya AA-semacam itu 4,2 kali lebih cepat pada 4 pp. 1619-1626, 1988. [16] IBM Corp. Teknik Subroutine Scientific
Library
core dari PowerPC 970MP dan 4,9 kali lebih cepat pada 16 core dari
Cell BE prosesor dibandingkan dengan GPUTeraSort.
(Essl) dan Essl Paralel, http://www-03.ibm.com/ sistem / p /
software / essl.html. [17] DR Musser. Introspektif Sortasi dan
Seleksi Algoritma, Software Praktek dan Pengalaman, 27 (8), hlm.
983-993, 1997. [18] Freescale Semiconductor Inc AltiVec Teknologi
7. Referensi
Pemrograman Antarmuka Manual, 1999.
[19] IBM Corp, Sony Computer Entertainment Inc., dan
[1] Intel Corp. IA-32 Intel Architecture Software
Toshiba Corp SPU C / C ++ Bahasa Ekstensi, 2005.
Pengembang Ini Manual.
[20] T. Nakatani, ST Huang, BW Arden, dan SK Tripathi. K-Way Bitonic
[2] IBM Corp. PowerPC Mikroprosesor Keluarga:
Sort, Transaksi IEEE pada Komputer, 38 (2), hlm. 283-288, 1989.
Vektor / SIMD Multimedia Perpanjangan Teknologi Programming
[21] Urutkan Benchmark, http://research.microsoft.com/barc/
Lingkungan Manual.
[3] J. Zhou dan KA Ross. Menerapkan operasi database menggunakan
SortBenchmark.
instruksi SIMD. Di Prosiding konferensi internasional ACM
SIGMOD tentang Pengelolaan data, pp. 145-156, 2002. [4] WA
PowerPC adalah merek dagang terdaftar dari IBM Corporation. Cell Broadband
Martin. Penyortiran. ACM Computing Survei, 3 (4),
Engine adalah merek dagang dari Sony Computer Entertainment Inc.
Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.