OpenCL에서 모든 스레드는 몇 가지 공통 값을 계산해야합니다. 다음 중 두 가지 경우가 더 빠릅니다. 1. 모든 스레드가 값을 계산하고 개인 메모리에 저장하며 스레드간에 동기화가 필요하지 않습니다. 2. 하나의 스레드가 계산하여 로컬 메모리에 저장합니다. 장벽으로 동기화되었습니다. 작업 그룹의 모든 스레드는 로컬 메모리의 값에 액세스합니다.OpenCL - 성능에 장벽이 미치는 영향
감사합니다.
OpenCL에서 모든 스레드는 몇 가지 공통 값을 계산해야합니다. 다음 중 두 가지 경우가 더 빠릅니다. 1. 모든 스레드가 값을 계산하고 개인 메모리에 저장하며 스레드간에 동기화가 필요하지 않습니다. 2. 하나의 스레드가 계산하여 로컬 메모리에 저장합니다. 장벽으로 동기화되었습니다. 작업 그룹의 모든 스레드는 로컬 메모리의 값에 액세스합니다.OpenCL - 성능에 장벽이 미치는 영향
감사합니다.
OpenCL을 실행하는 장치의 범위 (예 : 다양한 GPU, 다양한 CPU 및 셀 BE)에서 정답이 있습니까? 성능 특성은 CPU와 GPU, 그리고 GPU 공급 업체와 모델간에 크게 다를 수 있습니다.
귀하 또는 귀하의 사용자가 관심있어하는 플랫폼 및 구현에 대해 측정해야합니다.
호스트의 몇 가지 일반적인 값을 미리 계산하여 OpenCL 커널에 동적 매개 변수로 전달하거나 OpenCL 커널에 대한 컴파일 시간 매개 변수로 전달할 수 있습니까?
이러한 공통 값을 계산하는 복잡성과 병렬로 실행할 수있는 작업 항목 수에 따라 다릅니다.
공통 값을 계산하는 시간을 A, 나머지 계산을 수행 할 시간을 B, 장벽의 오버 헤드를 AO & BO (파트 및 B 파트)라고합니다. 각 옵션의 시간을 계산할 수 있습니다.
입니다 + . 단일 스레드가있을 때 BO가 A에 비해 작 으면 옵션 2가 빠를 것입니다.
진실은 아마도 어딘가에있을 것입니다.
옵션 3은 호스트가이 값을 계산하고 결과를 상수 메모리에 저장하게합니다. 이 작업을 수행하고 약간의 이중 버퍼링을 사용하면 OpenCL이 현재 계산을 수행하기를 기다리는 동안 다음 공통 값을 계산할 시간을 숨길 수 있습니다.
실제로 모든 스레드가 병렬로 실행할 수 있다는 보장이 없으므로 실제로 간단하지 않습니다. 따라서 1000 스레드의 경우 옵션 1의 경우 n * A + n * B와 같을 수 있고 A + n * 옵션 2의 경우 AO + n * B + n * BO입니다. 그리고 단일 스레드 예제가 어떤 의미인지 이해할 수 없습니다. 왜 그 스레드는 A와 1000 년에 A를 재 계산했을까요? – Grizzly
또한 아키텍처에 따라 A가 정확히 계산되는 방법에 따라 리소스 충돌이 발생하여 여러 스레드가 병렬로 수행하려고 할 때 A의 계산 속도가 느려질 수 있습니다 (예 : 모두 동일한 메모리에 액세스하려고하기 때문에 아키텍처에서 브로드 캐스트 처리) m> = 1 인 옵션 1에 대해 m * n * A + n * B로 만듭니다. 그래서 결국 아키텍처, 스레드의 양과 계산 비용의 부담없이 어떤 대답도 줄 수는 없습니다. A와 장벽의 비용 – Grizzly