0
|
1 # parallel_executionイントロダクション
|
|
2
|
|
3 Gears/Gearsの中心的なプロジェクト`parallel_execution`の入門
|
|
4
|
|
5 # 例題を追加したい
|
|
6
|
|
7 `parallel_execution`の例題はCMakeでビルドされている。
|
|
8
|
|
9 新しい例題(プロジェクト)を追加したい場合は、CMakeLists.txtに追記する必要がある。
|
|
10
|
|
11 ## CMakeLists.txtへの追記
|
|
12
|
|
13 ファイル末尾に次のような記述をする。
|
|
14
|
|
15 ```cmake
|
|
16 GearsCommand(
|
|
17 TARGET
|
|
18 sample
|
|
19 SOURCES
|
|
20 examples/sample/main.cbc TaskManagerImpl.cbc CPUWorker.cbc SynchronizedQueue.cbc AtomicReference.cbc
|
|
21 )
|
|
22 ```
|
|
23
|
|
24 `GearsCommand`はCMakeのマクロであり、ここにターゲット名と必要なソースを列挙することでビルド対象に加わる。
|
|
25 マクロの意味は次の通り。
|
|
26
|
|
27 - `TARGET`
|
2
|
28 - プロジェクトの名前。 `make sample`などでビルド出来るようになり、生成されたバイナリの名前にもなる
|
|
29 - `SOURCES`
|
|
30 - プロジェクトに含める`.cbc`や`.c`などのCファイル
|
|
31 - ヘッダはここに含めない
|
|
32
|
|
33 ### 必ずいれないといけないCbCのソース
|
|
34
|
|
35 ContextやTaskManager関連の操作で必須となる
|
|
36
|
|
37 - `TaskManagerImpl.cbc`
|
|
38 - `CPUWorker.cbc`
|
|
39 - `SynchronizedQueue.cbc`
|
|
40 - `AtomicReference.cbc`
|
|
41
|
|
42 ## プロジェクトを始める
|
|
43
|
|
44 `examples`の下にディレクトリを作成し、その中に`main.cbc`を置く
|
|
45 - 別に`main.cbc`である必要は無いけれど、わかりやすい
|
|
46 - 他の`.cbc`もそのディレクトリ中に置く
|
|
47 - Gears全体に関わるものはトップディレクトリ(`CMakeLists.txt`があるディレクトリ)に置く
|
|
48
|
|
49 ## Interfaceを書く
|
|
50
|
|
51 Interfaceを使いたい場合は(当然だけど)型定義から始める必要がある
|
|
52 - context.hへは自動で付け加えられる
|
|
53
|
|
54 生成用のPerlスクリプトがあるので、それを使うと最低限の雛形が生成される
|
|
55 - `perl tools/static_gen_header.pl --interface ExampleInterface`
|
|
56 - `-w`をつけるとファイル生成してくれる
|
|
57 - `-o`の後にファイル名とパスを指定できる
|
|
58 - static_gen_header.plが置いてある場所はプロジェクトごととかで異なるので頑張って探す
|
|
59
|
|
60 Interfaceの詳しい書き方は[Interface入門](https://growi.cr.ie.u-ryukyu.ac.jp/Gears/introduction/interface)を見ること
|
|
61
|
|
62 ## Interfaceの実装の型
|
|
63
|
|
64
|
|
65 生成用のPerlスクリプトがあるので、それを使うと(ry
|
|
66 - `perl tools/static_gen_header.pl --interface ExampleInterface --impl ExampleInterfaceImpl`
|
|
67 - `-w`をつけるとファイル生成してくれる
|
|
68 - `-o`の後にファイル名とパスを指定できる
|
|
69 - static_gen_header.plが置いてある場所はプロジェクトごととかで異なるので頑張って探す
|
|
70
|
|
71 ## 実装のcbcを作る
|
|
72
|
|
73 生成用のPerlスクリプトがあるのd(ry
|
|
74
|
|
75 - `perl tools/trans_impl.pl examples/sample/ExampleInterfaceImpl.h`
|
|
76 - 実装のヘッダファイルを入力する
|
|
77 - オプションは`trans_impl`と同じ様な世界観 |