Satranç motorları için CPU - GPU


16

GPU'lar, bitcoin oluşturma ve iklim simülasyonları yapma gibi belirli hesaplama türlerinde daha iyidir.

Satranç motorları CPU yerine GPU ile hesaplarlarsa fayda sağlar mı?

Belki de bilgili bir kişi, ikisi arasındaki farkları vurgulayabilir ve GPU'ların satranç motorlarının yürüttüğü hesaplama türlerine uygun olup olmadığı konusunda bizi aydınlatabilir.

Yanıtlar:


13

DÜZENLE:

Birkaç diğer noktalar gündeme http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317 .

  • GPU özyineleme için çok iyi değil
  • GPU yüzmek için çok iyi değil
  • GPU yeni makine öğrenimi yaklaşımı için daha iyi çalışabilir, ancak geleneksel motor algoritmaları işe yaramaz

Orijinal :

@ Maxwell86 zaten mükemmel bağlantılar ve kaynaklar verdi. Zeta-satranç motoruna dikkat edin. Bu bir GPU satranç motorudur. Ne yazık ki, GPU satranç programlamasındaki yararlılığını kanıtlamamıştır. Aslında, zeta satranç motoru projesi kesinlikle hiçbir yere gitmedi.

GPU, paralel olabilen değişken hesaplamalar ve algoritmalar üzerinde çok iyi çalışır. Bu bağımsızlık gerektirir. Ancak tipik bir min-max (veya alfa-beta) ağacına bakarsak (her satranç motoru tarafından kullanılır)

resim açıklamasını buraya girin

Sağ dal sol dala bağlıdır. Özellikle, bir kesme (başarısız-yüksek) alabilirsek, kalan düğümleri aramamız bile gerekmez. Ne yazık ki, bu bir GPU'nun verimli bir şekilde yapabileceği bir şey değildir. Alfa-beta için bir GPU programı yazmak mümkündür, ancak beklemek için GPU iş parçacıklarının (çekirdek olarak bilinir) duraklatılması gerekir. Bir CPU'dan farklı olarak, bir GPU kulübesi sadece başka bir şeye (iş parçacığı anahtarı veya hatta işlem anahtarı olarak da bilinir) geçemez.

Mevcut algoritmamız ve motor bilgimiz CPU dünyası için türetilmiştir. Tüm algoritmanın GPU için yeniden araştırılması gerekir. Ne yazık ki, üzerinde çok fazla ilgi ve araştırma yok.


Minimax'ın kendisini boşaltmanız gerekmez. GPU için çok uygun bazı alt görevler (örneğin Botvinnik'in alfa yolu bulma, tahta karma, statik değerlendirme, vb.) Vardır. Bununla birlikte, bu alanda herhangi bir araştırma hakkında bilgim yok.
user58697

Doğru. Ancak ana aramanın kendisi boşaltılamazsa, küçük görevleri boşaltmanın bir anlamı olmamalıdır.
HelloWorld

3
Bu mükemmel bir cevap. +3 anahtarı ekranımda nerede? Ben bulamıyorum!
thb

7

GPU programlama konusunda hiçbir deneyimim yok, ancak genellikle GPU'lar basit komutları paralel olarak yürütmede çok etkilidir. Görünüşe göre, satranç motorları için kullanılan arama ağacı için durum böyle değil. Bu nedenle, GPU bir CPU'ya göre hesaplama avantajını kaybeder.

Tabii ki, bu satranç motorları için GPU programlamanın mevcut durumudur, ancak GPU programlaması nispeten yenidir, bu yüzden belki de gelecekteki mevcut sorunlara çözümler bulabilirler.

İşte birkaç ilginç bağlantı, özellikle GPU için bir satranç motoru uygulama hakkındaki blog oldukça içgörü.


1
Kaçırdığınız: zeta-chess.blogspot.com
HelloWorld

GPU'ların iyi olduğu şeyler, kesirli matematik, vektör işlemleri ve minimum senkronizasyon gerektiren paralelleştirmeyi içerir. Satranç motorları sonuncusuna sahiptir ancak ilk ikisine sahip değildir.
intx13


2

Mevcut çalışmamı deneysel gpu satranç motorum Zeta v099a'da bitirdim.

https://github.com/smatovic/Zeta

Mevcut yinelemenin asıl sonucu, standart satranç programlama tekniklerine sahip basit bir motorun bir gpu üzerinde çalıştırmak için OpenCL'ye taşınabileceğidir, ancak motoru saniyede hesaplanan düğümler açısından rekabetçi hale getirmek için daha fazla çaba harcayacaktır ( hız), sezgisel tarama (uzman bilgisi) ve ölçeklendirme (paralel arama algoritması).

