プラグイン集

無料ブログはココログ
2021年8月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

サンプルJS

  • ユーロバカ一代の締切
    ・・・初期化中・・・

« 2021年5月 | トップページ | 2021年8月 »

2021年7月

2021年7月17日 (土)

Intel oneAPI をインストールした

Intel oneAPI とは、 Intel Parallel Studio XE の後継のコンパイラスイートである。
基本的には、C++コンパイラ、オプションで fortran コンパイラが20万円~買える。
付随ツールとしてプロファイルを作成する VTune や MKL 、 TBB と言った機能スイートがある。

ソフトの詳細は、日本の代理店である、エクセルソフトさんに詳細を譲る。

真面目に買ったらん百万単位のコンパイラスイートが何と、無料開放されたのだ。
URL: https://software.intel.com/content/www/us/en/develop/articles/free-intel-software-developer-tools.html

無料と聞いて正直信じられなかったが、URL見て、" Free for All Developers " 、「 全ての開発者の皆さんはご自由にお持ち下さい。 」だと。

規約をざっと確認したところ、普通のコンパイラスイートとそん色がない。
と言うか、エクセルソフトさんのIntel製品を取り扱っている価値がぶっ飛んでしまう。
有料版との差分は、日本語サポートの有無・サポート優先権・ダウングレード権、アップグレード権、SA権が無い、
コンパイラにバグがあってもしばらくそのまま、コンパイラに個人情報ブッコ抜き機能があったとしてもそのままで保証なしぐらい。
要するに、コンパイラをそのまま使うだけの、サンデー開発者にとっては全く気にする事でない部分しか、
パッケージソフトと違いが無いのだ・・・。
※いつ提供を終了するかもわからないし、いつ有料化して、既存のユーザーは金払えと言ってくるか分からないのはリスクではあるが・・・。

