📦 Out of Context リポジトリ

リポジトリ / emssr / independent_common_compiler

r2
r2 emssr1
# compile して走らせる
r2 emssr2
r2 emssr3
[← Index](../Index.md)
r2 emssr4
r2 emssr5
## 1. 誰が何を出すか
r2 emssr6
r2 emssr7
$$
r2 emssr8
\texttt{.cam}\ \xrightarrow{\ \text{Haskell}\ }\ \text{image}
r2 emssr9
\qquad\qquad
r2 emssr10
\texttt{.cmn}\ \xrightarrow{\ \text{commonc の image}\ }\ \text{image}
r2 emssr11
$$
r2 emssr12
r2 emssr13
Haskell が出してよいのはバイナリだけになる。`.cmn` を compile するのは常に
r2 emssr14
commonc の image であり、その image を走らせるのは C か Python の実行台になる。
r2 emssr15
r2 emssr16
```
r2 emssr17
commonc/src/
r2 emssr18
  front.cam       .cmn → 疑似命令。target を知らない
r2 emssr19
  qlayer.cam      判定値 𝒬 の層
r2 emssr20
  qword.cam       構成語の算術
r2 emssr21
  region.cam      領域と鎖の層
r2 emssr22
  back_x86h.cam   → commonc_x86h.cam
r2 emssr23
  back_lane64.cam → commonc_lane64.cam
r2 emssr24
```
r2 emssr25
r2 emssr26
`use` は名前空間を一つにする。ラベルの解決は展開の後に一度だけ走る。
r2 emssr27
r2 emssr28
$$
r2 emssr29
\operatorname{res}(\texttt{use}\ f)=\operatorname{res}\bigl(\text{$f$ の中身をその行へ置いた source}\bigr)
r2 emssr30
\tag{12.1.1}
r2 emssr31
$$
r2 emssr32
r2 emssr33
---
r2 emssr34
r2 emssr35
## 2. 一本を走らせる
r2 emssr36
r2 emssr37
### 2.1 core 意味論で読む
r2 emssr38
r2 emssr39
```bash
r2 emssr40
common continuous_republic/examples/cmn/futatsu.cmn --run
r2 emssr41
```
r2 emssr42
r2 emssr43
```
r2 emssr44
source : .../futatsu.cmn  層 2  d係数=[2]
r2 emssr45
境界   : [PtDyad]
r2 emssr46
平文   : huhukanoka
r2 emssr47
降下   : 箱 4  退避語 32
r2 emssr48
  出力[0] = 2
r2 emssr49
```
r2 emssr50
r2 emssr51
### 2.2 commonc で compile する
r2 emssr52
r2 emssr53
作業領域の刻みは入力から出る(19 式 3.1)。
r2 emssr54
r2 emssr55
$$
r2 emssr56
B=\max(N+80,\ 4096),
r2 emssr57
\qquad
r2 emssr58
\mathrm{InBase}=288B,
r2 emssr59
\qquad
r2 emssr60
\mathrm{Words}=288B+N+4096
r2 emssr61
$$
r2 emssr62
r2 emssr63
$288$ は lane64 の覆いの倍数になる。x86-64 hosted 版では $128$ を採る。
r2 emssr64
r2 emssr65
```bash
r2 emssr66
python continuous_republic/common_systems/Python_vCPU/vcpu.py \
r2 emssr67
  builds/commonc/commonc_lane64.bin \
r2 emssr68
  --words 1183761 --in-base 1179648 \
r2 emssr69
  --in continuous_republic/examples/cmn/futatsu.cmn \
r2 emssr70
  --emit out.bin
r2 emssr71
```
r2 emssr72
r2 emssr73
### 2.3 出た image を走らせる
r2 emssr74
r2 emssr75
```bash
r2 emssr76
python continuous_republic/common_systems/Python_vCPU/vcpu.py out.bin --words 4096 --dump 1
r2 emssr77
```
r2 emssr78
r2 emssr79
```
r2 emssr80
lane 0    tu
r2 emssr81
  w[0] = 2
r2 emssr82
```
r2 emssr83
r2 emssr84
`tu` が成功報告、`te` が失敗報告になる(10 §2)。
r2 emssr85
r2 emssr86
---
r2 emssr87
r2 emssr88
## 3. 実行台
r2 emssr89
r2 emssr90
| 実行台 | 走らせ方 | 中身 |
r2 emssr91
|---|---|---|
r2 emssr92
| C | `builds/common-host/common_host.exe` | thread で lane を配る |
r2 emssr93
| Python 翻訳器 | `vcpu.py` | image を Python の文へ落とす |
r2 emssr94
| Python 解釈器 | `vcpu.py --interp` | 式 (2.1) の mask 付き意味をそのまま持つ |
r2 emssr95
| GPU | `vcpu.py --cupy` | 語も述語も bit のまま持つ(cuvcpu) |
r2 emssr96
r2 emssr97
どれも image の中身を読まない。
r2 emssr98
r2 emssr99
---
r2 emssr100
r2 emssr101
## 4. 検査
r2 emssr102
r2 emssr103
```bash
r2 emssr104
continuous_republic/common_systems/common_lang/commonc/tools/Check.ps1 -Cupy
r2 emssr105
```
r2 emssr106
r2 emssr107
三つを同時に見る。
r2 emssr108
r2 emssr109
$$
r2 emssr110
\operatorname{commonc}_{\mathrm{x86h}}(\texttt{.cmn})=\operatorname{Compile}_{\mathrm{x86h}}(\texttt{.cmn})
r2 emssr111
\qquad\text{byte 単位}
r2 emssr112
\tag{19.5.1}
r2 emssr113
$$
r2 emssr114
r2 emssr115
$$
r2 emssr116
\bigl\llbracket\operatorname{commonc}_{\mathrm{lane64}}(\texttt{.cmn})\bigr\rrbracket
r2 emssr117
=\bigl\llbracket\operatorname{Desc}(\texttt{.cmn})\bigr\rrbracket_C
r2 emssr118
\tag{19.43.2}
r2 emssr119
$$
r2 emssr120
r2 emssr121
GPU の実行台の観測も同じ列に並ぶ。
r2 emssr122
r2 emssr123
```
r2 emssr124
07_adjacent      式(5.1) 一致     式(43.2) 一致     分子 1 / 1  GPU 一致     1
r2 emssr125
```
r2 emssr126
r2 emssr127
降下の表に無い箱を含む平文は、どちらも image を出さない。それも一致のうちになる。
r2 emssr128
r2 emssr129
```
r2 emssr130
tu_no_copy       式(5.1) 一致     式(43.2) 一致     分子 — / —
r2 emssr131
```
r2 emssr132
r2 emssr133
`.cam` が image を出さなかったときは、そこで止まる。古い image で走ると、
r2 emssr134
直したはずの誤りが検査を通ってしまう。
r2 emssr135
r2 emssr136
### 他の runner
r2 emssr137
r2 emssr138
| runner | 何を走らせるか |
r2 emssr139
|---|---|
r2 emssr140
| `common_assembler/tools/BuildAndRun.ps1` | 全体 |
r2 emssr141
| `common_lang/common_lang/tools/Run.ps1` | 意味 program 14 本を C と Python で |
r2 emssr142
| `Python_vCPU/tools/Run.ps1` | lane64 の image を翻訳器と解釈器で |
r2 emssr143
| `reverse2tensor/tools/Run.ps1` | 平文からテンソルへの逆写像 |
r2 emssr144
| `examples/edu/run.py` | 採用語彙を展開してから走らせる |
r2 emssr145
r2 emssr146
## 参照
r2 emssr147
r2 emssr148
- [02_targets](02_targets.md) target と実行台の対