EDIT:
Beberapa poin lainnya muncul di http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317 .
- GPU tidak begitu bagus untuk rekursi
- GPU tidak begitu bagus untuk mengambang
- GPU mungkin bekerja lebih baik untuk pendekatan pembelajaran mesin baru, tetapi bukan algoritma mesin tradisional
Asli :
@ Maxwell86 telah memberikan tautan dan sumber daya yang sangat baik. Perhatikan mesin catur-zeta. Ini mesin catur GPU. Sayangnya, GPU belum membuktikan kegunaannya dalam pemrograman catur. Faktanya, proyek mesin catur zeta sama sekali tidak berhasil.
GPU bekerja sangat baik pada perhitungan mengambang dan algoritma yang dapat diparalelkan. Ini membutuhkan kemandirian. Tetapi jika kita melihat pohon min-max (atau alpha-beta) yang khas (digunakan oleh setiap mesin catur)
Cabang kanan tergantung pada cabang kiri. Khususnya, jika kita bisa mendapatkan cutoff (fail-high), kita bahkan tidak perlu mencari node yang tersisa. Sayangnya, ini bukan sesuatu yang dapat dilakukan GPU secara efisien. Dimungkinkan untuk menulis program GPU untuk alpha-beta, tetapi utas GPU (dikenal sebagai kernel) perlu ditunda untuk menunggu. Tidak seperti CPU, GPU kennel tidak bisa hanya beralih ke sesuatu yang lain (sebuah proses yang dikenal sebagai thread-switch atau bahkan proses-switch).
Algoritma dan pengetahuan engine kami yang ada saat ini diturunkan untuk dunia CPU. Seluruh algoritma perlu diselidiki ulang untuk GPU. Sayangnya, tidak banyak minat dan penelitian tentang itu.
Saya tidak memiliki pengalaman dengan pemrograman GPU, tetapi, biasanya, GPU sangat efisien dalam menjalankan perintah sederhana secara paralel. Rupanya, ini bukan kasus pohon pencarian yang digunakan untuk mesin catur. Oleh karena itu, GPU kehilangan keunggulan komputasinya dibandingkan CPU.
Tentu saja, ini adalah keadaan pemrograman GPU saat ini untuk mesin catur, tetapi pemrograman GPU relatif baru, jadi mungkin mereka akan menemukan solusi untuk masalah saat ini di masa depan.
Berikut adalah beberapa tautan menarik, terutama blog tentang penerapan mesin catur untuk GPU yang cukup mendalam.
sumber
Proyek LC0 (Leela Chess Zero), sebuah adaptasi open source dari AlphaZero untuk catur, menunjukkan manfaat GPU, kinerja floating point dan bandwidth memori yang digunakan dalam jaringan saraf besar.
http://lczero.org/
https://en.wikipedia.org/wiki/AlphaZero
https://groups.google.com/forum/#!forum/lczero
sumber
Saya menyelesaikan perjalanan saya saat ini di Zeta v099a, mesin catur gpu eksperimental saya.
https://github.com/smatovic/Zeta
Kesimpulan aktual dari iterasi saat ini adalah, bahwa sebuah mesin sederhana, dengan teknik pemrograman catur standar, dapat diangkut ke OpenCL untuk dijalankan pada gpu, tetapi akan membutuhkan lebih banyak upaya untuk membuat mesin kompetitif dalam hal node yang dihitung per detik ( kecepatan), heuristik (pengetahuan pakar), dan penskalaan (algoritma pencarian paralel).
Computer Chess, sebagai topik ilmu komputer, berkembang selama beberapa dekade, mulai tahun 40-an dan 50-an, dan mencapai satu puncak 1997 dengan pertandingan Deep Blue vs Kapsarow. Saat ini mesin catur disetel dengan memainkan ribuan dan ribuan permainan, jadi untuk membuat mesin bermain catur berjalan di gpu dan untuk mendapatkan mesin bermain catur yang kompetitif berjalan di gpu adalah dua tugas yang berbeda.
sumber
Saya memiliki beberapa pengalaman dengan pemrograman CUDA dan catur (bukan pemrograman mesin). Pertanyaan ini juga muncul di benak saya beberapa kali. Inilah pendapat saya, saya tidak pernah mempelajarinya.
Yah, pertama, hampir pasti bahwa dengan desain mesin catur saat ini, itu tidak mungkin. Kalau tidak, seseorang hanya akan melakukannya.
Apakah Anda bisa menggunakannya dalam desain yang sama sekali baru, itu pertanyaan yang lebih besar. Tidak ada masalah dengan operasi integer, tetapi jelas ada hal besar yang harus Anda jalankan kode primitif tanpa percabangan serius pada banyak entitas.
Menurut pendapat saya semua perhitungan pohon harus berjalan pada CPU.
Tapi saya bisa membayangkan (saya tidak mengatakan itu mungkin) beberapa fungsi evaluasi parsial (s) yang hanya membuat sebanyak mungkin penilaian pada posisi, untuk memberi CPU lebih banyak waktu, untuk membantunya membangun pohon dengan cara yang lebih baik, katakanlah satu fungsi tersebut dapat menghitung seberapa serius perhitungan harus dilakukan pada setiap posisi.
Anda dapat menghitung jumlah kotak yang diserang, potongan diserang, daya tembak di sekitar raja dan di beberapa subregional di papan, hal-hal terkait struktur gadai, Anda mungkin bisa membuat kode GPU yang dioptimalkan untuk ini. Anda mungkin bisa mendapatkan banyak informasi berguna secara gratis (tanpa waktu CPU, tanpa menunggu CPU), tetapi Anda harus benar-benar jenius untuk menggunakan tenaga kuda penuh GPU modern untuk hal-hal kecil seperti itu.
Ini mungkin bukan hal yang sangat menarik untuk dilakukan untuk menciptakan desain mesin yang sepenuhnya baru untuk mendapatkan katakanlah 30% kecepatan ekstra. Dan untuk mendapatkan katakanlah 20x percepatan pada GPU canggih, Anda harus membuat fungsi evaluasi benar-benar asing.
Dan hal terakhir yang saya lihat adalah masalah. Anda dapat menjalankan satu kode pada CPU tanpa banyak berpikir, tetapi dalam skenario CPU + GPU Anda harus berurusan dengan rasio CPU dan GPU yang sangat berbeda. kecepatan dan jumlah inti. Anda akan membutuhkan kode yang berbeda untuk klaster 16 core dengan GPU lemah daripada pada CPU lambat dengan GPU super cepat untuk menggunakan kapabilitas penuh perangkat keras. Membandingkan CPU dengan GPU dan menjalankan lebih banyak kode pada mesin yang lebih cepat akan diinginkan. Tapi tetap saja, saya pikir Anda tidak akan bisa memberi makan 3000 core beast hanya dengan fungsi evaluasi.
Sunting: Hanya untuk memperjelas, CPU akan secara teratur mengirim susunan posisi GPU untuk melakukan evaluasi parsial. Mungkin itu tidak jelas dari apa yang saya tulis.
Banyak masalah untuk membuat ini berfungsi.
sumber
Saya hanya melihat manfaat dalam menggunakan mesin catur berbasis GPU dan tidak melihat masalah serius melakukan itu. Mungkin Anda memiliki masalah yang mencoba menggunakan program catur standar, tidak tahu banyak tentang yang lain. Saya baru mulai menulis program catur dari baris pertama, sebagai program berbasis CUDA kedua setelah saya membuat beberapa tes pemrograman pertama pada CUDA tanpa rasa khusus. Segera saya dapat membuat beberapa tes kinerja pertama dan menguji permainan melawan mesin lain. Mungkin selama minggu depan. Saya baru saja mulai membuatnya tetapi saya sudah selesai menyelesaikannya dan sebagian besar fungsi sudah selesai.
sumber