답변:
편집하다:
http://rybkaforum.net/cgi-bin/rybkaforum/topic_show.pl?tid=32317 에서 제기 된 다른 포인트는 거의 없습니다 .
원본 :
@ Maxwell86은 이미 훌륭한 링크와 리소스를 제공했습니다. 제타 체스 엔진에주의하십시오. GPU 체스 엔진입니다. 불행히도 GPU는 체스 프로그래밍에서 유용성이 입증되지 않았습니다. 실제로, 제타 체스 엔진 프로젝트는 절대 아무데도 가지 않았습니다.
GPU는 병렬 계산 및 알고리즘에서 매우 잘 작동합니다. 이것은 독립이 필요합니다. 그러나 일반적인 min-max (또는 alpha-beta) 트리를 보면 (모든 체스 엔진에서 사용)
오른쪽 분기는 왼쪽 분기에 따라 다릅니다. 특히 컷오프 (실패)를 얻을 수 있다면 나머지 노드를 검색 할 필요조차 없습니다. 불행히도 이것은 GPU가 효율적으로 할 수있는 것이 아닙니다. 알파-베타 용 GPU 프로그램을 작성할 수는 있지만 GPU 스레드 (커널이라고 함)를 잠시 기다려야 대기 할 수 있습니다. CPU와 달리 GPU 개집은 다른 것으로 전환 할 수 없습니다 (스레드 스위치 또는 프로세스 스위치라고 알려진 프로세스).
우리의 기존 알고리즘과 엔진 지식은 CPU 세계에서 파생되었습니다. GPU에 대해 전체 알고리즘을 다시 조사해야합니다. 불행히도 그것에 대한 관심과 연구는별로 없습니다.
GPU 프로그래밍 경험이 없지만 일반적으로 GPU는 간단한 명령을 병렬로 실행하는 데 매우 효율적입니다. 분명히 체스 엔진에 사용되는 검색 트리에는 해당되지 않습니다. 따라서 GPU는 CPU에 비해 계산상의 이점을 잃습니다.
물론, 이것은 체스 엔진을위한 현재의 GPU 프로그래밍 상태이지만 GPU 프로그래밍은 비교적 새로운 것이기 때문에 미래의 현재 문제에 대한 해결책을 찾을 수있을 것입니다.
다음은 흥미로운 링크 몇 가지입니다. 특히 GPU 용 체스 엔진 구현에 대한 블로그는 매우 통찰력이 있습니다.
체스를위한 AlphaZero의 오픈 소스 적응 LC0 (Leela Chess Zero) 프로젝트는 대규모 신경망에서 사용되는 gpus, 부동 소수점 성능 및 메모리 대역폭의 이점을 보여줍니다.
실험용 GPU 체스 엔진 인 Zeta v099a에서 현재 실행을 마쳤습니다.
https://github.com/smatovic/Zeta
현재 반복의 실제 결론은 표준 체스 프로그래밍 기술을 사용하는 간단한 엔진을 GPU에서 실행하기 위해 OpenCL로 이식 할 수 있지만 초당 계산 된 노드 측면에서 엔진의 경쟁력을 높이려면 더 많은 노력이 필요하다는 것입니다. 속도), 휴리스틱 (전문 지식) 및 스케일링 (병렬 검색 알고리즘).
컴퓨터 과학 주제 인 Computer Chess는 40 년대와 50 년대부터 수십 년 동안 발전했으며 Deep Blue vs. Kapsarow와의 경기에서 1997 년 최고점에 도달했습니다. 요즘 체스 엔진은 수천 게임을 통해 조정되므로 gpu에서 실행되는 체스 게임 엔진을 얻고 GPU에서 실행되는 경쟁적인 체스 게임 엔진을 얻는 것은 두 가지 다른 작업입니다.
CUDA 및 체스 프로그래밍 (엔진 프로그래밍 아님)에 대한 경험이 있습니다. 이 질문도 여러 번 떠 올랐습니다. 여기 내 의견이 있습니다. 나는 이것을 결코 연구하지 않았습니다.
첫째, 현재 체스 엔진의 설계로는 불가능하다는 것이 확실합니다. 그렇지 않으면 누군가가 단순히 그렇게 할 것입니다.
완전히 새로운 디자인으로 사용할 수 있는지 여부는 더 큰 문제입니다. 정수 연산에는 문제가 없지만 많은 엔터티에서 심각한 분기없이 기본 코드를 실행해야한다는 것은 분명히 큰 문제입니다.
내 생각에 모든 트리 계산은 CPU에서 실행되어야합니다.
그러나 가능한 한 위치에 대해 많은 평가를하고 CPU에 더 많은 시간을 보내고 트리를 더 나은 방식으로 구축하는 데 도움이되는 부분 평가 기능을 상상할 수 있습니다 (가능하지 않다고 말할 수 있음). 이러한 기능 중 하나는 각 위치에서 얼마나 심각한 계산을 수행해야하는지 계산할 수 있습니다.
공격받은 제곱 수, 공격 조각 수, 왕 주변의 화력 및 보드의 일부 하위 지역, 폰 구조 관련 사항을 계산할 수 있습니다. 이에 GPU 최적화 코드를 만들 수 있습니다. 아마도 많은 유용한 정보를 무료로 얻을 수있을 것입니다 (CPU 시간 없음, CPU 대기 없음). 그러나 작은 것들에 현대 GPU의 완전한 마력을 사용하려면 진정한 천재가되어야합니다.
30 %의 추가 속도를 내기 위해 완전히 새로운 엔진 디자인을 만드는 것은 그리 흥미로운 일이 아닙니다. 최첨단 GPU에서 20 배 빠른 속도를 내려면 평가 기능을 정말 외계인으로 만들어야합니다.
마지막으로 이것에 대해 제가 문제라고 생각합니다. 많은 생각없이 CPU에서 하나의 코드를 실행할 수 있지만 CPU + GPU 시나리오에서는 실제로 다른 비율의 CPU와 GPU를 처리해야합니다. 속도와 핵심 수. 하드웨어의 모든 기능을 사용하려면 초고속 GPU가있는 느린 CPU보다 약한 GPU가있는 16 코어 클러스터에 대해 다른 코드가 필요합니다. CPU 대 GPU를 벤치마킹 한 다음 더 빠른 머신에서 더 많은 코드를 실행하는 것이 바람직합니다. 그러나 여전히, 나는 당신이 평가 기능만으로 3000 코어 짐승에게 먹이를 줄 수있는 곳이 없을 것이라고 생각합니다.
편집 : 명확하게하기 위해 CPU는 정기적으로 GPU 배열의 위치를 보내 부분 평가를합니다. 아마 내가 쓴 내용에서 명확하지 않을 수 있습니다.
이 작업을 수행하는 데 많은 문제가 있습니다.
GPU 기반 체스 엔진을 사용하면 이점이 있으며 심각한 문제는 없습니다. 어쩌면 당신은 표준 체스 프로그램을 사용하여 다른 문제에 대해 잘 모르는 문제가있을 수 있습니다. CUDA에 대한 특별한 프로그래밍없이 첫 번째 프로그래밍 테스트를 한 후 두 번째 CUDA 기반 프로그램으로 첫 줄부터 체스 프로그램을 작성하기 시작했습니다. 머지 않아 다른 엔진에 대해 몇 가지 성능 테스트와 테스트 게임을 할 수 있습니다. 아마 다음 주에 방금 생성을 시작했지만 이미 완료되었으며 대부분의 기능이 이미 완료되었습니다.