Bir bilgisayar bilimi konusu olarak Bilgisayar Satrancı, 40'lı ve 50'li yıllarda başlayan on yıllar boyunca gelişti ve Deep Blue ile Kapsarow maçı ile 1997'de bir zirveye ulaştı. Günümüzde satranç motorları binlerce ve binlerce oyun oynayarak ayarlanmaktadır, bu yüzden gpu üzerinde çalışan bir satranç oyun motoru almak ve gpu üzerinde çalışan rekabetçi bir satranç oyun motoru elde etmek iki farklı görevdir.


0

CUDA ve satranç programlama ile ilgili bazı deneyimlerim var (motor programlama değil). Bu soru da aklıma birçok kez geldi. İşte benim görüşüm, bunu hiç çalışmadım.

Öncelikle, satranç motorlarının mevcut tasarımı ile imkansız olduğu neredeyse kesindir. Aksi takdirde birisi bunu yapardı.

Tamamen yeni bir tasarımda kullanabilirsiniz, bu daha büyük bir soru. Tamsayı işlemleriyle ilgili bir sorun yoktur, ancak açıkça, varlıkların çoğunda ciddi dallanma olmadan ilkel kod çalıştırmanız gereken çok büyük bir şey vardır.

Bence tüm ağaç hesaplamaları CPU üzerinde yapılmalıdır.

Ama tahmin edebiliyorum (mümkün olduğunu söyleyemem), pozisyonlarda mümkün olduğunca fazla değerlendirme yapan, CPU'ya daha fazla zaman vermek, ağacın daha iyi bir şekilde inşa edilmesine yardımcı olmak için bazı kısmi değerlendirme işlev (ler) i düşünebilirim. böyle bir fonksiyon her pozisyonda ne kadar ciddi hesaplamalar yapılması gerektiğini hesaplayabilir.

Saldıran karelerin sayısını, saldırıya uğrayan parçaları, kralların etrafındaki ateş gücünü ve gemideki bazı alt bölgelerde, piyon yapısıyla ilgili şeyleri hesaplayabilir, muhtemelen bunlar için GPU optimize edilmiş kod yapabilirsiniz. Muhtemelen ücretsiz olarak çok fazla yararlı bilgi alabilirsiniz (CPU zamanı yok, CPU bekleme yok), ancak bu tür küçük şeyler için modern GPU'ların tam beygir gücünü kullanmak için gerçek bir dahi olmanız gerekir.

% 30 ekstra hız diyelim ki tamamen yeni bir motor tasarımı oluşturmak için muhtemelen çok ilginç bir şey değil. Ve en son teknoloji GPU'larda 20 kat hızlanma diyelim, değerlendirme fonksiyonlarını gerçekten yabancı hale getirmelisiniz.

Ve bu konuda son olarak bir sorun olarak gördüğüm şey. CPU üzerinde çok fazla düşünmeden bir kod çalıştırabilirsiniz, ancak CPU + GPU senaryosunda gerçekten farklı CPU ve GPU oranları ile uğraşmanız gerekir. hızlar ve çekirdek sayımları. Donanımın tüm özelliklerini kullanmak için zayıf GPU'lu 16 çekirdekli küme için süper hızlı GPU'lu yavaş CPU'dan farklı bir koda ihtiyacınız olacaktır. CPU ve GPU karşılaştırması yapmak ve daha hızlı makinede daha fazla kod çalıştırmak istenir. Ama yine de, sadece değerlendirme işlevleriyle 3000 çekirdek canavarı beslemeye hiçbir yere varamayacağınızı düşünüyorum.

Düzenleme: Sadece şeyleri netleştirmek için, CPU düzenli olarak kısmi değerlendirmeler yapmak için pozisyon GPU dizileri gönderir. Belki de yazdıklarımdan belli değildi.

Bu işi yapmak için birçok sorun.


0

Sadece GPU tabanlı bir satranç motoru kullanmanın faydalarını görüyorum ve bunu yaparken ciddi bir sorun görmüyorum. Belki bu sorunlar standart bir satranç programı kullanmayı deneyin, diğerleri hakkında çok şey bilmiyorum. İlk satırdan itibaren satranç programı yazmaya başladım, CUDA üzerinde bazı özel programlama testleri yapmadan sonra ikinci bir CUDA tabanlı program olarak. Yakında diğer motorlara karşı bazı ilk performans testleri ve test oyunları yapabilirim. Belki gelecek hafta boyunca. Sadece oluşturmaya başladım ama zaten bitirmek üzereyim ve çoğu fonksiyon zaten bitti.


Google, GPU'nun makine öğrenimi için ideal olduğunu kanıtlamıştır, ancak GPU geleneksel satranç programlaması için iyi değildir.
HelloWorld
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.