두 가지 프로그램이 처음부터 작성되었습니다. 하나는 정수이고 두 번째 행렬 - 행렬 곱셈입니다. GPU 카드로 두 프로그램을 실행할 때 전역 크기를 1024로 설정했을 때 커널 코드가 1024 번 실행될 것으로 예상했는데 문제가 없었습니다. 전체 크기를 설정하고 로컬 크기를 변경하는 것과 같은 양의 시간을 실행했습니다. 결과를 코드화하고 출력하는 데 문제가되지 않았습니다. 동일한 코드를 CPU와 함께 실행하려고했는데, 커널 기능이 전역 크기에서 설정된 시간만큼 동일한 시간을 실행하지 않는 것을 보았을 때 충격을 받았습니다. 전역 크기 = 2048, 로컬 크기 = 1, 커널 기능의 2048 실행을 예상하고 있습니다. 그래, 2048, 이지만 글로벌 크기 = 2048이고 로컬 크기 = 16이면 그것은 256 번 실행합니다 ... 정상입니까? opencl에서 GPU와 CPU가 다른 이유는 무엇입니까? 나는 우리가 사용하는 장치가 사용자 측에 문제가되지 않는다고 생각합니다. 동일한 코드가 다른 장치에서 동일하게 작동해야합니다. 나는 틀린 사람들인가?OpenCL GPU와 CPU는 같지만 OpenCl의 알고리즘은 두 장치에서 다르게 작동합니다.
도움을 위해 미리 감사드립니다!
우리는 [최소, 컴파일 가능, 인증 가능한 예제] (http://stackoverflow.com/help/mcve)가 필요합니다. 그래서 몇 가지 코드를 게시하고 그것을 enqueuing하는 방법을 알려주십시오 (그리고 OpenCL 드라이버 등) 일반적으로 드라이버는 전체 그리드가 실행되도록해야합니다. 즉, 로컬 작업 크기와 글로벌 작업 크기 스레드가 전체적으로 실행되는 시간입니다. – einpoklum
전역 스레드 ID와 그룹 ID 및 로컬 스레드 ID의 잘못된 차단이 있어야합니다. 사형 집행 건 수는 어떻게 확인하나요? –
@huseyintugrulbuyukisik 커널 코드에서 전역 변수에 + = 1을 추가하면 커널이 몇 번 실행되었는지 확인할 수 있습니다. – Gzyniu