annotate Gears/introduction/parallel_execution.md @ 107:22cd14055697

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