2013-06-10 5 views
0

가능한 경우 불변성을 사용하여 멀티 스레드 프로그램에 고전적인 동기화가 필요하지 않다는 것을 확고히 믿습니다. 이것은 기능적 언어로 사용되는 핵심 개념 중 하나입니다.CUDA, Immability vs. Mutability

사람들이 CUDA 프로그램에 대해 어떻게 생각하는지 궁금해했습니다. GPU를 개발하는 것이 CPU 개발과 다르다는 것을 알고 있습니다. GPU가 아니기 때문에 더 많은 지식을 가진 사람들이 나에게 그 문제에 대한 의견을 나누고 싶습니다.

감사합니다, 가브리엘 CUDA 프로그래밍에서

+0

사람들이 투표를 닫거나 다운 다운하지 않으면 그렇지 않습니다. 질문 한 사람에게 이유를 설명하는 것이 합리적입니까? – Grundlefleck

+0

당신이 기대하는 답의 종류에 좀더 정확하게 답할 수 있습니까? 구체적인 예를 들어 보셨습니까? – Simon

+0

안녕하세요, 좀 더 일반적인 질문입니다. 저는 매우 정확한 답변을 기대하지는 않지만 찬반 양론에 대해 공개 토론을하는 것이 좋습니다. – Gabriel

답변

1

은 변하지도 도움이, 때로는 필요하다.

블록 단위 통신에서 변경 사항이 적용되지 않으면 일부 __syncthreads()을 건너 뛸 수 있습니다.

그리드 방식의 통신에서는 전체 그리드 동기화 명령이 전혀 없습니다. 그래서 일반적으로 한 블록의 변경이 다른 블록에서 볼 수 있다는 보장을하려면 커널 종료가 필요합니다. 이는 실제로 연속적으로 실행되는 방식으로 블록을 예약 할 수 있기 때문입니다 (예 : 약한 GPU, 더 많은 블록을 병렬로 실행할 수 없음)

원자 단위 작업 및 __threadfence()을 통해 부분 통신이 가능합니다. 예를 들어, 작업 대기열을 구현하여 블록이 안전한 방법으로 거기에서 새로운 assigments를 가져올 수 있도록합니다. 그러나 원자력이 시간 소모적 일 수 있기 때문에 이러한 종류의 작업은 거의 수행되어서는 안됩니다 (글로벌 L2 캐싱을 사용하면 이전 GPU보다 더 좋음).