我が家の家庭用PCにはグラボは刺さってない。
インテルのCPU内蔵のヤツで済ませてあり、前からTSMCのFINFETのプロセスで作ったローエンドのGPUが出たら買うと公言しているのだが、いまだ現れずじまいである。
しかし会社のPCには刺さっている。
こいつのCPUはXEONなので外付けのグラボが刺さっているのだが、とりあえず電磁界解析と熱流体解析のお絵かきCADが最低限動けばいいやなので、CAD用ローエンドということでQuadroのローエンドのヤツにしてある。
でだ。
よく考えれば会社のPCではCUDAを動かせるということに今さらながら気がついた。
では!
せっかくだからCUDAで遊んでみようではないか!!
というのが今回やったこと。
会社や部署にもよるだろうが、研究開発職というのは多少フリーダムなところがあり、こうやって遊んでいるようでいてスキルアップも兼ねるようなことを多少やってても問題ないのだった。
まずベンチマークとして行列演算するプログラムをCPUのシングルスレッドで作成。
つぎにCUDAに移植。
すると、なんと・・・!
CPUの2倍遅いものができましたとさ・・・。
なんてこったい!?
・・・ということでしばらくいじって改良を加えた。
いろいろやってみたところ、CPUの10数倍の速度というところまで改良できた。
まあこれなら悪くないのかも。
わりと良いCPUのシングルスレッドに対してローエンドのGPUならこんなもん?
・・・と思っていたのだが。
同じ動作をするNVIDIA作成のライブラリがあるので、それを直接叩いてみた。
するとだな。
なんとCPUの100倍の高速化を実現。
速い!!!!!!
ホントにこれ計算できてるんだろか?と疑問に思い、CPUの演算結果と比較するプログラムを作ったのだが、たしかに計算できている。
(floatだと積和演算器のせいか誤差が見えたがdoubleでは問題ない範囲。100倍速はfloatのほう)
グラボ恐るべし・・・。
グラボを選ぶときは、クロックの周波数とCUDAコアの数を見ればだいたい見比べられると思っていたのだが、それは達人が作ったサブルーチンを使ったときだけだった。
とりあえずルールはわかったという程度の我輩のようなシロウトがGPUを叩く場合、CUDAコアの数ではなくメモリのバンド幅のほうが支配的になるらしい、ということがよくわかった。
だが。
話しはこれでは終わらない。
このベンチマークで驚くほど違いが出たというのをグラボに詳しいAさんとBさんに話してみた。
Aさんはふつうの事務職だが、家でFPSなどを堪能されており、サーバーまでのレイテンシがどうのというほどのガチゲーマー。
Bさんは我輩と同じく研究開発職でプログラミングも多少こなし、家では動画加工でマシンの性能を使い倒している歩くベンチマーカー。
グラボに詳しいこと以外まったく共通点のない2名である。
だが、実は全く同じ反応が返ってきてちょっと驚いた。
「ほら、そうでしょ? グラボってすごいんだよ! うちではさ・・・」
と、2名とも自分の世界に共感してくれたことを誇らしく感じ、自らの経験譚を雄弁に語ってくれる反面、
「俺は使うだけで自分が直接叩いたことはないんだけどさ・・・」
と、2名とも自分で叩けるヤツに対して若干引け目を感じている模様。
いや、我輩だって全くの無知なドシロウトからちょっとだけ使えるシロウトにレベルアップしたにすぎないので、人様に引け目を感じていただけるほどスキルは無いのだが。
ドラクエでいうとメラが撃てるようになった程度だぜ(笑)。
よく考えればまあ、ヘッタクソなシロウト工作でもいいから自分で試しに作ってみたヤツに対し、ユーザーとしてそれをどう使うかのほうにいるヤツらが若干引け目を感じるというのは、他の世界でもときどき見られる現象である。
アマチュア無線しかり、オーディオしかり、マンガしかり、ゲームしかり、小説しかり、投稿動画しかり。
インテルのCPU内蔵のヤツで済ませてあり、前からTSMCのFINFETのプロセスで作ったローエンドのGPUが出たら買うと公言しているのだが、いまだ現れずじまいである。
しかし会社のPCには刺さっている。
こいつのCPUはXEONなので外付けのグラボが刺さっているのだが、とりあえず電磁界解析と熱流体解析のお絵かきCADが最低限動けばいいやなので、CAD用ローエンドということでQuadroのローエンドのヤツにしてある。
でだ。
よく考えれば会社のPCではCUDAを動かせるということに今さらながら気がついた。
では!
せっかくだからCUDAで遊んでみようではないか!!
というのが今回やったこと。
会社や部署にもよるだろうが、研究開発職というのは多少フリーダムなところがあり、こうやって遊んでいるようでいてスキルアップも兼ねるようなことを多少やってても問題ないのだった。
まずベンチマークとして行列演算するプログラムをCPUのシングルスレッドで作成。
つぎにCUDAに移植。
すると、なんと・・・!
CPUの2倍遅いものができましたとさ・・・。
なんてこったい!?
・・・ということでしばらくいじって改良を加えた。
いろいろやってみたところ、CPUの10数倍の速度というところまで改良できた。
まあこれなら悪くないのかも。
わりと良いCPUのシングルスレッドに対してローエンドのGPUならこんなもん?
・・・と思っていたのだが。
同じ動作をするNVIDIA作成のライブラリがあるので、それを直接叩いてみた。
するとだな。
なんとCPUの100倍の高速化を実現。
速い!!!!!!
ホントにこれ計算できてるんだろか?と疑問に思い、CPUの演算結果と比較するプログラムを作ったのだが、たしかに計算できている。
(floatだと積和演算器のせいか誤差が見えたがdoubleでは問題ない範囲。100倍速はfloatのほう)
グラボ恐るべし・・・。
グラボを選ぶときは、クロックの周波数とCUDAコアの数を見ればだいたい見比べられると思っていたのだが、それは達人が作ったサブルーチンを使ったときだけだった。
とりあえずルールはわかったという程度の我輩のようなシロウトがGPUを叩く場合、CUDAコアの数ではなくメモリのバンド幅のほうが支配的になるらしい、ということがよくわかった。
だが。
話しはこれでは終わらない。
このベンチマークで驚くほど違いが出たというのをグラボに詳しいAさんとBさんに話してみた。
Aさんはふつうの事務職だが、家でFPSなどを堪能されており、サーバーまでのレイテンシがどうのというほどのガチゲーマー。
Bさんは我輩と同じく研究開発職でプログラミングも多少こなし、家では動画加工でマシンの性能を使い倒している歩くベンチマーカー。
グラボに詳しいこと以外まったく共通点のない2名である。
だが、実は全く同じ反応が返ってきてちょっと驚いた。
「ほら、そうでしょ? グラボってすごいんだよ! うちではさ・・・」
と、2名とも自分の世界に共感してくれたことを誇らしく感じ、自らの経験譚を雄弁に語ってくれる反面、
「俺は使うだけで自分が直接叩いたことはないんだけどさ・・・」
と、2名とも自分で叩けるヤツに対して若干引け目を感じている模様。
いや、我輩だって全くの無知なドシロウトからちょっとだけ使えるシロウトにレベルアップしたにすぎないので、人様に引け目を感じていただけるほどスキルは無いのだが。
ドラクエでいうとメラが撃てるようになった程度だぜ(笑)。
よく考えればまあ、ヘッタクソなシロウト工作でもいいから自分で試しに作ってみたヤツに対し、ユーザーとしてそれをどう使うかのほうにいるヤツらが若干引け目を感じるというのは、他の世界でもときどき見られる現象である。
アマチュア無線しかり、オーディオしかり、マンガしかり、ゲームしかり、小説しかり、投稿動画しかり。