Avatar
SASANO Takayoshi
9479339eb118796a8d8e9b7c1ff6d34abf8cd0e4fe81b0d80372e2b1d2da7b12
OpenBSD(uaa@), Ham(JG1UAA), Ingress(Lv14, RES), Japanese(Sagamihara-city, Kanagawa) Another side: https://social.tchncs.de/@uaa npub1rarr265r9f9j6ewp960hcm7cvz9zskc7l2ykwul57e7xa60r8css7uf890 Messages from this Mastodon account can read via mostr.pub with npub1j3un8843rpuk4rvwnd7plaknf2lce58yl6qmpkqrwt3tr5k60vfqxmlq0w

これ良い。OpenCL Cで書いたコードを予めビルドできればerror -11に悩む心配がなくなる… https://github.com/koturn/oclc

test_vecだと

sgemv_accum16rows 160 cols 2 col_stride 1

sparse_sgemv_accum16 rows 32

こいつはSSE/AVX/NEON化はされているが…OpenCL化したらどうなるかというのは結構気になっていて。 https://github.com/drowe67/LPCNet/blob/master/src/vec.h

というか、この動作明らかにヘン。UHD730だと7秒毎、Arc770だと1秒毎にタイムスタンプが付いてくんだけど…それ以上の時間になってる。なんとなくなんだけど、長時間動作で落ちる系ってメモリリークの類だったりしないか?(それも簡単に再現できないやつ)

…テストプログラム、killedで落ちてる。

Sat Aug 12 02:52:18 2023 19 599545324

Sat Aug 12 03:03:34 2023 20 599926237

Sat Aug 12 03:13:27 2023 21 599044050

Sat Aug 12 03:20:28 2023 22 599798131

Sat Aug 12 03:30:45 2023 23 601436247

Sat Aug 12 03:36:21 2023 24 600044281

Sat Aug 12 03:44:41 2023 25 600336348

Sat Aug 12 03:56:29 2023 26 600504050

Sat Aug 12 04:04:55 2023 27 599742801

Sat Aug 12 04:23:35 2023 28 604521154

Sat Aug 12 05:36:35 2023 29 615542402

Killed

uaa@DESKTOP-251U0UF:~$

既にあるコードが何らかのアクセラレータの仕様を前提としていない以上、一旦GPU側のメモリにコピー→処理→CPU側のメモリへコピーという手順は不可避な気がする。んでもって、そのオーバーヘッドも多分あまり無視できないレベルかも。

うーん、あまり細かいデータばかりだとGPUとの受け渡しにかかわるオーバーヘッドが大きくなるから速度向上は狙えないような気がする。GPUがメインメモリ上のデータを直接触れるんなら話は変わるんだろうけど(できるの?)。

sgemv_accum16

rows 48 cols 512 col_stride 48

rows 48 cols 16 col_stride 48

rows 512 cols 16 col_stride 512

rows 128 cols 306 col_stride 128

rows 128 cols 384 col_stride 128

rows 128 cols 128 col_stride 128

rows 1152 cols 128 col_stride 1152

Arc A770、動き出しました。

しかしOpenCL版のdistributed.net clientは動きません。

clCreateBuffer()で-6(CL_OUT_OF_HOST_MEMORY)が発生し戻り値がNULLになってる。その領域に対し何かをしようとしてN/Aになってるがこの時にどういうエラーが出てるか、かなあ。そしてひたすらNULLに対して書き込みを試みた場合に何が起こるか、も要確認か。

そういえばUHD730でbwocl実行した場合、clEnqueueCopyBufferに失敗して測定結果がN/Aになるケースがありましたね…もしかして失敗するケースが重なるとおかしくなるというパターンなんでしょうか(今のところ問題なく動いちゃってますねえ)

uaa@DESKTOP-251U0UF:~$ ./cltest 0 0

Fri Aug 11 06:50:44 2023 6460102770

とりあえずテスト開始のメモ

bwoclそのものじゃないけど、簡略化したコード書いてちょっと試してるところ。タイムスタンプも表示させるようにして、何時間回すと落ちるかも分かるようにしてみたけど…大体この手のテストって、テストコード変えちゃうと問題が起こらなくなるとかそういうのがあるんだよなあ。

WSLg上の環境だけ落ちますねえ。テストプログラムをもう少し簡略化するなりして要点を掴んだものを作って、追いかけてみたいところですが…それやってるといつまで経ってもArcを載せられなくなってしまう。

これを延々と動くようにするとSEGV吐いて落ちる問題、問題を起こすWSLg上の環境だけでなく、Linux(Intel HD630, AMD Turks)でためしてみることにした。