リポジトリ / emssr / independent_common_compiler
r2
| r2 emssr | 1 | # target と実行台 |
| r2 emssr | 2 | |
| r2 emssr | 3 | [← Index](../Index.md) |
| r2 emssr | 4 | |
| r2 emssr | 5 | ## 1. build family |
| r2 emssr | 6 | |
| r2 emssr | 7 | $$ |
| r2 emssr | 8 | \mathscr B(P)=\bigl\{(T,\ \operatorname{Compile}_T(P))\ \bigm|\ T\in\mathcal T\bigr\} |
| r2 emssr | 9 | $$ |
| r2 emssr | 10 | |
| r2 emssr | 11 | **定理 33.1** $\mathcal T$ の増減は $\operatorname{Sem}(P)$ を変えない。 |
| r2 emssr | 12 | |
| r2 emssr | 13 | core は target 名を知らない。build の結果は一つの組で返る。 |
| r2 emssr | 14 | |
| r2 emssr | 15 | $$ |
| r2 emssr | 16 | \mathrm{Built}_T=\bigl(\text{name}(T),\ X_T,\ \llbracket X_T\rrbracket_T,\ \{R_i\}\bigr) |
| r2 emssr | 17 | $$ |
| r2 emssr | 18 | |
| r2 emssr | 19 | 第一成分は package が持つ data であり、core の型には現れない。 |
| r2 emssr | 20 | |
| r2 emssr | 21 | --- |
| r2 emssr | 22 | |
| r2 emssr | 23 | ## 2. 登録済みの target |
| r2 emssr | 24 | |
| r2 emssr | 25 | | target 名 | 章 | 実行台 | |
| r2 emssr | 26 | |---|---|---| |
| r2 emssr | 27 | | `riscv64` | 06 | QEMU virt | |
| r2 emssr | 28 | | `arm64` | 05 | QEMU virt + semihosting | |
| r2 emssr | 29 | | `x86_64` | 04 | QEMU pc + multiboot | |
| r2 emssr | 30 | | `x86_64-hosted` | 18 | `common_host`(彩色した覆い) | |
| r2 emssr | 31 | | `x86_64-hosted-w` | 18、19 §6 | `common_host`(語割付けの覆い) | |
| r2 emssr | 32 | | `gfx1200` | 08 | package 内蔵 simulator | |
| r2 emssr | 33 | | `sm_120` | 09 | package 内蔵 simulator | |
| r2 emssr | 34 | | `lane64` | 20 | `Python_vCPU/vcpu.py` | |
| r2 emssr | 35 | |
| r2 emssr | 36 | ```bash |
| r2 emssr | 37 | common <src> -t <target> -o <image> |
| r2 emssr | 38 | ``` |
| r2 emssr | 39 | |
| r2 emssr | 40 | `-t` を省くと登録済みの全 target で build して結果を並べる。 |
| r2 emssr | 41 | |
| r2 emssr | 42 | --- |
| r2 emssr | 43 | |
| r2 emssr | 44 | ## 3. compile の段 |
| r2 emssr | 45 | |
| r2 emssr | 46 | $$ |
| r2 emssr | 47 | \operatorname{Compile}_{T,\mu} |
| r2 emssr | 48 | =\operatorname{Pack}_T\circ\operatorname{Link}_T\circ\operatorname{Encode}_A |
| r2 emssr | 49 | \circ\operatorname{Schedule}_A\circ\operatorname{Allocate}_A\circ\operatorname{Cover}_{A,\mu} |
| r2 emssr | 50 | \circ\operatorname{Refine}_{T,\mu}\circ\operatorname{CNF}_\infty\circ\operatorname{Parse} |
| r2 emssr | 51 | $$ |
| r2 emssr | 52 | |
| r2 emssr | 53 | $\operatorname{Parse}$ から $\operatorname{Refine}$ までが target 非依存の core になり、 |
| r2 emssr | 54 | $\operatorname{Cover}$ 以降が architecture package に属する(定理 52.1)。 |
| r2 emssr | 55 | |
| r2 emssr | 56 | --- |
| r2 emssr | 57 | |
| r2 emssr | 58 | ## 4. lane64 |
| r2 emssr | 59 | |
| r2 emssr | 60 | 実行位相を state の第一成分に置く(20 章)。 |
| r2 emssr | 61 | |
| r2 emssr | 62 | $$ |
| r2 emssr | 63 | T=c_{\mathrm{dis}}B+\sum_i\beta_i\nu_i |
| r2 emssr | 64 | $$ |
| r2 emssr | 65 | |
| r2 emssr | 66 | | | x86-64 | lane64 | |
| r2 emssr | 67 | |---|---|---| |
| r2 emssr | 68 | | scalar register | 持つ | lane へ複製する | |
| r2 emssr | 69 | | 箱あたりの byte | 最大 33 | 112 | |
| r2 emssr | 70 | | 覆いの倍数 | 128 | 288 | |
| r2 emssr | 71 | |
| r2 emssr | 72 | `vcpu.py` は三つの道を持つ。 |
| r2 emssr | 73 | |
| r2 emssr | 74 | | 道 | 何をするか | |
| r2 emssr | 75 | |---|---| |
| r2 emssr | 76 | | 翻訳器(既定) | image を Python の文へ落とす | |
| r2 emssr | 77 | | `--interp` | 式 (2.1) の mask 付き意味をそのまま解釈する | |
| r2 emssr | 78 | | `--cupy` | 語も述語も bit のまま GPU で走らせる | |
| r2 emssr | 79 | |
| r2 emssr | 80 | GPU の道は語を bit 平面で持つ。 |
| r2 emssr | 81 | |
| r2 emssr | 82 | $$ |
| r2 emssr | 83 | V\in\mathbb B^{NB\times W}, |
| r2 emssr | 84 | \qquad |
| r2 emssr | 85 | m\in\mathbb B^{W} |
| r2 emssr | 86 | $$ |
| r2 emssr | 87 | |
| r2 emssr | 88 | lane の bit がそのまま述語 mask になるので、選択が `(new & m) | (old & ~m)` の一行になる。 |
| r2 emssr | 89 | 加算は Kogge-Stone で $\log NB$ 段に畳み、乗算は carry-save で潰す。 |
| r2 emssr | 90 | |
| r2 emssr | 91 | 語の幅 $NB$ は引数になる(既定 32)。lane64 の語は $\mathbb Z$ なので、 |
| r2 emssr | 92 | $NB$ bit を越えた時点で core 意味論と離れる。越えたら桁上がりを見て報告する。 |
| r2 emssr | 93 | |
| r2 emssr | 94 | ```bash |
| r2 emssr | 95 | python vcpu.py <image> --words 4096 --dump 1 --cupy --bits 32 |
| r2 emssr | 96 | ``` |
| r2 emssr | 97 | |
| r2 emssr | 98 | --- |
| r2 emssr | 99 | |
| r2 emssr | 100 | ## 5. 三つの道の一致 |
| r2 emssr | 101 | |
| r2 emssr | 102 | `Check.ps1 -Cupy` が corpus の全部で三つを突き合わせる。 |
| r2 emssr | 103 | |
| r2 emssr | 104 | $$ |
| r2 emssr | 105 | \llbracket X\rrbracket_{\text{翻訳器}} |
| r2 emssr | 106 | =\llbracket X\rrbracket_{\text{解釈器}} |
| r2 emssr | 107 | =\llbracket X\rrbracket_{\mathrm{GPU}} |
| r2 emssr | 108 | =\llbracket\operatorname{Desc}(\texttt{.cmn})\rrbracket_C |
| r2 emssr | 109 | $$ |
| r2 emssr | 110 | |
| r2 emssr | 111 | ## 参照 |
| r2 emssr | 112 | |
| r2 emssr | 113 | - [01_build](01_build.md) compile して走らせる |
| r2 emssr | 114 | - `docs/common-compiler/arch/20_lane64_package.md` lane64 の仕様 |