---
title: "Wydajność urządzeń w OpenCL DES"
url: https://michalasobczak.pl/pl/posts/device-performance-in-opencl-des.html
author: "Michał Sobczak"
description: "Wśród różnych urządzeń obliczeniowych, które mam, jest jedno, które się wyróżnia – NVIDIA Quadro NVS 140M – ponieważ obsługuje tylko operacje FP32 (float), ale nie FP64 (double). Jest po prostu zbyt stare. W OpenCL mamy zarówno funkcję pow, która przyjmuje parametry double, jak i float."
published: 2023-01-17T12:14:15.000Z
updated: 2024-08-29T08:23:17.000Z
language: pl
categories: ["AI/ML"]
tags: ["Programming", "GPU", "HPC", "OpenCL"]
license: CC BY-NC-ND 4.0 (https://creativecommons.org/licenses/by-nc-nd/4.0/)
---
# Wydajność urządzeń w OpenCL DES

Wśród różnych urządzeń obliczeniowych, które mam, jest jedno, które się wyróżnia – NVIDIA Quadro NVS 140M – ponieważ obsługuje tylko operacje FP32 (float), ale nie **FP64 (double)**. Jest po prostu zbyt stare. W OpenCL mamy zarówno funkcję `pow`, która przyjmuje parametry double, jak i float. Ta druga nazywa się `pown`. Pierwszej używam właśnie do benchmarkowania obliczeń podwójnej precyzji.

| Model | Rok | Rdzenie | Jednostki | Zegar | Wyd. | 1k | 10k | 100k |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| NVS 4200M | 2011 | 48 | 1 | 1480 | 156/12 | 13 | 116 | 1163 |
| Tesla K20xm | 2012 | 2688 | 14 | 732 | 3935/1312 | 2 | 3 | 24 |
| Intel i7 2640M | 2011 | 2 | 4 | 2800 | n/a | 3 | 27 | 281 |
| RTX 3050 Ti Mobile | 2021 | 2560 | 20 | 1695 | 5299/83 | 2 | 10 | 90 |
| Intel UHD 10200H | 2020 | 192 | 12 | 1050 | 422/? | 4 | 19 | 192 |
| NVS 140M (FP32) | 2007 | 16 | 2 | 800 | 25/- | 47 | 445 | 4453 |

Najszybsza w tym porównaniu jest Tesla K20xm, co uważam za nieco zaskakujące, ponieważ pochodzi z 2012 roku, a wygrywa z RTX 3050 Ti Mobile z 2021 roku. Jeśli jednak weźmiemy pod uwagę, że wydajność FP64 Tesli jest 15 razy większa (tylko 4 razy w rzeczywistym czasie) niż RTX, to powinno być oczywiste, dlaczego wygrywa.

Szczerze mówiąc, nie mam potrzeby używać double (liczby całkowite powinny tu w zupełności wystarczyć), ale to świetna okazja, by zobaczyć różnice w wydajności między różnymi urządzeniami. Przy użyciu FP32 dość trudno byłoby uzyskać tak szeroki zakres czasów. Użycie `pown(float, integer)` nieco zmienia powyższą tabelę, ponieważ zaczynamy korzystać z **obliczeń FP32** (przy 100 tys. elementów):

-   Tesla K20xm: 12 ms
-   RTX 3050 Ti Mobile: 3 ms
-   NVS 4200m: 352 ms
-   NVS140M: 4453 ms

Teraz spójrzmy na te czasy z perspektywy teoretycznej wydajności mierzonej w GFLOPS. Porównując NVS 4200M i NVS 140M, mamy relację około 6-krotną (156 vs 25), ale relacja czasów wynosi tylko niespełna 4. Wchodzą tu więc w grę także inne czynniki. Porównując RTX 3050 Ti i Teslę K20xm, mamy 1,34 (5299 vs 3935), ale relacja czasów wynosi 4. Rzeczywisty wzrost wydajności jest więc znacznie wyższy, niż spodziewałbym się, porównując pomiary GFLOPS.

Zdobycie Tesli K20xm to prawdziwa okazja, jeśli chodzi o obliczenia FP64, ponieważ jest na podobnym poziomie co RTX 4090.