尚、 Intel oneAPI のフル機能を活用するのは難しい。
最低限、第9世代以降のIntel社製Core i シリーズのCPU( Celeronはダメよ。 )AVX2 や AVX512 が使える 、
Xeon であればスケーラブルプロセッサにDLBoostが付いていること、
FPGA、GPU をつかうのであれば、「 Iris Xe MAX  ( DG1 ) 」が入っていることが望ましい。
メモリもFPGA使用時は、64GBのRAMを要求されることもある。( 動作要件

ちなみに、手元のパソコンのCPUは Core i7 3520M ( 第3世代 )でかろうじてAVX無印に対応しているだけである。
よっぽど性能クリティカルな用事があるような場合でないと入れる意味が無い。

OSの要件は、LinuxのUbuntuであれば20.04.02を入れれば、そこまで難しくはなさそう。
一方、 CentOS が Stream になって以降、落ち着けない RedHat クローンはインストールが面倒なようだ。
Windows であれば、 Windows10 の細かい世代は要求していない。OSは64bit の必要があるが。
Visual Studio 2017 以降であれば、開発環境は問題ないようだ。

手元のパソコンの Windows10 21H1 なので試しに入れてみることができる。
多分、CPUの拡張命令を見ても速くなることはほぼないでしょう。
普通にGCCやVC++で事足りる。まぁ、それじゃ記事にする理由が無いのでね・・・。

インストールは特に迷う部分は無いが、長い。UAC制御の確認画面が上がってくるまでに2分ぐらいはかかる。
BaseToolkit のインストールにSSDで1時間は軽くかかった。
HPCToolKitも30分はかかったかな。

今のところシステムパスに変更を加えることはしないので、
iccとかifortだけでコンパイラを動かしたいのであれば、パスを手動で通す必要がありそうだ。
intelPythonも入っていて、バージョン情報は「 Python 3.7.10 :: Intel Corporation 」だった。
自分用の Pythonha3.8 使ってるんだけどな。パスの邪魔してないしまぁ、いいか。
iccコマンドはicxに代わっていて、バージョンは、「 Intel(R) oneAPI DPC++/C++ Compiler for applications running on Intel(R) 64, Version 2021.3.0 Build 20210619 」、
ifortはifxに代わっていて、バージョンは「Intel(R) Fortran Compiler for applications running on Intel(R) 64, Version 2021.3.0 Beta Build 20210619 」だった。

パフォーマンステストは、実行していないので、とりあえずここまで。

2021年7月18日追記、
1000×1000の行列積計算を実行するプログラムを自分の手でPythonとC言語で組んで比較した。
時間測定範囲は、プログラム開始から終了までをmsys2の/usr/bin/time.exe -p で測定している。
行列の初期化から、解のチェックの時間までもちろん測定時間に含んでいる。

20210718_mutmul_speed_test

icc( Linux )、icl( Windows )の旧コンパイラが最速を記録した。
1秒程度で1000×1000の行列積の計算を終わらせてしまう。

VisualC++が20秒ぐらいで計算が終わるように行列サイズを調整したので、まぁ、こんなものだと思う。
mingwのgccは本来Linux系のところをWindows系バイナリを出力させているので、VC++より若干遅くて普通だと思う。
VC++もgccも-O2オプションでほぼ同タイムが出ているので、処理系にあったコンパイラの性能と言える。

iccがチート性能と言われるゆえんはこれで、単純コンパイルで1/20の実行時間ですよ。
圧倒的性能じゃないか。

一方でデータパラレルが、GCC -O2 、 VC++ -O2 レベルのスピードしか出ていない。
出来立てほやほやコンパイラだからこんなものか?
それとも、IvyBridgeじゃデータ並列の性能が出せないと言う事か?

Pythonの方に注目すると、Python2.7が速いのはちょっと意外。
Python3.8はかなり進化しているし、xrangeではなくrangeを使っているので、Python2.7の方が不利になるはずなのに。
さらに言えば、Python2.7は日本語処理の都合で、標準入出力・エラー出力の文字コード切り替え時間も含まれている。
それなのに、Python3.8より早いというのはやはり不思議だ。

残念なのはIntel Python3.7だろう。公式サイト
「Intel Distribution for Python
Develop fast, performant Python code with this set of essential computational packages including NumPy, SciPy, scikit-learn, and more. 」
翻訳、
「Intel 配布の Python
高速開発、高性能Pythonコード(基本計算パッケージ Numpy、Scipy、Scikit-learnとその他を含む)。」
って言ってるのに。
ん!!翻訳してみると、高速なのは開発であって、計算速度が高速とは言ってない??
ん~、そう言う事にしておこうか。

一応、各ソースコードを添付する。CとPython大きい違いは、引数処理の違いがある。
C言語のgetoptはUnistd.hなので、Windowsでは使えない。
コマンドライン引数処理がC言語の方が軽くなっている。
それ以外の基本的な計算コードに差は無い(と思いたい)。

Pythonコード:ダウンロード - matmul.py

Cコード:ダウンロード - matmul.c

ハイパフォーマンスコンピューティングをかじっている人なら、最適化なしのオーソドックスな行列積計算コードだと分かると思う。
これをチューニングすれば、数倍早くなるが、サンデープログラマが普通にコーディングすればこうなると思う。

以上、2021年7月18日追記部分。

2021年7月10日 (土)

ゲーム業界行けなかった私から言える事。

https://twitter.com/gamemakerdiary/status/1413185724849954817 への回答を書きたいと思う。

今のステータスは、見栄で月収12万円(年収140万円)のIT派遣です。

目的は何でしょう?

ゲーム会社に入ることが目的であれば、そういうゲーム業界用の就活エージェントを付けてしまうのが良いのではないでしょうか。
金があるのであれば、ゲーム会社を買収して取締役になると言う手段もあります。

作りたいゲームがあるから、ゲーム会社に入るのでしょうか?
例えば、ドラクエの新作を俺が作りたいからスクエニに入りたいとか、
マリオ作りたいから任天堂に入りたいとか。

ごめんなさい。この手のルートは知らないです。
自分の知人は誰一人この手の成功者が居ません。

作りたいゲームがあってその実現のためにゲーム会社に入りたいと言う事でしょうか。
確かにゲーム会社はゲーム制作ノウハウの塊なので、入れてしまえば特急コースなのは間違いないと思いますが・・・。

引用RTなどで言われている通り猛烈に困難です。私もダメでした。

以下は、ゲーム会社に入らず私的にゲームを作る前提で記載します。

ーーー

Unity で自分の作品がほぼリリース段階で、

  • ゲームエンジンは有利にならない
  • C言語やるべき
  • 論理をまず勉強すべき

といろいろな情報が入ってきて混乱しているとのことですね?

派遣先の上司の言葉を引用すれば「道具に魅了されいるんじゃねぇ。全部目的を叶えるための手段やぞ。ゴールとちゃう。」です。

冒頭に言った通り、あなたの「目的」はなんですか?
ゲームを作りたいと言う一言はダメです。それでは、情報商材屋のボタン押したら動く、ゲームもどきのカモにされて終わりです。

欲しい回答としては、

  • スマホで動くドラクエウォークのアイマス版が欲しい
  • 高性能パソコンで動かす、飛行機運転ゲームが欲しい
  • ノートパソコンのwebカメラで、超リアル遊戯王をやりたい

と言った、具体的な話です。個人のゲーム制作と言う目的を実現できれば、
UnityだろうがCとDirectX( これはWindowsパソコンゲーム向け )だろう、Linux+Java( 例:Java版Minecraft )だろうが、構わないのです。

なので、上司の「道具に魅了されいるんじゃねぇ。」と言う事です。
出口のデバイスをはっきりさせて、何をどうしたいかを決めることが必要です。

では何をやればよいか、個人的の見解としては「自分の好きなことやる」です。
大学生とのことですが、物理・数学の単位を積極的に取っているでしょうか?
正直言うと、楽と言われる文系科目に逃げているのではないですか?

私は、線形代数と行列は頑張りましたが、統計学は逃げました。
そうしたら、仕事で機械学習のプログラム組んでと言われました。
機械学習は統計学をバリバリ使うので、高い壁ができてしまいましたと。

何が言いたいかと言うと、モチベーションを維持するために、好きなことをやればよいが、
いずれ、論理の壁が立ちはだかることになる。と言う事です。

リアル遊戯王でカード背面から正面にひっくり返したり、カードのキャラクターを3Dで召喚すると言った事であれば、
Unityの機能で十分対応できるでしょう。

一方で、飛行機運転のシミュレーターで、俺のソフトはこれが売りなんだという特別な計算が必要であれば、
物理方程式を自力でプログラムする必要があります。
マリオのような2D移動であれば、ボタン押している間一定の速度で移動でも、あまり問題になりません。
飛行機運転ゲームで飛行機が一定の速度でしか動けないの出れば、問題になります。

理論をどれくらい使うかは、目的とするゲーム制作の内容に依存すると言う事です。
簡単な1次元方程式で済む場合もありますし、行列・微積分を駆使する面倒な方程式を解かせる場合もあります。

自分のソフトを作ってみると、ガックガクの動作でゲームなんてとても言えないと言う事もあります。
そうなったら、より動作の速いC言語やC++、CPUのマルチスレッド機能や、
さらに踏み込んだCPUの拡張命令のSSE、AVXの利用に踏み切ることに成ります。

つまり、必要になったらC言語なり理論なりは勉強すればいいんです。

勉強が苦手なのに理論やC言語ばっかりやったら、心折れて挫折します。
目標に近づいている実感を持てる、「好きなこと」をやる方が続きます。

ーーー

まとめ

目的は何ですか?

Unityにしろ、C言語にしろ、理論にしろ、ただのゲーム作りのための道具です。

目的を達成するのに必要ならばやる。不要ならば、自分の欲しいことをやればいいんです。

以上。

« 2021年5月 | トップページ | 2021年8月 »