リポジトリ / emssr / independent_common_compiler
r2
| r2 emssr | 1 | # compile して走らせる |
| r2 emssr | 2 | |
| r2 emssr | 3 | [← Index](../Index.md) |
| r2 emssr | 4 | |
| r2 emssr | 5 | ## 1. 誰が何を出すか |
| r2 emssr | 6 | |
| r2 emssr | 7 | $$ |
| r2 emssr | 8 | \texttt{.cam}\ \xrightarrow{\ \text{Haskell}\ }\ \text{image} |
| r2 emssr | 9 | \qquad\qquad |
| r2 emssr | 10 | \texttt{.cmn}\ \xrightarrow{\ \text{commonc の image}\ }\ \text{image} |
| r2 emssr | 11 | $$ |
| r2 emssr | 12 | |
| r2 emssr | 13 | Haskell が出してよいのはバイナリだけになる。`.cmn` を compile するのは常に |
| r2 emssr | 14 | commonc の image であり、その image を走らせるのは C か Python の実行台になる。 |
| r2 emssr | 15 | |
| r2 emssr | 16 | ``` |
| r2 emssr | 17 | commonc/src/ |
| r2 emssr | 18 | front.cam .cmn → 疑似命令。target を知らない |
| r2 emssr | 19 | qlayer.cam 判定値 𝒬 の層 |
| r2 emssr | 20 | qword.cam 構成語の算術 |
| r2 emssr | 21 | region.cam 領域と鎖の層 |
| r2 emssr | 22 | back_x86h.cam → commonc_x86h.cam |
| r2 emssr | 23 | back_lane64.cam → commonc_lane64.cam |
| r2 emssr | 24 | ``` |
| r2 emssr | 25 | |
| r2 emssr | 26 | `use` は名前空間を一つにする。ラベルの解決は展開の後に一度だけ走る。 |
| r2 emssr | 27 | |
| r2 emssr | 28 | $$ |
| r2 emssr | 29 | \operatorname{res}(\texttt{use}\ f)=\operatorname{res}\bigl(\text{$f$ の中身をその行へ置いた source}\bigr) |
| r2 emssr | 30 | \tag{12.1.1} |
| r2 emssr | 31 | $$ |
| r2 emssr | 32 | |
| r2 emssr | 33 | --- |
| r2 emssr | 34 | |
| r2 emssr | 35 | ## 2. 一本を走らせる |
| r2 emssr | 36 | |
| r2 emssr | 37 | ### 2.1 core 意味論で読む |
| r2 emssr | 38 | |
| r2 emssr | 39 | ```bash |
| r2 emssr | 40 | common continuous_republic/examples/cmn/futatsu.cmn --run |
| r2 emssr | 41 | ``` |
| r2 emssr | 42 | |
| r2 emssr | 43 | ``` |
| r2 emssr | 44 | source : .../futatsu.cmn 層 2 d係数=[2] |
| r2 emssr | 45 | 境界 : [PtDyad] |
| r2 emssr | 46 | 平文 : huhukanoka |
| r2 emssr | 47 | 降下 : 箱 4 退避語 32 |
| r2 emssr | 48 | 出力[0] = 2 |
| r2 emssr | 49 | ``` |
| r2 emssr | 50 | |
| r2 emssr | 51 | ### 2.2 commonc で compile する |
| r2 emssr | 52 | |
| r2 emssr | 53 | 作業領域の刻みは入力から出る(19 式 3.1)。 |
| r2 emssr | 54 | |
| r2 emssr | 55 | $$ |
| r2 emssr | 56 | B=\max(N+80,\ 4096), |
| r2 emssr | 57 | \qquad |
| r2 emssr | 58 | \mathrm{InBase}=288B, |
| r2 emssr | 59 | \qquad |
| r2 emssr | 60 | \mathrm{Words}=288B+N+4096 |
| r2 emssr | 61 | $$ |
| r2 emssr | 62 | |
| r2 emssr | 63 | $288$ は lane64 の覆いの倍数になる。x86-64 hosted 版では $128$ を採る。 |
| r2 emssr | 64 | |
| r2 emssr | 65 | ```bash |
| r2 emssr | 66 | python continuous_republic/common_systems/Python_vCPU/vcpu.py \ |
| r2 emssr | 67 | builds/commonc/commonc_lane64.bin \ |
| r2 emssr | 68 | --words 1183761 --in-base 1179648 \ |
| r2 emssr | 69 | --in continuous_republic/examples/cmn/futatsu.cmn \ |
| r2 emssr | 70 | --emit out.bin |
| r2 emssr | 71 | ``` |
| r2 emssr | 72 | |
| r2 emssr | 73 | ### 2.3 出た image を走らせる |
| r2 emssr | 74 | |
| r2 emssr | 75 | ```bash |
| r2 emssr | 76 | python continuous_republic/common_systems/Python_vCPU/vcpu.py out.bin --words 4096 --dump 1 |
| r2 emssr | 77 | ``` |
| r2 emssr | 78 | |
| r2 emssr | 79 | ``` |
| r2 emssr | 80 | lane 0 tu |
| r2 emssr | 81 | w[0] = 2 |
| r2 emssr | 82 | ``` |
| r2 emssr | 83 | |
| r2 emssr | 84 | `tu` が成功報告、`te` が失敗報告になる(10 §2)。 |
| r2 emssr | 85 | |
| r2 emssr | 86 | --- |
| r2 emssr | 87 | |
| r2 emssr | 88 | ## 3. 実行台 |
| r2 emssr | 89 | |
| r2 emssr | 90 | | 実行台 | 走らせ方 | 中身 | |
| r2 emssr | 91 | |---|---|---| |
| r2 emssr | 92 | | C | `builds/common-host/common_host.exe` | thread で lane を配る | |
| r2 emssr | 93 | | Python 翻訳器 | `vcpu.py` | image を Python の文へ落とす | |
| r2 emssr | 94 | | Python 解釈器 | `vcpu.py --interp` | 式 (2.1) の mask 付き意味をそのまま持つ | |
| r2 emssr | 95 | | GPU | `vcpu.py --cupy` | 語も述語も bit のまま持つ(cuvcpu) | |
| r2 emssr | 96 | |
| r2 emssr | 97 | どれも image の中身を読まない。 |
| r2 emssr | 98 | |
| r2 emssr | 99 | --- |
| r2 emssr | 100 | |
| r2 emssr | 101 | ## 4. 検査 |
| r2 emssr | 102 | |
| r2 emssr | 103 | ```bash |
| r2 emssr | 104 | continuous_republic/common_systems/common_lang/commonc/tools/Check.ps1 -Cupy |
| r2 emssr | 105 | ``` |
| r2 emssr | 106 | |
| r2 emssr | 107 | 三つを同時に見る。 |
| r2 emssr | 108 | |
| r2 emssr | 109 | $$ |
| r2 emssr | 110 | \operatorname{commonc}_{\mathrm{x86h}}(\texttt{.cmn})=\operatorname{Compile}_{\mathrm{x86h}}(\texttt{.cmn}) |
| r2 emssr | 111 | \qquad\text{byte 単位} |
| r2 emssr | 112 | \tag{19.5.1} |
| r2 emssr | 113 | $$ |
| r2 emssr | 114 | |
| r2 emssr | 115 | $$ |
| r2 emssr | 116 | \bigl\llbracket\operatorname{commonc}_{\mathrm{lane64}}(\texttt{.cmn})\bigr\rrbracket |
| r2 emssr | 117 | =\bigl\llbracket\operatorname{Desc}(\texttt{.cmn})\bigr\rrbracket_C |
| r2 emssr | 118 | \tag{19.43.2} |
| r2 emssr | 119 | $$ |
| r2 emssr | 120 | |
| r2 emssr | 121 | GPU の実行台の観測も同じ列に並ぶ。 |
| r2 emssr | 122 | |
| r2 emssr | 123 | ``` |
| r2 emssr | 124 | 07_adjacent 式(5.1) 一致 式(43.2) 一致 分子 1 / 1 GPU 一致 1 |
| r2 emssr | 125 | ``` |
| r2 emssr | 126 | |
| r2 emssr | 127 | 降下の表に無い箱を含む平文は、どちらも image を出さない。それも一致のうちになる。 |
| r2 emssr | 128 | |
| r2 emssr | 129 | ``` |
| r2 emssr | 130 | tu_no_copy 式(5.1) 一致 式(43.2) 一致 分子 — / — |
| r2 emssr | 131 | ``` |
| r2 emssr | 132 | |
| r2 emssr | 133 | `.cam` が image を出さなかったときは、そこで止まる。古い image で走ると、 |
| r2 emssr | 134 | 直したはずの誤りが検査を通ってしまう。 |
| r2 emssr | 135 | |
| r2 emssr | 136 | ### 他の runner |
| r2 emssr | 137 | |
| r2 emssr | 138 | | runner | 何を走らせるか | |
| r2 emssr | 139 | |---|---| |
| r2 emssr | 140 | | `common_assembler/tools/BuildAndRun.ps1` | 全体 | |
| r2 emssr | 141 | | `common_lang/common_lang/tools/Run.ps1` | 意味 program 14 本を C と Python で | |
| r2 emssr | 142 | | `Python_vCPU/tools/Run.ps1` | lane64 の image を翻訳器と解釈器で | |
| r2 emssr | 143 | | `reverse2tensor/tools/Run.ps1` | 平文からテンソルへの逆写像 | |
| r2 emssr | 144 | | `examples/edu/run.py` | 採用語彙を展開してから走らせる | |
| r2 emssr | 145 | |
| r2 emssr | 146 | ## 参照 |
| r2 emssr | 147 | |
| r2 emssr | 148 | - [02_targets](02_targets.md) target と実行台の対 |