Anda di halaman 1dari 10

AA-Urutan A New Paralel Algoritma Sorting untuk Multi-Core SIMD Prosesor

Hiroshi Inoue, Takao Moriyama, Hideaki Komatsu dan Toshio Nakatani


IBM Tokyo Research Laboratory {inouehrs, Moriyama,
komatsu, nakatani}@jp.ibm.com

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.

yang disebut Blok-Access semacam (AA-macam), untuk


bersama-memori multi-prosesor. Algoritma AA-semacam mengambil Sorting merupakan salah satu operasi yang paling penting bagi
keuntungan dari tions SIMD instruksi yang. Kunci untuk kinerja tinggi banyak aplikasi komersial, terutama sistem manajemen database.
adalah menghilangkan akses memori unaligned yang akan Oleh karena itu banyak algoritma sekuensial dan paralel menyortir
mengurangi efektivitas instruksi SIMD. Kami dilaksanakan dan telah dipelajari di masa lalu [4, 5]. algoritma pengurutan Namun
dievaluasi AA-semacam di PowerPC ® 970MP dan Cell Broadband populer, seperti quicksort, tidak cocok untuk mengeksploitasi instruksi
Mesin TM. Singkatnya, versi berurutan dari instruksi SIMD AA-semacam SIMD. Sebagai contoh, instruksi VMX atau instruksi SSE dapat
menggunakan mengungguli dioptimalkan perpustakaan penyortiran memuat atau menyimpan 128 bit data antara vektor mendaftar dan
sekuensial IBM sebesar 1,8 kali dan GPUTeraSort menggunakan memori dengan satu instruksi, tetapi efektif hanya ketika data sejajar
instruksi SIMD 3,3 kali pada PowerPC 970MP ketika menyortir 32 M pada batas 128-bit. Banyak algoritma pengurutan memerlukan akses
dari 32-bit bilangan bulat acak. Selain itu, versi paralel AA-semacam memori unaligned atau elemen-bijaksana, yang overhead tambahan
menunjukkan skalabilitas yang lebih baik dengan peningkatan jumlah dikenakan dan menipiskan manfaat instruksi SIMD. Ada teknik tidak
core dari versi paralel GPUTeraSort pada kedua platform. ada dikenal untuk menghapus akses memori unaligned dari quicksort.

Dalam tulisan ini, kami mengusulkan paralel baru algoritma sorting


cocok untuk mengeksploitasi baik petunjuk SIMD dan benang-tingkat
paralelisme tersedia pada prosesor multi-core hari ini. Kami memanggil
1. Perkenalan
yang baru
algoritma Selaras-Access semacam ( AA-macam). AA-semacam terdiri dari
Banyak prosesor berkinerja tinggi yang modern memberikan
dua algoritma: algoritma di-core memilah dan algoritma out-of-core
beberapa thread hardware dalam satu prosesor fisik dengan beberapa
penyortiran. Kedua algoritma dapat mengambil keuntungan dari instruksi
core dan multithreading simultan. Banyak prosesor juga menyediakan
SIMD dan juga dapat berjalan secara paralel dengan beberapa thread.
satu set Beberapa petunjuk Instruksi Single Data (SIMD), seperti SSE
set instruksi [1] atau VMX set instruksi [2]. Mereka dapat beroperasi
Algoritma di-core menyortir dari AA-semacam meluas combsort [6] dan
pada beberapa nilai data secara paralel
memungkinkan untuk menghilangkan semua akses memori unaligned dan
sepenuhnya memanfaatkan instruksi SIMD. Ide kunci untuk meningkatkan
untuk mempercepat komputasi
combsort adalah untuk pertama semacam input data ke urutan dialihkan,
program intensif untuk luas berkisar dari aplikasi.
dan kemudian menyusun ulang ke dalam urutan yang diinginkan. waktu
Keuntungan yang jelas dari instruksi SIMD adalah derajat
komputasi yang sebanding dengan N • log ( N) rata-rata. kelemahan
paralelisme data yang tersedia dalam satu instruksi. Selain itu, mereka
termasuk miskin akses memori lokalitas. Jadi kita menggunakan algoritma
memungkinkan programmer untuk mengurangi jumlah cabang
sorting yang lain, algoritma out-of-core menyortir, untuk memungkinkan
kondisional dalam program mereka. Cabang bisa warung pipa
untuk seluruh AA-macam untuk menggunakan cache lebih efisien.
berpotensi dikenakan dan dengan demikian batas
kinerja superscalar
prosesor dengan tahapan pipa panjang. Sebagai contoh,

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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.

