Saya ingin mendengar dari orang-orang yang memiliki pengalaman coding untuk keduanya. Saya sendiri, saya hanya memiliki pengalaman dengan NVIDIA.
NVIDIA CUDA tampaknya jauh lebih populer daripada kompetitornya. (Hanya menghitung tag pertanyaan di forum ini, 'cuda' outperforms 'opencl' 3: 1, dan 'nvidia' outperforms 'ati' 15: 1, dan tidak ada tag untuk 'ati-stream' sama sekali).
Di sisi lain, menurut Wikipedia, kartu ATI / AMD seharusnya memiliki lebih banyak potensi, terutama per dolar. Kartu NVIDIA tercepat di pasaran saat ini, GeForce 580 ($ 500), memiliki rating 1,6 TFlops presisi tunggal. AMD Radeon 6970 dapat diperoleh dengan harga $ 370 dan memiliki rating 2,7 TFlops. 580 memiliki 512 unit eksekusi pada 772 MHz. 6970 memiliki 1536 unit eksekusi pada 880 MHz.
Seberapa realistiskah keunggulan kertas dari AMD dibandingkan NVIDIA, dan kemungkinan besar akan direalisasikan dalam sebagian besar tugas GPGPU? Apa yang terjadi dengan tugas integer?
Jawaban:
Secara metaforis ati memiliki mesin yang bagus dibandingkan dengan nvidia. Tapi nvidia punya mobil yang lebih bagus: D
Ini terutama karena nvidia telah menginvestasikan sejumlah besar sumber dayanya (dalam bentuk uang dan manusia) untuk mengembangkan perpustakaan penting yang diperlukan untuk komputasi ilmiah (BLAS, FFT), dan kemudian melakukan pekerjaan yang baik lagi dalam mempromosikannya. Ini mungkin alasan CUDA mendominasi tag di sini dibandingkan dengan ati (atau OpenCL)
Adapun keuntungan yang direalisasikan dalam tugas-tugas GPGPU secara umum, itu akan berakhir tergantung pada masalah lain (tergantung pada aplikasinya) seperti, bandwidth transfer memori, kompiler yang baik dan mungkin bahkan driver. nvidia memiliki kompiler yang lebih matang, driver yang lebih stabil di linux (linux karena penggunaannya tersebar luas dalam komputasi ilmiah), memiringkan keseimbangan untuk mendukung CUDA (setidaknya untuk saat ini).
EDIT 12 Jan 2013
Sudah dua tahun sejak saya membuat postingan ini dan terkadang masih menarik perhatian. Jadi saya telah memutuskan untuk mengklarifikasi beberapa hal
Singkatnya OpenCL telah menutup kesenjangan dalam dua tahun terakhir. Ada pemain baru di lapangan. Tapi CUDA masih sedikit di depan pak.
sumber
Saya tidak memiliki perasaan yang kuat tentang CUDA vs. OpenCL; mungkin OpenCL adalah masa depan jangka panjang, hanya dengan menjadi standar terbuka.
Tetapi kartu NVIDIA vs ATI saat ini untuk GPGPU (bukan kinerja grafis, tetapi GPGPU), yang menurut saya sangat bagus. Dan untuk mengarahkannya, saya akan menunjukkan bahwa pada daftar 500 cluster besar saat ini , NVIDIA memimpin sistem AMD 4 ke 1, dan di gpgpu.org , hasil pencarian (makalah, tautan ke sumber daya online, dll) untuk NVIDIA melebihi hasil untuk AMD 6: 1.
Sebagian besar dari perbedaan ini adalah jumlah informasi online yang tersedia. Lihat Zona CUDA NVIDIA versus Pusat Pengembang GPGPU AMD . Jumlah hal-hal yang ada untuk para pengembang yang memulai bahkan tidak bisa dibandingkan. Di situs NVIDIA, Anda akan menemukan banyak sekali makalah - dan kode kontribusi - dari orang-orang yang mungkin mengerjakan masalah seperti milik Anda. Anda akan menemukan banyak sekali kelas online, dari NVIDIA dan tempat lain, dan dokumen yang sangat berguna seperti panduan praktik terbaik pengembang, dll. Ketersediaan alat pengembangan gratis - profiler, cuda-gdb, dll - sangat memiringkan cara NVIDIA.
(Editor: informasi dalam paragraf ini sudah tidak akurat lagi.) Dan beberapa perbedaan juga ada pada perangkat keras. Kartu AMD memiliki spesifikasi yang lebih baik dalam hal peak flop, tetapi untuk bisa mendapatkan bagian yang signifikan dari itu, Anda tidak hanya harus memecah masalah Anda ke banyak stream processor yang benar-benar independen, setiap item pekerjaan juga perlu di-vektorisasi. Mengingat bahwa kode GPGPUing cukup sulit, kompleksitas arsitektur ekstra itu cukup untuk membuat atau menghancurkan beberapa proyek.
Dan hasil dari semua ini adalah komunitas pengguna NVIDIA terus berkembang. Dari tiga atau empat grup yang saya tahu berpikir untuk membangun cluster GPU, tidak ada yang secara serius mempertimbangkan kartu AMD. Dan itu berarti lebih banyak lagi kelompok yang menulis makalah, menyumbangkan kode, dll di sisi NVIDIA.
Saya bukan seorang NVIDIA shill; Saya berharap tidak seperti ini, dan ada dua (atau lebih!) Platform GPGPU yang sama-sama menarik. Persaingan itu bagus. Mungkin AMD akan segera meningkatkan permainannya - dan produk fusi yang akan datang terlihat sangat menarik. Tetapi dalam memberi seseorang nasihat tentang kartu mana yang akan dibeli hari ini, dan di mana menghabiskan waktu mereka untuk berusaha sekarang, saya tidak dapat dengan hati nurani yang baik mengatakan bahwa kedua lingkungan pengembangan itu sama baiknya.
Diedit untuk menambahkan : Saya kira pertanyaan di atas sedikit elips dalam menjawab pertanyaan asli, jadi izinkan saya membuatnya sedikit lebih eksplisit. Kinerja yang dapat Anda peroleh dari sebuah perangkat keras adalah, dalam dunia yang ideal dengan waktu yang tersedia tak terbatas, hanya bergantung pada perangkat keras yang mendasari dan kemampuan bahasa pemrograman; tetapi pada kenyataannya, jumlah kinerja yang bisa Anda peroleh dalam jumlah waktu tetap yang diinvestasikan juga sangat bergantung pada alat pengembangan, basis kode komunitas yang ada (misalnya, perpustakaan yang tersedia untuk umum, dll). Semua pertimbangan tersebut mengarah pada NVIDIA.
(Editor: informasi dalam paragraf ini tidak lagi akurat.) Dalam hal perangkat keras, persyaratan vektorisasi dalam unit SIMD di kartu AMD juga membuat pencapaian kinerja kertas lebih sulit daripada dengan perangkat keras NVIDIA.
sumber
Perbedaan utama antara arsitektur AMD dan NVIDIA adalah AMD dioptimalkan untuk masalah di mana perilaku algoritme dapat ditentukan pada waktu kompilasi sementara NVIDIA dioptimalkan untuk masalah di mana perilaku algoritme hanya dapat ditentukan pada waktu proses.
AMD memiliki arsitektur yang relatif sederhana yang memungkinkan mereka menghabiskan lebih banyak transistor pada ALU. Selama masalah dapat didefinisikan sepenuhnya pada waktu kompilasi dan berhasil dipetakan ke arsitektur dengan cara yang agak statis atau linier, ada kemungkinan besar bahwa AMD akan dapat menjalankan algoritme lebih cepat daripada NVIDIA.
Di sisi lain, kompiler NVIDIA melakukan lebih sedikit analisis pada waktu kompilasi. Sebaliknya, NVIDIA memiliki arsitektur yang lebih maju di mana mereka telah menghabiskan lebih banyak transistor pada logika yang mampu menangani perilaku dinamis dari algoritme yang hanya muncul pada waktu proses.
Saya percaya fakta bahwa sebagian besar superkomputer yang menggunakan GPU menggunakan NVIDIA adalah jenis masalah yang menarik minat para ilmuwan untuk menjalankan kalkulasi, secara umum memetakan lebih baik ke arsitektur NVIDIA daripada AMD.
sumber
Saya telah melakukan beberapa pengkodean berulang di OpenCL. Dan hasil menjalankannya di NVIDIA dan ATI, hampir sama. Mendekati kecepatan yang sama dalam nilai yang sama ($) kartu.
Dalam kedua kasus tersebut, kecepatannya ~ 10x-30x dibandingkan dengan CPU.
Saya tidak menguji CUDA, tapi saya ragu itu bisa menyelesaikan masalah pengambilan memori acak saya secara ajaib. Saat ini, CUDA dan OpenCL kurang lebih sama, dan saya melihat lebih banyak masa depan di OpenCL daripada di CUDA. Alasan utamanya adalah Intel meluncurkan driver dengan OpenCL untuk prosesor mereka. Ini akan menjadi kemajuan besar di masa depan (menjalankan 16, 32 atau 64 utas OpenCL di CPU SANGAT cepat, dan sangat mudah untuk porting ke GPU).
sumber
Setelah menghabiskan beberapa waktu dengan OpenCL untuk kartu GCN setelah beberapa tahun CUDA untuk Fermi dan Kepler, saya masih lebih suka CUDA sebagai bahasa pemrograman dan akan memilih perangkat keras AMD dengan CUDA jika saya punya pilihan.
Perbedaan utama NVIDIA dan AMD (OpenCL):
Untuk AMD:
Bahkan dengan Maxwell, NVidia masih memiliki latensi perintah yang lebih lama dan algoritme kompleks cenderung 10 lebih cepat pada AMD (dengan asumsi Tflops teoretis yang sama) setelah pengoptimalan yang mudah untuk keduanya. Selisihnya mencapai 60% untuk Kepler VS GCN. Lebih sulit untuk mengoptimalkan kernel kompleks untuk NVidia dalam hal ini.
Kartu murah.
OpenCL adalah standar terbuka dengan vendor lain yang tersedia.
Untuk Nvidia:
Memiliki rangkaian perangkat keras Tesla yang cocok untuk beban server tinggi yang andal.
Maxwell baru jauh lebih hemat daya.
Kompiler dan alat jauh lebih maju. AMD masih belum bisa mengimplementasikan
maxregcout
parameter, sehingga Anda dapat dengan mudah mengontrol hunian pada berbagai perangkat keras dan kompilernya memiliki banyak ide acak tentang kode optimal yang berubah di setiap versi, jadi Anda mungkin perlu mengunjungi kembali kode lama setiap setengahnya setahun karena tiba-tiba menjadi 40% lebih lambat.Pada titik ini, jika GPGPU adalah tujuan Anda, CUDA adalah satu-satunya pilihan, karena opencL dengan AMD belum siap untuk server farm dan jauh lebih sulit untuk menulis kode yang efisien untuk AMD karena fakta bahwa kompilernya selalu tampak "dalam versi beta" .
sumber
Saya baru mengenal GPGPU tetapi saya memiliki pengalaman dalam komputasi ilmiah (PhD dalam Fisika). Saya membentuk tim peneliti dan saya ingin menggunakan GPGPU untuk penghitungan saya. Saya harus memilih di antara platform yang tersedia. Saya memutuskan menggunakan Nvidia, karena beberapa alasan: sementara ATI mungkin lebih cepat di atas kertas, Nvidia memiliki platform yang lebih matang dan dokumentasi yang lebih banyak sehingga memungkinkan untuk mendekati kinerja puncak pada platform ini.
Nvidia juga memiliki program dukungan penelitian akademik, seseorang dapat mengajukan dukungan, saya baru saja menerima kartu TESLA 2075 yang sangat saya sukai. Saya tidak tahu apakah ATI atau Intel mendukung penelitian dengan cara ini.
Apa yang saya dengar tentang OpenCL adalah bahwa ia mencoba menjadi segalanya sekaligus, memang benar bahwa kode OpenCL Anda akan lebih portabel tetapi juga cenderung tidak mengeksploitasi kemampuan penuh dari kedua platform. Saya lebih suka belajar lebih banyak dan menulis program yang memanfaatkan sumber daya dengan lebih baik. Dengan TESLA K10 yang baru keluar tahun ini, Nvidia berada di kisaran 4,5 TeraFlops sehingga tidak jelas apakah Nvidia tertinggal ... namun Intel MIC bisa menjadi pesaing nyata, terutama jika mereka berhasil memindahkan unit GPGPU ke motherboard. Tapi untuk saat ini, saya memilih Nvidia.
sumber
Pengalaman saya dalam mengevaluasi kinerja floating point OpenCL cenderung lebih menyukai kartu NVIDIA. Saya telah bekerja dengan beberapa benchmark floating point pada kartu NVIDIA mulai dari 8600M GT hingga GTX 460. Kartu NVIDIA secara konsisten mencapai sekitar setengah dari puncak precisino tunggal teoritis pada benchmark ini.
Kartu ATI yang pernah saya gunakan jarang mencapai lebih baik dari sepertiga puncak presisi tunggal. Perhatikan bahwa pengalaman saya dengan ATI miring; Saya hanya bisa bekerja dengan satu kartu seri 5000. Pengalaman saya sebagian besar dengan kartu seri HD 4000, yang tidak pernah didukung dengan baik. Dukungan untuk kartu seri HD 5000 jauh lebih baik.
sumber
Saya ingin menambah perdebatan. Bagi kami dalam bisnis perangkat lunak, kami dapat mengkompromikan kinerja presisi tunggal mentah untuk produktivitas tetapi bahkan saya tidak perlu berkompromi karena, seperti yang telah ditunjukkan, Anda tidak dapat mencapai kinerja sebanyak yang dapat Anda capai pada perangkat keras ATI menggunakan OpenCL. jika Anda menulis dalam CUDA pada perangkat keras NVIDIA.
Dan ya, dengan pengumuman PGI tentang kompiler x86 untuk CUDA, tidak akan ada alasan yang baik untuk menghabiskan lebih banyak waktu dan sumber daya untuk menulis di OpenCL :)
PS: Argumen saya mungkin bias karena kita mengerjakan hampir semua pekerjaan GPGPU kita tentang CUDA. Kami memiliki perpustakaan Image Processing / Computer Vision CUVI (CUDA for Vision and Imaging) yang mempercepat beberapa fungsi inti IP / CV pada CUDA.
sumber
Cuda tentunya lebih populer daripada OpenCL pada hari ini, karena dirilis 3 atau 4 tahun sebelum OpenCL. Sejak OpenCL dirilis, Nvidia belum banyak berkontribusi untuk bahasa tersebut karena mereka banyak berkonsentrasi pada CUDA. Mereka bahkan belum merilis versi openCL 1.2 untuk driver manapun.
Sejauh komputasi heterogen serta perangkat genggam terkait OpenCl pasti akan mendapatkan lebih banyak popularitas dalam waktu dekat. Sampai saat ini, penyumbang OpenCL terbesar adalah AMD, Itu terlihat di situs mereka.
sumber
menurut pengalaman saya:
jika Anda menginginkan kinerja absolut terbaik maka Anda perlu melihat siapa yang menggunakan iterasi perangkat keras terbaru, dan menggunakan tumpukan mereka (termasuk rilis terbaru / beta).
jika Anda menginginkan kinerja terbaik untuk uang Anda akan membidik kartu pemain daripada kartu "profesional" dan fleksibilitas menargetkan platform yang berbeda lebih disukai terbuka.
jika Anda memulai, khususnya, cuda cenderung lebih halus dan memiliki lebih banyak alat dan pustaka.
akhirnya, pendapat pribadi saya, setelah "dukungan" yang mengerikan dari nvidia (kami mendapat tesla mati dan tidak berubah selama berbulan-bulan, sementara klien menunggu): fleksibilitas untuk melompat kapal dengan pembukaan sepadan dengan risiko kinerja yang sedikit lebih rendah saat nvidia berada di depan dalam siklus rilis.
sumber
libcuda.so
(hanya dengan OpenCL, CUDA berfungsi) dan tidak ada tanggapan sama sekali dari mereka.