プログラマーのための 入 門 のデータ 解 析 とアルゴリズム 開 発 機 能 を 活 用 して 開 発 を 加 速 しましょう! マスワークス 中 川 慶 子 2013 The MathWorks, Inc. 1
プログラマーのための によるアルゴリズム 開 発 トピック 入 門 : アルゴリズム 開 発 のフロー の 外 部 インターフェイス のアルゴリズムをに 実 装 事 例 車 線 認 識 のアルゴリズムを 開 発 組 み 込 み 検 証 2
プログラマーのための によるアルゴリズム 開 発 ML loadlibrary MEX ML Engine C code DLL 3
アルゴリズム 開 発 フロー 仕 様 研 究 設 計 Explore and discover Gain insight into problem Evaluate options, trade-offs 設 計 複 雑 化 テスト テストと 検 証 導 入 Migrate design to production Optimize performance Deploy / Integrate / Test Verilog.exe.NET.dll Java VHDL 4
車 線 認 識 システムをつくってみましょう 車 載 カメラ 画 像 の 処 理 車 線 認 識 のための アルゴリズムの 試 作 アルゴリズムを ストリーミングビデオに 組 み 込 み 5
アルゴリズム 設 計 のための インタラクティブなアルゴリズム 開 発 環 境 大 規 模 プログラムの 編 集 とデバッグ パフォーマンスのプロファイル レポート パブリッシュ 機 能 アプリケーションに 特 化 した ツールボックス 6
どこまでを 使 ったことがありますか? 1. スクリプト 2. 関 数 3. ベクトル 化 4. ハンドル グラフィックス 5. 関 数 ハンドル 6. 並 列 計 算 ( 例, parfor) 7. オブジェクト 指 向 プログラミング 7
システムオブジェクトとは? Simulinkでのシステム 設 計 データI/Oのメソッドが 充 実 した オブジェクト リアルタイム 処 理 データのストリーミング 処 理 各 応 用 分 野 に 特 有 のメソッド 固 定 小 数 点 演 算 Computer Vision System Toolbox DSP System Toolbox Phased Array System Toolbox コードから Cコードへの 自 動 変 換 に 対 応 Communications System Toolbox 8
プログラマーのための によるアルゴリズム 開 発 ML loadlibrary MEX ML Engine C code DLL 9
Cのライブラリを 直 接 呼 び 出 す ファイルリスト FooMath.h FooMath.dll : Header File : DLL File ライブラリに 定 義 されている 関 数 double void double add2_num (double x); add2_vec (double *x, int size); norm_vec3d (struct vec3d v); 10
例 1) 引 数 がスカラーのとき 対 象 の C 関 数 : double add2_num (double x); 呼 出 手 順 : loadlibrary('foomath.dll', 'FooMath.h') c = calllib('foomath', 'add2_num', 5) ライブラリ 名 関 数 名 引 数 unloadlibrary( FooMath ) 12
例 2) 引 数 がポインターのとき 対 象 の C 関 数 : void add2_vec (double *x, int size); 呼 出 手 順 : x = [1 2 3 4]; px = libpointer('doubleptr', x); calllib('foomath', 'add2_vec', px, 4) y = get(px, 'Value') clear px 13
例 3) 引 数 が 構 造 体 のとき 対 象 の C 関 数 : double norm_vec3d (struct vec3d); 呼 出 手 順 : v.x = 1.0; v.y = -2.0; v.z = 3.0; vc = libstruct('vec3d', v) d = calllib('foomath', 'norm_vec3d', vc) clear vc 14
プログラマーのための によるアルゴリズム 開 発 ML loadlibrary MEX ML Engine C code DLL 15
MEX 関 数 multiply_scalar_mex.c コンパイル multiply_scalar_mex.mexw32 17
を Wrap して の 関 数 にする void mexfunction (int nlhs, mxarray *plhs[], int nrhs, const mxarray *prhs[]){ /* 入 力 変 数 1 */ double* x = mxgetpr(prhs[0]); int m = mxgetm(prhs[0]); int n = mxgetn(prhs[0]); /* 入 力 変 数 2 */ double c = mxgetscalar(prhs[1]); /* 出 力 変 数 */ plhs[0] = mxcreatedoublematrix(m, n, mxreal); double* y = mxgetpr(plhs[0]); /* 計 算 部 分 */ multiply_scalar(m, n, x, c, y); MEX 関 数 } 18
プログラマーのための によるアルゴリズム 開 発 ML loadlibrary MEX ML Engine C code DLL 23
アルゴリズム 開 発 フロー 仕 様 研 究 設 計 Explore and discover Gain insight into problem Evaluate options, trade-offs 設 計 複 雑 化 テスト テストと 検 証 導 入 Migrate design to production Optimize performance Deploy / Integrate / Test Verilog.exe.NET.dll Java VHDL 24
Cからを 呼 び 出 す その1: ハーネスの 検 証 正 しいコードを 利 用 して ハーネスを 検 証 Engine により Cとを 連 携 25
Engine: からを 起 動 する C++ からでプロットする 例 : www.codeproject.com/samples/matlabeng.asp 26
プログラマーのための によるアルゴリズム 開 発 ML loadlibrary MEX ML Engine C code DLL 27
アルゴリズム 開 発 フロー 仕 様 研 究 設 計 Explore and discover Gain insight into problem Evaluate options, trade-offs 設 計 複 雑 化 テスト テストと 検 証 導 入 Migrate design to production Optimize performance Deploy / Integrate / Test Verilog.exe.NET.dll Java VHDL 28
Cからを 呼 び 出 す その2: ハーネスにCコードを 取 り 込 む ハーネスにCコードを 取 り 込 む Coderを 使 って 自 動 生 成 したCコードを 利 用 する 29
Coder Cのソースコードを 生 成 します 30
からCへ 自 動 翻 訳! iterate Algorithm Design and Code Generation in verify / accelerate Coderを 使 うと で 一 貫 した 設 計 ができる アルゴリズムを 迅 速 にコードにできる 検 証 が 容 易 でのアルゴリズム 開 発 に 工 数 を 割 ける 31
Cとは 違 うので 型 の 異 なるデータに 対 してはそれぞれのCコードが 必 要 データサイズを 指 定 はダイナミックでCはスタティック 入 出 力 のデータ 型 を 指 定 7 Lines of 107 Lines of C 32
全 ての 関 数 や 機 能 が Cコード 化 に 対 応 しているわけではありませんが システムオブジェクトをはじめ バージョンアップごとに 対 応 関 数 は 増 えています! 行 列 データ 型 演 算 子 制 御 文 関 数 Matrix operations N-dimensional arrays Subscripting Frames Persistent variables Global variables Complex numbers Integer math Double/single-precision Fixed-point arithmetic Characters Structures Numeric classes Variable-sized data System objects Arithmetic, relational, and logical operators Program control (if, for, while, switch ) functions and sub-functions Variable length argument lists Function handles Supported algorithms > 400 operators and functions > 200 System objects for Signal processing Communications Computer vision 33
Coder 利 用 例 ソフトウェアエンジニアに 渡 す のシミュレーションに アルゴリズムを 組 み 込 む 自 作 プログラムの 高 速 化 (via MEX) 組 み 込 みプロセッサにアルゴリズムを 実 装 (Embedded Coder, HDL Coder) 34
アルゴリズム 開 発 フロー 仕 様 研 究 設 計 Explore and discover Gain insight into problem Evaluate options, trade-offs 設 計 複 雑 化 テスト テストと 検 証 導 入 Migrate design to production Optimize performance Deploy / Integrate / Test Verilog.exe.NET.dll Java VHDL 35
プログラマーのための によるアルゴリズム 開 発 ML loadlibrary MEX ML Engine C code DLL 36
Cからを 呼 び 出 す その3: Cの 共 有 ライブラリを 作 りましょう ハーネスにをライブラリを 組 み 込 みましょう Compilerを 使 ってCの 共 有 ライブラリ を 生 成 して 使 います 37
によるライブラリ 配 布 Toolboxes 1 Desktop End-User Machine 2 Compiler.dll 3 38
Compiler によるアプリケーション 配 布 コードを 渡 す Compiler をお 持 ちでない 方 との 共 有 スタンドアロン 実 行 ファイル Builder EX Builder JA Builder NE 共 有 ライブラリ ソフトウェア コンポネント.exe.dll.lib Excel Java Web.NET 39
Coder と Compiler Coder Compiler.exe.dll.exe.lib.dll 40
Compiler と Coder Compiler Coder 出 力 実 行 形 式 ソフトウェアコンポネント Cコード 対 応 関 数 全 て 一 部 ライブラリの 追 加 Compiler Runtime (MCR) なし 対 応 toolbox ほとんどすべて 一 部 ライセンス 無 償 無 償 拡 張 Builder 製 品 群 Embedded Coder 41
まとめ ML loadlibrary MEX Cライブラリの 取 り 込 み Cコードを 関 数 へ 変 換 (コンパイル) ML Engine C code DLL から を 起 動 Coder コードを コードに 変 換 Compiler コードを ライブラリに 変 換 42
まとめ 開 発 コストの 節 約 によるアルゴリズム 開 発 ハイレベル 言 語 豊 富 な 既 成 の 関 数 Toolbox 簡 便 な 導 入 展 開 Compiler による アプリケーション 配 布 Coder による ANSI C コード 生 成 アプリケーションの 配 布 ライセンス 不 要 仕 様 研 究 設 計 Explore and discover Gain insight into problem Evaluate options, trade-offs 導 入 Migrate design to production Optimize performance Deploy / Integrate / Test Design Test Elaborate.NET Verilog.dll.exe Java VHDL テストと 検 証 43
誰 でもが 学 び 易 いシンプルな 言 語 変 数 宣 言 不 要 型 の 存 在 を 意 識 しない プログラムがシンプルに 見 通 しよくなる インポート 不 要 ライブラリの 存 在 を 意 識 しない 使 いたい 関 数 がどこにあるかも 考 えない コンパイル 不 要 待 ち 時 間 なし 短 時 間 なデバッグ 可 能 ソースコードの 依 存 関 係 などもなし オブジェクト 不 要 クラス オブジェクトなどの 概 念 も 意 識 しない 様 々なレベルの 人 が 一 緒 に 使 える オブジェクトも 使 えます 49
多 言 語 からを 呼 ぶことができます Engine interface Fortran Automation server COM.NET Fortran.NET COM 50
から 多 言 語 を 呼 ぶことができます C および Fortran 対 応 API >> mex mycode.c C 共 有 ライブラリの 取 り 込 み >> loadlibrary( foo', foo.h') COM クライアント >> actxserver('excel.application').net インターフェイス >> NET.addAssembly('System.Speech') C/C ++ Fortran COM.NET Java Java インターフェイス >> java.lang.string('boo') 51
ハードウェアとの 接 続 Data Acquisition Toolbox Plug-in data acquisition boards Image Acquisition Toolbox Image capture devices Instrument Control Toolbox Electronic and scientific instrumentation Interfaces for communicating with everything 52
Simulinkからコードを 呼 ぶには? S-Function C/Fortran 言 語 によるSimulinkカスタムブロック 作 成 (C++は 公 式 には 非 対 応 ) ハンドコーディング S-Function Builderブロック Legacy Code Tool Stateflow コンフィグのカスタムコード 取 り 込 み 機 能 53
テクニカル サポート リソース 100 名 を 超 えるサポートエンジニア 北 米 欧 州 アジアで 現 地 サ ポート 総 合 的 な 製 品 に 特 化 したWebサ ポートリソース 高 い 顧 客 満 足 度 24 時 間 以 内 に70% 問 題 解 決 80%のお 客 様 が80-100%の 満 足 度 と 回 答 54
トレーニング コンサルティング サービス 投 資 効 果 トレーニング サービス 定 期 トレーニング 東 京 名 古 屋 大 阪 にて 定 期 開 催 基 礎 応 用 専 門 コース オンサイト トレーニング お 客 様 サイトにて 開 催 ご 要 望 に 応 じて3つのレベルでカリキュラム のカスタマイズが 可 能 投 資 対 効 果 の 最 大 化 コンサルティング サービス カスタム Jumpstart 顧 客 モデルをベースにしたアドバイザリ 他 Advisory Service 顧 客 Project に 合 ったアドバイザリ 他 Project 顧 客 要 求 に 応 じた 成 果 物 開 発 業 務 に 即 した ツール 利 用 を 実 現 55
/Simulinkユーザの オープンコミュニティー 来 訪 者 数 662,000 件 / 月 ファイルエクスチェンジ コード Simulinkモデル 及 びドキュメント を 含 む フリーなファイルアップロード/ダウンロード ファイルの 評 価 コメント 及 び 質 問 投 稿 9,000 以 上 のファイル 一 月 あたり400 以 上 の 投 稿 一 日 あたり25,500ものダウンロード ニュースグループ /Simulinkに 関 する 技 術 討 論 の 場 としての ウェブフォーラムやニュースグループ 一 日 あたり 約 200 件 の 書 込 み ブログ 製 品 開 発 に 関 連 する 主 なMathWorks 開 発 者 からの 投 稿 blogs.mathworks.comにアクセスして 下 さい Based on February 2009 data www.mathworks.com/matlabcentral 56
ご 参 加 ありがとうございました! 製 品 情 報 www.mathworks.com イベント:セミナー ウェブセミナー www.mathworks.com/events トレーニング www.mathworks.com/training 価 格 評 価 版 のお 問 い 合 わせ http://www.mathworks.co.jp/company/aboutus/contact_us/conta ct_sales.html 57
2013 The MathWorks, Inc. 58