Instruksi-instruksi ini tidak unik ke VMX set instruksi. Instruksi SPE


set Cell BE memberikan petunjuk ini. SSE set instruksi dari IA32 juga
menyediakan petunjuk yang sama dalam pelaksanaan saat ini atau
Kontribusi utama dari makalah ini adalah paralel algoritma sorting akan memberikan mereka dalam instruksi masa depan set [9].
baru yang dapat secara efektif memanfaatkan instruksi SIMD. Ini terdiri
dari dua algoritma: di-inti algoritma sorting dan algoritma out-of-core
penyortiran. Dalam algoritma di-core, adalah mungkin untuk
menghilangkan semua akses memori unaligned dari combsort. Untuk
3. kerja Terkait
algoritma out-of-core, kami mengusulkan linear-waktu algoritma merge
baru yang dapat mengambil keuntungan dari instruksi SIMD. Sejauh
Banyak algoritma pengurutan [4, 5] telah diusulkan di masa lalu.
penulis ketahui, AA-sort adalah yang pertama
quicksort adalah salah satu algoritma yang tercepat digunakan dalam
praktek, dan karenanya ada banyak implementasi dioptimalkan dari
penyortiran algoritma dengan komputasi
quicksort yang tersedia. Namun tidak ada teknik yang dikenal untuk
kompleksitas DI • log ( N)) yang dapat sepenuhnya memanfaatkan instruksi
menerapkan quicksort algoritma menggunakan instruksi SIMD yang ada.
SIMD prosesor hari ini. Kami menunjukkan bahwa AA-semacam kami
mencapai kinerja yang lebih tinggi dan skalabilitas dengan peningkatan
Sanders dan Winkel [10] menunjukkan bahwa kinerja pemilahan
jumlah core prosesor dari algoritma paling dikenal.
pada prosesor saat ini sering didominasi oleh pipa warung disebabkan
oleh mispredictions cabang. Mereka mengusulkan algoritma sorting baru
Sisa kertas ini disusun sebagai berikut. Bagian 2 memberikan
bernama sampel super-skalar semacam (sss-sort), untuk menghindari
gambaran petunjuk SIMD kita gunakan untuk menyortir. Bagian 3
warung pipa tersebut dengan menghilangkan cabang bersyarat. Mereka
membahas yang berhubungan dengan pekerjaan. Bagian 4 menjelaskan
menerapkan sss-jenis dengan menggunakan petunjuk berpredikat
algoritma AA-macam. Bagian 5 membahas lingkungan percobaan kami
prosesor dan menunjukkan bahwa jenis sss- mencapai hingga 2 kali
dan memberikan ringkasan dari hasil kami. Akhirnya, Bagian 6 menarik
kinerja yang lebih tinggi alih fungsi STL menyortir disampaikan dengan
kesimpulan.
gcc. algoritma kami

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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]

Struktur Gambar 1. Data dari array.


Ada beberapa algoritma pengurutan cocok untuk mengeksploitasi
SIMD petunjuk [8, 11, 12]. Mereka awalnya diusulkan dalam konteks
kesenjangan = N / SHRINK_FACTOR;
mensortir graphics processing unit (GPU), yang merupakan prosesor
sementara (gap> 1) {
diprogram kuat dengan SIMD set instruksi. GPU diprogram baru-baru
untuk (i = 0; i <N - kesenjangan; i ++)
ini menjadi semakin dekat dengan multi-core prosesor untuk tujuan jika (a [i]> a [i + gap]) swap (a [i], a [i + gap]); kesenjangan / =
umum. GPU diprogram tersebut dan prosesor multi-core dengan SHRINK_FACTOR; } Do {
instruksi SIMD menunjukkan karakteristik yang sama, seperti
benang-tingkat tinggi paralelisme dan data paralelisme mesin SIMD,
yang kita fokus pada dalam makalah ini. untuk (i = 0; i <N - 1; i ++)
jika (a [i]> a [i + 1]) swap (a [i], a [i + 1]); } Sementara (tidak
benar-benar diurutkan);

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.

Furtak et al. [ 14] menunjukkan manfaat mengeksploitasi instruksi


SIMD untuk menyortir array yang sangat kecil. Mereka menunjukkan 4.1. Dalam-core algoritma

bahwa mengganti hanya beberapa langkah terakhir dari quicksort


dengan menyortir jaringan diimplementasikan dengan instruksi SIMD Kami algoritma di-core dari AA-semacam meningkatkan pada combsort

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

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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]);

