GPGPU영역에서는 Nvidia의 CUDA가 유명하지만, 좀 더 범용으로 쓰이는건 OpenCL입니다.
최근 OpenCL코딩을 할 일이 있어서 성능을 뽑다가 모바일 AP는 얼마난 성능이 나오려나 (먼지쌓인 개발용 기기 다 꺼내서)벤치를 해봤습니다.
Android : https://play.google.com/store/apps/details?id=kr.clpeak
Linux : https://github.com/krrishnarraj/clpeak
기준이 되는 Nvidia의 RTX8000. 가장 많이 쓰이는 Single / Double float point에서 이론성능과 비슷하게 나왔습니다. 왠지 이론 성능보다도 높은지는 불명....이지만 해당 벤치가 성능을 잘 뽑아준다는것은 확인.
Single Precision (float32)를 기준으로....(성능이 잘 나오는 Vector 자료형 기준)
SD625 - Adreno 510 - 39Gflops
SD636 - Adreno 512 - 52Gflops
SD650 - Adreno 512 - 53Gflops (발표치 217.6Gflops)
SD720G - Adreno 618 - 180Gflops
Exynos 8895 - Mali G71 Mp20 - 260Gflops
Exynos 9820 - MaliG76 mp12 - 400Gflops
SD845 - Adreno 630 - 465Gflops (737Gflops)
SD855 - Adreno 640 - 574Gflops (발표치 954.7Gflops)
나름 결론을 내보면 아래와 같습니다.
1. Adreno Graphic은 내부적으로 MP1 또는 MP2 구성으로 이루어짐.
2. Adreno 사이에서는 연산성능과 High Level Graphic 실성능이 거의 정비례해서 증가.
-> Adreno 512와 Adreno 650은 GFX-T REX에서 거진 10배 내외의 성능차를 보여줌 이는 Gflop차와 거의 동일
3. Mali Graphic이 OpenCL로 측정되는 연산성능은 High Level Graphic 실성능에 비해서 Adreno 대비 적게 나옴. 단순히 코딩해서는 Mali Graphic이 최적화가 힘든것은 애초에 동세대 Adreno에 비해서 Low Level 연산성능이 낮은것이 영향일수도 있음.
-> 동세대 비교 Adreno 640 vs Mali G76 mp12 >> 574Gflops vs 400Gflops
-> 동세대 비교2 Adreno 540(추정) vs Mali G71 mp20 >> 396Gflops vs 260Gflops
4. 다만, "3."의 결과와 달리 Geekbench의 Compute Bench는 Mali가 Adreno대비 큰 폭(동세대 50%이상)으로 우위임으로 소스가 공개된 clpeak을 믿어야할지 저명한(?) Geekbench를 믿어야할지 애매함.
5. 이러나 저러나 태생이 원칩구성의 ARM AP와 데스크톱(어쩌다 보니 비교군은 하이엔드...) GPU차이는 이론이던 실제던 갭이 큼.
-> APPLE M1 2.6Tflops (float32) ~~ GTX 960 2.4Tflops (이론성능이나 실제성능이나 비슷하게 측정됨)
항상 느끼는거지만.... 실제로 코딩할 때 이론성능 뽑기가 힘든 것 같습니다. 당장 12Tflops의 XSX가 오버클럭해서 10Tflops간당간당한 PS5대비 못 나오는 서드파티 게임도 있으니...
코딩하다보면 내가 발로 코드를 짜서 그런건지 아니면 어딘가 현실적인 병목이 있어서 그런건지 모르는게 문제네요(...) 물론 그 병목을 해소해서 이론성능에 근접하는게 실력이겠습니다만....;;