このブログは、株式会社フィックスターズのエンジニアが、あらゆるテーマについて自由に書いているブログです。
ついに、ポータブルスーパーコンピュータと呼ばれて久しいParallellaが
国内でも容易に入手可能になりました。
Parallellaって何?って方は、PC Watchさんの記事をご覧いただければ
http://pc.watch.impress.co.jp/docs/news/20141110_675205.html
その凄さもそこはかとなく伝わるのではないでしょうか
というわけでParallellaをいじってみることにします。
公式サイト(http://www.parallella.org)
ドキュメント(http://www.parallella.org/board/)
サンプル(https://github.com/adapteva/epiphany-examples/)
まずはざっくりとしたアーキテクチャの解説ですが、たぶんすでにこの手のものはあらゆるところで解説されつくしているので、超絶ざっくりと
と、これだけで、ARM, 独自アーキテクチャのRISCプロセッサ、FPGAの3つの開発環境があるという、あそびがいのあるボードになっています
主にEpiphany-III(以下Epiphany)を触っていくつもりでいますが、FPGA部分のZynqとかは誰かがやってくれるんじゃないでしょうか(ブン投げ
https://github.com/adapteva/epiphany-examples/tree/2014.11/apps/hello-world
このHello worldは基本的なEpiphanyの使い方のエッセンスが含まれています
# ただしいくつか気になるところが…
というわけでソースコードを追いかけていきます
Epiphanyは基本的に、ホストプロセッサの処理の一部をEpiphanyで実行するというプログラミングモデルを取ります
一昔前で言えばCell/B.E.が一番近い?プロセッサです
まず、ホストプロセッサ上からEpiphanyの初期化を行います
e_init関数がEpiphanyの初期化を担当する関数です
e_platform_t platform;
e_init(NULL);
e_reset_system();
e_get_platform_info(&platform);
e_get_platform_info関数で、Epiphanyの情報がe_platform_t構造体に格納されます
e_mem_t emem;
char emsg[_BufSize];
e_alloc(&emem, _BufOffset, _BufSize);
OpenCLをご存じの方は、OpenCLのメモリオブジェクトをイメージしてもらえれば。アレとほぼ同等のイメージです
e_epiphany_t dev;
e_open(&dev, row, col, 1, 1);
e_reset_group(&dev);
e_load("e_hello_world.srec", &dev, 0, 0, E_TRUE);
usleep(10000);
そして燦然と輝くusleep…!
現状のSDK(Ver 5.xx系)では、終了通知については提供されていません
なので、ユーザー側でどうにかする必要がありますが、この方法についてはまた別項にて。
Epiphany側からデータを読むには、e_read関数を使用します。
e_read(&emem, 0, 0, 0x0, emsg, _BufSize);
先ほどe_alloc関数で作成したメモリ領域から、第6引数サイズを読み込み、第5引数の領域に書き込みます。
このe_alloc関数は、第1引数に与えるものによって挙動が変わるのですが、それはまた別の機会に
# さっきから別の機会多いな
終了してデータを読み終わったら、eCoreの役目は終了です。
eCoreは忘れずに解放してあげましょう
e_close(&dev);
e_free(&emem);
e_finalize();
このようにしてあげることで、確保したメモリが解放されます。またe_finalize関数でEpiphanyとの接続が終了します
eCore上のコードについては特に語るべきこともないぐらいシンプルに、バッファにHello worldって書いてるだけなので割愛!
という風に一から追いかけてみましたが、このHello worldにはいくつか気になる点があります
次回は、その気になる点に触れつつ、Epiphanyのアーキテクチャについてももう少し掘り下げて行こうと思います。
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...