0 n 2n 3n 0 1 2 3 / * Membagi kesenjangan dengan faktor psikiater * / kesenjangan / =


n+12n+13n+11 4 5 6 7 SHRINK_FACTOR; } Do {
n+22n+23n+22 8 9 10 11
array vektor

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

Gambar 3. Agar dialihkan. Gambar 4. Pseudocode dari Langkah 2.


jika mereka rusak. Setiap cabang bersyarat dalam operasi ini akan diambil (A, B) vector_cmpswap_skew (A, B)

dalam rangka sewenang-wenang dengan sekitar 50% probabilitas untuk input


vektor A A0 A1 A2 A3 vektor A A0 A1 A2 A3
data acak, dan oleh karena itu sangat sulit bagi hardware prediksi cabang MIN MIN

untuk memprediksi cabang-cabang. Operasi ini dapat diimplementasikan


MAX MAX
dengan menggunakan vektor membandingkan dan vektor pilih petunjuk tanpa vektor B B0 B1 B2 B3 vector_cmpswap vektor B B0 B1 B2 B3

cabang bersyarat.

bergerak nilai-nilai yang lebih kecil ke samping MIN dan nilai-nilai

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

Dalam diusulkan algoritma kami di-core menyortir, kami memutuskan


masalah ini dari combsort. Ide utama dari perbaikan kami adalah untuk sekali
vector_cmpswap_skew adalah sebuah operasi yang membandingkan

semacam nilai-nilai ke urutan dialihkan ditunjukkan pada Gambar 3 (a) dan


dan swap yang pertama elemen ketiga dari vektor register A dengan

menyusun ulang nilai-nilai diurutkan ke dalam urutan asli setelah penyortiran


kedua elemen keempat vektor mendaftar B. Itu tidak mengubah

seperti yang ditunjukkan pada Gambar 3 (b). Kami algoritma di-core menyortir
elemen terakhir dari vektor mendaftar A dan elemen pertama dari

mengeksekusi 3 langkah berikut:


vektor register B . Kedua operasi dapat diimplementasikan dengan
menggunakan instruksi SIMD. Membandingkan kode Gambar 4
dengan kode combsort asli dalam Gambar 2, inner paling lingkaran
(1) nilai-nilai semacam dalam setiap vektor dalam urutan menaik, (2) melaksanakan dibagi menjadi dua loop dengan dua operasi ini. Dengan dua loop ini,
combsort untuk mengurutkan nilai-nilai ke dalam semua nilai-nilai yang dibandingkan dan bertukar dengan nilai-nilai
Agar dialihkan ditunjukkan pada gambar 3 (a), dan kemudian (3) dengan jarak celah dalam urutan dialihkan. The do- while pada Gambar
menyusun ulang nilai-nilai dari urutan dialihkan ke 4 menjamin urutan yang benar dari output.
urutan asli seperti yang ditunjukkan pada Gambar 3 (b). Langkah 1 macam

empat nilai di setiap bilangan bulat vektor va [i].

Langkah ini sesuai dengan loop dengan kesenjangan N / 4,


Langkah 3 menata ulang nilai-nilai diurutkan ke dalam urutan yang benar.
N / 4 * 2, dan N / 4 * 3 di combsort, karena kesenjangan antara
Langkah ini tidak memerlukan data-dependent cabang bersyarat karena hanya
unsur-unsur berturut-turut dalam satu vektor register
bergerak setiap elemen dalam perintah ditentukan sebelumnya, dan karenanya
N / 4 dalam urutan dialihkan. Langkah ini dapat diimplementasikan dengan
penataan kembali
menggunakan instruksi vektor.

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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

/ * Merge Vmin dan Vmax * / vector_merge (Vmin, Vmax); / * Menyimpan


tahap 1 vektor yang lebih kecil sebagai output * / vMergedArray [i] = Vmin; / *
< < < <
Beban vektor depan dan muka pointer * / / * a [apos * 4] adalah elemen
pertama dari va [apos] * / / * dan b [BPOS * 4] adalah bahwa dari vb

< < tahap 2 [BPOS]

*/
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

Gambar 7. Pseudocode dari penggabungan


operasi dalam memori.
: Tidak ada operasi < : perbandingan

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

diimplementasikan dengan sejumlah diabaikan cabang bersyarat


data-dependent. Kompleksitas komputasi operasi dan rotasi satu vektor mendaftar dapat menggantikan

seluruh di-core penggabungan aneh-bahkan. Namun ini membutuhkan P tahap

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,

Vmin dan VMAX,


(2) menyimpan isi Vmin, terkecil empat
4.2. Out-of-core algoritma
nilai-nilai, sebagai output,

(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

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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.4. Menyortir {kunci, data} pasang

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.

blok karena L2 cache-nya cukup cepat untuk menjaga core sibuk


bahkan ada banyak cache misses L1.

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

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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

waktu eksekusi (msec)


menggunakan hanya core SPE untuk menyortir. Dengan demikian, 16 SPE
x 3,33 x 7.97
core dengan 256 KB memori lokal masing-masing yang tersedia pada 1,5 2

sistem. Kernel Linux 2.6.15 yang berjalan pada sistem.


0,5 1

5.1. rincian pelaksanaan algoritma out-of-core GPUTeraSort Essl STL


dalam-inti algoritma
AA-semacam AA-semacam

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

MB untuk mengurangi overhead dari TLB penanganan pada kedua

mispredictions cabang per instruksi


0,05

platform. 0,04

0,03

Dalam implementasi dari AA-macam, kami memilih setengah dari 0.02

ukuran L2 cache atau memori lokal sebagai ukuran blok untuk tahap 0.01

di-core menyortir, 512 KB (128 K nilai 32-bit) pada PowerPC 970MP 0

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

didasarkan pada pengukuran kami. Gambar tingkat misprediction 9. Cabang.

menyeimbangkan data antara benang jika ukuran data untuk setiap


Kami menggunakan beberapa teknik untuk mengurangi bandwidth
thread tidak seimbang.
yang dibutuhkan untuk memori sistem. Implementasi eksperimental dari
AA-semacam menggunakan teknik multi-way merge [5, 20] dengan kami
out-of-core penyortiran. Kami mempekerjakan gabungan 4-arah; input data 5.2. Efek dari menggunakan instruksi SIMD

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.

Dalam implementasi paralel kita tentang AA-macam, semua benang


pertama mengeksekusi di-core menyortir dan kemudian pindah ke fase
Gambar 8 membandingkan kinerja algoritma pengurutan untuk 16

penggabungan setelah semua blok data masukan diurutkan. Ketika


K dari 32-bit bilangan bulat acak hanya menggunakan satu PowerPC

menjalankan kami out-of-core menyortir dengan beberapa


970MP inti. Semua data akan diurutkan bisa masuk ke dalam cache L2

benang, setiap mengeksekusi benang


prosesor. Kinerja algoritma di-inti kami, out-of-core algoritma dan

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

Selain itu dijalankan

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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

Tabel 2 menunjukkan rincian dari keuntungan kinerja dengan

waktu eksekusi (detik)


instruksi SIMD yang ditunjukkan pada Gambar 8 menjadi dua alasan: 10

penurunan jumlah instruksi dan perbaikan dalam siklus per instruksi


(CPI). Penurunan jumlah instruksi terutama karena paralelisme data
0.1 1
instruksi SIMD dan perbaikan CPI adalah karena berkurang kepala
cabang. Untuk algoritma dalam-inti kami dan GPUTeraSort, jumlah AA-semacam GPUTeraSort Essl STL
0.01
petunjuk berkurang hampir sebanding dengan tingkat paralelisme data
1 M 2 M 4 M 8 M 16 M 32 M 64 M 128 M
yang tersedia dengan instruksi SIMD, sementara pengurangan itu tidak Ukuran data (jumlah elemen)

signifikan untuk algoritma kami out-of-core. Hal ini karena gabungan


Gambar 10. Kinerja versi berurutan dari masing-masing
Vectorized untuk register vektor yang ditunjukkan pada Gambar 6 lebih
algoritma pada inti PowerPC 970MP untuk menyortir 32-bit
rumit dan membutuhkan lebih banyak instruksi dari operasi gabungan
bilangan bulat acak dengan berbagai ukuran data.
naif untuk nilai-nilai skalar.

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

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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 0,1 1


x 2,1
3,5 4
waktu eksekusi (detik)
waktu eksekusi (detik)

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

ASCII 32-bit integer

0,5 1 GPUTeraSort

0 0,001
1M 2M 4M 8M 16 M
AA-semacam GPUTeraSort Essl STL
Ukuran data (jumlah {kunci, data} pasang)

Gambar 12. Waktu pelaksanaan versi paralel dari AA-macam


Gambar 14. perbandingan kinerja dari jenis data kunci untuk
dan GPUTeraSort pada hingga 4 core dari PowerPC 970MP.
menyortir {kunci, data} pasang pada Cell BE menggunakan
16 core.
menunjukkan skalabilitas yang lebih baik daripada GPUTeraSort.
16 pasang M (128 MB). Dalam pengukuran kunci dan data terlampir
Misalnya AA-semacam ini mencapai kecepatan up dari 12.2x untuk 16
disimpan dalam array yang berbeda. jenis data yang diuji kunci
core sedangkan GPUTeraSort dicapai 7.1x. Hal ini disebabkan fakta
termasuk presisi tunggal nilai floating-point, 64-bit bilangan bulat, dan
bahwa GPUTeraSort memiliki rasio komunikasi / perhitungan lebih
10-byte string ASCII. Tombol floating point dan tombol bulat yang
tinggi dari jenis AA dan bandwidth memori adalah hambatan yang
diinisialisasi menggunakan nomor acak. Untuk tombol string ASCII,
membatasi skalabilitas. The GPUTeraSort membutuhkan bandwidth
kami menggunakan input pembangkit data Sort benchmark [21] untuk
memory yang lebih tinggi karena mengasumsikan bandwidth memory
menginisialisasi tombol, dan diurutkan ke dalam urutan strnicmp ()
besar GPU. Sebagai hasilnya, perfor- Mance dari AA-semacam itu
fungsi.
lebih baik dari GPUTeraSort 4,9 kali dengan 16 core dari BE Sel.

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

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

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.

[10] P. Sanders dan S. Winkel. Super skalar Contoh Sort. Di


6. Kesimpulan Prosiding Simposium Eropa pada Algoritma,
Volume 3221 dari LNCS, pp. 784-796, 2004. [11] T. Purcell, C. Donner,
M. Cammarano, H. Jensen, dan P. Hanrahan. Foton pemetaan pada
Makalah ini menjelaskan paralel algoritma sorting baru yang kita
perangkat keras grafis diprogram.
sebut Blok-Access semacam (AA-macam). AA-semacam ini cocok
Di Prosiding ACM SIGGRAPH / EUROGRAPHICS
untuk mengeksploitasi baik petunjuk SIMD dan benang-tingkat
Workshop Graphics Hardware,
paralelisme tersedia pada prosesor multi-core hari ini. AA-semacam pp. 41-50, 2003. [12] NK Govindaraju, N. Raghuvanshi, dan D.
tidak melibatkan akses memori unaligned yang melemahkan manfaat Manocha. Cepat dan Perkiraan Streaming Pertambangan quantiles
instruksi SIMD, dan karena itu secara efektif dapat memanfaatkan dan Frekuensi Menggunakan Grafik Prosesor. Di Prosiding SIGMOD
Konferensi Internasional ACM tentang Pengelolaan Data, pp.
instruksi SIMD. Kita 611-622, 2005. [13] KE Batcher. Menyortir jaringan dan aplikasi
dilaksanakan dan dievaluasi AA-semacam di PowerPC 970MP dan mereka. Di Prosiding AFIPS Musim Semi Bersama Konferensi
Komputer, 32, pp. 307-314, 1968.
Cell Broadband Mesin prosesor. Singkatnya, versi berurutan dari
instruksi SIMD AA-semacam menggunakan mengungguli bahwa dari
Essl IBM sebesar 1,8 kali dan GPUTeraSort menggunakan instruksi
[14] T. Furtak, JN Amaral, dan R. Niewiadomski. Menggunakan SIMD
SIMD 3,3 kali pada PowerPC 970MP ketika menyortir 32 M dari 32-bit Register dan Instruksi Aktifkan Instruction- Tingkat Paralelisme di
bilangan bulat acak. Selain itu, versi paralel dari skalabilitas Sorting Algoritma. Di Prosiding ACM Simposium Paralelisme di
AA-semacam menunjukkan lebih baik dengan peningkatan jumlah core Algoritma dan Arsitektur, pp. 348-357, 2007. [15] R. Francis, dan I.
dari versi paralel dari GPUTeraSort. Kecepatan AA-semacam dicapai Mathieson. Sebuah benchmark Paralel Urutkan untuk memori
up dari 12.2x dengan 16 core pada Cell BE, sedangkan GPUTeraSort Bersama Multiprocessors, Transaksi IEEE pada Komputer, 37 (12),

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.

pp. 147-174, 1971.

pada tanggal 16 Konferensi Internasional


Paralel Arsitektur dan Kompilasi Teknik (PACT 2007) 0-7695-2944-5 / 07 $
25,00 © 2007

Resmi penggunaan lisensi terbatas pada: Univ Politecnica de Madrid. Download pada 18 Mei 2009 di 05:25 dari IEEE Xplore. Pembatasan berlaku.

Anda mungkin juga menyukai