2009-09-07 2 views
11

저는 Stream 2.0 베타에서 ATI OpenCL 구현을 사용 해왔습니다. 현재 베타 버전의 OpenCL은 현재 CPU 만 사용하고 다음 버전은 GPU 커널을 지원하기로되어 있습니다. 내 작업 컴퓨터에 ATI GPU가 있기 때문에 Stream을 다운로드했습니다.하드웨어 공급 업체의 OpenCL 실행

나는 GPU를 사용함으로써 큰 ​​이익을 얻을 수있는 소프트웨어를 작성한다. 그러나이 소프트웨어는 고객 기계에서 실행되기 때문에 개발할 정확한 하드웨어를 선택하고이를 최적화 할 수있는 고급 스러움이 없습니다 (많은 과학 컴퓨팅 환경 에서처럼). 그래서 내 질문은, 만약 내가 ATI OpenCL 구현을 내 응용 프로그램과 함께 배포한다면, 그것은 결코 예를 들어서 사용할 수 없다는 것을 의미 할 것이다. NVidia 비디오 카드? NVidia OpenCL SDK를 사용하면 AMD 칩 (ATI/AMD 링크 고려)에서 절대로 최적으로 실행되지 않습니다.

다른 말로하면 누가 OpenCL 구현을 제공 할 책임이 있습니까? 사용자가 예를 들어 NVIDIA 비디오 카드 용 OpenCL '드라이버'를 AMD CPU에서 최적의 성능을 제공하는 '드라이버'와 함께 설치하십시오.

이외에도 OpenCL에 대한 좋은/적극적인 지원 포럼이 Khronos 게시판과 별도로 존재합니까? 아니면 갈 장소입니까? ATI에는 게시판이 있으며, NVidia는 아마도 자신 만의 고유 한 기능을 가지고있는 것으로 보입니다. OpenCL 사용자/개발자 커뮤니티는 어디에서 놀고 있습니까? 이미 한 곳으로 통합 되었습니까?

답변

6

궁극적으로 OpenCL은 OpenGL과 동일한 방식으로 작동합니다. 즉, 사용자는 하드웨어 공급 업체 (ATI, NVIDIA, Intel)에서 현재 드라이버를 설치합니다. 개발자는 응용 프로그램을 빌드 할 때 OpenCL 라이브러리에 링크 만하면됩니다. 사용자가 응용 프로그램을 실행할 때 응용 프로그램은 드라이버가 제공하는 해당 공급 업체 특정 라이브러리로 리디렉션합니다.

이것이 작동하는 방식이지만 아직 작동하지 않습니다.

또 다른 중요한 점은 OpenCL을 사용하여 CPU에서 실행되는 코드가 GPU에서 실행되는 코드와 다른 최적화 된 커널 매개 변수를 사용하기 때문에 여전히 공급 업체별 코드 경로를 제공해야한다는 것입니다. 이는 GPU 공급 업체 간의 차이점에도 적용됩니다.

+0

OpenGL과의 차이점은 OpenGL의 경우 GPU 공급 업체가 드라이버 기간을 작성한다는 것입니다. OpenGL은 비디오 카드에서만 작동합니다. 그러나 OpenCL의 경우 CPU 공급 업체가 CPU 커널 용 드라이버를 작성하고 OpenCL 커널이 CPU 스레드 또는 GPU 스레드에서 실행될 수 있기 때문에 GPU 공급 업체가 GPU 커널 용 드라이버를 작성하는 것이 이상적입니다. 앞으로 어떻게 작동 할 예정입니까? – Roel

+0

OpenGL은 하드웨어가 특정 작업을 지원하지 않을 때 항상 소프트웨어 경로를 지원합니다. 따라서 OS 공급 업체는 소프트웨어 OpenGL 구현을 제공해야합니다 (MS Windows OpenGL은 OpenGL 1.1에서 중단됨). OpenCL을 사용하면 비슷한 결과가 발생할 수 있습니다. 어쨌든 AMD/ATI는 CPU와 GPU를 모두 지원할 수있는 OpenCL 버전을 출시 할 것으로 보인다. 마찬가지로 Intel은 일반 CPU와 Larrabee GPU를 지원하는 OpenCL도 출시 할 것입니다. 필자는 Apple의 OpenCL 구현에 대해 충분히 알고 있지 않습니다. – Eric

+1

고객이 ATI 비디오 카드와 Intel CPU를 가지고 있다면 최적의 성능을 낼 수 없다는 결론을 내릴 수 있습니까? 즉, 그들이 설치 한 OpenCL 드라이버/구현에 따라 CPU 또는 GPU에서 커널을 실행하게됩니까? 내 말은 아마 내가 기계에서 달릴 것이라는 것을 안다. 그건 내 관심사가 아니다. 내 관심사는 기계에서 모든 하드웨어, 모든 CPU 코어 및 모든 GPU '코어'를 사용하므로 * 빠름 *입니다. – Roel

8

나는 이것이 위의 오래된 대답으로 된 오래된 질문이라는 것을 알고있다. 최신 답변으로 업데이트하겠다고 생각했습니다.

예, OpenCL 커널 및 코드의 구현은 올바르게 작성된 플랫폼 및 장치 열거 코드를 사용하여 오늘날 다양한 장치에서 작동합니다. 올바른 플랫폼 및 장치 열거 코드를 작성하는 것은 매우 쉽습니다. 까다로운 부분은 플랫폼 또는 장치를 선택하는 것입니다. 사용자가 앱을 선택하거나 각각에 대해 마이크로 벤치 마크를 실행하고 동적으로 하나를 선택하고 벤치 결과를 캐시 할 수있는 앱에 구성 옵션을 제시해야합니다.

사람들은 플랫폼을 둘 이상 가질 수 있고 가질 것입니다. 예를 들어, 제 시스템에는 GTX 580 SLI가 있으므로 NVidia 플랫폼에 두 개의 장치가 있습니다. 또한 Intel OpenCL SDK가 있으므로 CoreI7 990x Extreme CPU도 Intel 플랫폼의 장치로 제공됩니다.

예 예를 들어 NVidia OpenCL SDK를 사용하여 개발 및 제작 한 ATI 또는 Intel OpenCL 및 그 반대로 작동하는 이진 파일. 더 이상 걱정할 필요가 없습니다.

분명히 최종 사용자에게는 OpenCL이 전혀 없을 수 있으므로 지연로드 또는 LoadLibrary opencl.dll과 동적 링크가 필요할 수 있습니다.

Intel OpenCL SDK, NVidia GPU 및 AMD GPU에 대해 코드를 테스트하는 것이 좋습니다. 한 플랫폼에서 문제를 일으키는 버그를 발견 할 수 있지만 다른 플랫폼에서는 문제가 없습니다.드라이버 버그로 인해이 플랫폼 중 하나에서 신비하게도 정확한 결과가 나오지 않을 수도 있습니다.

+0

그 점에 대해 감사드립니다. 첫 번째 대답 이후로 상황이 바뀌 었는지 알기 위해 새로운 질문을했습니다 ... – Mikarnage

관련 문제