0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSLでもAMD GPU OpenCV(2)

0
Posted at

AMD Ryzen 7 255 /w Radeon 780M Graphics のGPUでOpenCV処理の時間計測をWindowsとWSLで行いましたが、WSLではGPUが認識出来ていませんでした。ROCDXGが更新されていたので、その追試を行いました。#自分の忘備録18

WSLで「Radeon 780M Graphics」も使えそうだ ← WSLのOpenCVで AMD GPU「Radeon 780M Graphics ですが」使えるのか・・・

AMD GPUをWSLで使用できるようにするために ROCmとROCDXGを使います。

  • ドキュメント(WSL How to guide - Use ROCm on Radeon)を参考にします。
  • Adrenalin 26.2.2 + ROCm 7.2.1でROCDXGを導入する記事になっていますが、最新のAdrenalin 26.5.1に更新されているのでそのまま進めます。
    • Adrenalin 26.5.1は何かへん?で、GUIが勝手に起動するバグがあるようなので、ドライバー以外はアンインストールしています。
  • AMD ROCDXG Libary の手順でセッティングします。
(ROCDXGの更新を取得して構築)
cd librocdxg
git pull origin develop
cd build
make
sudo make install

わ~ぉ~、以下のrocminfoの出力Agent 2に「AMD Radeon 780M Graphics」が認識されていました。
すばらし~い(^O^)

