view Gears/introduction/parallel_execution.md @ 134:e965a4b3e697 default tip

backup 2023-11-14
author autobackup
date Tue, 14 Nov 2023 00:10:04 +0900
parents b6c284fd5ae4
children
line wrap: on
line source

# parallel_executionイントロダクション

Gears/Gearsの中心的なプロジェクト`parallel_execution`の入門

# 例題を追加したい

`parallel_execution`の例題はCMakeでビルドされている。

新しい例題(プロジェクト)を追加したい場合は、CMakeLists.txtに追記する必要がある。

## CMakeLists.txtへの追記

ファイル末尾に次のような記述をする。

```cmake
GearsCommand(
  TARGET
     sample
  SOURCES
   examples/sample/main.cbc  TaskManagerImpl.cbc CPUWorker.cbc SynchronizedQueue.cbc AtomicReference.cbc
)
```

`GearsCommand`はCMakeのマクロであり、ここにターゲット名と必要なソースを列挙することでビルド対象に加わる。
マクロの意味は次の通り。

- `TARGET`
    - プロジェクトの名前。 `make sample`などでビルド出来るようになり、生成されたバイナリの名前にもなる
- `SOURCES`
    - プロジェクトに含める`.cbc`や`.c`などのCファイル    
    - ヘッダはここに含めない
    
### 必ずいれないといけないCbCのソース    

ContextやTaskManager関連の操作で必須となる
    
- `TaskManagerImpl.cbc`
- `CPUWorker.cbc`
- `SynchronizedQueue.cbc`
- `AtomicReference.cbc`

## プロジェクトを始める

`examples`の下にディレクトリを作成し、その中に`main.cbc`を置く
- 別に`main.cbc`である必要は無いけれど、わかりやすい
- 他の`.cbc`もそのディレクトリ中に置く
    - Gears全体に関わるものはトップディレクトリ(`CMakeLists.txt`があるディレクトリ)に置く
    
## Interfaceを書く

Interfaceを使いたい場合は(当然だけど)型定義から始める必要がある
- context.hへは自動で付け加えられる

生成用のPerlスクリプトがあるので、それを使うと最低限の雛形が生成される
- `perl tools/static_gen_header.pl --interface ExampleInterface`
    - `-w`をつけるとファイル生成してくれる
    - `-o`の後にファイル名とパスを指定できる
    - static_gen_header.plが置いてある場所はプロジェクトごととかで異なるので頑張って探す

Interfaceの詳しい書き方は[Interface入門](https://growi.cr.ie.u-ryukyu.ac.jp/Gears/introduction/interface)を見ること

## Interfaceの実装の型


生成用のPerlスクリプトがあるので、それを使うと(ry
- `perl tools/static_gen_header.pl --interface ExampleInterface --impl ExampleInterfaceImpl` 
    - `-w`をつけるとファイル生成してくれる
    - `-o`の後にファイル名とパスを指定できる
    - static_gen_header.plが置いてある場所はプロジェクトごととかで異なるので頑張って探す
    
## 実装のcbcを作る

生成用のPerlスクリプトがあるのd(ry

- `perl tools/trans_impl.pl examples/sample/ExampleInterfaceImpl.h`
    - 実装のヘッダファイルを入力する
    - オプションは`trans_impl`と同じ様な世界観