2011-11-08 8 views
6

제 질문은 GPGPU에 관한 것이 아닙니다. 나는 GPGPU를 꽤 친절하게 이해하고 있으며, 그것이 내가 찾고있는 것이 아니다. Intel의 Sand Bridge에는 GPU에서 직접 계산을 수행 할 수있는 기능이 있습니다.GPU에 코드로드 (Intel Sandy Bridge)

정말 사실입니까?

작성하려는 코드는 인라인 어셈블리 (C 언어)에 있습니다. CPU에서 실행하는 대신 GPU에 물건을 밀어 넣는 조립 지침이 있습니까?

일부 관련 문서 :

PDF로는 명령 세트가 있습니다.

답변

2

첫 번째 질문에 대답하십시오. 아니요. 사실이 아닙니다. 간접적으로 CPU가 가지고있는 명령을 분석하여

그래픽 처리 장치가 메모리 매핑 IO 레지스터의 직접적인 인터페이스를 통해 CPU에 의해 제어되고 :

내가 당신이 연결 한 자원을 인용하자 메모리에두기. (SB GPU 매뉴얼의 2.2 장)

그래서 CPU 상황에서 GPU 코드를 직접 실행하지 마십시오.

두 번째 질문 : "GPU에 물건을 밀어 넣기"는 mov 명령으로 수행됩니다. Target은 mem-mapped IO 레지스터이며, 쓰기를 원한다. 약한 메모리 재정렬이 발생하지 않도록 "sfence"또는 이와 유사한 지침을 삽입해야 할 수도 있습니다.

+0

이것은 엄청나게 들리 겠지만, 여러분이 인용 한 부분은 어느 매뉴얼에서 찾았습니까? 그래서 내가해야 할 일은 실제로 "그 명령을 메모리에 두는 것"입니다 ( – user813182

+0

1 권 1 부 - 링크 된 페이지의 맨 처음에). CPU를 사용하여 메모리의 어딘가에서 실행하려는 GPU 코드를 배치합니다. CPU에 대한 실행 프로그램을로드하는 것과 거의 같습니다. – hirschhornsalz

3

내가 링크 한 PDF에 설명 된 명령 세트가 "사용자 공간"에서 직접 사용될 수 있다고 생각하지 않습니다. OS의 GPU 드라이버가 OpenGL 및 DirectX와 같은 상위 수준 인터페이스를 구현하는 데 사용할 수있는 기능입니다.

샌디 브릿지 GPU의 가치는 꽤 약합니다. ATI/nVidia에서 지원하는 표준 GPGPU 라이브러리 인 OpenCL **을 지원하지 않습니다. 나는 당신이보고있는 베어 메탈 인터페이스에 프로그래밍하려고 시도하는 것보다 훨씬 더 이식성이 뛰어나고 사용하기 쉽기 때문에 라이브러리를 지원하는 하드웨어에서 프로그래밍하는 것이 좋습니다.


* : 그것은 인텔의 폐쇄 소스 드라이버에 사용되는 PDF에서 설명한 것보다 다른 인터페이스가 있음을, 가능성이 있지만, 가능합니다.

** : 동일한 그룹에서 설계되었지만 OpenGL과 같지 않음.

+0

SNB GPU가 OpenCL을 지원하는 곳은 어디입니까? – Bahbar

+0

내 실수. 그렇지 않습니다. 수정 됨. – duskwuff