(チェック)
export HSA_ENABLE_DXG_DETECTION=1
rocminfo  (出力は以下の通り、出力行の1文字目に#を追加)
#WSL environment detected.
#=====================
#HSA System Attributes
#=====================
#Runtime Version:         1.18
#Runtime Ext Version:     1.15
#System Timestamp Freq.:  1000.000000MHz
#Sig. Max Wait Duration:  18446744073709551615 (0xFFFFFFFFFFFFFFFF) (timestamp count)
#Machine Model:           LARGE
#System Endianness:       LITTLE
#Mwaitx:                  DISABLED
#XNACK enabled:           NO
#DMAbuf Support:          YES
#VMM Support:             YES
#
#==========
#HSA Agents
#==========
#*******
#Agent 1
#*******
#  Name:                    AMD Ryzen 7 255 w/ Radeon 780M Graphics
#  Uuid:                    CPU-XX
#  Marketing Name:          AMD Ryzen 7 255 w/ Radeon 780M Graphics
#  Vendor Name:             CPU
#  Feature:                 None specified
#  Profile:                 FULL_PROFILE
#  Float Round Mode:        NEAR
#  Max Queue Number:        0(0x0)
#  Queue Min Size:          0(0x0)
#  Queue Max Size:          0(0x0)
#  Queue Type:              MULTI
#  Node:                    0
#  Device Type:             CPU
#  Cache Info:
#    L1:                      32768(0x8000) KB
#  Chip ID:                 0(0x0)
#  Cacheline Size:          64(0x40)
#  BDFID:                   0
#  Internal Node ID:        0
#  Compute Unit:            16
#  SIMDs per CU:            0
#  Shader Engines:          0
#  Shader Arrs. per Eng.:   0
#  Memory Properties:
#  Features:                None
#  Pool Info:
#    Pool 1
#      Segment:                 GLOBAL; FLAGS: FINE GRAINED
#      Size:                    24496316(0x175c8bc) KB
#      Allocatable:             TRUE
#      Alloc Granule:           4KB
#      Alloc Recommended Granule:4KB
#      Alloc Alignment:         4KB
#      Accessible by all:       TRUE
#    Pool 2
#      Segment:                 GLOBAL; FLAGS: EXTENDED FINE GRAINED
#      Size:                    24496316(0x175c8bc) KB
#      Allocatable:             TRUE
#      Alloc Granule:           4KB
#      Alloc Recommended Granule:4KB
#      Alloc Alignment:         4KB
#      Accessible by all:       TRUE
#    Pool 3
#      Segment:                 GLOBAL; FLAGS: KERNARG, FINE GRAINED
#      Size:                    24496316(0x175c8bc) KB
#      Allocatable:             TRUE
#      Alloc Granule:           4KB
#      Alloc Recommended Granule:4KB
#      Alloc Alignment:         4KB
#      Accessible by all:       TRUE
#    Pool 4
#      Segment:                 GLOBAL; FLAGS: COARSE GRAINED
#      Size:                    24496316(0x175c8bc) KB
#      Allocatable:             TRUE
#      Alloc Granule:           4KB
#      Alloc Recommended Granule:4KB
#      Alloc Alignment:         4KB
#      Accessible by all:       TRUE
#  ISA Info:
#*******
#Agent 2
#*******
#  Name:                    gfx1103
#  Uuid:                    GPU-1e7eb746d5234077
#  Marketing Name:          AMD Radeon 780M Graphics
#  Vendor Name:             AMD
#  Feature:                 KERNEL_DISPATCH
#  Profile:                 BASE_PROFILE
#  Float Round Mode:        NEAR
#  Max Queue Number:        128(0x80)
#  Queue Min Size:          64(0x40)
#  Queue Max Size:          131072(0x20000)
#  Queue Type:              MULTI
#  Node:                    1
#  Device Type:             GPU
#  Cache Info:
#    L1:                      32(0x20) KB
#    L2:                      2048(0x800) KB
#  Chip ID:                 6400(0x1900)
#  Cacheline Size:          64(0x40)
#  Max Clock Freq. (MHz):   2600
#  BDFID:                   50432
#  Internal Node ID:        1
#  Compute Unit:            12
#  SIMDs per CU:            2
#  Shader Engines:          1
#  Shader Arrs. per Eng.:   2
#  Coherent Host Access:    FALSE
#  Memory Properties:
#  Features:                KERNEL_DISPATCH
#  Fast F16 Operation:      TRUE
#  Wavefront Size:          32(0x20)
#  Workgroup Max Size:      1024(0x400)
#  Workgroup Max Size per Dimension:
#    x                        1024(0x400)
#    y                        1024(0x400)
#    z                        1024(0x400)
#  Max Waves Per CU:        32(0x20)
#  Max Work-item Per CU:    1024(0x400)
#  Grid Max Size:           4294967295(0xffffffff)
#  Grid Max Size per Dimension:
#    x                        2147483647(0x7fffffff)
#    y                        65535(0xffff)
#    z                        65535(0xffff)
#  Max fbarriers/Workgrp:   32
#  Packet Processor uCode:: 68
#  SDMA engine uCode::      23
#  IOMMU Support::          None
#  Pool Info:
#    Pool 1
#      Segment:                 GLOBAL; FLAGS: COARSE GRAINED
#      Size:                    41737806(0x27cde4e) KB
#      Allocatable:             TRUE
#      Alloc Granule:           4KB
#      Alloc Recommended Granule:2048KB
#      Alloc Alignment:         4KB
#      Accessible by all:       FALSE
#    Pool 2
#      Segment:                 GLOBAL; FLAGS: EXTENDED FINE GRAINED
#      Size:                    41737806(0x27cde4e) KB
#      Allocatable:             TRUE
#      Alloc Granule:           4KB
#      Alloc Recommended Granule:2048KB
#      Alloc Alignment:         4KB
#      Accessible by all:       FALSE
#    Pool 3
#      Segment:                 GROUP
#      Size:                    64(0x40) KB
#      Allocatable:             FALSE
#      Alloc Granule:           0KB
#      Alloc Recommended Granule:0KB
#      Alloc Alignment:         0KB
#      Accessible by all:       FALSE
#  ISA Info:
#    ISA 1
#      Name:                    amdgcn-amd-amdhsa--gfx1103
#      Machine Models:          HSA_MACHINE_MODEL_LARGE
#      Profiles:                HSA_PROFILE_BASE
#      Default Rounding Mode:   NEAR
#      Default Rounding Mode:   NEAR
#      Fast f16:                TRUE
#      Workgroup Max Size:      1024(0x400)
#      Workgroup Max Size per Dimension:
#        x                        1024(0x400)
#        y                        1024(0x400)
#        z                        1024(0x400)
#      Grid Max Size:           4294967295(0xffffffff)
#      Grid Max Size per Dimension:
#        x                        2147483647(0x7fffffff)
#        y                        65535(0xffff)
#        z                        65535(0xffff)
#      FBarrier Max Size:       32
#    ISA 2
#      Name:                    amdgcn-amd-amdhsa--gfx11-generic
#      Machine Models:          HSA_MACHINE_MODEL_LARGE
#      Profiles:                HSA_PROFILE_BASE
#      Default Rounding Mode:   NEAR
#      Default Rounding Mode:   NEAR
#      Fast f16:                TRUE
#      Workgroup Max Size:      1024(0x400)
#      Workgroup Max Size per Dimension:
#        x                        1024(0x400)
#        y                        1024(0x400)
#        z                        1024(0x400)
#      Grid Max Size:           4294967295(0xffffffff)
#      Grid Max Size per Dimension:
#        x                        2147483647(0x7fffffff)
#        y                        65535(0xffff)
#        z                        65535(0xffff)
#      FBarrier Max Size:       32
#*** Done ***

WSLのOpenCV処理時間計測

AMD GPU OpenCV処理時間計測 と同じことを再度WSLでも行いました。
計測画像の入力にはUSBカメラを使用していたので、WSLでUSBカメラを認識させる手順を以下に示します(前回はGPUを認識していなかったので端折っていました)。

WSLでUSBカメラの使用

準備としてWSL側およびWindows側で必要なモジュールをインストールして、USBカメラ(C270)の存在を確認します。
USBカメラ(C270)はWSL側では見えませんが、Windows側ではBUSID 7-3に見えています。

(WSL側)
sudo apt install usbutils
lsusb                                                                                        ← WSL側にはUSBカメラが見えない
#Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
#Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

(Windows側)
winget install usbipd
usbipd list
#Connected:
#BUSID  VID:PID    DEVICE                                                        STATE
#7-3    046d:0825  Logi C270 HD WebCam                                           Not shared  ← Windows側でUSBカメラが見えている(他のデバイスは省略)

Windows側の操作でWSL側でUSBカメラが見えるようにする(WSLは起動した状態で行う)。

(Windows側)
usbipd bind --busid 7-3  (バインドは管理者で実行が必要)
usbipd list
#Connected:
#BUSID  VID:PID    DEVICE                                                        STATE
#7-3    046d:0825  Logi C270 HD WebCam                                           Shared      ← バインドするとSharedになる

usbipd attach --wsl --busid 7-3
usbipd list
Connected:
#BUSID  VID:PID    DEVICE                                                        STATE
#7-3    046d:0825  Logi C270 HD WebCam                                           Attached    ← アタッチするとAttachedになりWindows側からは使えなくなる

(WSL側)
lsusb
#Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
#Bus 001 Device 003: ID 046d:0825 Logitech, Inc. Webcam C270                                 ← WSL側でUSBカメラが見えるようになる
#Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

(再)AMD GPU OpenCV処理時間計測

下表の内容説明

  • 1回目だけの計測値は紛らわしいので端折りました
  • 処理画像の大きさはUSBカメラの画素数(640×480)
  • 数値は2~10回目の処理時間の平均値で、単位は全て[us]
  • cv::Matを使用したときはcpu、cv::UMatを使用したときはgpuと表現
  • OpenCV構築と計測プログラム構築はReleaseビルド

WSL計測値

func cpu gpu
image_resize 71 6
scaleabsolute 93 4
gamma_correct 90 389
histgram_equalize 113 9
color_space 80 7
gaussian_blur 153 1736
filter_sharping 246 10

Windows計測値

func cpu gpu
image_resize 75 5
scaleabsolute 108 6
gamma_correct 156 324
histgram_equalize 204 17
color_space 177 5
gaussian_blur 127 872
filter_sharping 296 20
  • CPUはWSLが若干速そうなものもあるが、GPUはWSLとWindowsは同等
  • gamma_correctとgaussian_blurがCPUよりGPUが遅くなる傾向もWindowsとWSLで同等

GPU(Radeon 780M Graphics)を、WSLでもWindowsと同じように使えることがわかりました。

参考サイト

USB デバイスを接続する

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?