素因数分解装置の調査・検討に関する報告書

２００４年２月

株式会社富士通研究所
伊豆
伊藤
小 暮
小檜山
下山
武仲
鳥居
桝井

哲也
孝一
淳
清之
武司
正彦
直哉
昇一

富 士 通 株 式 会 社
向田健二

素因数分解装置の調査・検討に関する報告書
富士通株式会社

2004 年 2 月

本報告書について
本報告書は, 素因数分解装置 TWIRL の調査・検討結果を報告するものである. TWIRL とは,2003 年 8 月に Adi Shamir と Eran Tromer によって提案された素因数分解専用ハードウェアデ
ザインの名称である [ST03]. TWIRL は汎用的な ASIC 技術を用いることで, ふるいと呼ばれる処理を高い並列度で処理することを特徴とする. 提案者の試算によると, TWIRL が 1024-bit 合
成数を素因数分解するのに必要なコストは, 1000 万ドル (約 10 億円) の費用と約 1 年の計算時間となっている. 公開鍵暗号の現在 (2004 年 1 月) のデファクトスタンダードである RSA 暗号の標準的な鍵の長さ 1024-bit であり, もしも TWIRL が現実に製造・動作可能であれば, RSA
暗号が解読可能であることを意味することになる. しかし提案者によるコスト試算は, 提案者も認める通り概算値でしかなく, TWIRL の実現性に関する詳細評価の必要性が指摘されていた [ST03, RSA03].
本報告書は TWIRL の実現可能性を, 理論面と現実面の両面から詳細に検討することを目的とする. 具体的には, TWIRL の提案論文を元にして動作原理を詳細に検討し, 提案論文の仕様に基づいた回路設計を行う. そして設計から算出される回路規模見積もりを元に, TWIRL の実現可能性を検討する. なお TWIRL の提案論文では, 分解対象となる合成数のサイズとして

512-bit, 768-bit, 1024-bit の 3 種類が挙げられているが, 本報告書は主に 1024-bit 合成数の場合についてのみ報告する.
本報告書の構成は以下の通りである. 第 1 章で総論を述べ, 評価結果概要を報告する. その後,
第 2 章では TWIRL の動作原理を (提案論文に従って) 説明し, 第 3 章では報告者による回路設計例を示すと共に, TWIRL の回路規模見積もりを算出する.

–i–

報告概要
TWIRL とは, 2003 年 8 月に Adi Shamir と Eran Tromer によって提案された素因数分解専用ハードウェアデザインの名称である [ST03]. TWIRL が 1024-bit 合成数を素因数分解するのに必要なコストは, 1000 万ドル (約 10 億円) の費用と約 1 年の計算時間であると提案者は試算している. この試算の妥当性を検討するために, 報告者は TWIRL の動作仕様を詳細に調査し,基本回路設計を行うことで, 提案者の主張するハードウェアデザインと回路規模の見積もりの妥当性に関する検証を行った.
動作原理については, TWIRL を構成する大部分のユニットについては提案者の主張するハードウェアデザインおよび回路規模の見積もりは妥当であるが, 配送機構 (Largish Station のBuﬀer と Smallish Station の Funnel) ユニットについては, 提案者の見積もりよりも大規模な回路が必要であると報告者は考える.
次に報告者が検討した基本回路設計をもとに, TWIRL の実現可能性について検討を行った結果, 現時点 (2004 年 1 月) のテクノロジーを用いた場合, 提案者が想定する性能を持つ TWIRLの実現は不可能であるとの結論に至った. その主な理由は以下の 3 点である:

1. 提案者の主張通り TWIRL を単一の LSI に実装するには, 直径 100 mm 以上の巨大ウェ
ハーを欠損なく製造する技術が必要となる. しかしこのような巨大なウェハーは現在の技術では製造不可能である.

2. TWIRL を複数の LSI に分割して実装したとしても必要 LSI 数が膨大となり, 単一のボードには実現不可能である.

3. 分割した LSI を複数のボードに実装したとしても, 提案者が主張する周波数 (1 GHz) を前提とした場合, ボード間の IO 数が多数であることから, 現在の技術では実現不可能である.
報告者の検討手順については第 1 章を参照されたい. また TWIRL の動作原理については第 2章を, 報告者による検討内容については第 3 章を参照されたい.

– ii –

目次

本報告書について

i

報告概要

ii

目次

iii

第1章

総論

1

1.1

目的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1

1.2

TWIRL の特徴 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

1.3

調査・検討内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.4

検討結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

1.4.1

ウェハーの製造可能性 . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

1.4.2

報告者による回路規模見積もり . . . . . . . . . . . . . . . . . . . . . .

5

1.4.3

複数 LSI を用いた実現可能性 . . . . . . . . . . . . . . . . . . . . . . .

5

1.4.4

複数ボードを用いた実現可能性 . . . . . . . . . . . . . . . . . . . . . .

6

1.4.5

TWIRL 実現に必要なブレークスルー . . . . . . . . . . . . . . . . . . .

6

第2章

動作原理

8

2.1

位置付け . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

82.2

数体ふるい法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

2.2.1

アルゴリズム概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

2.2.2

ふるい処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

10

2.2.3

TWINKLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13基本構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

2.3.1

14

2.3

ふるいの並列処理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

– iii –

2.4

2.5

2.6

第3章

2.3.2

Largish Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

16

2.3.3

Smallish Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

2.3.4

Tiny Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

25

提案者によるコスト見積もり . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

2.4.1

1024-bit 合成数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

2.4.2

512-bit 合成数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

27

2.4.3

768-bit 合成数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

28

2.4.4

ハードウェアに関するパラメータ詳細 . . . . . . . . . . . . . . . . . .

30

2.4.5

数体ふるい法に関するパラメータ詳細 . . . . . . . . . . . . . . . . . .

31

詳細デザイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.5.1

Delivery Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

2.5.2

Emitter の重複 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

33

2.5.3

Funnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

36

2.5.4

初期化

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

2.5.5

ふるい対象の削減 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37

2.5.6

ふるいのカスケード . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38

2.5.7

関係の導出 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

39

Largish Station における送信器の理論的サイズ . . . . . . . . . . . . . . . . .

41

2.6.1

Rational TWIRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

41

2.6.2

Algebraic TWIRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

42

詳細検討

44

TWIRL を用いたふるい装置の概要 . . . . . . . . . . . . . . . . . . . . . . .

44

3.1.1

TWIRL cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

44

3.1.2

Rational TWIRL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

46

3.2

機能仕様について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47

3.3

Largish Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

48

3.3.1

Emission Triplet 発行処理部 . . . . . . . . . . . . . . . . . . . . . . . .

53

3.3.2

DRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

59

3.3.3

DRAM read 処理部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

61

3.3.4

Processor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

64

3.3.5

SRAM write 処理部 . . . . . . . . . . . . . . . . . . . . . . . . . . . .

66

3.3.6

SRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

69

3.1

– iv –

3.3.7

SRAM write back 処理部 . . . . . . . . . . . . . . . . . . . . . . . . .

71

3.3.8

空きアドレス検出処理部 . . . . . . . . . . . . . . . . . . . . . . . . . .

74

3.3.9

DRAM 初期化部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

78

3.3.10 SRAM 初期化部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

80

3.3.11 Buﬀer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

81

3.3.12 Bubble Sort/Random Shuﬄe . . . . . . . . . . . . . . . . . . . . . . . .

84

3.3.13 l-sort 処理部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

89

3.3.14 k-bit 値 M-4 × 2 分配処理部 . . . . . . . . . . . . . . . . . . . . . . . .

92

3.3.15 l-重複削除処理部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

96

3.3.16 Delivery Line 出力処理部 . . . . . . . . . . . . . . . . . . . . . . . . .

98

3.3.17 パイプライン加算処理部 . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.4

Smallish Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.4.1

Emitter-Funnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

3.4.2

Emitter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

3.4.3

1st/2nd Level Funnel (N-M Funnel) . . . . . . . . . . . . . . . . . . . . 115

3.4.4

N-データ列タイミング調整処理部 . . . . . . . . . . . . . . . . . . . . 117

3.4.5

N-M 変換処理部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

3.4.6

Segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

3.5

Tiny Station . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

3.6

詳細検討結果 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

3.6.1

回路規模見積もり詳細 . . . . . . . . . . . . . . . . . . . . . . . . . . . 129

3.6.2

複数の LSI を用いた TWIRL 実現に関する詳細検討 . . . . . . . . . . . 131

3.6.3

複数のボードを用いた TWIRL 実現に関する詳細検討 . . . . . . . . . . 135

参考文献

137

–v–

第1章

総論
本章では素因数分解装置 TWIRL に関する調査・検討内容と検討結果概要を報告する.

TWIRL の動作原理については第 2 章を, 検討詳細については第 3 章を参照されたい.

1.1 目的
公開鍵暗号技術のいくつかは, 素因数分解問題の難しさに安全性の根拠をおいている. 電子
政府推奨暗号リスト [CRY02] では, 合成数サイズが 1024-bit 以上の場合には素因数分解は現
実的には困難であり, 向こう 10 年は分解できないことを想定している. 従って, 現実的に素因数分解問題が困難であるという事実は, 安全な電子政府を構築する上で欠かせない前提となっている.
数体ふるい法は素因数分解アルゴリズムの中で最も優れた方法である [LL93]. 従来はソフト
ウェア実装による実験例しか報告されていなかったが, 最近になって専用ハードウェア, 特にLSI を用いたデザインが提案されている. TWIRL はイスラエルの暗号研究者 Adi Shamir *1 とEran Tromer によって 2003 年 8 月に提案されたハードウェアデザインであり [ST03], ふるいと呼ばれる処理を大規模に並列計算することを大きな特徴とする. 1024-bit 合成数をターゲッ
トとした TWIRL による素因数分解のコストは, 1000 万ドル (約 10 億円) の費用*2 と約 1 年の計算時間と提案者は試算しており, もしも試算通りに製造・動作が可能であれば, 素因数分解問
題を利用した公開鍵暗号技術の安全性が損なわれることになる. しかしこの見積もりは, 提案
者自身も認める通り概算値でしかなく, 実現可能性の可否も含めた再検討の必要性が指摘されていた [ST03, RSA03].
*1

RSA 暗号の考案者として有名である (RSA の ”S”).

*2 $1=100 円として換算, 以下同様.

–1–

表 1.1 TWIRL の回路規模見積もり

プロセスルール

算出者

Rational TWIRL

Algebraic TWIRL

0.13 µm

提案者

15960 mm265960 mm2

0.09 µm

提案者

7650 mm231620 mm2

報告者

23892 mm2—

本報告書の目的は, 現在電子政府推奨暗号リストを採用した際に想定されているパラメータ(合成数サイズ 1024-bit) に対応する TWIRL の仕様を調査・検討し, 実現可能性・実現時期・費用等の詳細な評価を行うことである.

1.2

TWIRL の特徴

TWIRL (The Weizmann Institute Relation Locator) とは, 2003 年 8 月に Adi Shamir と Eran
Tromer によって提案された素因数分解専用ハードウェアデザインの名称であり [ST03], 最良の素因数分解アルゴリズムである数体ふるい法 [LL93] のふるいステップをハードウェア実装したものである. このためふるいステップで使用する 2 種類のふるい (有理数的ふるい (rational

sieve) と代数的ふるい (algebraic sieve)) に対応して, TWIRL は Rational TWIRL と Algebraic
TWIRL の 2 つの構成要素からなる. TWIRL は LSI を効果的に利用することで, ふるい処理を高い並列度で計算することを特徴とする (1024-bit 合成数をターゲットとした Rational TWIRLの場合で 4096 並列). さらにこの並列処理は, ふるいに伴う対数値の加算処理のみを高い並列度で実行し, これらの加算処理に対する制御を一つの回路にて集中管理することで, 典型的なふるいの実装デザインと比較して大幅な回路規模削減を実現している. その結果, 1024-bit 合成数をターゲットとした TWIRL の回路規模は, 0.13 µm プロセスルールを使用した場合, Rational

TWIRL の場合で 15960 mm2 , Algebraic TWIRL の場合で 65960 mm2 になると提案者は試算している (表 1.1 参照*3 ). なお実際の分解にあたっては, Rational TWIRL 8 個と Algebraic

TWIRL 1 個を組み合わせた TWIRL クラスタとして分解を行う. 1 年で分解を行うには 194 組の TWIRL クラスタが必要である.

TWIRL では複数の加算部に対する配送機能が必要になるものの, 提案者はこの機能に関しては必要性のみを述べるにとどまっており, 具体的な実現方法については触れられていない. 報*3

0.09 µm プロセスルールを使用した場合の換算値は, Rational TWIRL の場合で 15960 ×(9/13)2 ≈ 7650 mm2 ,Algebraic TWIRL の場合で 65960 ×(9/13)2 ≈ 31620 mm2 となる.

–2–

告者の検討では, 配送機能を実現するのに必要な回路規模は非常に大きく, その結果, 全体の回路規模は提案者の主張よりも大きくなるという評価結論を得た. また TWIRL は基本的には汎用的な ASIC 技術を前提に設計されているが, 一部の回路については DRAM を論理回路と混載させる必要があるためフルカスタムで作成する必要があり, 通常の LSI 製造より割高になると予想する.

1.3 調査・検討内容
本報告では, 以下の手順によって検討を進めた.
まず TWIRL の提案論文 [ST03] に従い, 具体的な仕様を調査・検討した. いくつかのパラメータについては見直しが必要と考え, パラメータの理論的な最適値を数値実験を通して定めた. これら仕様・パラメータについては, 詳細を第 2 章にまとめた.
次に具体化させた仕様に基づき, 1024-bit 合成数をターゲットとした TWIRL の基本回路設計を行った. 設計方針としては, TWIRL の性能を最も左右するパラメータである Delivery

Line と Sieve Location の移動速度が, 提案者の想定通り, 内部周波数 1 GHz のときに 1 clock
cycle/cell となるように設計した*4 . そしてこの回路設計を元に回路面積を算出し, TWIRL を複数 LSI に機能分割した場合の LSI 数を概算した. これら設計・検討結果の詳細は第 3 章にまとめた. ここで回路設計で用いたパラメータとしては, 基本的には提案論文から導出される理論的な値を用いたが, 実装に伴うさまざまな制約から, 一部については修正した値を用いた. なお本報告書の目的は提案論文の詳細検討であるため, 論文の内容を越える改良は行っていない.
しかし論文で前提となっているが詳細が記されていない項目については, 適当な補完を行った.

1.4 検討結果
報告者が作成した基本回路設計を元に TWIRL の実現可能性を検討した結果, TWIRL は現
時点 ( 2004 年 1 月) のテクノロジーでは, 実際に製造することは極めて困難であるとの結論を得た. その主な理由は以下の 3 点に要約される.

1. 提案者が主張するように TWIRL を単一の LSI として製造するためには巨大なウェハー(少なくとも直径 100 mm) を製造する必要があるが, このように巨大なウェハーを欠損なく製造することは現時点のテクノロジーでは不可能である.

*4

従って移動速度や内部周波数を変更させた場合については考察していない. これは変更させた場合に回路設計方針が大きく変わってしまうからである.

–3–

2. 次に TWIRL を現在のテクノロジーで製造可能な大きさの複数の LSI に分割して実現する方法が考えられる. しかし報告者が検討したところ, LSI 間の IO 数が多数必要なことから, Rational TWIRL だけでも多数の LSI (40 mm 角の LSI で 3362 個) を必要とす
る*5 ため, 単一のボードに搭載不可能な規模*6 となり, やはり現時点のテクノロジーでは製造不可能である.

3. 次に分割した LSI を複数のボードに実装する方法が考えられる. しかし報告者が検討したところ, Rational TWIRL の場合, 確かに 54 枚程度のボードに理論的には実装可能*7であるものの, 提案者の主張する動作周波数 (1 GHz) を前提とした場合, ボード間の IO
数が多数 (最大 1500-bit) 必要なことから, やはり現時点のテクノロジーでは実現不可能
である*8 .
これら考察結果により, 現在のテクノロジーを前提とした場合, TWIRL を実際に実現することは極めて困難であると報告者は考える. なお本検討にあたっては, 結線の困難さは考慮していないため, 実際の実現可能性はさらに低いと思われる.
前述の通り, 報告者の回路設計は 1024-bit をターゲットとした TWIRL に対する提案者の仕様を忠実に反映させている. 従って半導体テクノロジーが劇的に向上した場合や, 仕様を越えた改良を施した場合の実現可能性は検討していない. また 512-bit 合成数や 768-bit 合成数をターゲットとした場合の TWIRL の実現可能性についても報告者は検討を行っていない.
以下, 各項目について詳細を述べる. 以下で述べるパラメータは, ことわりのない限り

1024-bit 合成数をターゲットとしたものである.

1.4.1

ウェハーの製造可能性

TWIRL を単一の LSI として製造するためには, 巨大な 1 枚のウェハーを製造する必要がある. 提案者の主張 (0.13 µm プロセスルールを使用) では, Rational TWIRL を製造するためには
直径 150 mm ウェハー 1 枚, Algebraic TWIRL を製造するためには直径 300 mm ウェハー 1 枚を必要とする. また 0.09 µm プロセスルールを使用したとしても, 提案者の主張では Rational

TWIRL に直径 104 mm ウェハー 1 枚*9 , Algebraic TWIRL に直径 208 mm ウェハー 1 枚を必要とし, 報告者による回路規模見積もりでは Rational TWIRL に直径 174 mm ウェハー 1 枚を0.09 µm プロセスルールを使用. また前述した配送機構の補正を追加している.
LSI 間の間隔を 10mm として正方形に配置した場合, (40mm+10mm) × 58 ≈ 3 m 角のボードを必要とする.
*7 0.09 µm プロセスルールを使用. また前述した配送機構の補正を追加している.
*8 動作周波数 1 GHz の場合, ボード間 IO は最大 400 bit が限界であろう.
*9 ウェハーの直径は面積による単なる換算値である. 以下も同様.
*5
*6

–4–

必要とする (表 1.1 参照). しかしこれの大きさのウェハーを欠損なく製造することは, 現在の半導体技術では不可能である. 実際, 歩留まり率の関係から実用上製造可能な LSI は 40 mm 角が限界である.

1.4.2

報告者による回路規模見積もり

次に TWIRL の複数 LSI への分割実装を検討するために, Rational TWIRL の回路規模の再評価を行った. その結果, 0.09 µm プロセスルールを用いた場合の回路規模は 23892 mm2 となった. 同じプロセスルールを用いた場合の提案者による回路規模見積もりは 7640 mm2 となることから, 約 3.1 倍の回路規模となっている (表 1.1 参照).
このように報告者の検討結果が提案者の見積もり結果よりも大規模になる最大の理由は,

1.2 節で述べたように配送機構, 特に Largish Station の Buﬀer と呼ばれるユニットと Smallish
Station の Funnel と呼ばれるユニットにおいて, 4096 並列された加算器に対するデータの配送機能の回路規模を提案者が考慮していないことが原因である. 報告者は Buﬀer/Funnel の回路
デザインは慎重に行う必要があると考える. なぜなら, TWIRL が想定するパイプライン的な加算処理を実現するためには, 例えば Buﬀer の場合, 4096 通りの配送先を持つ対数値データのソート処理を 1 cycle に 2000 個以上処理する必要があるからである. このソート処理を典型的なバブルソートを用いて行った場合, 非常に巨大な回路 (5.6G gates 以上) を必要とする. この課題に対し報告者が検討を行った結果, 小さい回路 (329M gates) による実現が可能であるとの結論を得た*10 .

1.4.3

複数 LSI を用いた実現可能性

TWIRL を単一の LSI に実装することは不可能であることから, 前述の回路規模見積もりを用いて複数 LSI への分割実装を検討した. 検討にあたっては, 個々の LSI は 0.09 µm プロセス
ルールを用いて製造された 40 mm 角の大きさであり, 現時点 (2004 年 1 月) での標準的な仕様として, 回路規模 400M gates/LSI, IO ピン数 3000 pins/LSI (1500 bit を IO として使用可能*11 )を仮定した. これら条件を元に Rational TWIRL を実装するのに必要な LSI 数を評価したとこ
ろ, 3362 個の LSI が必要であるという結論を得た. LSI 間の IO ピン数を無視して回路規模のみの制約条件を考慮するならば 15 個の LSI で実現可能となることから, TWIRL の実装では*10

ただし報告者のソート処理のデザインは, 入力データに偏りが生じた場合非常に低い確率でデータ破棄が発生する. しかしこの確率は 0.000737 と非常に低く, 現実的には問題がない範囲であると考える.
*11 3000 pins のうち, IO として 1500 pins が使用可能であると仮定した (残りの pins は Vcc, GND 用である).

–5–

IO ピン数がボトルネックとなっていることがわかる. 3362 個の LSI を 1 枚のボードに実装することを考えると, 正方形に並べた場合, 58 × 58 で配置する必要ある. LSI の間隔を 10mm として実装するならば, およそ 3 m × 3 m のボードが必要となる. このように膨大な数の LSI を 1枚のボードを実装・動作させることは, 現在の技術を遥かに超える範囲である. 以上により, 複数の LSI を用いて TWIRL を実現させた場合でも, LSI の IO ピン数がネックとなり, 必要とな
る LSI 数が膨大になり, 単一のボードに搭載して実現することは不可能であると考える.

1.4.4

複数ボードを用いた実現可能性

複数 LSI を用いた分割実装のさらなる可能性として, 複数ボードを用いた実装についても検討を行った. ボードあたりの LSI 数を 100 個と仮定した場合, Rational TWIRL の見積もり面積から算出した理論的なボード数は 54 枚となった. しかし TWIRL の実装にあたってはボード
間に 1500 bit の IO を必要とし, 提案者の想定する周波数 (1 GHz) を考慮すると, これは現在の技術レベルを遥かに越えており, 実現は不可能であると考える*12 .

1.4.5

TWIRL 実現に必要なブレークスルー

これまでに述べたとおり, 既存技術だけを用いた場合, TWIRL を実際に実現することは極めて困難であると考える. しかし将来の技術進歩によって実現できる可能性は残されている. 前
述の議論から, 単一の LSI を用いるよりも複数の LSI に分割する方が実現性は高いであろう.
その場合 LSI 間およびボード間の IO 数がボトルネックとなっていたことから, TWIRL を実現するためには IO を高速かつ多ビット化する技術が必須であると考える*13 .
以下では IO を高速・多ビット化する技術の例と, それぞれの技術における問題点について簡単に説明する.
■シリアル-パラレル変換技術の高性能化

IO ピン数を仮想的に増加させる技術としてシリア

ル-パラレル変換 (シリ-パラ変換) が知られており, TWIRL の場合, 必要な LSI 数は LSI あたりの IO 数の 2 乗に反比例して小さくなることから, シリ-パラ変換を適用することで必要 LSI 数を減らすことができると考えられる.
しかしその代償として LSI 間 IO の周波数を上げる必要が生じる. 例えば 10:1 のシリ-パラ変換を用いた場合, LSI 間は内部の 10 倍の周波数で動作させる必要があり, TWIRL 提案者の主張に従い LSI 内部を 1 GHz で動作させた場合, LSI 間 IO は 10 GHz が必要となる. 現在実用
*12*131 GHz で動作する IO 数はおよそ 400 bit が限界と報告者は考える.
あくまでも必要条件であって, 十分条件ではない.

–6–

化されている 10 GHz I/F の消費電力を考慮すると, TWIRL の LSI 数の問題を解決できるほど多くの IO 数について適用することは, 当面は困難であろう.
■チップ間配線の微細化

チップ間の結線を微細化することによって, プリント版配線を用いた場合より IO 数を増加させることが可能となる. このような技術として ”Active Substrate

Multi-chip Module Package” [Cha94] が知られている. しかし技術は論文レベルであり, 実用レ
ベルでの適用例は知られていない. 本技術が現実的に使用可能であるか, さらには TWIRL に適用可能かであるかに関してはさらなる検討が必要である.

–7–

第2章

動作原理
本章は TWIRL の動作原理と仕様パラメータについてまとめる. まず 2.1 節で TWIRL の背景を述べた後, TWIRL が利用する数体ふるい法に関する準備を 2.2 節で簡単にまとめる. そして TWIRL の動作原理を 2.3 節で説明し, Shamir-Tromer によるコスト見積もりを 2.4 節で紹介する. TWIRL のさらなる詳細仕様については 2.5 節において触れる. また Largish Station における送信器の理論的サイズの数値例を 2.6 に挙げる.
本章の内容は TWIRL の提案論文 [ST03] に基づいており, ことわりのない限り報告者の主張はふくまれない. また本章の仕様パラメータは理論的なものであり, 実装に伴うさまざまな制
約から, 実際の設計では異なる仕様パラメータを使用する必要がありえることにも注意が必要
である (報告者の設計例については第 3 章を参照せよ).

2.1 位置付け
整数の素因数分解問題が困難であるという仮定は, 膨大な思考的・実験的経験から得られた結論であり, 情報セキュリティを考える上での大前提となっている. 実際, この前提を元にしてRSA 暗号などのさまざまな暗号アルゴリズムが考案されてきている. 現時点 (2004 年 1 月, 以
下同様) での素因数分解問題に対する最良のアルゴリズムは数体ふるい法 (NFS; Number Field

Sieve method, [LL93]) であり, 2003 年 12 月にはソフトウェア実装による 576-bit 合成数の分解例が報告されている [F+03] (これは数体ふるい法による最大の分解例である). しかし現在の暗号で使用される合成数は 1024-bit 以上であり, ソフトウェア実装による同様なアプローチを用いた場合, 分解は非常に困難であることが予想されている. これに代わるアプローチとして,最近になって専用ハードウェアを用いた方法が注目を集めている. 数体ふるい法は前処理 (多項式生成) ステップ, 関係式探索 (ふるい) ステップ, 線型代数ステップ, 後処理 (平方根計算) ス–8–テップの 4 つのステップから構成されているが, 専用ハードウェアが対象にしているのは, 数体ふるい法による素因数分解計算の大部分を占める関係式探索ステップと線型代数ステップである. 2001 年に Bernstein が提案した線型代数ステップに対するメッシュ回路を用いると,1024-bit の合成数でも短時間で計算可能と報告されており [Ber01, LSTT02], 線型代数ステップは簡単な計算と見なされている. これに対し, 関係式探索ステップに対する専用ハードウェ
アとして TWINKLE [Sha99, LS00] やメッシュ回路 [GS03] が提案されたが, その効率は悪く,

1024-bit 合成数を扱うことは現実的には不可能であった.
2003 年 8 月にイスラエルの研究者 Adi Shamir と Eran Tromer によって提案された TWIRL(The Weizmann Institute Relation Locator) は, 関係式探索ステップに対する専用ハードウェア
デザインの名称である [ST03]. TWIRL の動作原理は TWINKLE の延長上にあるものの, 汎用的な ASIC 技術を利用することで大規模な並列計算を可能とし, 大幅な計算資源の削減ができると主張されている*1 . Shamir-Tromer の試算によると, TWIRL を用いた場合に必要なコスト
は, 1024-bit 合成数の場合で 1000 万ドル (約 10 億円) の費用*2 と約 1 年の計算時間, 512-bit 合成数の場合で 180 ドル (約 1.8 万円) の費用と 4.5 時間程度の計算時間となる (ただし初期投資費用は除く) *3 . これらの見積もりコストは従来のデザインよりも 1000 倍以上効率的であり,実際に製造可能な範囲内でもあることから, 提案当初から大きな注目を集めていた. しかし見積もりの精度は決して高くはないため, 詳細な見積もり算出の必要性も指摘されている [RSA03].
実際, 提案者もその必要性を提案論文内で認めている.

2.2 数体ふるい法
本節では TWIRL の前提である数体ふるい法, 特に関係式探索ステップに対するふるい処理について述べる. また TWIRL のベースとなった TWINKLE についても簡単に紹介する. 以
下では, 整数の集合を Z = {. . . , −2, −1, 0, 1, 2, . . . , } で, 自然数の集合を N = {1, 2, . . . , } であら
わす.

2.2.1

アルゴリズム概要

整数の素因数分解問題に対する数体ふるい法 (NFS; Number Field Sieve method, [LL93]) は
現時点での最良のアルゴリズムとして知られている [IK03]. 数体ふるい法は, 前処理 (多項式生*1

最近になってメッシュ回路ベースの改良案も提案されている [GS04].

*2 1 ドル = 100 円として換算, 以下同様
*3

Shamir らは別の論文で 0.09 µm テクノロジーにおける試算も示している. その場合, 1024-bit 合成数に対しては 110 万ドル (約 1 億 1000 万円) の費用と 1 年の計算時間が必要とされている [LTS+03].

–9–成) ステップ, 関係式探索 (ふるい) ステップ, 線型代数ステップ, 後処理 (平方根計算) ステップの 4 つのステップから構成される. このうち素因数分解計算の大部分を占めるのは, 関係式探索ステップと線型代数ステップである.

TWIRL と TWINKLE は関係式探索ステップを処理するデバイスであるので, 以下では関係式探索ステップの処理内容だけを説明していく. 数体ふるい法の動作原理, 他のステップの処
理内容, 関係式探索ステップと他のステップとの関係などに関しては, 数体ふるい法に関する既存の文書 ([LL93, IK03] など) を参照されたい.

2.2.2

ふるい処理

整数の組 (a , b) が以下の 3 条件を満たすとき, 組 (a , b) を関係 (relation) と呼ぶ.

1. gcd(a , b) = 1
ただし gcd(a , b) は整数 a , b の最大公約数を表す.

2. fR (a , b) は BR -smooth
ただし 1 次の整数係数 2 変数多項式 fR (x, y) = mx + y, 自然数 BR は与えられているとする.

3. fA (a , b) は BA -smooth
ただし d 次の整数係数 2 変数多項式 fA (x, y) = (−x)d F(−y/x), d 次の既約な整数係数 1変数多項式 F(z) = cd zd + · · · + c0 (ci ∈ Z), 自然数 BA は与えられているとする.
ここで自然数 N が自然数 B に対して B-smooth であるとは, N の最大素因数が B 以下のこと,
あるいは N が B 以下の素因数の積に分解できること, つまり N が

N=



pi ≤B

pei i

と表せることをいう. このとき自然数 B を smoothness bound と呼ぶ.
数体ふるい法における関係式探索ステップの目標は, 与えられた 2 次元領域

{ (a , b) ∈ Z × Z | − R/2 ≤ a ≤ R/2, 1 ≤ b ≤ H }から, 上の 3 条件を満たす関係 (a , b) を規定の個数以上見つけることである. このとき見つけるべき関係は規定の個数以上であればどのような組み合わせでも良く, また全て見つける必要もない. 定数 R ∈ N をふるい幅 (sieve line width), H ∈ N をふるいの本数 (sieve line number) と呼ぶ. 例えば 1024-bit 合成数に対する TWIRL では R = 1.1 × 1015 , H = 2.7 × 108 を使用する.
以下では多項式 fR (a , b), fA (a , b) および自然数 R, H, BR , BA は関係式探索ステップへの入力として与えられていると仮定する. また関係の条件 2. と条件 3. は類似しているため, 以下で– 10 –

は簡単のため, 多項式 f (a , b) は fR (a , b) または fA (a b) のいずれかを, B は BR または BA のいずれかを表すこととする.
関係式探索ステップの基本的な動作は, 固定された b に対し, f (a , b) が B-smooth となる a
を {−R/2, . . . , R/2} の中から見つけ出すことである. ここで f (a , b) が B-smooth であるとは

f (a , b) =


pi ≤B

pei i

(2.2.1)となることであったから, f (a , b) を B 以下の素数 pi で順番に割っていくことで, f (a , b) がB-smooth であるかを判定することはできる. しかし除算は大量の計算リソースを必要とするため, 効率的に処理するには好ましくない.
そこで TWIRL は, 以下で紹介するふるい (sieve) を用いることで, 関係の効率的な探索を可能にしている. まず式 (2.2.1) は

log f (a , b) = eipi | f (a ,b), pi ≤Blog pi ≈log pi (2.2.2)pi | f (a ,b), pi ≤Bと近似できることに注意する. ここで x は実数 x の四捨五入, すなわち x に最も近い整数を表す. 式 (2.2.2) のように近似できるのは, ほとんどの大きな素因数 pi に対しては ei = 1 となることと, メモリ効率の観点から対数の値を整数に丸めた方が好ましく, 誤差は後で調整可能なことが理由である. 実際の処理は以下のようにして行う:
あらかじめ f (a , b) に対応する変数 v (初期値 0) を用意し, 整数 f (a , b) が素数 pi で割り切れる場合, v に log pi  を加える. この操作を B 以下の素数全てに対して行い, 最終的に v の値が log f (a , b) に近い場合, (a , b) を関係の候補として扱う. 候補となった (a b)に対しては, 正しい素因数分解を通じて, 本当に関係になっているかを判定する.
なお v の値が log f (a , b) に近いかどうかの判定は, v の値が近似値であることを考慮して, b に
よって定まる値 T (b) に対し, v > T (b) かどうかで判定する. T (b) としては log f (a , b) の 0.8 倍程度の値を使用する. T (b) を閾値 (threshold) と呼ぶ. 一般に閾値を緩くすれば, たくさんの a
が候補として得られる.
ふるいは上記の処理を同時に行うことが特徴である. いま多項式の選択方法から

f (a , b) が pi で割り切れるならば, f (a + pi , b) も pi で割り切れるという性質が成立する. そこで上記の処理をまとめて行うために, 始めに f (−R/2, b), f (−R/2 +1, b), . . . , f (R/2, b) に対応する R + 1 個の変数 v−R/2 , v−R/2+1 , . . . , vR/2 (初期値は全て 0) を用意する. 次に, 素数 pi に対し f (−R/2, b) から順に pi で割り切れるかを調べていく. f (a0 , b)

– 11 –a
f (a )
p=2
p=3
p=5
p=7
p = 11
p = 13
p = 17
p = 19合計−3150= 2 × 3 × 52
+log 2+log 3+log 5
—
—
—
—
—
5

−2
151
= 151
—
—
—
—
—
—
—
—
0

表 2.1

ふるいの計算例−1
152= 23 × 19+log 2
—
—
—
—
—
—
+log 19
5

0
153
= 32 × 17—+log 3————+log 17
—
6

1
154
2 × 7 × 11
+log 2——+log 7+log 11
—
—
—
7

2
155
5 × 31——+log 5
—
—
—
—
—
2

3
156
2
2 × 3 × 13
+log 2+log 3———+log 13——
7

で初めて pi で割り切れるとすると, f (a0 + pi , b) も pi で割り切れることになるので, 結局f (a0 , b), f (a0 + pi , b), f (a0 + 2pi , b), . . . は pi で割り切れることが分かる. よって素数 pi に対しては, 変数 va0 , va0 +pi , va0 +2pi , . . . に log pi  を加えれば良い. この操作を B 以下の全ての素数

pi について繰り返していけば, f (a , b) が B-smooth となる a を −R/2 ≤ a ≤ R/2 の中からまとめて見つけることができる. このように a をまとめて見つける操作が, ふるい (sieve) と呼ばれる理由であり, 数体ふるい法の名前の由来でもある. a0 が見つかってしまえば, 除算は必要ないことに注意が必要である.
■計算例

ふるい処理の具体的な例として, f (a , b) = a + 51b, b = 3, B = 20 の場合を考える. 簡単のため f (a ) = f (a , b) = a + 153 と記す. R = 6 すなわち −3 ≤ a ≤ 3 とすると, f (a ) の具体的な値は表 2.1 の第 2 行目のようになる (参考のため各値の素因数分解を
第 3 行目に示したが, 実際のふるいではこれら素因数分解は行わない). B = 20 以下の素数

p = 2, 3, 5, 7, 11, 13, 17, 19 に対し, f (a ) が p で割れる場合に log2 p を加えていった結果が最終行である. 対数値の合計と log2 f (a ) の代表値 log2 f (0) = 7 を比べると, 両者の値が等しい

f (1) と f (3) が候補として得られる. 実際 f (1) = 2 × 7 × 11, f (3) = 156 = 22 × 3 × 13 であり,
どちらも確かに B-smooth となっている. なお f (−3), f (−1) , f (0) も B-smooth であるが, この例ではべき指数の影響が大きいため, ふるいの結果からは漏れてしまっている. しかし閾値を,
例えば T (b) = 0.8 × log2 f (0) = 6 と設定すれば, f (0) は候補として得られる.
数体ふるい法では, 各 line に対して 2 種類のふるい処理が必要で, 1 つ目のふるいを有理数的– 12 –

ふるい (rational sieve), 2 つ目のふるいを代数的ふるい (algebraic sieve) と呼んで区別する. そして 2 つのふるいのどちらにも残った (a , b) を候補 (candidate) と呼び, 候補はふるいの後に以下の最終チェックを受ける. 最終チェックでは 2 種類の関数値 fR (a , b), fA (a , b) を実際に分解し, 本当に B-smooth であるかを確かめる*4 . そしてこのチェックにパスした (a , b) を関係(relation) と呼ぶ. 関係式探索 (ふるいス) テップの出力は関係の集合である.
以下では簡単のため, また文献 [ST03] の記述に合わせるため, a = a + R/2 (a ∈ {0, . . . , R})とする. また a , b の多項式 f (a , b) と a, b の多項式 f (a, b) を上の変数変換の下で同一視する.

2.2.3 TWINKLE
1999 年に Shamir が提案した TWINKLE (The Weizman INstitute Key Locating Engine) は,
前節のふるい操作に基く, 関係式探索ステップの高速処理を目的とした専用ハードウェア・デザインである [Sha99]. TWIRL は TWINKLE のアイディアに基づいているため, 以下簡単に

TWINKLE について説明する. TWINKLE は光学素子を使用することを特徴とする. 構造は発光部と受光部に分かれ, 発光部は独立した多数のセル (LED) を持つウェハーとなっている. こ
こで各セルは素数 pi に対応しており, 時刻 a のとき, f (a, b) が素数 pi で割り切れるような piに対応するセルは log pi  に比例する光を放つようになっている. ウェハーの反対側の受光部には f (a, b) に対応する変数 va を意味する光学素子が設置され, セルから放たれた光を受光す
る. 最終的な受光量log pi  が閾値を越えた場合, その a は候補として残す. 各 LED が周期的に発光する (twinkle) ことが名称の由来である.

TWINKLE の長所は原理が簡単なことである. 各 LED は固有の周期で発光すれば良いので,ハードウェアによる実現も容易である. しかし欠点として, 受光部に光学素子 (GaAs, ヒ化ガリウム) を前提としているため費用が高価であり, さらなる効率化を目的として並列化した場合,発光部と受光部をそれぞれ複数用意しなければならないことから, 並列化による効果が低いことが挙げられる. このため TWINKLE が 1024-bit の合成数のふるい処理を行うことは, 現実的には不可能であると評価されている [LS00].

2.3 基本構造
2003 年 8 月に Shamir と Tromer が 提 案 し た TWIRL (The Weizmann Institute Relation
Locator) は, TWINKLE のアイディアに基いたふるい処理専用ハードウェアのデザインである [ST03]. TWINKLE の持つ材料的な問題に対しては汎用的な ASIC 技術を使用することで*4

実際には 2+2 large prime variation を用いる [LL93].

– 13 –

対応し, 並列化の効果を上げるために, 1 組の Emission controller (発光部) が複数組の Bus Line(受光部) を担当するような設計とした. このため TWINKLE やメッシュ回路に比べても効率が大幅に向上し, 1024-bit の合成数であっても現実的な時間内でふるい計算が可能となったと主張されている.

TWIRL は, 関係式探索ステップの有理数的ふるいと代数的ふるいに対応して, 有理数的
TWIRL (Rational TWIRL) と代数的 TWIRL (Algebraic TWIRL) がそれぞれ提案されているが,パラメータ値以外の構造はほとんど同じであるため, 以下の説明では主に Rational TWIRL に絞って説明していく. ただし Algebraic TWIRL は Rational TWILRL に合格した a だけを処理するカスケード構造になっている (詳細は 2.5.6 節を参照).
以下では 1024-bit 合成数の素因数分解を目的としたパラメータを用いて説明する. 具体的なパラメータは 2 重括弧 · をつけて表す*5 . そのパラメータが Rational TWIRL に関するならば xR , Algebraic TWIRL に関するならば xA , 両者に関すならば単に x のように記す.

2.3.1

ふるいの並列処理

関係式探索ステップが処理するラインの本数を H = 2.7 × 108  本, 各ラインの幅をR = 1.1 × 1015  とする. また smoothness bound を B = 3.5 × 109 R , = 2.6 × 1010 A と定める.

TWIRL の大きな特徴は, 関係式探索ステップのふるい計算を並列に処理する点である. まずTWINKLE のように 1 clock cycle あたり 1 つのふるい位置 a を処理するデバイスを考える. 閾
値を T = T (b) とするとき, このデバイスは log2 T = 10 bit 幅の一方向性なデータバスを持ち, 何百万もの条件判断機能付き加算器 (conditional adder) を連続して持つ. それぞれの条件判(i)

断機能付き加算機は 1 つの Progression Pi = { a = a0 + kpi | k = 0, 1, . . . } を担当し, 動作時刻になるとバスに log pi  を加える*6 . データ log pi  を pi に対応する Contribution と呼ぶ. 時刻

t の時, z 番目の加算器は t − z 番目のふるい位置を処理する. パイプラインには 1 clock cycle あたり 1 つの速さでふるい位置のデータが流れ, 0 を先頭に 1, . . . , R が流れていく (図 2.1 (a) 参照).
次にこのデバイスの並列化を行う. 先ほどと同じ log2 T bit 幅のバスを s = 4, 096R , =32, 768A 本用意し, 時刻 t の時には z 番目の加算器の i 本目のバスは (t − z)s + i 番目のふるい位置を処理するように変更する. ここで各パイプラインの先頭になるふるい位置を 0, 1, . . . , s − 1とする (図 2.1 (b) 参照). このように変更することで, 1 clock cycle あたりに処理するデータを*5*6

これらパラメータは提案者の推奨値である.
ここで log pi  は対数値 log pi に最も近い整数 (つまり四捨五入) を表す.

– 14 –

図 2.1

ふるい位置の配置 (a)=単一の加算器列 (TWINKLE), (b)=複数の加算器列 (TWIRL) [ST03]

s 個にすることが可能となる. ただし 2 つの問題が生じてしまう. 1 つは時刻の進みが 1/s になるため, それに応じた処理が必要になることである. もう 1 つは s 本のバスを同時に並列処理するために, 同じ Progression Pi に対応する加算 log pi  を同時に行う必要が生じることである*7 . そこで同じ Progression Pi を担当する送信器を複数使用するのだが, 素数によって頻度が異なるため, 素数の大きさによって 3 種類の Station と呼ばれるユニットを併用する. 具
体的には, 大きな素数 (Largish Prime) に対しては Largish Station, 小さな素数 (Smallish Prime)に対しては Smallish Station, とても小さな素数 (Tiny Prime) に対しては Tiny Station を用い
る*8 . 各 Station は決められた範囲の素数を担当し, パイプライン状に連結されている. 最後の Station の出力後に閾値判定を行うユニットを配置し, その出力をデバイスの出力とする.

Rational/Algebraic TWIRL の概念図を図 2.2 に示す. ただし Station によって Progression の送信器の構造が異なるため, 図では省略した.
素因数分解 (の関係式探索) 装置としての TWIRL は, 複数個の Rational TWIRL が 1 個のAlgebraic TWIRL に連結され, クラスタとして機能する. 1024-bit 合成数に対しては, 8 個の Rational TWIRL が 1 個の Algebraic TWIRL に連結される (図 2.3 参照). クラスタの出力は関係 (a, b) の集合である. なお提案者によれば, 1024-bit 合成数の分解に必要なクラスタ数は*7もちろん Progression 送信器を s 組用意すれば良いが, それでは並列化による効果は不十分である (s 個のTWINKLE を同時に処理しているのと同等の効果しか得られない).
*8 数体ふるい法では Large/Small Prime という概念もあるが, Largish/Smallish/Tiny Primes とは別の概念であり,注意が必要である.

– 15 –

194 組と試算されている (2.4.1 節参照).
回路の大部分を占めるのは 3 つの Station であるので, 以下, 各 Station の構造を簡単に説明する. 詳細な構造やパラメータについては 2.5 節を参照されたい. なおふるい制御部と閾値判定部については説明を省略する*9 .

2.3.2 Largish Station
素数 pi に対応する Progression Pi の送信器は, Contribution log pi  を周期 pi /s で発行する.
従って pi /s

1 の時の発行頻度は非常に小さいため, 図 2.1 のように 1 個の送信器が 1 組のProgression を担当する構造は非常に効率が悪いといえる. そこでこのような場合に, 送信器は複数の Progression を担当し, Progression 情報の通り道となる Delivery Line を複数の素数で共有するようにすれば, 大幅な回路削減に直結する. これが Largish Station の基本的なアイディ
アである. 実際には素数 pi が 5.2 × 105 < pi < 3.5 × 109 R , 4.2 × 106 < pi < 2.6 × 1010 A の
場合を Largish Prime と呼び (このとき 127 < pi /sR < 854493, 127 < pi /sA < 793458 となる),
以下の構造を用いる.
図 2.4 は提案者による Largish Station のデザインである. ここで Largish Station は, Progres-sion 送信器 ( DRAM Memory + Cache + Processor ), Buﬀer, Delivery Line から構成される.
C = 8, 490R , = 59, 400A 個の送信器は唯一の Buﬀer に接続され, Progression 情報は送信部から Buﬀer を経て Delivery Line に送られる. Progression は Progression Triplet として表現
され, Memory に保存されている. Progression Triplet は Processor によって周期的にチェックを受け, 該当する場合には情報が Emission Triplet として Buﬀer に送信されるとともに, 新しい
状態情報に更新される. Buﬀer は複数のプロセッサから送信された Emission Triplet を受け取り, 時刻情報の順に保持し, 適当なタイミングで Delivery Pair を発行する. Delivery Pair はパイプライン化された Delivery Line (Cell が鎖状に連結したもので, 各 Cell はデータの転送と加算器の機能を持つ) に送信される.
以下, 各部分を詳細に説明する.
■Progression 情報の更新

Progression 情報は送信器内の Memory に保管されている. こ

こで Largish Prime に対する Progression の集合 {Pi } は分割して送信器に保管され, 重複はないものとする. j 番目の送信器が保持する Progression の個数を d j 個とする (ただし32 ≤ d j ≤ 2.2 × 105 R , 32 ≤ d j ≤ 2.0 × 105 A で, 個数は送信器によって異なる). Progression*9

TWIRL の提案論文でも詳細は示されていない.

– 16 –

図 2.2 Rational/Algebraic TWIRL の概念図

図 2.3 TWIRL クラスタ

– 17 –

図 2.4 Largish Station の構造 [ST03]

Triplet は (pi , (i) , τ(i) ) で表されるデータの組で, pi は素数の値, 次の発行情報 a(i) ∈ Pi に対して
τ(i) = a(i) /s は Contribution が足される時刻, (i) = a(i) mod s は Contribution が足される Bus
Line 番号を表す. (ただし a(i) は陽には保管されていない).
Processor は以下の操作をパイプライン方式で実行する:
1. Progression Triplet (pi , (i) , τ(i) ) を読み込み, このデータを Memory から消去する.
2. Emission Triplet (log pi , (i) , τ(i) ) を Buﬀer に送信する.
3. ˜(i) ← ((i) + pi ) mod s, τ̃(i) ← τ(i) + pi /s + w を計算する. ただし w = 1 if ˜(i) < (i) ,w = 0 otherwise.
4. Progression Triplet (pi , ˜(i) , τ̃(i) ) を Memory に書き込む.
Emission Triplet (log pi , (i) , τ(i) ) が Buﬀer に送信されるのは, 時刻 τi の直前であって欲しい (早すぎると Buﬀer のメモリがあふれてしまうし, 遅すぎると Delivery Line への送信に間に合わない). 従って Processor が読み込む Progression Triplet は発行直前のものを読み込むようにしたい. 各 Progression Triplet の読み書き位置を固定し, 必要な情報をスキャンする単純な方式は, 今のように Progression Triplet の個数 d j が大きいときには非効率的である. 次節のように時刻 τ(i) によってインデックス付けされた位置に保管することで, Memory 上で効率的な配置が可能となる.

– 18 –

■Progression の保管方法 Processor は Memory (DRAM) 上に記憶された Progression Triplet
を一定の速度で連続的・巡回的に読み込む ( 1 triplet あたり 2 clock cycle ). 読み込んだデー
タが空の場合には何もせずに次のデータを読み込む. そうでない場合, Processor は前述のようにして新しいデータを計算し, 適当な位置, つまり時刻 τ̃(i) の少し前に読み込まれる位置に更新されたデータを書き込む. このようにして Processor は発行直前の Progression Triplet を読み込んでいく. Progression Triplet は最初の空の位置に書き込まれる (ただしインデックスをさかのぼる) ようにして, 書き込み位置が空である確率を高めるために, Memory は必要量の 2 倍を確保する.
もしも適切な場所から 64 個以内に空の場所がない場合*10 , Progression Triplet は任意の場
所 (または専用のオーバーフロー領域) に書き込まれ, 後に適切な位置に移動するようにするが,場合によってはこれらの Emission が失われる可能性もある. しかしこのようなことが起きる
確率は希であるし, 例え失われたとしても十分に許容範囲内である (つまり関係式探索ステッ
プで関係を規定個数以上集められる) と提案者は主張している.

j 番目の送信器は d j 個の連続した素数 {pmin , . . . , pmax } を担当するとしよう. この情報を記録するのに必要な Memory 量は pmax /s ワード (ただし 1 ワードは 1 個の Progression Triplet を記録するのに必要なデータ量) である. Progression Triplet を読み込んだ際, pi = pmax の場合には, 更新後の Progression Triplet は読み込み位置から最も離れている. pi がそれより小さい場合には, だんだんと読み込み位置に近づくことになり, pi = pmin の場合が最も近い. 素数定理によると pmax /s − pmin /s ≈ d j × loge (pmax )/s となるから, 更新後の書き込み位置の幅は

d j × loge (pmax )/s < d j × loge (B)/s

djとなり, その幅は非常に狭い (図 2.5 参照). したがって Memory をシリンダ状に配置し, 小さなウィンドウが一定の速度で Memory の周りを動くようにすれば, 読み書きに伴う Memory へのアクセスはウィンドウを通して行われる*11 . シリンダ状の Memory は素数の個数に応じてさま
ざまな大きさで各送信器に配置される.
ウィンドウは SRAM ベースの高速なキャッシュによって実現できる. 最も古いデータを

DRAM に書き込むことと, 次の DRAM のデータを読み込むことによって, キャッシュのデー
タはシフトされていく. よって SRAM と DRAM の間に適切なインターフェイスを用いれば, DRAM の高レイテンシ*12 を緩和することが可能となると同時に, DRAM の構造が簡単*101 つの Progression Triplet が必要とするメモリ量を 1 個と表現している.
これがデバイス名 ”twirl”(回転する) の本当の由来であろう.
*12 データの読み出し要求を行ってから, 実際にデータが転送されるまでにかかる遅延時間.
*11– 19 –

図 2.5 Progression の保管に, さらには DRAM は少量で済むことになる. なおキャッシュミスは起こり得ない. なぜなら

Processor と Memory の間にはインターフェイスは「次の Memory 位置を読む」と「与えられたアドレスよりも前の最初の空の Memory 位置に Triplet のデータを書き込む」だけであり, 後者はキャッシュを用いて回路が実現できるからである.
■送信器の個数

Rational/Algebraic TWIRL が使用する送信器の個数 C = 8, 490R , =59, 400A の算出理由を簡単に説明する. j 番目の送信器が担当する, 連続する d j 個の素数を{pmin , . . . , pmax } とすると, 送信器が用意すべきメモリは pmax /s ワードとなる. このメモリ領域に d j 個の Progression Triplet を格納することになるが, メモリからの読み込みに 2 clock

cycle 必要なことと, メモリは必要量の 2 倍を用意することから, d j × 2 × 2 = pmax /s でなければならず, 結局 4s × d j = pmax なる関係式が成立しなければならない. あとは数値的に調べていくことで, 各送信器が保持する Progression の個数 d j と, 送信器の総数 C が得られる.

Rational/Algebraic TWIRL に対する計算例 (抜粋) を 2.6 節に挙げる. なお計算値と提案者の推奨値が異なっているが, 理由は不明である.
■Buffer

Buﬀer は複数の Processor から Emission Triplet を受け取り, Delivery Line に対してDelivery Pair を送信する. 従って Buﬀer の中心となる動作は, 受け取った Emission Triplet を– 20 –

時刻情報を基に適切に配置し, 適切なタイミングで変換した Delivery Pair を Delivery Line に送信することである. つまり Emmision Triplet (log pi , (i) , τ(i) ) は, Delivery Pair (log pi , (i) )に変換され, (i) に応じて適切な Delivery Line に時刻 τ(i) の時に送信される.
これらの条件を満足させるために, TWIRL では以下のように Buﬀer を設計する. Buﬀer は複数のキューとパイプライン状のネットワークから構成される. まず入力される全ての Emission

Triplet は時刻情報をインデックスとしたキューに入力される. ここでキューはメッシュ状になっていて, 行方向では常にバブルソートが, 列方向では常にランダムシャッフルが行われている. 最後の数行のデータの時刻情報は現在の時刻情報と比較され, マッチしたデータはパイプ
ライン状のネットワークにおいて Bus Line 番号をインデックスとして並べ換えられた後, 適当
な Delivery Line に対して送信される. 輻輳の影響により Delivery Line への送信が遅れることもあり得るが, その場合にはデータを破棄することにする (しかし適切なパラメータの下では,
このようなことが起きるのは極めて希であると提案者は主張している).

Buﬀer のサイズは, 送信前の Emission Triplet をどれだけ保持するかということ (これはProcessor の構造から小さい値となる) と, 各プロセッサが発行する Progression Triplet の速度(およそ  4 clock cycle / triplet ) によって決まる.
■Delivery Line

Delivery Line は Buﬀer から Delivery Pair (log pi , (i) ) を受け取り, (i) /kclock cycle 後に加算を行う (ここで Delivery Pair は 1 clock cycle あたり k = 4 本の BusLine を進むとする). Delivery Line は Bus Line と直交する Cell の 1 次元配列として実装され,Cell は 1 組の Delivery Pair を保持することができる. Cell は自分の Bus Line 番号 (i) を比較
し, 等しい場合には Bus Line に log pi  を加えてから Deliver Pair を破棄する. 等しくない場合には, シフトレジスタのように, 隣の Cell に Delivery Pair を送る.
各送信器から発行される Progression Triplet は, 平均的には 4 clock cycle につき 1 個であるから, Delivery Line は送信器のの 1/4 程度の割合で用意すれば良い. 提案者による Delivery

Line の本数は 2, 100R , 14, 900A 本であり, *13 . 装置の大部分を占めることになる. コスト削減のために, interleaving と carry-save 加算器が利用可能であることを 2.5.1 節で, さらには代数的ふるいにおいてはこれら加算器がほとんど不要となることを 2.5.6 節で説明する.
■Progression Triplet のサイズ

Progression Triplet (pi , , τ) を保持するには, データの有無を表すフラグに 1 bit, 素数 pi を保持するのに |pi | = 32R bit, Bus Line 番号  を保持するのに|sR | = 12R bit が必要である. また時刻情報 τ については, 前述の Processor, Memory, Buﬀer*13

Rational TWIRL における Delivery Line の本数は, 論文には ”2,100120” 本と記載されているが, 正しくは
”2,100” 本 (程度) である. これは回路規模見積もりからの逆算からも明らかであるし, 実際 TWIRL の提案者である Eran Tromer 氏に確認したところ, 誤りを認めている.

– 21 –

図 2.6 Smallish Station の構造 [ST03]の説明では clock cycle を表す任意の整数であることを仮定していたが, τ は Progression Triplet
が Memory から読み込まれてから, Buﬀer から送信されるまでの時間を表せれば良いので, 適
当な整数 2048 による剰余で現実的には十分である. よって τ を保持するには log2 2048 = 11

bit で良い. さらに初期化 (2.5.4 節) で必要となる |pi | = 32R bit を考慮すると, Progression
Triplet のサイズは 12 + 2|pi | + log2 s = 88R bit となる.

2.3.3

Smallish Station

送信器が担当する素数 pi が s と同じくらいの大きさの時 (256 < pi < 5.2 × 105 R , 256 <pi < 4.2 × 106 A すなわち 0 < pi /s < 127R , 0 < pi /s < 129A ), Progression の発行周期はLargish Station の時に比べて短くなる. 送信器は 2 clock cycle 毎に高々 1 個の Progression
しか発行できないので, Smallish Prime に対しては各送信器が担当する素数をあまり多くすることができない. つまり Largish Station のような構造はコスト的に不利になってしまう. またProgression が頻繁に発行されることから, 各 Progression が一ヶ所から発行される場合, 遠くの Bus Line まで送信するコストは大きい. 従ってこれらの Smallish Prime に対しては, Largish

Station とは異なる別のデザインが必要であり, これが Smallish Station を提案する理由となる.
提案者によるデザインを図 2.6 に示す.
以下, 簡単に Smallish Station の構造を説明する.
■Emitter

Smallish Station における Progression の送信器を Emitter と呼ぶ. Emitter は単一の Progression を担当し, Delivery Pair を生成する小さな回路である. Emitter は Progression– 22 –

の状態を内部に持つレジスタに保持し, 適宜 Delivery Pair を発行する. ここで Delivery Pair(log pi , (i) ) は, 一定時刻後に (i) 番目の Bus Line に対して log pi  が加算されることを表す.
Emitter の効率的なデザイン法については 2.5.2 節を参照されたい.
Smallish Station では発行周期が短いため, 同じ素数 pi を担当する Emitter を複数用意して,
各 Emitter の周期を増加させる. これを Emitter の重複 (duplication) と呼ぶ. ただし素数 pi に対応する Emitter の個数を ni = s/2√

pi 2 個とする (ni = 2, 4, 8, 16, 32, 64R ) *14 . 各 Emitter√
は内部のカウンター情報によって随時更新され, Delivery Pair を T i (=  pi /2 2 ) clock cycle に
1 回発行する (T i = 8, 16, 32, 64, 128R ).
Emitter の重複によって, Delivery Pair の生成源から目的の Bus Line までの距離を短くすることができる (図 2.7 参照). 各素数に対応する Progression は ni 個の Emitter によって保持され, これら Emitter はバス上に一定間隔で配置される. これに呼応して Delivery Lineを s/ni (≈ 2√pi ) 本ずつの Segment に分割する. 各 Emitter は異なる Segment に接続され,√この Segment に対して Progression を T i (= ni pi /s ≈pi /2) clock cycle ごとに送信する.

Progression が到着するまでの時間は短縮されるので, Delivery Line の本数を減らすことができる. またいずれの Emitter においても Emission の周期は短くなるので, Smallish Station では s 程度の (あるいはそれよりも小さい) 素数 pi を扱うことができる. Smallish Station 全体
で必要な Delivery Line の本数はおよそ 501R 本で, これら Delivery Line は異なるサイズのSegment に分割される.
■Emitter の個数

Rational/Algebraic TWIRL のそれぞれにおいて, 素数 pi の大きさに応じた
ni #pi =各変数の値を表 2.2, 表 2.3 に示す. ただし Rational TWIRL では #pi = 43007,

184562, Algebraic TWIRL では #pi = 296260,
ni #pi = 476779 となっている.
■Delivery Line の本数

各素数 pi に対応する Progression の送信周期は T i ≈で, 1 clock cycle あたりに送信される Contribution は, 平均で√

pi /2 であるの

1/T i 個となる. Funnel の構造を考慮すると, Delivery Line としてこの 2 倍程度の本数を用意すれば良い (2.5.3 節参照). 実際,
具体的に計算すると,Rational : 2 ×
Algebraic : 2 ×
256<pi <5.2×10

1
≈2×
Ti
5

256<pi <4.6×10

1
≈2×
Ti
6





2
√ = 2 × 254.6 = 509.2pi
5

256<pi <5.2×10

2√ = 2 × 624.4 = 1248.8pi
6256<pi <4.6×10となる. ここで計算値と提案者の推奨値が異なっているが, 理由は不明である.
*14

x 2 は x を 2 のべきに丸めた値, すなわち x 2 = 2log2 x を表す.

– 23 –

図 2.7 Segment 分割

表 2.2 Smallish Station のパラメータ (Rational TWIRL)

pi
#pi
ni
|Gi |
βi
Ti

28

···
118
64
64
6
8

210

···
392
32
128
7
16

212

···
1336
16
256
8
32

214

···
4642
8
512
9
64

216

···
16458
4
1024
10
128

218

···
20061
2
2048
11
256

5.2 × 105

···
59025
2
2048
11
256

220

表 2.3 Smallish Station のパラメータ (Algebraic TWIRL)

pi
#pi
ni
|Gi |
βi
Ti

28

···
118
64
64
6
8

210

···
392
32
128
7
16

212

···
1336
16
256
8
32

214

···
4642
8
512
9
64

– 24 –

216

···
16458
4
1024
10
128

218

···
214289
1
4096
12
512

4.2 × 106

図 2.8 Funnel■FunnelSmallish Station でも Largish Station と同様に複数の Progression で Bus Line を共有するが, 各 Emitter を全ての Bus Line と接続するのは無駄が多い. そこで Funnel と呼ばれる

2 段のユニットを用いて, まばらな入力を以下のようにして圧縮する (図 2.8). 各 Funnel の入力
は多数の Emitter の出力に接続される (各 Emitter の接続先となる Funnel は 1 個). Funnel の入力は 1 次元配列 (ただしそのほとんどの成分は空) と考えることもできる. Funnel の出力も 1次元配列だが, その長さはずっと短く, 出力の配列の空でない成分の個数は, 何 clock cycle か前の入力となった配列の空でない成分の個数と同一になっている. Funnel の出力は Delivery Lineに接続される. 改良版シフトレジスタを使用した Funnel の実装法を 2.5.3 節で述べる. なお

Funnel は Largish Station における Buﬀer に相当するユニットであるが, 時間情報によるソート機能が省略されている.

2.3.4 Tiny Station
とても小さな素数 pi < 256 に対しては, Buﬀer や Funnel のコストは不利である. またこのような素数は各 clock cycle ごとに複数個の Emission を必要とするので, いくつかのProgression に Delivery Line を割り当てるのは得策でない. 従ってこれら Tiny Primes に対しては 3 つめのデザインが必要となる. 提案者による Tiny Station のデザインを図 2.9 に示す.

Tiny Station では Smallish Station と同様に, 同じ素数に対して複数の Emitter を用意する.

– 25 –

図 2.9 Tiny Station の構造 [ST03]

2.4 提案者によるコスト見積もり
本節では, 提案者による TWIRL のコスト見積もりを示す. 以下では現在の LSI テクノロジーを前提とし, 素因数分解問題のサイズごと (1024-bit, 512-bit, 768-bit) に算出する. ただしこれ
ら見積もりは大まかなものであって, 多数の概算値と仮定を用いているため, 提案者も認める通り現実のコストとは定数のオーダーで異なる可能性があることを考慮しなければならない. 本
節の内容の正当性を検証することが本報告書の主目的の一つである.
本節の見積もりで使用する TWIRL のパラメータを表 2.4 にまとまる.

2.4.1 1024-bit 合成数
1024-bit 合成数に対しては, 2.3 節の基本構造に加え, ふるいのカスケードを用いることを仮定する (2.5.6 節参照). 概算によると, 1 つの Rational TWIRL が必要とするシリコンの面積
は 15,960 mm2 (30 cm シリコンウェハー (約 66,000 mm2 ) の 1/4) となる. このうち Largish

Station は 76 % (DRAM は全体の 37 %), Smallish Station は 21 %, Timy Station は残りである
3 % を占めている. 同様に, 1 つの Algebraic TWIRL が必要とするシリコンの面積は 65,900mm2 (30 cm シリコンウェハー 1 枚) であり, このうち Largish Station は 94 % (DRAM は全体の 66 %), Smallish Station は 6 % を占めている. この他の詳細なパラメータは 2.5 節を参照されたい.

1 組の TWIRL クラスタは, 8 個の Rational TWIRL と 1 個の Algebraic TWIRL から構成
され, 全体で必要なシリコンの面積はウェハー 3 枚 (1/4 × 8 + 1 = 3) となる. 各 Rational

TWIRL は Algebraic TWIRL に対して単方向的接続をしていて, 13 bit/clock cycle でデータを転送する. クラスタは 1 本のラインをふるうのに, スループットで R/sA clock cycle (周波数 1GHz で約 33.4 秒) を必要とするので, 全領域 (H 本のライン) をふるうには, 約 286 年(33.4 × H = 9.02 × 109 秒) が必要である. さらに 2.5.5 節で述べる高速化技法を用いると約 33– 26 –

表 2.4 TWIRL のパラメータ

パラメータ

意味

1024-bit768-bit

512-bitR

Line 幅

1.1 × 1015

3.4 × 1013

1.8 × 1010

H

Line 数

2.7 × 108

8.9 × 106

9.0 × 105

BR

Smoothness bound (有理数側)

3.5 × 109

1.0 × 108

1.7 × 107

BA

Smoothness bound (代数側)

2.6 × 1010

1.0 × 109

1.7 × 107

% の高速化が可能であり, 約 194 年 (= 286 × 0.67) に改善できる. 従って 194 組のクラスタを用いれば, 約 1 年でふるいが終了することになる. ウェハー 1 枚の製造コストを 5,000 ドル (約50 万円) と仮定した場合, このときの製造コストは合計で約 290 万ドル (約 2 億 9000 万円) となる.
パッケージ, 電力供給, 冷却装置などの費用を考慮し, エラーマージンを加味すると, 1024-bit
合成数の素因数分解に必要なふるいを 1 年で終了させるのに必要な製造コストは, およそ 1000万ドル (約 10 億円) となる*15 . この他に設計, シミュレーション, マスク製造などに対し, 初期
開発費 (NRE; Non-Recurring Expenses) として 2000 万ドル (20 億円) 程度が必要となる. 以上をまとめると表 2.5 のようになる.
■詳細な回路規模見積もり

ハードウェアに関する詳細パラメータ (2.4.4 節) をもとにした,

1024-bit 合成数用の TWIRL の回路規模の詳細見積もりを表 2.6 (Rational) と表 2.7 (Algebraic)に示す.
■0.09 µm での見積もり

Shamir 等はその後の論文において, プロセスルールを 0.09 µm に変更した場合の見積もりを示している [LTS+03]. その論文によると, 変更に伴って回路面積は約1/2 倍, 速度は約 2 倍となり, パラメータを改良することで, 全体として約 9 倍のコスト改良が可能であるとしており, 0.13 µm の時と同じクラスタ数が 110 万ドル (約 1 億 1000 万円) で製造可能と結論づけている (必要な計算時間は 1 年のまま変わらない).

2.4.2

512-bit 合成数

512-bit 合成数に対しては, 2.3 節の基本構造を用いる. ただし BR , BA , R, H, sR , sA 以外のパラメータは 1024-bit の場合と同じ値を用いた. このとき 1 枚の TWIRL チップが必要とする*15

このような場合, 通常はシリコンの製造コストの 2 倍を見積もるのに対し, 提案者は 3 倍として見積もっている.

– 27 –

表 2.5

提案者による TWIRL の概算コスト (1024-bit)

Rational TWIRL
プロセスルール
周波数
集積度

Largish Station の比率 (DRAM の比率)
Smallish Station の比率
Tiny Station の比率
チップ面積

計算時間 × クラスタ数
コスト

Algebraic TWIRL

0.13 µm
1 GHz−62論理回路: 2.8 × 10 mm /transistor, DRAM: 0.2 × 10−6 mm2 /bit
76 % (37%)
94 % (66%)
21 %
6%
3%
0%
2
15,960 mm /1 個
66,000 mm2 /1 個(30 cm ウェハー 1/4 枚)(30 cm ウェハー 1 枚)
合計 30 cm ウェハー 3 枚/クラスタ 1 組
1 年 × 194 組
製造コスト: 1000 万ドル (約 10 億円)/一式
NRE: 2000 万ドル (約 20 億円)

シリコンの面積は 800 mm2 となり, うち Largish Station が 56%, 残りのほとんどを Smallish

Station が占める. 1 本のラインをふるうのに必要な時間は, スループットで R/s clock cycles(周波数 1 GHz で約 0.018 秒) であり, 全領域 (H 本のライン) をふるうには, 約 4.5 時間が必要となる. 以上をまとめると表 2.8 のようになる.

2.4.3 768-bit 合成数
768-bit 合成数に対しても, 2.3 節の基本構造を用いる. ただし BR , BA , R, H, sR , sA 以外のパラメータは 1024-bit の場合と同じ値を用いた. このとき Rational TWIRL は 1330 mm2 ,Algebraic TWIRL は 4430 mm2 を必要とする. 1 組の TWIRL クラスタは 4 個の Rational
TWIRL と 1 個の Algebraic TWIRL から構成され, 合計で 9750 mm2 を必要とする. 1 本のラインをふるうのに, スループットで R/sA clock cycles (周波数 1 GHz で約 8.3 秒) を必要とするので, 全領域をふるうには約 855 日 (約 2.3 年) が必要となる. 1024-bit の場合と同様な高速化 (2.5.5 節) が可能であることと, 1 枚のウェハーから 6 組のクラスタがとれることを加味す
ると, 768-bit 合成数のふるい処理に必要なコストは, ウェハー 1 枚を用いた場合, 約 95 日 (約3 ヶ月) となる. 以上をまとめると表 2.9 のようになる.

– 28 –

表 2.6

提案者による Rationl TWIRL の詳細コスト (1024-bit)

Largish Station
DRAM
CPU
Cell
Buﬀer など
Smallish Station
Emitter
Cell
Funnel など
Tiny Station
合計
表 2.7

提案者による Algebraic TWIRL の詳細コスト (1024-bit)

Largish Station
DRAM
CPU
Cell
Buﬀer など
Smallish Station
Emitter
Cell
Funnel など
Tiny Station
合計

12,130 mm276 %25,905 mm
37 %
167268917 個 × 2 倍 × 88 bit/triplet × (0.2 ×10−6 mm2 /bit)
2,292 mm2
14 %
96400 trans/個 × 8490 個 × (2.8 ×10−6 mm2 /trans)
3,191 mm220 %
530 trans/個 × 2100 本 × 1024 本 × (2.8 ×10−6 mm2 /trans)
742 mm2
5%
2
3,352 mm
21 %2
1,053 mm
7%2037 trans/個 × 184562 個 × (2.8 ×10−6 mm2 /bit)
1,752 mm2
11 %1220 trans/個 × 501 本 × 1024 本 × (2.8 ×10−6 mm2 /bit)
584 mm2
3%
2
478 mm3%
2
15,960 mm
100 %61,946 mm2
94 %2
43,494 mm
66 %1133598328 個 × 2 倍 × 94 bit/triplet × (0.2 ×10−6 mm2 /bit)
16,033 mm2
24 %96400 trans/個 × 59400 個 × (2.8 ×10−6 mm2 /trans)
708 mm2
1%
530 trans/個 × 14900 本 × 32 本 × (2.8 ×10−6 mm2 /trans)
1,711 mm23%23,954 mm6%
22,719 mm
4%2037 trans/個 × 476779 個 × (2.8 ×10−6 mm2 /bit)
137 mm2
0%1220 trans/個 × 1250 本 × 32 本 × (2.8 ×10−6 mm2 /bit)
1,098 mm2
2%
2
— mm
0%
2
65,900 mm
100 %– 29 –

表 2.8プロセスルール
周波数
集積度

Largish Station の比率
Smallish Station の比率
Tiny Station の比率
チップ面積
計算時間 × チップ数
コスト

表 2.9

提案者による TWIRL の概算コスト (512-bit)

Rational/Algebraic TWIRL (兼用)
0.13 µm
1 GHz−62論理回路: 2.38 × 10 mm /transistor, DRAM: 0.7 × 10−6 mm2 /bit
56 %
44 %
0%
800 mm2 /1 個
4.5 時間 × 1 個
3.4 分 × 79 個 (ウェハ 1 枚)
製造コスト: 180 ドル (約 1 万 8000 円)/1 個

提案者による TWIRL の概算コスト (768-bit)

Rational TWIRL
プロセスルール
周波数
集積度
チップ面積

計算時間 × クラスタ数
コスト

2.4.4

Algebraic TWIRL
0.13 µm
1 GHz−62論理回路: 2.8 × 10 mm /transistor, DRAM: 0.2 × 10−6 mm2 /bit
1,330 mm2 /1 個
4,430 mm2 /1 個
合計 9,750 mm2 /クラスタ 1 組
ウェハー 1/6 枚/クラスタ 1 組
2.3 年 × 1 組
3 ヶ月 × 6 組 (ウェハ 1 枚)
製造コスト: 2200 ドル (約 22 万円)/組

ハードウェアに関するパラメータ詳細

コスト算出に用いたハードウェアに関するパラメータは以下の通りである [LSTT02]: シリ
コンウェハーは 0.13 µm テクノロジーで考え, 300 mm の標準的なウェハー 1 枚の製造コスト
は 5,000 ドル (約 50 万円) とする. 1024-bit 合成数と 768-bit 合成数に対しては DRAM タイ
プのウェハーを使用し, トランジスタ密度は 2.8 × 10−6 mm2 /transistor (論理領域での平均値),

DRAM 密度は 0.2 × 10−6 mm2 /bit (DRAM バンク領域での平均値) とする. 512-bit 合成数に対してはロジックタイプのウェハーを使用し, トランジスタ密度は 2.38 × 10−6 mm2 /transistor,

DRAM 密度は 0.7 × 10−6 mm2 /bit とする. いずれの場合でもパイプラインを使用することか– 30 –

ら, 周波数は 1 GHz として考える.
以下 2.3 節で使用したパラメータを用いた場合の 1024-bit 合成数について, パラメータの詳細を説明する. Largish Station で使用する特殊なプロセッサが必要とする transistor 数は 96, 400R であると仮定する (ただしバッファーと 14Kbit のキャッシュメモリを含む. キャッシュの大きさは pi とは独立である). Smallish Station で使用する Emitter が必要とする transistor 数は 2, 037R (Funnel も含む), Tiny Station で使用する Emitter が必要とする transistor 数は 522R であると仮定する. Delivery Line 上の cell は, interleaving
あり (Largish Station 用) で 530R transistor, interleaving なし (Smallish/Tiny Station 用) で

1, 220R transistor が必要であるとする. 2.3.2 節で説明したメモリ構造では, 通常の DRAMに比べてスラック領域とキャッシュ領域が多めに必要となるので, 通常よりも 2.5R 倍の領域を占めるとする. Bus Line では, ワイヤの重層実装が可能なことから, ラインは領域を必要とせず, レジスタのみ領域を使用するとする. ワイヤのクロスには 0.5 bit/µm を使用するとする.

TWIRL では異なる大きさの内部結合ユニットを多数使用することから, 効率的なレイアウ
トを実現するのは容易でない. しかしここで用いられているユニットの種類は, LSI の世界で通常行われているデザインでの種類数に比べて少ないので, 考慮する余地は大いに残っている.

2.4.5

数体ふるい法に関するパラメータ詳細

1024-bit 合成数に対する TWIRL で使用したパラメータは, 特定の 1024-bit 合成数 (RSA1024) に対するものである. 従って同じコストで他の 1024-bit 合成数が分解できる保証はない
が, TWIRL の性能を把握する上で大きな参考となる.
以下に合成数 n と多項式 F(x), G(x) を示す. ここで n は懸賞問題 (RSA-1024) の対象となっている合成数である. また m は F(m) ≡ G(m) ≡ 0 (mod n) を満たす共通解である. これら多項式は Franke と Kleinjung によって生成された [LTS+03].

– 31 –

n = 13506641086599522334960321627880596993888147560566702752448//
51438515265106048595338339402871505719094417982072821644715//
51373680419703964191743046496589274256239341020864383202110//37295872576235850964311056407350150818751067659462920556368//
55294752135008528794163773285339061097505443349998111500569//
77236890927563
F(x) = 1719304894236345143401011418080x5−6991973488866605861074074186043634471x4+27086030483569532894050974257851346649521314x3+46937584052668574502886791835536552277410242359042x2−101070294842572111371781458850696845877706899545394501384x−22666915939490940578617524677045371189128909899716560398434136
G(x) = 93877230837026306984571367477027x−37934895496425027513691045755639637174211483324451628365
m = 26261986879125080277818236890415818723981059412962467388500//
76103682306196740552925061545133872986635608871461838549751//
98160502278243245067074820593711054723850570027395756140011//
42020313480711790373206171881282736682516670443465012822281//
60838716940928246913831125952039276984310498579374449482143//
7272961970486

2.5 詳細デザイン
本節では TWIRL の詳細なデザイン法について述べる. 動作原理については 2.3 節を参照されたい. 繰り返しになるが, 本節の内容は提案論文に基づくものであり, ことわりのない限り報告者の主張は含まれていない.

2.5.1

Delivery Line

Delivery Line は Buﬀer/Funnel/Emitter から受け取った Delivery Pair を指定の Bus Line まで運ぶ目的で, 全ての Station において利用される. 基本的な構造については 2.3.2 節で述べたが,以下では効率的な実装法について説明する.

– 32 –

■Interleaving

Largish Station における Delivery Line 上の Cell は, 大半の時間はシフトレジ

スタとして機能しており, 加算が行われることは滅多にない. 従って Deliverry Line と Bus Lineの全ての交点に加算器を配置するのは効率的でない. つまり interleaving (中抜き) を適用する
ことで, 加算器を削減することが可能となる. Cell は r = 4R 本の Bus Line をまたぐ構造とし, q 番目の Bus Line とだけ加算が計算できるようにしておく. ここで q は Delivery Line 上で一定であり, その値は Delivery Line に応じて周期的に増えていくとする (1 ≤ q ≤ r). このときDelivery Line r 本を同時に処理するようにすれば, 各 Bus Line に加算器が 1 個ずつ配置されることになる. このように interleaving を用いることによって, Largish Station 全体での Cell の個
数は 1/r に削減することができる. なお Smallish/Tiny Station では interleaving は使用しない.

Delivery Line を流れる Emission Pair は 1 clock cycle あたり r 本の Bus Line を横切ることになるので, Buﬀer から Bus Line への距離が遠ざかるに応じて, ”age” ai /s は小さくなる. 正
確に書くと, 時刻 t において, ふるい位置 a は t − ai /s − (a mod s)/r 本目の Delivery Line の(a mod s)/r 番目の Cell の中の r 本の Bus Line のいずれかに (存在すれば) 位置している.
Largish Station では, Buﬀer は Delivery Pair を Delivery Line に適切な時刻に送信することが前提となっている. 従って Buﬀer を 2 個用意し, それぞれの Buﬀer が半数の Bus Line を担当するようにすれば, 約 2 倍の高速化が可能となる.

Bus Line にパイプライン状のレジスタを用いると, Buﬀer に接続された Delivery Line への
配送は 1 本ごとに 1 cycle clock ずつ遅れるが, Buﬀer の最後にパイプラインを追加することによって対応可能である.

2.5.2 Emitter の重複
本節では Smallish/Tiny Station において使用する Emitter の実装法について述べる (それぞれの構造については 2.3.3 節, 2.3.4 節を参照). 1 個の Emitter は 1 個の Progression Pi を担当
し, Bus Line を segment 分割して得られる集合 G1 , G2 , . . . , Gni の中のいずれかの line (i) ∈ G j
に対して, Delivery Pair (log pi , (i) ) を発行する (ni は segment 分割の個数). このとき (i) の計算と (i) ∈ G j の判定が必要となるが, これらを効率的に処理するには工夫が必要となる. 始めに単純な実装法を用いた場合の問題点を述べ, 次にその改良として効率的な実装法を説明する.
■単純な実装Emitter の最も単純な実装法は, log pi -bit のレジスタを用意して, 各 clock

cycle 毎に s mod pi ずつ増加させていき, 桁上がりが生じる (つまり Delivery Pair を発行する)
ときに (i) を計算して (i) ∈ G j かどうかを調べる方法である. しかしレジスタは 1 clock cycle
で更新されなければならないので, 高価なキャリー先読み機能付き加算器 (carry-lookahead– 33 –

adder) が必要になってしまう. また s と |G j | の設定方法によっては (i) の計算と (i) ∈ G j の判定は手間がかかってしまう.
別のアプローチとして考えられるのは, 2 つのレジスタを用意し, 1 つは (TWINKLE のように) 次の Emission までの時刻をカウントダウンで管理し, もう 1 つは (i) を管理する方法である. これには 2 種類の具体的な実装法が考えられる. 次の Emission までの時刻を (i) とは無関
係に管理してしまうと, Emission の周期が短いため, レイテンシーが小さくなければならない
上に, pi < s の場合を扱うことができない. そこで G j への次の Emission までの時刻を管理す
ることにすると, 別の問題が生じてしまう. つまり G j への Emission の周期は不規則であり, 計算のコストが大きくなってしまうのである. この最後の問題を解消するのが次節の改良方法である.
■Line 番号のビット反転を用いた改良

ふるい位置の任意の Bus Line への割り当ては 1 clock

cycle で可能である. しかし wire をグループに 1 clock cycle で分割するには物理的に接近していることが必要である. そこで以下のようなトリックを用いる. 適当な整数 α, βi に対し

s = 2α , |G j | = 2βi とする (α = 12R , 15A ). そして s で割った余りと Bus Line のビット反転 (bit-reversal), すなわちふるい位置 w mod s と rev(w) 番目の Bus Line を対応づける. ここで

w=

α−1

i
i=0 ci 2

ci ∈ {0, 1} のビット反転 rev(w) はrev(w) =α−1


cα−1−i 2ii=0で与えられる. Progression Pi を担当する Emitter は ni (≈ 2α−βi ) 個ある. そのうち j 番目のEmitter は, j 番目のグループ G j へ送信するようにする ( j ∈ {1, . . . , 2α−βi }). ただし G j は 2βi 本の Bus Line を持つ. このとき次のような性質がある [ST03]:
素数 pi > 2 に対応する Emitter は, s での剰余のために起こる 1 clocl cycle の遅れを除き, 一定の間隔 T i = 2−βi pi で Delivery Pair を発行する.
証明 ふるい位置 a ∈ Pi に対応する j 番目のグループ G j への emission を考える. このとき定義より rev(a mod s)/2βi= j すなわち a ≡ rev( j) (mod 2α−βi ) を得る. 他

方 a ∈ Pi より a ≡ ri (mod pi ) となる ri が存在し, pi は 2α−βi と互いに素であることから, 中国人剰余定理によって, このようなふるい位置の集合は, 適当な ci, j を用いて, Pi, j = { a | a ≡ ci, j (mod 2α−βi pi )} と一致することがわかる. 連続するふるい位置– 34 –

a1 , a2 ∈ Pi, j は a2 − a1 = 2α−βi pi を満たすから, emission の間隔 ∆ は(a2 mod s) > (a1 mod s)
T i∆ = a2 /s − a1 /s = T i + 1 otherwiseとなる.
なお βi の選び方により T i = □√

pi /2 2 となる.

■Smallish Station における Emitter の構造 Smallish Station では, 各 Emitter は以下のような

2 つのカウンタを持つ.
Counter A: その Emitter が次に emission を発行するまでの時刻を保持する. 値は法 T i =2α−βi pi で保持され, 典型的なサイズは 7R , 5A bit である. (ほぼ) 各 clock cycle 毎に 1 ずつ減少していく.

Counter B: 次の emission に対応するふるい位置番号 a に対し, a mod s の上位 βi -bit を保持する. 値は法 2βi で保持され, 典型的なサイズは 10R , 15A bit である. Counter A に繰り下がりが生じたときには 2α−βi pi ずつ増加する. Counter B に繰り上がりが生じたときには, Counter A は 1 clock cycle の間サスペンドする (これで s による剰余の影響が消える).

Delivery Pair (log pi , (i) ) は Counter A に繰り下がりが起きたときに発行される. ここでlog pi  は各 Emitter ごとに固定の値である. このときターゲットとなる Bus Line 番号 (i) は,Counter B の上位 βi -bit によって定まる. この Emitter では残り (α − βi )-bit は固定値となるので, 他の値を求める必要はない.

Emitter は担当する Bus Line の物理的に近くに配置される必要がある. また Counter の値は初期化で適切に設定される必要がある.
■Tiny Station における Emitter の構造

Tiny Station でも Smallish Station と同様のデザインを用い, Bus Line は a mod s のビット反転と対応づける. ここで βi は, |G j | = 2βi が pi 以下の最
大 2 べきとなるように選ぶ. これによって T i = 1 となるので, emission は 1 or 2 clock cycle ごとに発行される. よって Tiny Station における Emitter の構造は Smallish Station のときと同じであるが, Counter A のサイズは 0 であり, 実際にはサイズ βi -bit の Counter B だけとなる.

– 35 –

2.5.3 Funnel
本節では Smallish Station において使用する Funnel の実装法について述べる. Funnel の役割
は, Emitter から受け取った Delivery Pair を Delivery Line に送ることである (2.3.3 節参照). つまり Funnel は Largish Station における Buﬀer からソート機能を削除したユニットと考えることができる. Emitter から Funnel への入力情報には (Buﬀer と同様に) null 情報も含まれるため,これらを効率的に削除する必要がある. 以下では Funnel を 2 段に配置することで効率を向上
させる.

n 列 m 行の行列状の Cell を持つ Funnel を n-to-m Funnel と呼ぶ (nm). 各 Cell は 1 個のProgression Triplet を保持するレジスタを持つ. Funnel への入力は n 個の Progression Triplet
からなる配列で, 各 clock cycle 毎に各列の先頭の行に 1 個ずつ格納され, t 番目に入力された配列の i 番目の要素は, 時刻 t + i に i 番目の列に挿入される. そして全てのデータは毎 clock cycle
ごとに 1 列右にシフトされる. また他の値を書き換えることのない限り 1 行下にシフトされる.

t 番目に出力される配列は時刻 t + n のときに右端から読み出される.
この Funnel でオーバーフロー (空のない列に挿入される) の確率を見積もる必要がある.

n > m として, 各入力が空でないという事象は確率 ν で互いに独立に起きるとする ( 実際 2.3.3√
節の結果より ν ≈ 2/ pi となる). このときオーバーフローによって (空でない) データが失わ
れる確率は
n 

n
k=m+1

k

νk (1 − ν)n−kk−mkで与えられる. ここで m = 5R , n = 1/νR とすると, 上記の確率は高々 0.00011 となるので, これらパラメータを採用する (表 2.10 参照).
上記の値を使用した場合の Funnel の圧縮率は n/m ≈ 1/5ν となるので, Funnel の出力が空にならない確率は ν = ν × n/m ≈ 1/5R となるが, 十分な大きさではない. そこでこの出力を 2 つ目の Funnel に再度入力し, さらなる圧縮を行うことにする. m = 14, n = 35R と設定した場合に オーバーフローが起きる確率は高々 0.00016 なので, 十分小さいと見なすことができる. これら 2 つの Funnel の出力が空にならない確率は ν × n /m = 1/2 となる. Delivery

Line を最適値の 2 倍程度用意すれば, これら 2 段 Funnel との最適な接続が実現できる. このとき Largish Station で用いたような interleaving は使用しない.

– 36 –

表 2.10 Funnel の行数とオーバーフローの起きる確率

m

2.5.4

pi
28

210

212

214

216

218

2

0.024450.02751

0.02895

0.029650.03000

0.0301730.00301

0.004160.00476

0.00506

0.005210.0052940.000260.000500.000650.000740.000780.0008050.00001

0.00005

0.00008

0.00009

0.000100.0001160.00000

0.00000

0.00000

0.00000

0.00000

0.00000

70.00000

0.00000

0.00000

0.00000

0.00000

0.00000

初期化

デバイスの初期化では, 全ての Station において, Progression 状態および初期値の読込やバスのバイパスへの命令読み込みが必要となる. 特にふるい計算の最中に Progression 状態は変化するため, b が異なるたびに再初期化が必要となるが, これら読込は時間がかかるため, あまり
得策ではない (実際 TWINKLE ではボトルネックとなっていた [Sha99]).
ふるいの対象となる各 line は互いに関連がある [GS03]. したがって初期値 ri をふるい毎に定数 r̃i ずつ増加させていけば, 再読込は不要となる. これら初期値は, Progression ごとにlog2 pi bit 程度で DRAM に記録可能であり, 加算は専用のプロセッサを通じて行う. 加算が行われる間隔は R/s と長いので, 急いで計算する必要はない.

2.5.5

ふるい対象の削減

数体ふるい法のふるいステップで収集する組 (a , b) は, gcd(a , b) = 1 を満たす必要があった(ただし a = a − R/2). 従ってふるいの段階でこの条件を満たさない (a , b), つまり小さな整数
c > 1 に対して c| gcd(a , b) を満たす (a , b) を排除することによって, 効率を上げることが可能となる. 数体ふるい法のソフトウェア実装では, c = 2 の場合を考慮するのが普通で [ST03], この場合 25% の効率化が達成できる. TWIRL においても, 同様のテクニックを用いる. まず b が奇数となる line に対するふるい処理を普通に行う. 次に b が偶数となる line をふるうのだが,このときは奇数の a だけを用いる. このとき pi > 2 を満たす素数は pi 個ずつのふるい位置に

contribute すれば良いので, a の初期値 a0 だけを変更すれば良い.

– 37 –

同様にして c = 3 の場合も扱うことにする. c = 2 の場合も同時に考慮すると, ふるいは 4
種類のタイプに分かれる: b ≡ 1, 5 (mod 6) の場合は全領域を, b ≡ 2, 4 (mod 6) の場合は半分の領域 (a ≡ 1 (mod 2)) を, b ≡ 3 (mod 6) の場合は 2/3 の領域 (a ≡ 1, 2 (mod 3)) を, b ≡ 0(mod 6) の場合は 1/3 の領域 (a ≡ 1, 5 (mod 6)) をふるうことになるので, 全体では 2/3 の領域
をふるえば良いことになり, 33% の効率化が達成される. しかし c > 3 の場合を考慮した場合,分類が複雑になるのに比べて効率化の度合いが小さいため, TWIRL では扱わないことにする.

2.5.6

ふるいのカスケード

数体ふるい法における関係式探索ステップでは, 有理数的ふるいと代数的ふるいを処理する必要があり, 両者のふるいに合格した (a, b) を集めるのが目的であった (2.2.2 節参照). しかし代数的ふるいの smoothness bound BA = 2.6 × 1010 A は 有理数的ふるいの smoothness boundBR = 3.5 × 109 R に比べて大きいため, 各 Station において s が最適に設定された場合, 代数的
ふるいのコストが全体の大部分を占めてしまう. さらに 2.4.1 節で示すパラメータを使用してTWIRL によって 1024-bit 合成数のふるい処理を行った場合, その回路面積が 1 枚のシリコン
ウェハーよりも大きくなってしまう可能性が生じる. 従って sA の値をあまり大きくすることができない. そこで以下のようにカスケードを用いることによって, この問題を解決する.

sR , sA を Rational/Algebraic TWIRL の Bus Line の本数とする. 前述したように sA の値はあ
まり大きくすることができない. しかし, 確かに Algebraic TWIRL では sA 本ずつの Bus Lineを処理するように設計されているが, Rational TWIRL の処理においてほとんどのふるい位置は棄却されてしまうため, Algebraic TWIRL の入力となるふるい位置は極めて少ない (提案者のデータによると, およそ 1.7 × 10−4  の割合でしかない). この性質を利用して, Algebraic

TWIRL に対して以下のような改良を施す. Algebraic TWIRL では sA 本という多数の Bus Lineを用いる代わりに, u = 32A 本というごく少数の Bus Line を用意する*16 . ここで各 Bus Line
上の Cell は (v, L) という情報を保持し, L = a mod sA はふるい位置情報, v はこのふるい位置に対応する対数値の和log pi  を表す. これらふるい位置は従来通りパイプライン状に処理され, その速度は 1 clock cycle あたり sA 個とする. Delivery Pair の生成法は従来通りとする.
変更後の Delivery Line はとても短いので, 送信された Delivery Pair (log pi , (i) に対し, u
個の Cell が保持する L の値と (i) の値を 1 cycle clock で一斉に比較することが可能である.
等しい場合には対応する v に log pi  を加え, そうでない場合 (ほとんどがこのケースとなる)Delivery Pair を棄却する.

*16

sA × (1.7 × 10−4 ) = 5.44 であるから, u の値としては 6 より大きい値が必要である.

– 38 –

Rational TWIRL に合格したふるい位置 a に対し, Bus Line へは (0, a mod sA ) を入力する.
このため Rational TWIRL の出力と Algebraic TWIRL の入力をつなぎ, 同時に処理することが必要となる. 両者のふるいの Bus Line の本数 s は異なるため, 1 個の Algebraic TWIRL に対
し sA /sR = 8 個の Rational TWIRL を接続する. 接続されたデバイスをまとめて TWIRL ク
ラスタと呼ぶ. 1 組のクラスタは 1 本の sieve line を処理するが, Rational TWIRL は複数で処理するため, (2.5.2 節の bit 反転と同様の) ふるい位置の interleaving が必要となる. 各 Rational

TWIRL から Algebraic TWIRL へ流れるデータは, 1 cycle clock あたり高々 1 + log2 sR = 13
bit となる (ここで先頭 1-bit はデータの有無を表す).
カスケードを用いることで, Algebraic TWIRL におけると Bus Line の専有面積が劇的に削減できる. また Smalish Station において Emitter を重複させる必要もなくなる (ただし pi < sAの場合は除く). このようにして Algebraic TWIRL では実質的に sA 本ずつの並列処理が可能となり, そのコストは Rational TWIRL よりも小さくなる (2.4.1 節参照). またほとんどコストをかけずに BA を大きくする, つまり H や R を小さくすることが可能となる.
■Rational TWIRL における閾値判定部

Rational TWIRL 内部の Bus Line の本数は sR =

4, 096R 本であるのに対し, カスケードを用いた場合, Rational TWIRL から Algebraic TWIRLに接続される Bus Line の本数は u/(sA /sR ) = 4 本となる. 閾値判定部は, 本来の機能である
閾値判定を行うとともに, Bus Line を流れる不要なふるい位置を棄却して必要なふるい位置のみを圧縮する動作も必要がある.

2.5.7

関係の導出

有理数的ふるいと代数的ふるいの双方に残った (a, b) を候補と呼んだ. これら候補は対数の和の概算値によって判定されているため, 実際の fR , fA の値が smooth になっているかを調べる必要がある. 従って Algebraic TWIRL の後に, この処理を行う関係式導出部が必要となる(2.2.2 節参照) *17 .
■候補の特定Rational/Algebraic TWIRL の Bus Line の最後に比較器を置き, ふるい位置 aに対応する対数値の和 va が閾値 T よりも大きいかどうかを判定する (閾値判定部). 基本的な TWIRL のデザインでは 2 つのふるいは同時に処理され, これらふるいの間で比較器をパスしたペアの情報が交換されることを通じて候補が定まる. 2.5.6 節のカスケードを用いた場
合には, Algebraic TWIRL は, Rational TWIRL をパスしたペアしか処理しないため, Algebraic*17

しかし TWIRL として必須の機能ではない.

– 39 –

TWIRL の閾値判定をパスしたペアは 2 つの判定をパスしたことになる. 提案者の試算では, 候補となる確率は非常に小さい (2.0 × 10−11 ).
■対応する Progression の決定 候補 (a, b) に対し, 次に fR (a, b), fA (a, b) の素因数分解情報が必要となる. 素因数が小さな場合は簡単なので, Largish Prime に関する分解情報が得られれば良い. これは Largish Station において Progression Triplet の情報を保存することで求められる.
実装に当たっては, Largish Station の全ての Processor を通過するパイプライン状の Channel
を 2 つ追加する必要がある. Line Channel は log s s-bit 幅であり, データは Bus Line とは逆方向に流れていく. Division Channel は log2 B-bit 幅であり, データは Bus Line と同じ方向に流れる. 各 Channele は Processor と Processor の間にレジスタを持ち, Rational/Algebraic TWIRLの出力に接続される. 各 Processor に対し, Diary と呼ぶデータを対応づける. ここで Diary
は log2 B-bit のデータを巡回的にとる. 各 clock cycle に, Processor は自分の Diary にデータを保存する: この clock cycle に Emission Triplet (log pi , (i) , τ(i) ) を Buﬀer に送信したならば Triplet (log pi , (i) , τ(i) ) を, そうでなければ null を保存する. Bus line  において候補が見つかったとき,  は Line Channel を通じて送信される. 各 Processor は  の値を参照し, ちょうどz clock cycle 前に Bus Line  に Emission を発行したかを自分の Diary から調べる. ここで z
は Processor が Buﬀer へ出力してから, Triplet が該当する Bus Line に到着し, 閾値判定部まで至ってから Line Channel を通って戻るまでの距離である. 従って Diary の探索は z clock cycle
前に保存されたものから 64 個の空でない要素を調べていけばよい. 該当する Diary が見つかったらば, Processor は Divisor Channel を通じて pi を送る. 異なる候補に対応するデータが混ざる可能性は無視することができると提案者は主張している.
ふるいのカスケードを行う場合, Algebraic TWIRL は Delivery Line を流れるふるい位置に対応するもののみを保存する. Rational TWIRL の Diary は比較的大きくなる (13, 530R ). こ
れはかなり以前のデータを保存する必要があるからである. 最悪の場合, z には全ての Delivery

Line を通過する時刻が含まれる. しかし提案者は, DRAM を用いればこれら Diary を効率的に実装することが可能であるとしている.
■ミニ素因数分解

様々な概算値による計算やエラーの影響, さらには Large Prime の利用に

より, 前述のような素因数分解情報が与えられたとしても, 候補に対してさらなる計算が必要となる. 対応する fR , fA の値の計算, 小さな素数と Diary に登場する素数による除算, 余因子の大きさの判定と素数判定は, 専用の Processor を用いて効率的に実装することが可能である.
しかし余因子が比較的大きく, 合成数になっている場合には, この余因子を素因数分解する必要がある (ミニ素因数分解). ここでミニ素因数分解とは高々 1.0 × 1024  の合成数を分解する– 40 –

ことで, ふるい対象の 2.0 × 10−11  の割合で必要となる*18 . 専用の Processor を使用すればこの素因数分解は 0.05 秒以下で可能であり, ふるい処理に与える影響は小さいと提案者は主張している.

2.6 Largish Station における送信器の理論的サイズ
TWIRL の仕様によると, Largish Station においては C 個の送信器が必要であり, j 番目の送信器は d j 個の Progression を保持する必要があったが (2.3.2 節参照), 詳細なパラメータは与えられていなかった. そこで本節では, 計算実験によって得られた C と d j の具体的な数値結果(抜粋) を示す. ここで j 番目の送信器は連続する d j 個の素数 {pmin , . . . , pmax } を担当するもの
とする.

2.6.1
j
1
100
200
300
400
500
600
700
800
900
1000
1100
1200
1300
1400
1500
1600
1700
1800
1900
*18

Rational TWIRL
pmin
520019564229612193665293723029785921
85492392984310126191103171
1201327
1310123
14293671559209
1702543
18599112032273222262124318112661371pmax
520411564653612751665843723473786661
8556679306371013563110417912024291311229
14306171560547
1704137
18615672033803
222466124340992663867

2000
2100
2200
2300
2400
2500
2600
2700
2800
2900
3000
3100
3200
3300
3400
3500
3600
3700
3800
3900
4000
4100

dj
32
35
38
41
45
49
53
57
62
68
74
81
88
96
105
114
125
136
149
163

log pi  による誤差を考慮している.

– 41 –

29147413193763350191938410274215517462961750860075592227
61518196770921745574382162979059173
999487111032039
12184489
13467173
14891713
16479301
18244279
20213257
22409887

2917457319670935049613844433
421957146339995090753
559756361576736777521746323182244219067843
10004947
11042963
12196759
13480529
14906989
16495783
18262877
20234167
22433197

179
196
214
235
258
283
311
342
376
414
456
502
554
611
675
745
823
910
1007
1115
1235
1370

4200
4300
4400
4500
4600
4700
4800
4900
5000
5100
5200
5300
5400
5500
5600
5700
5800
5900
6000
6100
6200
6300

24857197
27591653
30643601
34059281
37882531
42154283
46938961
52306747
58324949
65078939
72658241
81180107
90767077
101549729
113688271
127373417
142803263
160212719
179859703
202082987
227201969
255621127

24883003
27620503
30674821
34095497
37922741
42199601
46989857
52362581
58388279
65151509
72738389
81270311
90868957
101665099
113817371
127518023
142965967
160397917
180068839
202319617
227468291
255922217

1519
1686
1873
2082
2315
2576
2869
3196
3564
3977
4440
4961
5547
6206
6947
7784
8726
9790
10991
12349
13884
15621

6400
6500
6600
6700
6800
6900
7000
7100
7200
7300
7400
7500
7600
7700
7800
7900
8000
8100
8200
8300
8375

287814977
324289561
365658277
412601771
465914413
526528193
595444519
673899671
763288063
865168963
981421061
1114117409
1265801609
1439225197
1637670719
1865003033
2125557289
2424479921
2767654801
3161963159
3496019321

288156917
17588
324678671
19817
366098329
22345
413099989
25214
466482031
28472
527175023
32177
596174017
36388
674739193
41183
764246513
46646
866259869
52873
982663039
59977
1115536157
68087
1267420051
77358
1441074511
87957
1639798129 100086
1867439429 113980
2128349851 129905
2427673949 148174
2771325673 169149
3166182653 193249
3500716913 213667
d j の合計 = 167268917

2.6.2 Algebraic TWIRL
j
1
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

pmin
4200013472821153269216007091677843976542598650673978570711078297
12552079
14236771

pmax
420043347287995327587600764367792997655201
8651683
978706711079547
12553487
14238593

dj
33
37
41
46
52
59
67
75
85
96
109

– 42 –

11000
12000
13000
14000
15000
16000
17000
18000
19000
20000
21000
22000
23000

16160189
18357737
20877271
23764063
27074329
30872477
35247323
40271291
46060379
52737779
60443023
69344711
79638347

16162249
18360383
20879707
23767039
27077587
30876319
35251763
40276463
46066219
52744729
60451861
69353827
79649371

124
141
160
182
207
236
269
308
352
403
462
530
608

24000
25000
26000
27000
28000
29000
30000
31000
32000
33000
34000
35000
36000
37000
38000
39000
40000
41000
42000

91556693
105366263
121395661
140006491
161649307
186832981
216192953
250434131
290432393
337195613
391928701
456070961
531340517
619731727
723686279
846085543
990379277
1160668739
1361874313

91569847
105380689
121413571
140026591
161672933
186859573
216224249
250472279
290475371
337245973
391987793
456140161
531423433
619826491
723798839
846218603
990536219
1160854171
1362092183

699
804
927
1069
1234
1426
1650
1911
2217
2573
2991
3481
4055
4729
5523
6457
7558
8857
10392

– 43 –

43000
44000
45000
46000
47000
48000
49000
50000
51000
52000
53000
54000
55000
56000
57000
58000
59000
59198

1599934507
1881937133
2216386547
2613498311
3085711217
3647856203
4317975953
5117764919
6073584943
7217395123
8587910557
10232332307
12208030343
14584862657
17448199243
20902366367
25074995459
25999481891

1600192019
12209
1882245187
14361
2216748029
16913
2613928991
19943
3086226977
23547
3648470279
27836
4318705987
32950
5118638549
39053
6074625449
46346
7218644689
55074
8589404393
65532
10234136329
78081
12210196409
93157
14587471207 111294
17451343451 133144
20906160493 159502
25079580571 191343
26004238873 198397
d j の合計 = 1133598328

第３章

詳細検討
本章では 1024-bit 合成数をターゲットとした TWIRL の回路設計を行うとともに、設計結果を元にして回路規模の見積もりを示す。まず 3.1 節で簡単に TWIRL の構造をまとめた
後、Largish/Smallish/Tiny Station の具体的な回路設計を 3.3 節から 3.5 節で提示する。そしてこれらの設計結果を元にした TWIRL の回路規模見積もりを 3.6 節で算出する。
設計においては、可能な限り TWIRL の提案論文 [ST03]の記述を忠実に反映させ、記述が不十分である場合には適当な補完を行った。ただし提案論文の仕様を越えるような改良は一切行っていない。また実装に伴うさまざまな制約により、設計で用いるパラメータは、
第 2 章で理論的に導出されたパラメータとは異なることもありえることに注意が必要である.

3.1. TWIRL を用いたふるい装置の概略
装置としての TWIRL は、TWIRL cluster と呼ばれる単位の装置を、複数用いて並列化することでふるい装置を実現する。Shamir-Tromer らは、TWIRL cluster の数が多いほどふるい処理を高速化できると主張している。
1024bit のふるいを 1 年で完了するためには。TWIRL cluster の数が多い場合、各 cluster が出力するデータを記録する装置(RAM,HDD)が必要となり、記録装置の種類によってふるい
処理全体の性能に影響を与える1と考えられる。
Shamir-Tromer の論文では、TWIRL cluster の記録装置を含めたふるい装置全体の構成法を記していない。よって TWIRL を用いたふるい装置は本章の評価対象外とする。

3.1.1. TWIRL cluster

1

処理速度を重視するならば RAM、記憶容量を重視するなら HDD が適している- 44 -

TWIRL(Rational)

...

TWIRL
(Rational)

TWIRL(Rational)

52bit

TWIRL
(Rational)

TWIRL(Rational)

52bit

TWIRL
(Rational)

TWIRL(Rational)

TWIRL(Rational)8୘

Rational Sieve䉕ታⴕ
52bit

TWIRL
(Algebraic)...

Algebraic Sieve䉕ታⴕ
図 3 - 1 TWIRL cluster 概略図

図 3 - 1 に示す。1 個の TWIRL cluster は、Rational Sieve を行う 8 個の TWIRL と、Algebraic
Sieve を行う 1 個の TWIRL から構成される2。
Rational から Algebraic の TWIRL への IO 数は、Algebraic の TWIRL 実装法によって(1)40,960bitu8(2)52bitu8 の 2 種類があるが、(1)は IO 数が多すぎるため実装不可能である。
よって、現実的な TWIRL 実装を考える場合、IO 数を最適化した(2)の実装を検討する必要があるが、(2)における Algebraic の TWIRL 実装法に基本仕様は Raitonal TWIRL と同じであるが、詳細については、hamir-Tromer の論文の内容からは不明な点が多い。よって、本章では Rational TWIRL に限定して実装評価を行う。以下本章の"TWIRL"とは、Rational TWIRLを指すものとする。

2

Shamir-Tromer は TWIRL を直径 300mm ウェハーから製造した 1 つの LSI で実装可能と主張しているが、欠損のない 300mm ウェハーは現実的に製造不可能である以上、複数の LSIを搭載したボードで実装する必要がある。

- 45 -

3.1.2. Rational TWIRL
f(x),n,m,R,H(䊎䉾䊃㐳ਇቯ, 䉲䊥䉝䊦I/F)䈸䉎䈇೙ᓮㇱ
10bitu4,096=40,960bit
Largish Station
10bitu4,096=40,960bit
Smallish Station
10bitu4,096=40,960bit
Tiny Station
10bitu4,096=40,960bit
㑣୯್ቯㇱ
13bitu4=52bit

図 3 - 2 TWIRL 概略図

図 3 - 2 に示す。ふるい制御部、Largish Station, Smallish Station, Tiny Station, 閾値検出部の 5つから構成される。
ふるい制御部は、ふるい処理を行うのに必要となる a,b,R,H,n,m 多項式 f などの基本パラメータを決定する。本処理部の入力は、ふるいのパラメータによりデータのビット長が大きく変化するため、シリアル I/F を用いて行うのが最適と考えられる。
Largish/Smallish/Tiny Station は、ふるいのメイン処理を実行する。ふるい処理は、f(a,b)がpi を素因数に持つと判定されるならば、¬log2piºを f(a,b)の素因数の蓄積情報を保持する記憶
領域 FS(a,b)に対し加算し、これを 0dadR, 0<b<H に属する全ての格子点(a,b)に対して繰り返
すことで行う。この処理は、ふるい処理で用いられる素因数 pi が f(a,b)の約数であるかどうかを、個々の pi に関する周期情報を管理することで実現する。周期情報の管理を用いたふるい処理の基本アルゴリズムの詳細については、第 2 章を参照されたい。
全ての Station において、¬log2piºの加算処理(10bit)は 4096 個の bus line 間で並列に実行される。これらの処理は Largish/Smallish/Tiny Station で共通して行われ、それぞれのブロックの違いはふるい処理で用いる素因数 pi の大きさである。Rational TWIRL の場合 Largish
Station では 5.2u105<pi<3.5u109 について、Smallish は 256< pi <5.2u105 について、Tiny Station
では pi<256 についてそれぞれふるい処理を実行する。このようなデサインを用いることで、ふるい処理に必要となる素因数 pi の周期情報の管理をそれぞれ Station に含まれる pi の大きさに適した形で実現しており、pi ごとにカウンタを用いる典型的な周期情報の管理の実現法- 46 -

と比較して回路規模を大幅に削減することに成功している。
閾値検出部は、Largish/Smallish/Tiny Station の処理を終了した結果、FS(a,b)=Ȉ¬log2piºの値が閾値を超えるかどうか判定することで、Candidate を選別する。結果、閾値を超えた(a,b)
を Candidate として出力する。Candidate は、1cycle あたり最大 4 個3出力される。(13bitu4)
3.2 節以降では、我々が検討した Largish/Smallish/Tiny Station それぞれの機能仕様を記述する。なお、ふるい制御部、閾値検出部については、TWIRL 論文[ST03]からは実装法を特定できないため、本報告書の評価対象外とする。

3.2.

機能仕様について

3.3,3.4,3.5 節において、Rational TWIRL の Largish Station, Smallish Station, Tiny Station の機能仕様をそれぞれ述べる。各 Station を機能単位に分割し、それぞれをブロックと呼ぶ。ブロックは階層構造をもち、あるブロックの一つ下層のブロックをサブブロックと呼ぶ。 各ブ
ロックに対し、サブブロックとモジュール（後述）を用いたブロック図、ブロックのイン
ターフェース、機能、動作概要を記述することで機能仕様を与える。なお、ブロック名の命名は以下に従うものとする。
z

TWIRL 論文で用いている機能単位名については、そのままブロック名として使用

z

そうでない機能単位は「〜処理部」という形の本報告書独自のブロック名を使用

z

同一の構造をもつ複数のブロックに対しては、「ブロック名#X」という形で命名する。

レジスタやカウンタなど、ブロックを構成する最小の回路機能単位をモジュールと呼ぶことにする。ブロックと異なり、モジュールに関してはその機能を記述するのみにとどめる。
本機能仕様は、TWIRL 提案者による回路デザインの内容を調査した上で、報告者が見直しが必要と判断した部分について、修正および追加を行っている。ただし「修正」とは、TWIRL
提案者のデザインを変更するものではなく、提案者のデザインに従いながら回路規模パラメータのみ見直しを行ったものである。また、「追加」とは、TWIRL を実現するのに必要な機能でありながら、TWIRL 論文には(必要最低限の機能要件を記しているが)実現法を記していない部分の回路について、報告者による回路デザインを追加したものである4。追加の回路デザインを行うにあたっては、TWIRL 論文の主張する要件に従った形で行った。これ
TWIRL 論文によると Rational TWIRL において Candidate が発生する確率は 1.7u10-4 であり、4096 個中最大 4 個出力できるようにしておけば、発生する Candidate の個数が出力可能な個数を超える確率は、無視できるほど小さいと提案者たちは主張している。
4 具体的には、Emission Triplet 発行処理部の空きアドレス検出処理部と、Buffer において l に関するソート処理を行う一連のブロックについて、TWIRL 論文の主張に従った形で報告者による回路デザインの追加を行った。
3- 47 -

らの修正、追加の有無については、各セクションの「TWIRL 論文との違いについて」という項目に記している。

3.3.

Largish Station■ブロック図

FS_IN[0:40959]

Emission Triplet⊒ⴕಣℂㇱ#2

30bit:
Emission Triplet⊒ⴕಣℂㇱ#8375

30bit

30bit㬍8375=252,150 bits

18bit㬍525=9,450bit:䊌䉟䊒䊤䉟䊮ട▚ಣℂㇱ#1

30bit

BufferEmission Triplet⊒ⴕಣℂㇱ#1

10bit㬍512=5,120bit

...

...

10bit㬍512=5,120bit䊌䉟䊒䊤䉟䊮ട▚ಣℂㇱ#8

Largish Station

18bit㬍525=9,450bit

9,450bit㬍8=75,600 bits...
10bit㬍512=5,120bit

10bit㬍512=5,120bit

FS_OUT[0:40959]
図 3 - 3 Largish Station のブロック図■インターフェース
名称

I/O

ビット長

説明

FS_IN[0:40959]

I

40,96010bit の FS(a,b)u4,096 個

FS_OUT[0:40959]

O

40,96010bit の FS(a,b)u4,096 個■機能
f(a,b)が pi を素因数に持つならば、FS(a,b)に¬logpiºを加算する処理を、0dadR, 0<b<H に含まれる全ての格子点(a,b)について行う。ただし、5.2u105dpid3.5u109 である。

- 48 -

■サブブロックz

Emission Triplet 発行処理部#1〜#8375

zBufferz

パイプライン加算処理部#1〜#8■モジュール
なし■TWIRL 論文との違いについてzEmission Triplet 発行処理部¾

個数について見直しを行った。提案者が 8,490 個であると主張しているのに対し、
TWIRL 論文の主張に従い必要な個数の見直しを行った結果、報告者は 8,375 個で良いと判断した。詳細は第 2 章を参照。

¾

空きアドレス検出処理部について、報告者による回路デザインの追加を行った。
このブロックは、TWIRL 論文が主張している、ランダムに発生するメモリの空き状況に合わせて書き込み先を決定する機能を実現する。TWIRL は全体的にパイプライン的な高速処理を実現するのに対し、このブロックの機能はランダムに発生するメモリの空き状況に合わせて書き込み先を決定するという、パイプライン処
理には向かないランダムなデータの処理である。TWIRL 実現のためには、この機能の適切なデザインが必要と考えられるが、TWIRL 論文には実現法を記していない。よって、報告者が回路デザインを行った。

¾

DRAM,SRAM のサイズについて見直しを行った。提案者が主張するように、8,375
個の Emission Triplet ごとに DRAM,SRAM のサイズが異なる場合、全ての Emission
Triplet をデザインするためコストが膨大となると予想される。よって報告者は、
8,375 個を 12 グループに分類し、それぞれのグループごとに異なる DRAM,SRAMのサイズを設定した。報告者による見直し後の SRAM,DRAM サイズの詳細は表 3- 1 を参照。

z

Buffer¾

l に関するソートを行う一連のブロック（l-ソート処理部,l-重複削除処理部, Delivery
Line 出力処理部）について、報告者によるデザイン追加を行った。これらは、TWIRL
論文が主張する、1 cycle あたり平均 2,100 個発生する Emission Triplet の Bus Line
番号 li に関するソート(l に関するソート)機能を実現するためのブロックである。
しかし、li がランダムに 4,096 通りに変化する 2,100 個のデータが、1cycle ごと次々にパイプライン的に流れてくるという条件では、相当慎重なデザインを行わない- 49 -

限り回路規模が極めて膨大になると考えられる5。この機能は提案者が実現法を示していないため、報告者によるデザインを行った。
z

パイプライン加算部
¾

Delivery Line の本数と構成について見直しを行った。これは、Delvery Line の本数について Shamir-Tromer に確認した結果、Bus Line を左右 2,048 本ずつにわけ、それぞれに 2,100 本ずつの Delivery Line、合計 4,200 本6(図 3 - 4)が必要であるとの回答によるものであり、本章のデザインもこれに従う。

Bus Line(Ꮐ)u2,048ᧄ

Bus Line(ฝ)u2,048ᧄ

...

+Buffer

...

+

+

...

+

+

+

...

...

+

+

+

+

+

...

:

:

+

+

+

...

:

...

+

+

+

:
+

...

+

Delivery Line(Ꮐ)u2,100ᧄ+2,100ᧄ(ฝ)=4,200ᧄ

Delivery Line䋨ฝ䋩

Delivery Line(Ꮐ)+

䊌䉟䊒䊤䉟䊮ട▚ㇱ

図 3 - 4 本章のデザインにおけるパイプライン加算部の構成

バブルソートを用いた典型的な回路の場合、最低でも 5.6G gates 必要と予想している。
左右それぞれの 2,100 本の Delivery Line を、Interlevaling(第 2 章参照)構造を考慮してさらに 4 分割することで、525 本u4u2=4,200 本の Delivery Line とみなすことができる。
本章におけるパイプライン加算部#1~#8 は、それぞれこの 525 本の Delivery Line を持つものとしてデザインしている。
5
6- 50 -

■動作概要概要を図 3 - 5 に示す。以下に示したサブブロック間の連携により、ふるい処理を実行する。
z

Emission Triplet 発行処理部#1〜#8375
f(a,b)の pi に関する周期情報を内部の DRAM へ read/write を繰り返しながら管理することで、Emission triplet(¬log2piº, li, Wi)およびデータ有無を表す 1bit 値 ei を Bufferへ出力する。

z

Buffer
各 Emission Triplet 発 行 部 か ら 出 力 さ れ た Emission Triplet を 入 力(30bitu8,375=252,150bit)として受け取り、それらを蓄積し、Delivery Pair(¬log2piº, li),
およびデータ有無を表す 1bit 値 ei に変換した上でパイプライン加算処理部#1〜#8
へ出力(9,450bitu8=75,600bit)する。
Delivery Pair を出力する過程においては、時刻Wi に Bus Line 番号 li で(¬log2piº,の加算が行われるように、出力タイミングと出力先の Delivery Line(パイプライン加算処理部 8 個uそれぞれ 525 本の Delivery Line=計 4,200 通り)について、複数のEmission Triplet 間で調整を行う。

z

パイプライン加算部#1〜#8
Buffer から Delivery Pair(¬log2piº, li), ei を入力として受け取ることで、パイプライン
加算処理部の内部に格子状に配置されている cell において¬log2piºの加算を行う。
この処理は、(1)Delivery Pair の li が cell の番号と一致しないなら右の cell へ転送(2)liが cell 番号と一致するなら、cell 内部のレジスタに¬log2piºを加算、を各 cell が独立して繰り返すことで行う。(2)によって、FS(a,b)に¬log2piºを加算する処理が行われる。

- 51 -

Emission Triplet⊒ⴕಣℂㇱ#2

Delivery Pair(ªlog p8375¼ ,l8375), e8375

Emission Triplet(¬log p2º, l2, W2), e2

Delivery Pair(ªlog p1¼ , l1), e1

BufferEmission Triplet⊒ⴕಣℂㇱ#3
Emission Triplet⊒ⴕಣℂㇱ#4::䊌䉟䊒䊤䉟䊮ട▚ㇱ
Delivery Line
...

+

...

+

Cell

+

...

+
+

+

:
+

Emission Triplet(¬log p8375º,l8375,W8375),
e8375

+

...

:

Delivery Pair(ªlog p2¼ , l2), e2

Emission Triplet⊒ⴕಣℂㇱ#8374

Emission Triplet⊒ⴕಣℂㇱ#8375

+

...

:

+

:

4 delivery lines䈅䈢䉍1cycleㆃᑧ

Emission Triplet⊒ⴕಣℂㇱ#1

Bus Lineu4,096ᧄ

Emission Triplet(¬log p1º, l1, W1), e1

4 bus lines䈅䈢䉍1cycleㆃᑧ• Emission Triplet⊒ⴕಣℂㇱ:Emission Triplet (¬log piº, li, Wi)䉕⊒ⴕ• Buffer:li⇟⋡䈱Bus Line䈪ᤨೞWi䈮¬log piº䈏ട▚䈘䉏䉎䉋䈉䈮䇮Delivery pair (¬log piº,, li)䉕⊒ⴕ• 䊌䉟䊒䊤䉟䊮ട▚ㇱ:⋡⊛䈱Cell䈮⌕䈒䉁䈪Delivery Pair䈱ౝㇱォㅍ䉕➅䉍㄰䈚䇮೔⌕䈚䈢䉌 ¬log piº,䉕ട▚

図 3 - 5 Largish Station の概要- 52 -

3.3.1. Emission Triplet 発行処理部■ブロック図(pi,li,Wi), ~ri, ei䉕ㅍା(pi,l’i,W’i), ~ri,ei䉕
SRAM write
back ಣℂㇱ

SRAM

write backో䈩䈱䊂䊷䉺
(pi,li,Wi),1䉕ᶖ෰䉕writepi,~ri, ~ei䉕read(pi,l’i,W’i),~ri,ei䉕write(pi,l’i,W’i),~ri, ei䉕ㅍା

PROCESSOR

DRAM

readᓟᶖ෰

SRAM write
ಣℂㇱ(pi,li,Wi),ei,~ri䉕

DRAM readಣℂㇱEmission Triplet⊒ⴕಣℂㇱ#X(X=1~8375)ªlogpi¼ ,li,Wi ,eiET[0:29]ో䈩䈱䊂䊷䉺䉕ᶖ෰DRAM
ೋᦼൻಣℂㇱ

SRAMೋᦼൻಣℂㇱ

a䈮㑐䈜䉎䊦䊷䊒ಣℂa䈮㑐䈜䉎䊦䊷䊒⚳ੌᓟ䇮b䉕ᦝᣂ䈚ᰴ䈱a䊦䊷䊒ಣℂ䉕
ታⴕ䈜䉎䈢䉄䈱ಣℂ(pi,li,Wi)(pi,l’i,W’i)(ªlogpi¼ ,li,Wi)~ri
ei: Progression Triplet(ᦝᣂ೨): Progression Triplet(ᦝᣂᓟ): Emission Triplet: b䈱ᦝᣂಣℂ↪䈱Ꮕಽ୯: Progression/Emisiion Triplet䈱᦭ή(1:䈅䉍, 0:䈭䈚)

図 3 - 6 Emission Triplet 発行処理部のブロック図■インターフェース
名称

I/O

ビット長

説明

ET[0:29]

O

30

Emission Triplet(¬log2piº, li, Wi), ei を表すデータ。
た だ し 、 (¬log2piº, li, Wi), ei は そ れ ぞ れ
6bit,12bit,11bit,1bit であり、ei は Emission Triplet の有無を表す。(ei= 1:あり、ei= 0:なし)■機能
f(a,b)の pi に関する周期情報を、DRAM へ read/write を繰り返しながら管理することで、Emission triplet(¬log2piº, li, Wi)を Buffer へ出力する。ただし、a,b は 0dadR, 0<b<H に含まれる格子点(a,b)である。

- 53 -■TWIRL 論文との違いについてz

本ブロック数の個数について報告者による見直しを行った。提案者が 8,490 個であると主張しているのに対し、TWIRL 論文の主張に従い必要な個数の見直しを行った結果、報告者は 8,375 個で良いと判断した。詳細は第 2 章を参照。

z

本ブロックに含まれる DRAM,SRAM のサイズについて報告者による見直しを行った。
提案者が主張するように、8,375 個の Emission Triplet ごとに DRAM,SRAM のサイズが異なる場合、全ての Emission Triplet をデザインするためコストが膨大となると予想される。よって報告者は、これらのサイズを、提案者が主張から算出される理論的な最適値以上である、最も低い２べき値へ丸め込むことで、8,375 個を 12 グループに分類
し、それぞれのグループごとに DRAM,SRAM の設定するように修正した。これの修正
結果は 、本ブロック 全体の回 路規模を決定 するパラ メータである 、SRAM_LEN,
DRAM_LEN, SRAM_SIZE(=2SRAM_LEN), DRAM_SIZE(=2DRAM_LEN)として与えられる。報告者が見直した結果の SRAM,DRAM サイズ、および前述の回路規模パラメータ値の詳細については表 3 - 1 を参照。

■サブブロックz

DRAMz

DRAM read 処理部

zPROCESSORz

SRAM write 処理部

z

SRAM

z

SRAM write back 処理部

zDRAM 初期化部

zSRAM 初期化部■モジュールなし■動作概要
0dadR, 0<b<H に含まれる格子点(a,b)の探索を、以下の(1)(2)の手順により実行する。(1)b を固定し、a をインクリメントしながら 0dadR の範囲の探索を行う (2)(1)の終了後 b のインクリメント処理7を行い、b が H 未満であれば(1)を繰り返す。
なお、pi, li, Wi, ei, ~ri, ~ei の意味については、図 3 - 8 を参照のこと。
70dadR に含まれるすべての a の格子点を探索する方法のほかに、gcd(a,b)=1 となる a のみを探索することで a の範囲を小さくする高速化テクニックが使用可能である。どちらの方
法についても本機能仕様の枠組みで実現可能であると考えられる。

- 54 -

(1)に示す a の探索処理を実行するための処理フローは図 3 - 6 における黒色の矢印で、(2)に示す b の変更処理のフローは図 3 - 6 における白色の矢印で記す。
(1)a の探索処理フロー
以下に示すようにサブブロック間で連携した処理を行うことで、Emission Triplet(¬log2piº,li, Wi)を BUFFER へ出力する処理を実現する。各サブブロックは、2cycles に 1 回の割合でデータの Input/Output を繰り返す。
（これら一連の処理概要は、図 3 - 7 も合わせて参照されたい）
以下の処理において、DRAM と SRAM は、read 処理を行った後、read されたアドレス上のデータを消去する必要がある。この read 後の消去操作処理は、偶数サイクルにおいて readを行い、奇数サイクルにおいて read されたアドレスに対して空データ(ei=0)を write する処
理を行うことで実現する。
z

DRAM
¾

偶数サイクル時
DRAM read 処理部が要求するアドレスの Progression Triplet (pi, li, Wi), ei, ~ri, ~ei をread し PROCESSOR へ出力する。DRAM write back 処理部から write back される、
更新後の Progression Triplet を格納する。

¾

奇数サイクル時
偶数サイクル時に read されたアドレスに対し、ei=0 であるデータの write 要求を、
DRAM read 処理部から受け取ることで、偶数サイクル時に read されたアドレス上のデータの消去を行う。

z

DRAM read 処理部¾

偶数サイクル時
DRAM に対し、指定したアドレスのデータを読み出し、これらのうち Progression
Triplet(¬log2piº, li, Wi), ei, ~ri を PROCESSOR に出力する。

¾

奇数サイクル時
偶数サイクル時に read したアドレスに対し、ei=0 であるデータの write 要求をDRAM に発行することで、read 後のデータ消去処理を行う。read されるアドレス
カウンタをインクリメントし、DRAM の最大アドレス以上ならば先頭アドレスにリセットする。
（周期的なアクセスによる read 処理）z

PROCESSOR¾

2 cycles に 1 回- 55 -

DRAM か ら 出 力 さ れ た Progression Triplet を 受 け 取 る こ と で 、 Emission
Triplet(¬log2piº, li, Wi), ei を BUFFER に出力すると同時に、Progression Triplet の更新処理(pi, li, Wi) Æ (pi, l'i, W'i)を行い、更新された Progression Triplet(pi, l'i, W'i), ei を SRAM
write 処理部へ出力する。
z

SRAM write 処理部¾

2cycles に 1 回
PROCESSOR から入力された更新後の Progression Triplet(pi, l'i, W'i),を SRAM に書き込む処理を行う。SRAM の書き込み先アドレスは、W'i の値と SRAM のデータの空き状況に応じて変化する。
（ランダムアクセスによる write 処理）

z

SRAM
¾

偶数サイクル時
SRAM write 処理部から指定されたアドレスに、更新後の Progression Triplet(pi, l'i, W'i)ei,, ~ri を書き込む。DRAM write back 処理部から要求のあったアドレスより、更新
後の Progression Triplet(pi, l'i, W'i),ei,, ~ri を読み出す¾

奇数サイクル時
偶数サイクル時に read されたアドレスに対し、ei=0 であるデータの write 要求を、
DRAM write back 処理部から受け取ることで、偶数サイクル時に read されたアドレス上のデータの消去を行う。

z

SRAM write back 処理部¾

奇数サイクル時
SRAM 上に書き込まれた更新後の Progression Triplet(pi, l'i, W'i) ei,, ~ri のデータを、
SRAM から DRAM に対し write back 処理を行う。

¾

偶数サイクル時
一つ前の奇数サイクル時に read したアドレスに対し、ei=0 であるデータを SRAMに write することでデータ消去処理を行う。write back 元の SRAM のアドレスと、
write back 先の DRAM アドレスをインクリメントし、それぞれの最大アドレス以上となったら先頭アドレスにリセットする。（周期的なアクセスによる write back 処理）- 56 -

(pi,li,Wi)
writeవ䈱▸࿐
write backవ (๟ᦼ⊛䈮ᄌൻ)䋨๟ᦼ⊛䈮ᄌൻ䋩

writeవ䈲W’i䈮䉋䉍ᄌൻ(䊤䊮䉻䊛䉝䉪䉶䉴)

Step 4. Progression
Triplet(pi, l’i,W’i)䉕writeStep 3. Progression Triplet䉕ᦝᣂ(pi, li,Wi)(pi, l’i,W’i)
Step5. Progression Triplet write backర䋨๟ᦼ⊛䈮ᄌൻ䋩(pi, l’i,W’i)䉕write backᓟ
SRAM䈎䉌ᶖ෰(pi,l’i,W’i)

DRAM(ring memory)

Step 2. Emission Triplet(¬log piº, li,Wi)䉕⊒ⴕ

BUFFER

Step 1. Progression Triplet(pi, li,Wi)䉕readᓟDRAM䈎䉌ᶖ෰

PROCESSOR

readర(๟ᦼ⊛䈮ᄌൻ)SRAM(cache)

図 3 - 7 Emission Triplet 発行処理部における a の探索処理の概略図(2)b の変更処理フロー
z

DRAM 初期化部
DRAM 上に配置されている Progression Triplet 情報の再配置を行う。

z

SRAM 初期化部
SRAM の全てのデータを消去する。

上記に記した処理のほかに、b の更新に伴い本ブロックに含まれる全てのカウンタ値の初期値設定処理が必要となる。しかしこの処理は、簡単な処理で実現できると思われるため、本章ではその実現法について省略する。
■備考
本 ブ ロ ッ ク で 用 い ら れ る SRAM,DRAM の 大 き さ を 表 す パ ラ メ ー タ (SRAM_LEN,
DRAM_LEN)は、ブロック番号#1~8375 ごとに以下の表 3 - 1 によって与えられる。

- 57 -

表3 - 1 Emission Triplet 発 行 処 理 部 の SRAM, DRAM の 規 模 パ ラ メ ー タ

SRAMLEN,DRAM_LEN

Emission Triple

DRAM_LEN SRAM_LEN

DRAM の大きさ

SRAM の大きさ

発行処理部番号(個数)#1〜#839(839)

0

7

0 bit

9,450,496 bit#840〜#1634(795)8718,113,280 bit

8,954,880 bit#1635〜#2393(759)9734,586,112 bit

8,549,376 bit#2394〜#3120(727)10

766,255,872 bit

8,188,928 bit#3121〜#3816(696)117

126,861,312 bit

7,839,744 bit#3817〜#4484(668)127

243,515,392 bit

7,524,352 bit#4485〜#5126(642)137468,074,496 bit

7,231,488 bit#5127〜#5744(618)14

7901,152,768 bit

6,961,152 bit#5745〜#6340(596)

15

7

1,738,145,792 bit

6,713,344 bit#6341〜#6914(574)

16

73,347,972,096 bit

6,465,536 bit#6915〜#7469(555)

1786,474,301,440 bit

12,503,040 bit#7470〜#8006(537)18912,528,648,192 bit

24,195,072 bit#8007〜#8375(369)19

10

17,218,142,208 bit

33,251,328 bit

43,165,768,960 bit

147,828,736 bit

合計

8(注 1) #1~#839 については、SRAM のみを用い、DRAM は用いない 。
(注 2) DRAM の大きさは、89bitu2DRAM_LENu(Emission Triplet 発行処理部の個数)である。
(注 3) SRAM の大きさは、88bitu2SRAM_LENu(Emission Triplet 発行処理部の個数)である。

TWIRL 提案者は、必要な DRAM サイズの理論値が小さい Emission Triplet 発行処理部については、DRAM を用いずに SRAM のみを用いることを推奨している。
8- 58 -

3.3.2. DRAM
■ブロック図

DRAM#X(X=1~8375)
32

12

89
11

1

32

1

pi

li

Wi

ei

~ri

~ei

***

**

***

0

***

1

p4

l4

1

~r4

0

p10

l10

W4
W10

1

~r10

1

***
2DRAM_LEN䉝䊄䊧䉴
:
(ᵈ1)

**

***

0

***

0

:

:

:

:

:

p7

l7

1

~r7

0

p5

l5

W7
W5

1

~r5

1

***

**

***

0

***

1

p2

l2

W2

1

~r2

0

a䈱ត⚝ಣℂ↪䊂䊷䉺(ᵈ1)#1~#8375䈱⇟ภ䈮䉋䈦䈩
DRAM_LEN=8,9,..,19䈱12ㅢ䉍䇯⹦⚦䈲⴫3-1䉕ෳᾖ䇯

read_adr[0:DRAM_LEN-1] (readవ䉝䊄䊧䉴)
read_req (readⷐ᳞)

read_data[0:88](䉝䊄䊧䉴read_adr䈱䊂䊷䉺(pi, li, Wi, ei, ~ri, ~ei))write_adr[0:DRAM_LEN-1] (writeవ䉝䊄䊧䉴)
write_req (writeⷐ᳞),write_data[0:88] (write䈜䉎䊂䊷䉺)b䈱ᦝᣂಣℂ↪䊂䊷䉺pi, li, Wi
ei
~ri
~ei

: Progression Triplet: Progression Triplet䈱᦭ή (0:䈭䈚, 1:䈅䉍): b୯䈱ᦝᣂಣℂ↪䈱Ꮕಽ୯: b୯䈱ᦝᣂಣℂᤨ䈱䉼䉢䉾䉪䊐䊤䉫

図 3 - 8 DRAM のブロック図■インターフェース
名称

I/O

ビット長

説明

read_adr[0:DRAM_LEN-1]

I

DRAM_LEN

read 先アドレス(0~2DRAM_LEN-1)(8〜19)
read_reqI1

read 要求

read_data[0:88]

O89

read_adr に格納されているデータ(pi, li, Wi, ei, ~ri, ~ei)write_adr[0:DRAM_LEN-1] I

DRAM_LEN

write 先アドレス(0~2DRAM_LEN-1)(8〜19)
write_reqI1

write 要求

write_data[0:88]

I89

write_adr に書き込むデータ(pi, li, Wi, ei, ~ri, ~ei)(注１) DRAM#1〜#8375 ごとの DRAM_LEN の値については、表 3 - 1 を参照(注２) pi, li, Wi, ei, ~ri, ~ei については、図 3 - 8 を参照- 59 -

■機能
外部ブロックからの read/write 要求と指定されたアドレスに応じて、DRAM 上のデータのread/write 処理を行う。read/write は同一サイクルにて実行(2 ポートによるアクセス)が可能である。DRAM の各アドレスには、a に関する探索処理を実行するためのデータ(pi, li, Wi, ei)と、b を更新するときに必要となるデータ(~ri, ~ei)の 2 種類が格納されている。
各 DRAM のアド レス長と アドレス数は 、DRAM_LEN-bit(=8,9,…,19 の 12 通り )とDRAM_SIZE=2DRAM_LEN という定数で与えられ、DRAM#1〜#8375 ごとに異なる。詳細は表 3- 1 を参照のこと。
■サブブロックなし■モジュール
なし■TWIRL 論文との違いについてz

DRAM のサイズについて報告者による見直しを行った。見直した後のサイズは、回路
規模パラメータ DRAM_LEN, DRAM_SIZE(=2DRAM_LEN)として与えられる。見直しの理由については 3.3.1 節を、
DRAM_LEN, DRAM_SIZE の詳細については表 3 - 1 を参照。

■動作概要
read,write はそれぞれ以下の処理を行う。これら read/write は同一サイクルにて実行(2 ポート
アクセス)が可能。
なお、他ブロックから本ブロックに対するアクセスは、偶数サイクルと奇数サイクルでread/write を使い分けてくる場合がある（例えば偶数サイクルで read を行い、奇数サイクル
で write を行うなど）。また DRAM はそのメカニズム上、アドレスを指定するため row/column
アドレスを 2 cycles にわたって指定する必要がある。つまり、「偶数サイクルで read を行う」という表現だけでは、偶数サイクルにおいて row/column のアドレス指定を開始するのか、終了するのが不明であると思われる。よって、以下本ブロックに対し「X サイクルで readを行う」という表現は、X サイクルにおいて row/column のアドレス指定を開始すると定義する。
zread 処理
read 要求(read_req)があった場合、アドレス read_adr から 89bit 情報を読み込み、read_data
として出力する。

- 60 -

z

write 処理
write 要求(write_req)があった場合、アドレス wrire_adr に対し、89bit の write_data の書
き込み処理を行う。

■備考
提案者が主張するように TWIRL を 1GHz で動作させるためには、DRAM も 1GHz で動作させる必要がある。この動作速度は 2004 年 1 月現在の DRAM のテクノロジーでは困難であるように思えるが、これについては(TWIRL 論文に記されていない）解決策が存在する。
TWIRL における DRAM へのアクセスはランダムアクセスではなく、アドレスを周期的に変更しながら行われることを利用して、低い動作クロックの DRAM を複数用いて、サイクル
ごとにアクセスする DRAM をインターリーブ的に変更することで 1GHz のアクセスを実現できる。例えば 100MHz 動作の DRAM を 10 個用意し、クロック数(mod 10)の値に応じて使用する DRAM を切り替えることで、（見た目上）1GHz で動作する DRAM を構築可能である。

3.3.3. DRAM read 処理部

DRAM#X(1~8375)

DRAM readಣℂㇱ#X(X=1~8375)
read_req (readⷐ᳞)
read_adr[0:DRAM_LEN-1] (readవ䉝䊄䊧䉴)

DRAM read೙ᓮunit

read_data[0:88](pi, li, Wi, ei , ~ri, ~ei )out_pt[0:87](pi, li, Wi, ei , ~ri)write_req (writeⷐ᳞)read_adr[0:DRAM_LEN-1] (writeవ䉝䊄䊧䉴)
write_data[0:88](䉥䊷䊦0䈱ቯᢙ)

read_adr[0:DRAM_LEN-1]

PROCESSOR#X(X=1~8375)■ブロック図DRAM readవ䉝䊄䊧䉴䉦䉡䊮䉺

஧ᢙ䉰䉟䉪䊦ᤨᄸᢙ䉰䉟䉪䊦ᤨpi, li, Wi
ei
~ri
~ei

: Progression Triplet: Progression Triplet䈱᦭ή (0:䈭䈚, 1:䈅䉍): b୯䈱ᦝᣂಣℂ↪䈱Ꮕಽ୯: b୯䈱ᦝᣂಣℂᤨ䈱䉼䉢䉾䉪䊐䊤䉫

図 3 - 9 DRAM read 処理部のブロック図- 61 -

■インターフェース
名称

I/O

read_adr[0:DRAM_LEN-1] O

ビット長

説明

DRAM_LENDRAM への read 先アドレス(偶数サイク(8〜19)

ル時)
もしくは write 先アドレス(奇数サイクル時)

read_req

O

1

DRAM への read 要求

read_data[0:88]

I

89

DRAM より read されたデータ(pi, li, Wi, ei, ~ri, ~ei)write_req

O

1

DRAM への write 要求

write_data

O89

00…0(データ消去用の 89bit 定数)

out_pt[0:87]

O

88

PROCESSOR へ送信するデータ(pi, li, Wi, ei, ~ri)

(注 1) #1〜#8375 ごとの DRAM_LEN の値については、表 3 - 1 を参照(注 2) pi, li, Wi, ei, ~ri, ~ei については、図 3 - 9 を参照■機能
read 先アドレスを周期的に変化させながら、DRAM より Progression Triplet 情報の read 処
理を行い、PROCESSOR に対して送信する。また、DRAM から read したアドレス上のデー
タ消去処理も行う。
■サブブロックなし■モジュールz

DRAM read 制御 unitz

DRAM read 先アドレスカウンタ(DRAM_LEN-bit バイナリカウンタ)■TWIRL 論文との違いについてz

DRAM のサイズについて報告者による見直しを行った。見直した後のサイズは、回路
規模パラメータ DRAM_LEN, DRAM_SIZE(=2DRAM_LEN)として与えられる。見直しの理由については 3.3.1 節を、
DRAM_LEN, DRAM_SIZE の詳細については表 3 - 1 を参照。

■動作概要
以下の一連の動作を、2cycle 周期で繰り返す- 62 -

z

DRAM read 制御処理 unit¾

偶数サイクル時
read 要求(read_req)と read 先アドレス(read_adr)を DRAM に送信する。

¾

奇数サイクル時
偶数サイクル時に read 要求したアドレス(read_adr)に対し、ei=0 であるデータ(write_data)の write 要求(write_req)を奇数サイクル時に DRAM へ送信することで、
read したデータの消去処理を行う。
偶数サイクル時の read 要求により、DRAM から出力されたデータ(read_data)である Progression Triplet(pi, li, Wi), ei, ~ri, ~ei のうち、(pi, li, Wi), ei, ~ri で表されるデータを
出力データ(out_pt)として PROCESSOR に送信する。

z

DRAM read 先アドレスカウンタ¾

偶数サイクル時
DRAM read 制御処理部へ read 先アドレス値を送信する¾

奇数サイクル時
DRAM_LEN-bit バ イ ナリカウ ンタのインクリメント を行う。（カ ウンタ値 が2DRAM_LEN 以上となったら 0 にリセット）- 63 -

3.3.4. PROCESSORPROCESSOR#X(1~8375)
Stage.1
12

20

li

12

pi

12

12

32

1

~ri

ei

12

32

12-bitട▚ེ

11

Wi
11

1

12
12

SRAM write ಣℂㇱ#X

12-bitᲧセེ
1

12

l’i
12

32

Stage.2 11

9

w

Wi

pi

32
1

Stage.3

l’i

ei

6
1
35
12

ei=1:emission᦭䉍
ei=0:emission䈭䈚

11

11

11

~ri

32

32
out_pt[0:87](pi,l’i,W’i,~ri, ei)

1ªlog pi¼

11 12

1

12

32

6
ቯᢙ

Bufferinp_pt[0:87](pi,li,Wi ,~ri, ei)

out_et[0:29](ªlogpi¼ , li, Wi, ei)

DRAM read ಣℂㇱ#X■ブロック図11-bit ട▚ེ
32

32

1

~ri

ei

11

pi

W’i

䊧䉳䉴䉺
図 3 - 10 PROCESSOR のブロック図■インターフェース
名称

I/O

ビット長

説明

inp_pt[0:87]

I88

更新前の Progression Triplet を含んだデータ(pi,li, Wi, ei, ~ri, ~ei),(ei=1:データ有り, ei=0:データなし)

out_et[0:29]

O30

BUFFER へ送信する Emission Triplet(¬log2piº, li, Wi, ei)

out_pt[0:87]

O88

更新後の Progression triplet を含んだデータ(pi, l'i, W'i, ei, ~ri, ~ei)

(注 1) pi, li, Wi, ei, ~ri, ~ei については、図 3 - 9 を参照■機能
Progression Triplet(pi, li, Wi)データが入力された場合、Emission Triplet(¬log2piº, li, Wi)を生成し- 64 -

Buffer に出力した上で、Progression Triplet の更新処理(pi, li, Wi)Æ (pi, l'i, W'i)を行う。
■サブブロックなし■モジュールz

32bit レジスタu6 個

z

12bit レジスタu3 個

z

11bit レジスタu3 個

z

1bit レジスタu4 個

z

12bit 加算器u1 個

z11bit 加算器u1 個

z12bit 比較器u1 個■TWIRL 論文との違いについて
z

特に無し

■動作概要
以下の処理を 3 段のパイプラインステージで実行する(図 3 - 10)z

DRAMread 処理部→Stage1
更新前の Progression Triplet を含むデータ(pi, li, Wi, ei, ~ri, ~ei)を入力(inp_pt)する。

zStage1→2
BUFFER へ(¬log2piº, li, Wi), ei を出力(out_et)する。
l’i=(li+pi) (mod 4096)), および w(w=1 if l’i<li, w=0 otherwise)を計算する。

zStage2→3

W’i=Wi+ pi/4096+w を計算し、更新後の Progression Triplet を含むデータ(pi, l'i, W'i, ei, ~ri, ~ei)
を SRAM write 処理部へを出力(out_pt)する。

- 65 -

3.3.5. SRAM write 処理部

SRAM write ಣℂㇱ#X(X=1~8375)
Stage1.

12

32

11

32

1

li’

pi

W’i

~ri

ei

88
inp_pt[0:87](pi,l’i,W’i, ~ri, ei)

11
88

11

(li’, pi, Wi, ~ri, ei)

PROCESSOR■ブロック図

W -counter

11-bitᷫ▚ེ10Stage2.

SWbasecounter

88(li’, pi, W’i, ~ri, ei)

SWidx=(W’i-WS)/2

SRAM_LEN

SRAM_LEN

88(li’, pi, Wi, ~ri, ei) Stage3.

䊧䉳䉴䉺

SRAM_LEN-bitᷫ▚ེ
SRAM_LEN

88

SWadr_in~SWadr_in+63䈮ⓨ䈐䈏䈅䉎䈭䉌1,䈘䉅䈭䈒䈳0(li’, pi, W’i, ~ri) ei

SWadr_in
SRAM_LEN

87

SRAM(li’, pi, ~ri, Wi)
88+SRAM_LEN

1
2-1 AND

SWE

1ⓨ䈐䉝䊄䊧䉴ᬌ಴ಣℂㇱ

Stage4.
32

12

li’

pi

11

32

W’i

~ri

out_pt_adr[0:87+SRAM_LEN](pi, l’i, W’i, ~ri, SWE, SWadr)

SRAM_LEN

1SWE SWadr_out

SWE(㶎)SRAM_LEN(=7,8,9,10)䈲X=1~8375䈠䉏䈡䉏䈪⇣䈭䉎䇯 SWadr⹦⚦䈲䇮⴫3-1䉕ෳᾖ: SRAM䈻䈱write on/off (1:on, 0:off): SRAM䈱writeవ䉝䊄䊧䉴

図 3 - 11 SRAM write 処理部のブロック図■インターフェース- Output
名称

I/O

ビット長

説明

inp_pt[0:87]

I88

更新後の Progression triplet を含んだデー
タ(pi, l'i, W'i, ei, ~ri, ~ei)

out_pt[0:87+SRAM_LEN] O

88+SRAM_LEN 更新後の Progression Triplet の、SRAM の書き込み先情報を含んだデータ(pi, l'i, W'i, ei, ~ri, SWE, SWadr)(注 1) pi, li, Wi, ei, ~ri, ~ei については、図 3 - 9 を、SWE,SWadr については図 3 - 11 を参照(注 2)SRAM_LEN(=7~10)は SRAM#X(X=1~8375)のアドレスのビット長を表す定数であり、#X
ごとに異なる。詳細は表 3 - 1 を参照。

- 66 -

■機能更新された Progression Triplet(pi, l'i, W'i, ei, ~ri)を書き込む SRAM のアドレスを計算し、SRAM への write 処理を行う。
■サブブロック
空きアドレス検出処理部■モジュールz

88bit レジスタu2 個

z

32bit レジスタu4 個

z

12bit レジスタu2 個

z

11bit レジスタu2 個zSRAM_LEN-bit レジスタu3 個

z

1bit レジスタu2 個zW-counteru1 個

zSWbase-counteru1 個

z11bit 減算器u1 個zSRAM_LEN-bit 減算器u1 個

z

2-1 AND u1 個

■TWIRL 論文との違いについてz

SRAM のサイズについて報告者による見直しを行った。見直した後のサイズは、回路
規模パラメータ SRAM_LEN, SRAM_SIZE(=2SRAM_LEN)として与えられる。見直しの理由については 3.3.1 節を、SRAM_LEN, SRAM_SIZE の詳細については表 3 - 1 を参照。

z

サブブロックである空きアドレス検出処理部については、報告者による回路デザインの追加を行った。理由は、提案者がこのブロックの機能の必要性を主張しているにも関わらず、実現法を記していないからである。詳細は 3.3.8 節を参照。

■動作概要
以下の処理をパイプライン的に実行する(図 3 - 10)。Stage1~3 の 3 つのステージから構成され、各ステージの処理を 2 cycles で実行する。
z

PROCESSOR→Stage1(pi, li, W'i, ei, ~ri, ~ei)を入力(inp_pt)- 67 -

z

Stage1→2

WS=(W-counter の出力値)より、SWidx=(W'i -WS)/2 を計算する。
¾

W-counter2cycle に 1 回のWS=WS+1 を繰り返す 11bit バイナリカウンタ。

zStage2→3
SWbase=(SWbase-counter の出力値)より、SWadr_in=SWbase-SWidx を計算する。この計算は、SRAM_LEN-bit の減算器により実行される。
¾

SWbase-counter2cycle に 1 回の SWbase=SWbase+1 を繰り返す SRAM_LEN-bit バイナリカウンタ。
SRAM_LEN は 、 SRAM#1~#8375 の ア ド レ ス の ビ ッ ト 長 を 表 す 定 数(SRAM_LEN=7,8,9,10)。詳細は表 3 - 1 を参照。

zStage3→4
SWadr_in+j(j=0,1,…,63)の中で、SRAM に書き込み可能(アドレスのデータが空)である最小の j を探索する処理を行う。この処理は、空きアドレス探索処理部(3.3.8 節参照)により実行される。結果、ei=1 かつ空きアドレスが発見されたら SWE=1 となり、書き込み可能な SRAM のアドレス SWadr_out=SWadr_in+j が決定される。そうでなければ SWE=0となる。

zStage4→SRAM(pi, l'i, W'i, ei, ~ri, SWE, SWadr_out)を SRAM へ出力(88+SRAM_LEN-bit)する。SWE=1 なら
ば SRAM のアドレス SWadr へ更新された Progression Triplet 情報(pi, l'i, W'i, ei, ~ri, ei)の書
きこみ処理が行われ、SWE=0 ならば書き込み処理は行われない。

- 68 -

3.3.6. SRAM

88
12

pi
li
*** **
p4

l4

p10 l10::(pi,li,Wi,~ri,ei)
write backర 88䉝䊄䊧䉴
SRAM_LEN
readⷐ᳞

read_data[0:87]

Wi
***

W4
W10

32

1

~ri
***

ei
0

~r4

1

***

***

0

*** **

***

***

0

**

***

***

0

l8

~r8

1

l7

W8
W7

~r7

1

*** **

***

***

0

p7

(pi ,li,Wi,~ri,1)88
SWadr
write_adr

write_data[0:87]~r10 1:*** *****
read_adr[0:SRAM_LEN-1]
p8
read_enable1

11[0:SRAM_LEN-1]

SRAM_LEN

write_enable

SWE
1

1
2SRAM_LEN

SRAM write backಣℂㇱ

32

88+SRAM_LEN

ei=1䉕ㅊട
(+1bit)(pi,li,Wi,, ei, ~ri, SWadr, SWE)

SRAM#X(X=1~8375)

SRAM write
ಣℂㇱ■ブロック図a䈱ត⚝ಣℂ↪䊂䊷䉺 b䈱ᦝᣂಣℂ↪䊂䊷䉺pi, li, Wiei~ri(ᵈ1)#1~#8375䈱⇟ภ䈮䉋䈦䈩
SRAM_LEN=7,8,9,10䈱4ㅢ䉍䇯⹦⚦䈲⴫3-1䉕ෳᾖ䇯: Progression Triplet: Progression Triplet䈱᦭ή (0:䈭䈚, 1:䈅䉍): b୯䈱ᦝᣂಣℂ↪䈱Ꮕಽ୯

図 3 - 12 SRAM のブロック図■インターフェース
名称

I/O

ビット長

説明

write_data [0:87]

I88

アドレス write_adr へ write する、更新された Progression Triplet を含むデータ(pi, l'i, W'i,~ri)write_enable

I

1

SRAM への write 要求

write_adr[0:SRAM_LEN-1] I

SRAM_LEN SRAM への write 先アドレス

read_data[0:87]

88

O

アドレス read_adr 上の Progression Triplet を含むデータ(pi, li, Wi, ~ri, ei)
SRAM への read 要求

read_enableI1

read_adr[0:SRAM_LEN-1]

I

SRAM_LEN SRAM の read 先アドレス(注 1) pi, li, Wi, ei, ~ri については、図 3 - 12 を参照- 69 -

(注 2)SRAM_LEN(=7~10)は SRAM#X(X=1~8375)のアドレスのビット長を表す定数であり、#X ごとに異なる。詳細は表 3 - 1 を参照。
■機能更新された Progression Triplet 情報(pi, l'i, W'i, ~ri, ei)に関する DRAM への書き込みキャッシ
ュ機能を果たす。SRAM への書き込みはランダムアクセスであるが、SRAM から DRAM への write back は SRAM,DRAM ともにアドレスを周期的に変更しながら行う。
各 SRAM のアドレス長とアドレス数は、それぞれ SRAM_LEN-bit(=7,8,9,10 の 4 通り)とSAM_SIZE= 2SRAM_LEN という定数で与えられ、SRAM#1〜#8375 ごとに異なる。詳細は表 3 1 を参照のこと。
■サブブロックなし■モジュール
なし■TWIRL 論文との違いについてz

SRAM のサイズについて報告者による見直しを行った。見直した後のサイズは、回路
規模パラメータ SRAM_LEN, SRAM_SIZE(=2SRAM_LEN)として与えられる。見直しの理由については 3.3.1 を、SRAM_LEN, SRAM_SIZE の詳細については表 3 - 1 を参照。

■動作概要
read,write はそれぞれ以下の処理を行う。これら read/write は同一サイクルにて実行可能(2ポートアクセス)が可能である。
zread 処理
read 要求(read_req)があった場合、アドレス read_adr から 88bit 情報を読み込み、read_data
として出力する。なお、read にかかるレイテンシは 1cycle という前提である。この前提を元に、SRAM,DRAM への write 要求が同一サイクルにて 2 つのブロックから重複しないよう Emission Triplet 発行処理部のデザインを行っている。write 要求の重複については、3.3.7 節を参照。

zwrite 処理
write 要求(write_req)があった場合、アドレス write_adr に対し、88bit の write_data の書
き込み処理を行う。

- 70 -

3.3.7. SRAM write back 処理部■ブロック図SRAM write backಣℂㇱ#X(X=1~8375)

DRAM#X(X=1~8375)
write backsrc address
counterb䈱ᦝᣂಣℂ↪

32

12

11

1

32

1
~ei

pi

li

Wi

ei

~ri

***

**

***

0

*** 0

p4

l4

1

~r4 0

p10

l10

W4
W10

1

~r10 0wbak_write_req(writeⷐ᳞)

***

**

***

0

:

:

:

:

*** 0
:
:

wbak_dst_adr[0:DRAM_LEN-1](write backవ䉝䊄䊧䉴)

p7

l7

~r7 0

l5

W7
W5

1

p5

1

~r5 0

wbak_dst_dat[0:88](write back䊂䊷䉺
pi, l’i,W’i, ei, ~ri, 0)

***

**

***

0

*** 0

p2

l2

W2

1

~r2 0

wbak_read_req(readⷐ᳞)~ei=0䉕ㅊട(+1bit)write back೙ᓮunitwbak_src_dat[0:87](write back䊂䊷䉺 pi, l’i,W’i, ei, ~ri)

SRAM

2DRAM_LEN୘ (=28,29,…,219)a䈮㑐䈜䉎ត⚝ಣℂ↪

wbak_src_adr[0:SRAM_LEN-1](write backర䉝䊄䊧䉴)

wbak_del_adr[0:SRAM_LEN-1]
wbak_del_req
wbak_del_data[0:87](readᓟ䈱䊂䊷䉺ᶖ෰)
wbak_dst_adr[0:DRAM_LEN-1]

write backdst address
counter(㶎) SRAM_LEN,DRAM_LEN䈲䊑䊨䉾䉪⇟ภ䈗䈫䈮⇣䈭䉎䇯⹦⚦䈲⴫3-1䉕ෳᾖ஧ᢙ䉰䉟䉪䊦ᤨᄸᢙ䉰䉟䉪䊦ᤨ

図 3 - 13 SRAM write back 処理部■インターフェース
名称

I/O

ビット長

説明

wbak_src_adr[0:SRAM_LEN-1] O

SRAM_LEN SRAM から read するアドレス

wbak_read_req

O

1

SRAM への read 要求

wbak_src_dat[0:87]

I88

ア ド レ ス read_adr か ら read さ れ た
Progression Triplet データ(pi,l'i, W'i, ~ri, ei)

wbak_dst_adr[0:SRAM_LEN-1] I

SRAM_LEN DRAM への write 先アドレス

wbak_write_req

O

1

DRAM への write 要求

wbak_dst_dat[0:87]

O

89

DRAM へ書き込む、Progression Triplet
データ(pi,l'i,W'i,~ri,ei, ~ei)wbak_del_adr[0:SRAM_LEN-1] O

SRAM_LEN read 後、データ消去対象となる SRAMのアドレス

wbak_del_req

O

SRAM への write 要求

1- 71 -

wbak_del_dat[0:87]

O

オール 0 である定数。(ei=0)88■機能SRAM に格納されている Progression Triplet 情報(pi, l'i, W'i, ~ri, ei)を read し、DRAM へ write
することで、キャッシュデータの write back 処理を実現する。この write back 処理は、
SRAM,DRAM ともにアドレスを周期的に変更しながら行う。write back 時に read された
SRAM のデータは、read 後に消去する。
■サブブロックなし■モジュールz

write back src address counterzwrite back dst address counterzwrite back 制御 unit

■TWIRL 論文との違いについてz

DRAM, SRAM のサイズについて報告者による見直しを行った。見直した後のサイズは、
回 路 規 模 パ ラ メ ー タ DRAM_LEN,

DRAM_SIZE(=2DRAM_LEN), SRAM_LEN,

SRAM_SIZE(=2SRAM_LEN) と し て 与 え ら れ る 。 見 直 し の 理 由 に つ い て は 3.3.1 を 、DRAM_LEN, DRAM_SIZE, SRAM_LEN, SRAM_SIZE の詳細については表 3 - 1 を参照。
■動作概要
以下に従い、SRAM からの read 処理と DRAM への write 処理を行う。SRAM から read 後のデータ消去操作処理は、奇数サイクルにおいて SRAM への read を行い、次の偶数サイクルにおいて read されたアドレスに対して空データ(ei=0)を SRAM へ write することで実現する。DRAM read 処理部と SRAM write 処理部は偶数Æ奇数のサイクルの繰り返しであるのに対し、本ブロックは奇数Æ偶数のサイクルの繰り返しとなることに注意。これは DRAM
を 2 ポートアクセスで実現する(奇数サイクルにて、DRAM/SRAM への write 要求が DRAM
read 処理部/SRAM write 処理部と重複しない）ために必要である。
zwrite back 制御 unit¾

奇数サイクル時
SRAM に対して、read 要求(wbak_read_req)と read 先のアドレス(wbak_read_adr)を入力することで、Progression Triplet を含んだ 88bit データ(pi, li, Wi, ~ri, ei)を SRAM より read する。wbak_read_adr は write back src address coutner によって保持される- 72 -



write back src address counter2cycles に 1 回インクリメントする SRAM_LEN-bit バイナリカウンタ。

¾

偶数サイクル時
DRAM に対して、write 要求(wbak_write_req)、write 先のアドレス(wbak_read_adr)
を与え、1 つ前の奇数サイクル時に SRAM から read したデータを write する処理を行う。
ま た 、 1 つ 前 の 奇 数 サ イ ク ル 時 に read し た ア ド レ ス を write 先 ア ド レ ス(wbak_del_adr)とし、ei=0 としたデータ(wbak_del_dat)の write 要求(wbak_del_req)をSRAM に対して発行することで、read 後の SRAM のデータ消去処理を行う。

z

DRAM への write 処理
DRAM に対して、write 要求と write back dst address counter が示す DRAM のアドレスを入力し、SRAM から read した 88bit データ(pi, li, Wi, ~ri, ei)を write する。
¾

write back dst address counter2cycles に 1 回インクリメントする DRAM_LEN-bit バイナリカウンタ- 73 -

3.3.8. 空きアドレス検出処理部■ブロック図SWE SWadr_in[0:SRAM_LEN-1]

SWadr_out[0:SRAM_LEN-1]

1

SRAMⓨ䈐䉝䊄䊧䉴ᬌ಴ಣℂㇱ

SRAM_LEN

MSB䈎䉌64bitએౝ䈪‘1’䈪䈅䉎ᦨ਄૏䊎䉾䊃䈱ᬌ಴

1
64

64
f0,…,f63

f0 = x0, f1=NOT(x0)x1, f2=NOT(x0x1)x2, ...
f63 = NOT(x0.. x62) x63

64
64 to 6bit
decoder(=j)

SRAM_LEN

਄૏64bit x0, ..., x63
SRAM_LEN

SRAM_LEN

SWadr_in䊎䉾䊃Ꮐ䉲䊐䊃䊋䊧䊦䉲䊐䉺
(SRAM_SIZE bit)

SWadr_in6䊧䉳䉴䉺64-bit MSB decoder

f0,..,f63

SRAM_SIZE(=2SRAM_LEN),(128~1024)

SRAM_LEN-bitട▚ེ

SRAM_SIZE(128~1024) bit䊂䊷䉺䈅䉍䈭䉌0,ⓨ䈭䉌1ⓨ䈐䉝䊄䊧䉴ᖱႎ䊧䉳䉴䉺

1 0 1 1 1 0 1 0 ... 0 1 1 0

SRAM_LEN

1
1-SRAM_SIZE
DEMUX

SRAM_LEN⊒⷗䈘䉏䈢ⓨ䈐䉝䊄䊧䉴䈮‘0’䉕ᦠ䈐ㄟ䉂

SRAM readᤨ䈮ᶖ෰䈜䉎䉝䊄䊧䉴䈮‘1’䉕ᦠ䈐ㄟ䉂

1-SRAM_SIZE
DEMUX
1

1
஧ᢙ䉰䉟䉪䊦䈮䈍䈔䉎ಣℂ(readಣℂ)

SRAM_LEN1䋨ቯᢙ䋩

wbak_src_adr[0:SRAM_LEN-1]

f0...  f63

ᄸᢙ䉰䉟䉪䊦䈮䈍䈔䉎ಣℂ(writeಣℂ)

図 3 - 14 空きアドレス検出処理部のブロック図■インターフェース
名称

I/O

ビット長

説明

SWadr_in[0:SRAM_LEN-1]

I

10

書き込み先候補の最下位アドレス

SWE

O

1

SDadr_in~SDadr_in+63 の範囲での空きアドレスの有無の判定結果。(0:なし, 1:あり)

SWadr_out[0:SRAM_LEN-1] O

10

書き込み先アドレス

wbak_src_adr

10

SRAM read に伴い、データを消去するアドレIス(注 1) SRAM_LEN(=7, … ,10), SRAM_SIZE(=2SRAM_LEN)の値はそれぞれ SRAM のアドレスのビット長を表し、X= 1~8375 ごとに異なる。詳細は表 3 - 1 を参照。
■機能更新された Progression Triplet データ(pi, l'i, W'i, ei,~ri)を書き込む、SRAM のアドレス値を決- 74 -

定する処理を行う。
■サブブロックなし■モジュールz

64-bit レジスタz

SRAM_LEN-bit レジスタz

SRAM_SIZE-bit レジスタz1bit, 1-SRAM_SIZE デマルチプレクサu2 個zSRAM_LEN-bit 加算器

z1bit, 64-1 OR gatez

64-bit MSB decoderz

64bit-6bit decoderz

SRAM_SIZE-bit バレルシフタ■TWIRL 論文との違いについてz

空きアドレス検出処理部について、報告者による回路デザインの追加を行った。このブロックは、TWIRL 論文が主張している、ランダムに発生するメモリの空き状況に合わせて書き込み先を決定する機能を実現する。TWIRL は全体的にパイプライン的な高速処理を実現するのに対し、このブロックの機能はランダムに発生するメモリの空き状況に合わせて書き込み先を決定するという、パイプライン処理には向かないランダ
ムなデータの処理である。TWIRL 実現のためには、この機能の適切なデザインが必要と考えられるが、TWIRL 論文には実現法を記していない。よって、報告者による独自のデザインを行った。

■動作概略
偶数サイクルと奇数サイクルで、それぞれ以下の処理を交互に実行することで、アドレス
SWadr_in+j (mod SRAM_SIZE) (j=0,1,..,63)のデータが空である最小の j を発見する処理を
2cycles 単 位 で 行 う 。 も し 、 空 で あ る ア ド レ ス が 発 見 さ れ た な ら ば SWE=1 とSWadr_out=SWadr_in+j を出力し、そうでなければ SWE=0 を出力する。また、SRAM への readに伴うデータ消去の結果を、内部の空きアドレス情報レジスタに対し反映する。
z

偶数サイクル¾

バレルシフタを用いて、空きアドレス情報レジスタを SWadr_in ビット左シフトする。なお、空きアドレス情報レジスタは、SRAM の各アドレスの空き状態をビッ- 75 -

ト列として表したも SRAM_LEN ビットレジスタであり、'1'なら対応するアドレスの SRAM のデータが空、'0'なら対応するアドレスの SRAM データが存在することを意味する。本シフト処理の結果、SRAM の空き状態を表すビット列が SWadr_in
を MSB とした形に並べ替えられる。
¾

左シフトした結果の上位 64bit(x0,…,x63)を 64-bit MSB decoder にかけることで、MSBから 64bit 以内で MSB に最も近く、かつ'1'であるビット位置を検出する。結果は、64bit 値 f0,…f63 としてレジスタに格納され、MSB から j(=0,..,63)番目のビットが'1'
なら fj=1 であり、それ以外は'0'となる。すべて 0（空きアドレスがない）なら fx
は全て'0'である。

¾

外部から wbak_src_adr を受け取り、空きアドレス情報レジスタの wbak_src_adr 番
目のレジスタ値を'1'に書き込む。

z

奇数サイクル¾

f0,…,f63 を 64-bit to 6 bit decoder にかけ、fj=1 を満たす j を 6 ビット値にデコードすることで、SWadr_in から数えた空きアドレスの位置情報 j を得る。

¾

f0,…,f63 の各ビットを OR した結果を SWE として出力する。f0,..,f63 がオールゼロな
らば SWE=0(空きアドレス無し)であり、そうでなければ SWE=1(空きアドレスあり)である。

¾

j から SWadr_out = SWadr_in+j を計算、SWadr_out を出力する。

¾

空きアドレス情報レジスタの SWadr_out 番目に'0'を書き込む。

なお、上記の 64bit MSB decoder と 64bit to 6bit decoder は、以下によって与えられるデコーダである。
z64-bit MSB decoderxi(i=0,1,…,63)のうち、xy=1 となる最小の i=y について fi=1 とし、i=y 以外は fi=0 として出力する。すべての i について xi=0 なら、fi をオール 0 として出力する。
input : xi (xi:1bit, i=0,1….,63)
output : fi (fi:1bit, i=0,1,…,63)
f0=x0
f1=NOT(x0)x1
f2=NOT(x0x1) x2
f3=NOT(x0x1x2) x3:
f63=NOT(x0x1+…x62) x63

- 76 -

z

64-bit to 6bit decoderfi(i=0,1,…,63)のうち、fj=1 となる最小の j の値を、6bit 値の yi として出力する。
input : fi (fi:1bit, i=0,1,….,63)
output : yi (yi:1bit, i=0,1,….,5)y0 = f32+f33+...+f63
y1 = f16+...+f31 +... + f48 ... + f63
y2 = f8+...+f15 +... + f56 + ... + f63
y3 = f4+...+f7 +... + f60 + ...+ f63
y4 = f2 + f3 +f6 + f7 + ... + f62 + f63
y5 = f1 + f3 + ...+ f63- 77 -

3.3.9. DRAM 初期化部
■ブロック図省略■インターフェース
名称

I/O

ビット長

説明

PT_read_req

O

1

DRAM への read 要求

PT_read_adr[0:DRAM_LEN-1]

O

DRAM_LEN DRAM から read するアドレス

PT_read_dat[0:88]

I

89

DRAM へ の read さ れ た Progression
Triplet(pi, li, Wi), ei, ~ri, ~ei

PT_write_req

O

DRAM への write 要求1

PT_write_adr[0:DRAM_LEN-1] O

DRAM_LEN DRAM から write するアドレス

PT_write_dat[0:88]

89

O

DRAM への write される、更新後のProgression Triplet(pi, l'i, W'i), ei, ~ri, ~ei(注 1)pi, li, Wi, ei, ~ri, ~ei の定義は図 3 - 8 を参照(注 2)DRAM_LEN(=8~19)は DRAM#X(X=1~8375)のアドレスのビット長を表す定数であり、#X ごとに異なる。詳細は表 3 - 1 を参照。
■機能b のインクリメントに伴う、DRAM 上の Progression Triplet 情報の更新処理を行う。
■モジュールz

1bit レジスタu2 個

z12-bit レジスタu2 個

z20-bit レジスタu1 個

z32-bit レジスタu2 個zDRAM_LEN-bit バイナリカウンタu1 個

z12-bit 加算器

z12-bit 比較器

z20-bit 加算器■TWIRL 論文との違いについて- 78 -

z

DRAM のサイズについて報告者による見直しを行った。見直した後のサイズは、回路
規模パラメータ DRAM_LEN, DRAM_SIZE(=2DRAM_LEN)として与えられる。見直しの理由については 3.3.1 を、DRAM_LEN, DRAM_SIZE の詳細については表 3 - 1 を参照。

■動作概略
以下のアルゴリズムに従い、DRAM 上の(pi, li, Wi), ei, ~ri, ~ei の再配置を行うことで、b に関する更新処理を行う。基本的には、ei=1(Progression Triplet データが有効)かつ~ei=0 (更新前)であるデータを DRAM から read し、Progression Triplet データを更新したあと、更新した
Progression Triplet データを、適切な DRAM のアドレスに対して write(再配置)を行う。
a に関するループ処理と違い、高度なパイプライン的な並列動作を実施する必要はない。
よって簡単な処理であり、いろいろな方法で実現可能であるため、本報告書では詳細な実装を特定しない。以下のアルゴリズムを実施するのに必要最低限のモジュールを列挙するにとどめる。
1. DRAM 上の~ei を‘0’にセットすることを、DRAM 上の全てのアドレスに対して行う。
（各アドレスに対し、データを read し、~ei のみを'0'として write することを繰り返す）
全てのアドレスに対してセットを完了したら、2.の処理を実行する。
（~ei=0:「更新前」を意味するフラグ値, ~ei=1:「更新後」を意味するフラグ値）
2.以下の 2.1~2.7 に従い、全ての DRAM アドレスの Progerssion Triplet 情報を更新する。
2.1

x=0 とする。

2.2

DRAM アドレス x から (pi, li, Wi, ei,~ri, ~ei)を read。

2.3

2.1.で read したデータが ei=0 もしくは~ei=1 ならば x をインクリメントし、
xd2DRAM_LEN となったら終了。さもなくば 2.2 へ戻る。

2.4

アドレス x に、ei=0 としたデータを write することでデータ消去

2.5

l’i=li+~ri (mod s), W'i=~ri/s+w，(w=1 if l’i<li ,w=0 otherwise), y=W'i/2 を計算(s=4096)

2.6

DRAM アドレス y の ei が‘0’となるまで y をデクリメント(空き領域探索)

2.7

DRAM アドレス y に対し、ei=~ei=1 とした上で (pi, l'i, W'i, ei,~ri, ~ei)を write
x をインクリメントし、xd2DRAM_LEN となったら終了。さもなくば 2.2 へ戻る。

1.では、DRAM のアドレス上の更新前のデータと更新後のデータを区別するフラグ~ei を、全てのアドレスに対して~ei=0(更新前)に初期設定する。
2.2~2.3 では、更新前(~ei=0)かつ空でない(ei=1)データを DRAM の上位アドレスから下位
アドレスの順にスキャンする。条件を満たしたデータが発見された場合、データを消去(2.4)
し、liÆl'i, , WiÆW'i の更新処理,更新したデータ(pi, l'i, W'i, ei,~ri, ~ei)の書き込み先候補の先頭ア
ドレス y の計算を行う(2.5)。アドレス y のデータが空でなければ、y をデクリメントすることを繰り返すことで更新したデータ(pi, l'i, W'i, ei,~ri, ~ei)を書き込み可能な空きアドレスを探- 79 -

索し(2.6)、発見されたら書き込みを行う(2.7).

3.3.10. SRAM 初期化部
■機能SRAM の全てのアドレスの ei を 0 にセットすることで、SRAM をすべてクリアする。SRAM
空きアドレス検出処理部の空きアドレス情報レジスタの全ての値を'1'にセットすることで、空きアドレス情報をクリアする。
本ブロックの実現は容易であると考えられるので、機能のみの記述にとどめる。

- 80 -

3.3.11. Buffer■ブロック図Emission
Triplet⊒ⴕ
ಣℂㇱ#1

out_LS#2[0:63]

out_ET

Emission#8375[0:29]
Triplet
⊒ⴕಣℂㇱ
#8375

:

l-㊀ⶄ೥㒰
ಣℂㇱ#4::

l-㊀ⶄ೥㒰
ಣℂㇱ#5

:

...

out_LD#2
l-㊀ⶄ೥㒰 [0:17]
ಣℂㇱ#2:
l-㊀ⶄ೥㒰
ಣℂㇱ#3...

l-䉸䊷䊃ಣℂㇱ

out_BR#2[0:18]...
out_BR#16750[0:18]...

Emission
Triplet⊒ⴕಣℂㇱ#2

Bubble Sort/Random Shuffle

out_ET#2[0:29]

inp_buf[0:251249]:

out_LD#1[0:17]

out_LS#4095[0:63]
l-㊀ⶄ೥㒰
ಣℂㇱ#4095
out_LD#4095[0:17]

out_LS#4096
l-㊀ⶄ೥㒰
[0:63]
ಣℂㇱ#4096
out_LD#4096[0:17]

out_ET#1~#8375:
Emission Triplets(ªlog pi¼ , li, Wi), ei
ei=1:䊂䊷䉺᦭䉍䇮ei=0:䊂䊷䉺ή䈚

out_buf#1
Delivery line [0:18u525-1]
಴ജㇱ#1

䊌䉟䊒䊤䉟䊮
ട▚ಣℂㇱ#1

out_buf#2
Delivery line
[0:18u525-1]
಴ജㇱ#2

䊌䉟䊒䊤䉟䊮
ട▚ಣℂㇱ#2

Delivery line out_buf#3[0:18u525-1]
಴ജㇱ#3

䊌䉟䊒䊤䉟䊮
ട▚ಣℂㇱ#3

out_buf#4
Delivery line [0:18u525-1]
಴ജㇱ#4

䊌䉟䊒䊤䉟䊮
ട▚ಣℂㇱ#4...

out_ET#1[0:29]l-㊀ⶄ೥㒰
ಣℂㇱ#1...

out_BR#1[0:18]

Bufferout_LS#1[0:63]

out_buf#7
Delivery line [0:18u525-1]
಴ജㇱ#7

䊌䉟䊒䊤䉟䊮
ട▚ಣℂㇱ#7

Delivery line out_buf#8[0:18u525-1]
಴ജㇱ#8

䊌䉟䊒䊤䉟䊮
ട▚ಣℂㇱ#8

Out_buf#1~16750:
Emission Triplets(ªlog pi¼ , li, Wi), ei
ei=1:䊂䊷䉺᦭䉍䇮ei=0:䊂䊷䉺ή䈚■インターフェース
名称

I/O

ビット長

説明

inp_buf[0:251249]

I

251,250

Emission Triplet 発行部から入力される、Emission(30u8375)

Triplet を含むデータ(¬log2piº, li, Wi), ei.
30bit データu8375 個=251250bit

out_buf#X[0:9449](X=1~8)O

9,450

パ イ プ ラ イ ン 加 算 処 理 部 #X へ 出 力 す る 、(18u525)

Delivery Pair を含むデータ。(¬log2piº, li), ei
18bit データu525 個=9,450bit■機能
図 3 - 15 に概要を示す。Emission Triplet 発行処理部#1~#8375 から入力される、複数のEmission Triplet を内部に一時的に溜め込み、溜め込んだ複数の Emission Triplet 間で、出力タイミングと出力先（パイプライン加算処理部番号#1~8、各パイプライン加算部の 525 個の Delivery line で計 4,200 通りの組み合わせ）の調整を行い、Delivery Pair に変換した形で出力する。

- 81 -

Emission Triplet⊒ⴕಣℂㇱ#2

delivery pair(ªlog p8375¼ , l8375)

emission triplet(ªlog p2¼ , l2, W2)

BufferEmission Triplet⊒ⴕಣℂㇱ#4:+

delivery pair(ªlog p1¼ , l1)

Emission Triplet⊒ⴕಣℂㇱ#3

Emission Triplet⊒ⴕಣℂㇱ#8374
emission triplet(ªlog p8375¼ ,l8375,W8375)
Emission Triplet⊒ⴕಣℂㇱ#8375

cell

+

...

+
+

delivery pair(ªlog p2¼ , l2)

:

...
+
delivery line
...

+

+

...

:

+

:
+

...

:

+

:

4 delivery lines䈅䈢䉍1cycleㆃᑧ

Emission Triplet⊒ⴕಣℂㇱ#1

bus lineemission triplet(ªlog p1¼ , l1, W1):

4 bus lines䈅䈢䉍1cycleㆃᑧⶄᢙ䈱Emission Triplet⊒ⴕಣℂㇱ䈏↢ᚑ䈚䈢emission triplet (ªlog pi¼ , li, Wi)䉕ḳ䉄ㄟ䉂ªlog pi¼ 䈏li⇟⋡䈱bus line䈮ኻ䈚ᤨೞWi䈮䈍䈇䈩ട▚䈘䉏䉎䉋䈉䈮䇮delivery pair (ªlog pi¼ , li)䉕䉺䉟䊚䊮䉫䉋䈒⊒ⴕ䈜䉎䇯

図 3 - 15 Buffer の機能の概要■サブブロックz

Bubble Sort/Random Shufflezl-ソート処理部

zl-重複削除処理部#1~#8z

Delivery line 出力部#1~#8■サブモジュール
なし■TWIRL 論文との違いについてzl-ソート処理部,l-重複削除処理部,Delivery Line 出力部(k ビット値 M-4u2 分配処理部)
上に示した一連のサブブロックについて、報告者による追加デザインを行った。これは、提案者が Buffer の機能として、l に関するソートを行った上で Delievry Line の出力する機能が必要であると主張しているにも関わらず、この機能の実現法を記していないことである。TWIRL 論文の主張の範囲では、これらのブロックに相当する箇所は「l に関するソート処理、データのマージを実行するパイプライン的なネットワークによる処理を実行し、適切なタイミングで Delivery Line へデータ出力する」- 82 -

と主張しているので、この主張に沿った形で、報告者による回路デザインを行った。
■動作概要
以下に示すようにサブブロック間で連携した処理を行うことで、Emission Triplet 間の調整を行いながら Delivery Pair に変換して出力する処理を実現する。各サブブロックは 1cycleに 1 回の割合でデータの Input/Output を繰り返す。
z

Bubble Sort/Random Shuffle
各 Emission Triplet 発行部から入力される複数の Emission Triplet(¬log2piº, li, Wi), ei(30bit)の間で、Wi 値をそろえて出力する処理を実行する。
これは、内部でWi に関するソートとランダムなシャッフル処理を繰り返すことで、本ブロック内部のWのカウンタ値とWi の値が同一である Emission Triplet を選別し、Delivery
Pair(¬log2piº, li), ei (19bit)に変換したうえで l-ソート処理部に出力することで実現する。

zl-ソート処理部
Bubble sort/Random shuffle から入力された複数の Delivery Pair(¬log2piº, li), ei(19bit)の間で、li に関するソート処理を行う。この処理の結果、Delivery Pair が 4096 通りの li の値に応じて分類され、それぞれ l-重複削除処理部#1~#4096 へ出力される。
出力時に、それぞれの Delivery Pair は、li の値の最上位 1 ビット、および最下位 2 ビットの合計 3 ビットが削除された 9 ビットの li による Delivery Pair(¬log2piº, li), ei (16bit)に変換される。l-重複削除処理部#1~#4096 に対しては、li ごとに最大 4 個の Delivery Pairが重複した 64bit データとして出力する。

z

l-重複削除処理部#1~#4096
l-ソート処理部から入力された複数の Delivery Pair(¬log2piº, li), ei(19bit)について、li の値が重複（最大 4 重複）する複数の Delivery Pair(¬log2p1º, l), … , (¬log2p4º, l)の¬log2piº,ei に対し ¬log2p'º=¬log2p1º+…+¬log2p4º, e'=e1…e4 の処理を行うことで、1 つの Delivery
Pair(¬log2p'º, l), e'(18bit)にまとめて、Delivery Line 出力部へ出力する処理を行う。
まとめられた Delivery Pair は、ブロック番号#1~#4096 に対応する l の値の最上位 1 ビット、および最下位 2 ビットの合計 3 ビット値に応じて、8 通りの l-重複削除処理部#1~#8
へ出力される。

zDelivery line 出力部#1~#8
l-重複削除処理から入力された複数の Delivery Pair の間で、出力として接続されている
525 個の Delivery Line、および出力タイミングを調整した上で、Delivery Pair(¬log2piº, li),ei(18bit)をパイプライン加算処理部内部の Delivery Line に対して出力する。

- 83 -

3.3.12. Bubble Sort/Random Shuffle

out_ET#1[0:29]
out_ET#2[0:29]
out_ET#3[0:29]
out_ET#4[0:29]
out_ET#5[0:29]:

32-bit
LFSR#8

Bubble Sort/Random Shuffle
32-bit
LFSR#232-bit
LFSR#1■ブロック図W-counter…

ET1,14ET1,15ET1,16

ET2,4…

ET2,14ET2,15ET2,16

ET3,3

ET3,4

…

ET3,14ET3,15ET3,16

ET4,2

ET4,3

ET4,4

…

ET4,14ET4,15ET4,16

ET5,1

ET5,2

ET5,3

ET5,4

…

ET5,14ET5,15ET5,16

:

:

:

:

:

:

:

:

:

:

:

ET8374,1

ET8374,2

ET8374,3

ET8374,4

ET8375,1

ET8375,2

ET8375,3

ET8375,4

ET1,1

ET1,2

ET1,3

ET1,4

ET2,1

ET2,2

ET2,3

ET3,1

ET3,2

ET4,1

:

:

:

ET8374,14

ET8374,15

ET8374,16

ET8375,14

ET8375,15

ET8375,16

out_ET#8374[0:29]
out_ET#8375[0:29]

out_BR#1[0:18]
out_BR#2[0:18]
out_BR#3[0:18]
out_BR#4[0:18]
out_BR#5[0:18]
out_BR#6[0:18]
out_BR#7[0:18]
out_BR#8[0:18]
out_BR#9[0:18]
out_BR#10[0:18]

out_BR#16747[0:18]
out_BR#16748[0:18]
out_BR#16749[0:18]
out_BR#16750[0:18]

ETX,Y

Emission Triplet(¬log2piº, li, Wi), ei,䉕ᩰ⚊䈜䉎䊧䉳䉴䉺(30bit)

ETX,Y

Emission Triplet(¬log2piº, li, Wi), ei,䉕ᩰ⚊䈜䉎䊧䉳䉴䉺(30bit)+W-matching್ቯེ
Sort&Shuffle unit (஧ᢙ䉰䉟䉪䊦ᤨ)

Sort&Shuffle unit(ᄸᢙ䉰䉟䉪䊦ᤨ)

図 3 - 16 Bubble Sort/Random Shuffle のブロック図■インターフェース
名称

I/O

ビット長

説明

out_ET#X

I

30u8,375

Emission Triplet 発行部#1~8375 から入力され=251,250

た 、 Emission Triplet を 含 む 30bit デ ー タ(X=1~8375)(¬log2piº, li, Wi), ei,(ei,=1:Emission Triplet 有り,ei,=0:Emission Triplet無し)
out_BR#X(X=1~16750)

O

19u16,750

Wi に関する選別が行われた、Delivery Pair を含=318,250

む 19bit データ(¬log2piº, li), ei(ei,=1:Delivery Pair 有り,ei,=0: Delivery Pair 無し)■機能
複数の Emission Triplet(¬log2piº, li, Wi)の間で、Wi に関するソート処理とランダムシャッフル処理を行うことで、Wi の値が本ブロックのWのカウンタ値と一致するものを選別し、出力する。

- 84 -

■サブブロックなし■モジュールz

32-bit LFSR #1~#8z

Sort&Shuffle unitu62,813 個

zW-counteru1 個zW-matching 判定器u16,750 個

z30bit レジスタu134,000 個■TWIRL 論文との違いについてz

基本的に提案者の主張する通りのデザインである。ただし、内部の行数と列数、およびW-matching 判定を行う列数については提案者が数値を示していなかった（提案者は、
適切な大きさに設定すれば、問題ないとのみ主張している）ので、それぞれ報告者が8,375 行u16 列、2 列と設定した。本パラメータ設定の根拠は特にないが、おそらく提案者の主張する「適切な大きさ」の範囲であると予想している。

■動作概要
16u8375 の 行 列 状 に Emission Triplet(¬log2piº, li, Wi), ei を 格 納 し た 30bit レ ジ ス タ がETX,Y(1dXd8375, 1dYd16)が配置されている。各行に対しWi の値に関する Bubble Sort が、各列に対してランダムシャッフルがそれぞれ実行される。これを実現するために、1cycle ごとに
以下の 3 つの処理を並列に実行する。
z

データ入力
Emission Triplet(¬log2piº, li, Wi), ei を最も左の列のレジスタ(ETX,1)に書き込むことで入力する。書き込む先に有効なデータがある場合入力データを上書きする9。

z

Wi に関するソート処理、Random Shuffle 処理
Sort & Shuffle unit という、ETX,Y を 2u2 単位に区切り、それぞれにおいて、Bubble Sortと Random Shuffle を同時に実行する処理が行われる10。Sort&Shuffle unit の処理対象となる ETX,Y の範囲は、偶数サイクルと奇数サイクルでそれぞれ切り替わり、偶数サイク

9本ブロックの行数と列数を考慮すると、データ上書きが発生する確率は非常に低いと予想している
行数が奇数(8375)であるため、最下行(ET8375,*)のみ 1u2 に区切る必要があるが、本章では簡略化して、これらも 2u2 の Sort&Shuffle unit により扱われるものとみなす。

10- 85 -

ルにおいては(ET2x+1,2y+1, ET2x+1,2y+1, ET2x+2,2y+2, ET2x+2,2y+2)が(x=0,1,...,4186, y=0,1,...,7)、奇数 サ イ ク ル に お い て は (ET2x+2,2y+2, ET2x+2,2y+2, ET2x+3,2y+3, ET2x+3,2y+3) が (x=0,1,...,4186,
y=0,1,...,6)がそれぞれ対象となる(4,188u8+4187u7)=62,813 単位)(図 3 - 16)。Random
Shuffle を実行するための乱数は、線形シフトレジスタ(図 3 - 16 の LFSR#1~#8)により生成される。
Sort & Shuffle unit の実現法を図 3 - 17 に示す。左右のレジスタでWi の値による比較を行った結果u2=2bit と、線形シフトレジスタが生成する 1bit 乱数の合計 3bit の値に応じて、それそれのレジスタ値のデータ転送先をデマルチプレクサ(d1~d4)により選択することで実現する
左右のレジスタをWi の値を比較する際に用いる 11bit 特殊比較器は、図 3 - 18 に示す構成で実現する。このような特殊な比較器を用いる理由は、本来の時刻情報は 35-bitの情報量を持つのに対し、Wi の持つ時刻情報を 11bit に短縮していることによるものである。比較される 2 つの値 x,y が完全にランダムではなく、x と y の差分の最大値が小さい(|xy|<128)という性質を利用することで、通常の 11bit 比較器(x,y の値をそのまま比較)に例外処理(x の最上位 4bit=1111 かつ y の最上位 4 ビット=0000 ならば、x<y と判定)を追加することで、時刻情報の比較を実現することができる。
z

データ出力
右 2 列(ET15,Y, ET16,Y)のレジスタに含まれる Emission Triplet のうち、Wi の値がW-counterと一致するものを選別し、19bit の Delivery Pair(¬log2piº, li), ei として l-ソート処理部へ出力する。また、出力したデータは ei=0 とすることで消去する。
この処理は、上記で述べた「Wi に関するソート処理、Random Shuffle 処理」と同じ処
理回路構成に、各 30bit レジスタのWi の値がW-counter の値と一致するものだけを判別し出力する、W-matching 判定器を追加することで実現できる。それぞれのW-matching 判定
器は、30bit レジスタのWi の値と Buffer 全体のW-counter を比較し、一致するならばレジ
スタのデータを消去し l-ソート処理部へ出力する。一致しない場合は、「Wi に関するソート処理、Random Shuffle 処理」と同一の処理を実行する。
なお、16,750 個のW-matching 判定器を一つのW-counter で担当するのが回路実現上困難である場合、複数のW-counter を用いる必要がある。
¾

W-matching 判定器
11bit 比較器と、30-bit 1-2 デマルチプレクサにより実現する。

¾

W-counter1cycle ごとに+1 増加する 11bit バイナリカウンタにより実現する。
b の更新処理時に初期化する。

- 86 -

䊶c1 = 1 if (n1䈱Wi)<(n2䈱Wi), otherwise 0, c2 = 1 if (n3䈱Wi)<(n4䈱Wi), otherwise 0
s = (LFSR䈎䉌ォㅍ䈘䉏䉎1bitੂᢙ)䈫䈜䉎䇯䊶c1=1:n1ln2䈱swapping, c2=1:n3ln4䈱swapping, s=1:n1ln3䈱swapping䉕หᤨ䈮ಣℂ䈜䉎䈢䉄䈮䇮ਅ⸥䈱⴫䈮ᓥ䈇䊂䊷䉺ォㅍవ䉕ㆬᛯ䈜䉎䊂䊙䊦䉼䊒䊧䉪䉰䉕૶↪
LFSR
11bit․ᱶᲧセེ(c1)30bit register(n2)30 bit DEMUX(d1)

30 bit DEMUX(d2)s30bit register(n1)30bit register(n1)30bit register(n4)30 bit DEMUX(d3)30 bit DEMUX(d4)

11bit․ᱶᲧセེ(c2)11bit․ᱶᲧセེ(c1)30 bit DEMUX(d1)

図 3 - 17ォㅍవ
d1 d2 d3 d4

0
0
0
0
1
1
1
1

n1 n2 n3 n4
n3 n2 n1 n4
n1 n2 n4 n3
n4 n2 n1 n3
n2 n1 n3 n4
n3 n1 n2 n4
n2 n1 n4 n3
n4 n1 n2 n3

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

30bit register(n2)s30bit register(n1)୯
c1 c2 s

30 bit DEMUX(d2)

Sort&Shuffle unit の実現法(W-matching 判定器を含まない列)

W : 35bit Æ11 bit䈱⍴❗䈮઻䈇䇮એਅ䈱․ᱶ䈭Ყセಣℂ䉕↪䈇䉎ᔅⷐ䈅䉍
xt211 – 128䈎䈧y<128䈱႐ว .... x<y䈫್ቯ䋨1䉕㄰䈜)䈠䉏એᄖ䈱႐ว
.... x<y䈱ᄢዊ㑐ଥ䉕್ቯ䈜䉎(1 or 0)2048

y<x䈫್ቯ
(11bit୯䈪䈲x<y)

2048
x

y

y

ᤨೞᖱႎ(35bit)xx䈫y䈱Ꮕಽ䈲㕖Ᏹ䈮ዊ䈘䈇(128એౝ)x<y䈫್ቯ
ey

x10,x9,,...,x0

ey

x10~x7y10~y7x10~x0

1-1
NOT

4-1
AND

4-1
NOR

11-bit comparatory䈱䊂䊷䉺䈏ⓨ(ey=0)䈭䉌䇮
x<y䈫್ቯ䈜䉎(1䉕㄰䈜)x䈱ᦨ਄૏4䊎䉾䊃=1111䈎䈧y䈱ᦨ਄૏4䊎䉾䊃=0000䈱႐ว䇮
x<y䈫್ቯ䈜䉎(1䉕㄰䈜)

y10,y9,,...,y0
y10~y04-1
OR

図 3 - 18 11bit 特殊比較器について- 87 -x<y䈱⌀ன䉕್ቯ

W-matching್ቯེ䈲䇮䊧䉳䉴䉺䈱W䈫Buffer䈱W -counter䈱୯䉕Ყセ䈚䇮৻⥌䈜䉎䈭䉌䊂䊷䉺䉕l-䉸䊷䊃ಣℂㇱ䈻಴ജᓟᶖ෰䈜䉎䇯䈘䉅䈭䈒䈳䇮એਅ䈱ಣℂ䉕ታⴕ䈜䉎䇯䊶c1 = 1 if (n1䈱Wi)<(n2䈱Wi), otherwise 0, c2 = 1 if (n3䈱Wi)<(n4䈱Wi), otherwise 0
s = (LFSR䈎䉌ォㅍ䈘䉏䉎1bitੂᢙ)䊶c1=1:n1ln2䈱swapping, c2=1:n3ln4䈱swapping, s=1:n1ln3䈱swapping䉕หᤨ䈮ಣℂ䈜䉎䈢䉄䈮䇮ਅ⸥䈱⴫䈮ᓥ䈇䊂䊷䉺ォㅍవ䉕ㆬᛯ䈜䉎䊂䊙䊦䉼䊒䊧䉪䉰䉕૶↪

LFSR

W-counter11bit․ᱶᲧセེ(c1)W-matching್ቯེW-matching್ቯེ

30 bit DEMUX(d1)

30 bit DEMUX(d2)30bit register(n3)30bit register(n4)W-matching್ቯེW-matching್ቯེ

30 bit DEMUX(d3)30 bit DEMUX(d4)out_BR#1
out_BR#2

out_BR#3
out_BR#4

11bit․ᱶᲧセེ(c2)l-䉸䊷䊃ಣℂㇱ

30bit register(n2)s30bit register(n1)୯
c1 c2 sォㅍవd1 d2 d3 d4

0
0
0
0
1
1
1
1

n1 n2 n3 n4
n3 n2 n1 n4
n1 n2 n4 n3
n4 n2 n1 n3
n2 n1 n3 n4
n3 n1 n2 n4
n2 n1 n4 n3
n4 n1 n2 n3

0
0
1
1
0
0
1
1

0
1
0
1
0
1
0
1

11bit․ᱶᲧセེ(c1)30bit register(n2)W-matching್ቯེW-matching್ቯེ

30 bit 3-4 DEMUX

30 bit 1-2 DEMUX

s

30bit register(n1)out_BR#5
out_BR#6

図 3 - 19 Sort&Shuffle unit の実現法(W-matching 判定器を含む列)- 88 -

3.3.13. l-ソート処理部■ブロック図l-䉸䊷䊃ಣℂㇱ

out_BR#16750[0:18]

Lsort_10#3[0:19u2121]

Lsort_11#4[0:19u2121]

Lsort_1#2[0:19u231]…
Lsort_1#3[0:19u231]…

:…

Sort unit for 0th-bit

Lsort_11#2[0: 19u2131]

Lsort_10#2[0:19u2121]

Sort unit for 9th-bit:…

Sort unit for 10th-bit

out_BR#3[0:18]

Sort unit for 11th-bit

out_BR#2[0:18]

19bitu4096groupu4୘
Lsort_0#1[0:19u221]
out_LS#1[0:63]

Lsort_1#1[0:19u231]

Lsort_10#1[0:19u2121]

Lsort_11#1[0:19u2131]

out_BR#1[0:18]

19bitu2048groupu8୘

19bitu4groupu4096୘

19bitu2groupu8192୘

Lsort_0#2[0:19u221]

out_LS#2[0:63]

Lsort_0#3[0:19u221]

out_LS#3[0:63]

Lsort_0#4[0:19u221]

out_LS#4[0:63]

:

:

11

Lsort_1#2[0:19u231]
Lsort_1#212[0:19u221]

out_LS#4096[0:63]

図 3 - 20 l-ソート処理部のブロック図■インターフェース
名称

I/O

ビット長

説明

out_BR#X[0:18]

I318,250

Bubble Sort/Random Shuffle から入力される,
Delivery Pair(¬log2piº, li),ei で表される 19bit 値(X=1~16750)

u16,750(ei,=1:Delivery Pair 有り,ei,=0: Delivery Pair 無し)
out_LS#X[0:63](X=1~4096)

O

262,144bit

li 値で 4096 通りにグループ化された Delivery
Pair(¬log2piº, li),ei で 表 さ れ る 16bit 値 u4(ei,=1:Delivery Pair 有り,ei,=0: Delivery Pair 無し)
li=X1 のデータは out_LS#X から出力される。

■機能- 89 -

Bubble Sort/Random Shuffle から入力される、最大 16750 個の Delivery Pair を含むデータに対して、それぞれの Delivery Pair 中の li の値(bus line 番号)に応じたソートを行った結果を出力する。出力される Delivery Pair は、4096 通りの li のそれぞれを 3bit を削除(最上位ビットと最下位の 2 ビット)した 16bit データ(¬log2piº, li),ei であり(6bit(¬log2piº )+9bit(li)+1bit(ei)=16bit)、
同一の li について最大 4 重複する(16bitu4=64bit)形で行われる。
■サブブロックz以下から構成される Sort unit for k-bit (k=11,10, …, 0)¾

11 ビット値 10-4u2 分配処理部u183 個¾

k ビット値 8-4u2 分配処理部u24,393 個(k=11,10,…,0)■モジュール
なし■TWIRL 論文との違いについてz

本ブロックは、提案者が主張するにも関わらず実現法が記されていない、l に関するソート機能に必要なブロックの一つとして、報告者によるデザイン追加を行ったブロックである。これらは、TWIRL 論文が主張する、li に関するソート機能を実現するためのブロックである。しかし、li がランダムに 4,096 通りに変化する 2,100個のデータが、1cycle ごと次々にパイプライン的に流れてくるという条件では、相当慎重なデザインを行わない限り回路規模が極めて膨大になると考えられる。
例えば、バブルソートを用いた典型的なソート処理回路を用いた場合、最低でも 5.6G gates 必要と見積もられる。これは、1 cycle に 1 回ずつ新しいソート対象データ列が流れてくるのを、各パイプラインステージにバブルソート回路を備えた
4,096 段のパイプラインでソートすることを仮定した場合の回路規模である。(バブルソートの場合、ソート終了まで 4,096 サイクル必要)
この問題を解決すべく、回路規模を押さえつつパイプライン的なソートを実行する回路を報告者が検討した結果が本ブロックの回路デザインである。
このデザインを用いることで、回路規模を小さく(329M gates)押さえたソート処理を実現する。ただし、本回路は入力データのごく一部を失う可能性がある。これ
は、入力データの偏りが生じることで、中間データの転送先がデータ領域の特定範囲内に収まらなかった場合、そのデータを破棄するからである。しかしデータを破棄する確率は非常に小さく（本ブロック全体で 0.000737)、問題ない範囲と考えられる。本回路によるソート処理の基本構造とデータ破棄確率の詳細について
は、3.3.14 節を参照のこと。

- 90 -

■動作概要
Sort unit for k-bit に入力される全ての Delivery Pair(¬log2piº, li),ei に対し、li の k 番目のビット
値に応じて 2 つにグループ分けして出力することを k=11,10,…,0 について 12 回繰り返す(図3 - 20)。これにより、Delivery Pair が li の値に応じて 4096 通りにグループ分けされる。
このグループ分けは、約 16,000 個11の Delivery Pair 全てを一つの回路で処理するのではな
く、これらの Delivery Pair を小さい個数(8 or 10 個)ずつの単位にわけて、それぞれの単位に対するグループ分け処理を一つの回路で実行することで行う。この単位ごとにグループ分
け処理を実行する回路のブロックを、"k-ビット値 M-4u2 分類処理部"と呼ぶ(M=8 or 10)。このブロックは、8 個(M=8)もしくは 10 個(M=10)の Delivery Pair を入力として受け取り、それぞれを li の k 番目のビット値=0,1 に応じて分類して出力する。分類された Delivery Pair は、
ビット値=0,1 それぞれについて最大 4 個出力する。
Sort unit for k-bit で使用される k-ビット値 M-4u2 分類処理部の個数を、k=11,10,…,1,0 ごとにまとめた結果を表 3 - 2 に示す。

表 3 - 2 Sort unit for k-bit の回路規模k入力される Delivery Pair 数

出 力 さ れ る

k ビ ッ ト 値 8-4u2

k ビット値 10-4u2

Delivery Pair 数

分類処理部の個数

分類処理部の個数

1116,75016,384

1865

183

10

16,384

16,3842048

0

916,384

16,3842048

0

8

16,384

16,3842048

0

7

16,384

16,3842048

0

6

16,384

16,3842048

0

516,384

16,3842048

0

416,384

16,3842048

0

3

16,384

16,3842048

0

2

16,384

16,3842048

0

1

16,384

16,3842048

0016,384

16,384

2048

0

11

これらのうち、ei=1 である有効なデータは平均 2,100 個であり、残りの 14,000 個は ei=0である空のデータである。

- 91 -

3.3.14. k ビット値 M-4u2 分配処理部■ブロック図DPin#3

19bit䊧䉳䉴䉺
図 3 - 21

19bit 1-4 DEMUX#1,2

19bit 1-4 DEMUX#1,3...

2-bit BSA#1

3-bit BSA#1

19bit 1-4 DEMUX#1,1

19bit 1-4 DEMUX#0,M...

:

M-bit BSA#0

19bit 1-4 DEMUX#0,3

DPout0#4...

3-bit BSA#0

DPout0#3

19bit 1-4 DEMUX#0,2

19 bit 1-4 DEMUX#0,1

DPout0#2

2-bit BSA#0:

DPout0#1

DPin#M...

...

19bit 1-4 DEMUX#1,M

DPin#2

DPout1#1
DPout1#2
DPout1#3
DPout1#4

M-bit BSA#1

DPin#1

BSA:Bit Slice Adderk ビット値 M-4u2 分類処理部のブロック図■インターフェース
名称

I/O

ビット長

説明

DPin#X[0:18]

I

19uM

19bit で表現された M 個の Delivery Pair データ(M=8or10)(¬log2piº, li), ei(X=1~M, M=8 or 10)(ei,=1:Delivery Pair 有り,ei,=0: Delivery Pair 無し)
DPout0#X[0:18]

O76

入力された M 個の 19bit Delivery Pair データ(¬log2piº, li), ei のうち、li の k 番目のビット値が 0(X=1~4)であるもの。
(ei,=1:Delivery Pair 有り,ei,=0: Delivery Pair 無し)
DPout1#X[0:18](X=1~4)

O

76

入力された M 個の 19bit Delivery Pair データ(¬log2piº, li), ei のうち、li の k 番目のビット値が 1であるもの。
(ei,=1:Delivery Pair 有り,ei,=0: Delivery Pair 無し)- 92 -

■機能
入力された M 個(M=8 or 10)の 19bit Delivery Pair (¬log2piº, li),ei を、li の k 番目のビット値に応じて 2 種類の 19bit レジスタu4 へ出力する。
■サブブロックなし■サブユニットz

2~M Bit Slice Adder(BSA)#0~1z

19bit registeru(M+8)個z

9-bit 1-4 DEMUX#0,1~Mz19-bit 1-4 DEMUX#1,1~M■TWIRL 論文との違いについてz

本ブロックは、提案者が主張するにも関わらず実現法が記されていない、l に関するソート機能に必要なブロックの一つとして、報告者によるデザイン追加を行ったブロックである。ハードウェアでは典型的であるバブルソートを用いずに、2 分
木（のような）ソートを 12 回繰り返す処理を実行する。ただし、8 入力を(k 番目のビット値に応じて)8-8 のデータに分類するソートを繰り返した場合、12 段の処理後の出力レジスタの大きさが入力前の 4,096 倍となり回路規模が大きくなりす
ぎるため、8 入力を 4-4 に分類するソートとした。このデザインでは、偏った入力
データが与えられ出力データが 4 個を超える場合がある。結果、4 個を超えた場合にデータを破棄する必要がある。本ブロックでこのデータ破棄が発生する確率を評価した結果、0.000737 と非常に低い値になった。
（これは、入力データが有効である確率がおよそ 1/8 であることによるものである。）これは現実的に問題ないほ
ど低いと考えられる。本ブロックのデータ破棄発生確率の評価式については、次項の動作概要を参照されたい。

■動作概要
動作原理を図 3 - 22 に示す。この動作原理を実現するために、以下の動作を 1 cycle 以内に実行し、M 個のデータを Delivery Pair (¬log2piº, li), li の k 番目のビット値に応じて分類する。
なお、Bit Slice Adder(BSA)とは、複数のビット値を並列的に加算する回路である。文献[Kob95][Kob98]によると、n ビット入力, m ビット出力の Bit Slice Adder は、(nm)個の Full
Adder 用いて構成できる。

- 93 -

౉ജ䊂䊷䉺(䈖䉏䉌䈱䈉䈤䇮⚂1/8䈏᦭ല䈭䊂䊷䉺)

DPin#1DPin#2l0=1332

l1=2093li䈱LSB=0䈪䈅䉎1⇟⋡䈱䊂䊷䉺
(DPout0#1䈻಴ജ)

DPin#3 DPin#4-

DPin#8-...

li䈱LSB=1䈪䈅䉎1⇟⋡䈱䊂䊷䉺(DPout1#1䈻಴ജ)li䈱LSB=0䈪䈅䉎2⇟⋡䈱䊂䊷䉺(DPout1#2䈻಴ജ)

l7=540:...

DPout1#1~#4
19bit 1-4 DEMUX#1,8

19bit 1-4 DEMUX#1,4

19bit 1-4 DEMUX#1,3

19bit 1-4 DEMUX#1,2

19bit 1-4 DEMUX#1,1-...

19bit 1-4 DEMUX#0,8-

19bit 1-4 DEMUX#0,4

l7=54019bit 1-4 DEMUX#0,3

l0=1332

19bit 1-4 DEMUX#0,2

19 bit 1-4 DEMUX#0,1

DPout0#1~#4...

l1=2093-

X-bit BSA䉕↪䈇䈩䇮DPin#1~#X䈱▸࿐䈪䇮li䈱LSB=0䈱䊂䊷䉺ᢙ䈱䉦䉡䊮䊃⚿ᨐ䉕ᩰ⚊䇯(䈢䈣䈚䇮li䈱LSB=1䈭䉌0)
DPout0#1~4䈱૗⇟⋡䈮䊂䊷䉺䉕಴ജ䈜䉎䈎᳿ቯ䇯...

0

8-bit BSA#1

00

4-bit BSA#1

1

3-bit BSA#1

0

2-bit BSA#1

l0䈱LSB
䈱෻ォ୯

...

2

8-bit BSA#000

4-bit BSA#00

3-bit BSA#0

1

2-bit BSA#0l0䈱LSB

DPout0䈱⇟ภ(1-4DEMUX䈱಴ജవ) DPout1䈱⇟ภ(1-4DEMUX䈱಴ജవ)

X-bit BSA䉕↪䈇䈩䇮DPin#1~#X䈱▸࿐䈪䇮li䈱LSB=1䈱䊂䊷䉺ᢙ䈱䉦䉡䊮䊃⚿ᨐ䉕ᩰ⚊䇯(䈢䈣䈚䇮li䈱LSB=0䈭䉌0)
DPout1#1~4䈱૗⇟⋡䈮䊂䊷䉺䉕಴ജ䈜䉎䈎᳿ቯ䇯li䈱LSB=0li䈱LSB=1

図 3 - 22 k ビット値 M-4u2 分類処理部の動作原理(M=8,k=0 の例)

z

X-Bit Slice Adder#1 (X=2~10)
それぞれの X-Bit Slice Adder は、DPin#1~#X における li の k 番目のビット値 Bk,1,…,Bk,X
に対して、YX =(Bk,1+..+Bk,X) u Bk,X を計算する。この計算により与えられる YX の意味は
以下の通りである。
YX= 0:

DPin#X の k 番目のビット値=0 である。

YXt1

:

DPin#X の k 番目のビット値=1 であり、YX には DPin#1~X の範囲で k 番目のビット値=1 であるデータの個数が与えられる。

z

X-Bit Slice Adder#0 (X=2~10)
X Bit slice adder #1 と同様の計算を、DPin#1~#X における li の k 番目のビットの反転値~Bk,1,…,~Bk,X に対して行う。つまり、~YX =(~Bk,1+..+~Bk,X) u~Bk,X を計算する。この計算によって与えられる~YX の意味は以下の通り。
~YX= 0:DPin#X の k 番目のビット値=1 である。

~YXt1

:

DPin#X の k 番目のビット値=0 であり、~YX には DPin#1~X の範囲で k 番目のビット値=0 であるデータの個数が与えられる。

- 94 -

z

1-4 DEMUX #0.X, #1,X
1-4 DEMUX#0,X : ~YXt1 なら、DPin#XÆDPout0#~YX へのレジスタ転送処理を実行。
1-4 DEMUX#1,X : YXt1 なら、DPin#XÆDPout1#YX へのレジスタ転送処理を実行

以上に従い~YX, YX を算出し、これらの値に応じたレジスタ転送を行うことで、他の DPin からのレジスタ転送先が重複することを避けながら、各 DPin#X の k 番目のビット値に応じてDPout0 と DPout1 に分類して出力する処理を実現する。
なお、入力データに偏りがある場合、DPout0 もしくは DPout1 へ転送される対象となるデー
タの個数が 4 個を超え、データが損失される可能性がある。その確率は、

6k=5,…,M ( MCkuqku(1-q)M-k)により与えられる。ただし、q は、有効なデータが入力される確率 q'を用いて q=q'/2 で与えられる値である。k=11 の場合 q=0.0625 であり、M=8 ならば確率は 0.0000455、M=10 ならば確率は 0.000184 である。k=10,9,…,0 の場合 q=0.064, M=8 から、確率は 0.0000514 である。
これらより k=11,10,…0 全体でデータを失う確率は 0.000737 と評価される。この確率は十分
小さく、ふるいを行う上で問題ない範囲であると考えられる。

- 95 -

3.3.15. l-重複削除処理部■ブロック図¬logp1º, l, e1¬logp2º, l, e2¬logp3º, l, e3¬logp4º, l, e4¬logp2º
e2

⸘▚ེ

6

1

7

⸘▚ེ

6

7

¬logp3ºue3

1¬logp4ºe4

7¬logp2ºue2¬logp3ºe37¬logp1ºue1

1

7-bitട▚ེe1

LS_out#X[0:63]

⸘▚ེ

6
1

7

¬logp4ºue4
⸘▚ེ

1
1
1
1

4-1
OR

l

7

8-bitട▚ེ¬logp1º 6

7-bitട▚ེl-㊀ⶄ೥㒰ಣℂㇱ#X(X=1~4096)¬logp’º,

8

e’

1
l

9

LD_out#X[0:17]
6¬logp’º ,li, ei

19

図 3 - 23 l-削除処理部#X(1~4096)のブロック図■インターフェース
名称

I/O

ビット長

説明

LS_out#X[0:63]

I63

16bit で表現された 4 個の Delivery Pair データ(¬log2piº, l, ei, ただし、l=X1。

(X=1~4096)(ei=1:Delivery Pair 有り, ei=0: Delivery Pair 無し)
LD_out#X

O(X=1~4096)

1818bit で表現された 1 個の Delivery Pair データ(¬log2p'º, l, e'), ただし、l=X1。
(ei=1:Delivery Pair 有り, ei=0: Delivery Pair 無し)■サブブロックなし■モジュールz

7-bit 加算器u2 個

z8-bit 加算器u1 個- 96 -

z

1-bit 4-1 OR ゲートu1 個z以下から構成される¬log2piºuei 計算器u4 個¾

6-bit 2-1 and■機能
li の値が同一である複数の Delivery Pair 同士（最大４つ）の¬log2piºの値を加算することで、一つの Delivery Pair にまとめる。
■TWIRL 論文との違いについてz

本ブロックは、提案者が主張する機能である、l に関するソート処理機能の一部を実現する。ただし提案者は実現法を示していないため、報告者が実現法検討を行った。本
ブロックの前処理である l-ソート処理部によって、データを 4,096 通りにソートされて出 力 さ れ る が 、 こ の 出 力 デ ー タ は li ご と に 最 大 4 重 複 し て い る 状 態 で あ る
4,096u4=16,384 個のデータ領域に対し、約 2,100 個の有効なデータが発生していることを考えると、l-ソート処理部の出力はデータ領域全体の約 1/8 のみを使用している疎なデータ列である。このデータ列を密にするのが本ブロックの目的である。
重複している Delivery Pair 同士はWi, li の値がともに同一であることを考慮すると、4個の Delivery Pair の¬log2piº,の値を加算することで 1 つの Delivery Pair にまとめられ、疎なデータ列を密にすることができる。本ブロックの処理により、データ領域の使用率を高め、効率的な処理を実現できる。

■動作概要
以下に従い、4 つの Delivery Pair(¬log2p1º, l, e1), (¬log2p2º, l, e2), (¬log2p3º, l, e3), (¬log2p4º, l, e4)(各16bit)を一つの Delivery pair (log2p', l, e') (18bit)にまとめる。 ¬log2piºuei の計算は、¬log2piºuei
計算器が行い、これは ei を 6 並列に並べた値と¬log2piºの 6 ビット値との and をとることで実現する。
log2p'=¬log2p1ºue1+ ¬log2p2ºue2+¬log2p3ºue3+¬log2p4ºue4e'= e1e2e3e4- 97 -

3.3.16. Delivery line 出力処理部

18bit 18bit 18bit 18bit

DLinp_#X,512

DLinp_#X,511

DLinp_#X,510

DLinp_#X,4

DLinp_#X,3

DLinp_#X,2

DLinp_#X,1■ブロック図䊌䉟䊒䊤䉟䊮ട▚ಣℂㇱ
#X(X=1~8)

18bit 18bit 18bit

512೉(18bitu512=9,216bit)...

DP1,1 DP1,2 DP1,3 DP1,4

DLout_#X,1

DP1,510 DP1,511 DP1,512

18bit

DLout_#X,2
DP2,1 DP2,2 DP2,3 DP2,4

䋺

䋺

...

䋺

䋺

DP524,1 DP524,2 DP524,3 DP524,4

18bit

DP2,510 DP2,511 DP2,512

...

䋺

䋺

DP524,510 DP524,511 DP524,512

...

18bit

DP524,510 DP524,511 DP524,512

18bit

Delivery Line಴ജಣℂㇱ#X(X=1~8)
DPX,Y

deliveryline#X,2

525ⴕ(18bit*525=9,450bit)
DLout_#X,524
DLout_#X,525

DP524,1 DP524,2 DP524,3 DP524,4deliveryline#X,1

deliveryline#X,524
deliveryline#X,525

Delivery Pair Transfer unit

図 3 - 24 Delivery line 出力処理部のブロック図■インターフェース
名称

ビット長

説明

DL_inp#X,1~512[0:17] I

9,216

512 個の 18bit Delivery Pair データ(¬log2p'iº, li, e'i)

(X=1~8)(18bitu512)(e'i=1:Delivery Pair 有り, e'i=0: Delivery Pair 無し)

DL_out#X,1~525[0:17] O

9,450

525 個の 18bit Delivery Pair データ(¬log2p'iº, li, e'i),(X=1~8)(18bitu525)(e'i=1:Delivery Pair 有り, e'i=0: Delivery Pair 無し)

I/O(注 1) DL_inp#X,Y と Bus Line 番号 li の関係は、X=1+ (li (mod 4)), Y=1+¬li/4¼ (X=1~4 の場合),
X= 1+ (li 2048) (mod 4), Y=1+¬(li2048)/4¼ (X=5~8 の場合)である。
(注 2) DL_out#X,Y はパイプライン加算部#X の Delivery Line 番号 Y へ出力■サブブロックなし- 98 -

■モジュールzDelivery Pair Transter unitu268,800 個■機能入力された複数の Delivery pair の間で、データを出力する Delivery Line 番号と出力時刻の両方について調整を行った上で、Delivery Pair を出力する。
■TWIRL 論文との違いについてz

本ブロックは、提案者が主張する、適切なタイミングによる Delivery Line へのデータ出力処理を行う機能を実現する。提案者によって回路実現法が記されてないため、報告者によるデザイン追加を行った。デザインにあたっては、パイプライン加算部の長所（Bus line 間のデータ転送遅延と Delivery Line 間のデータ転送遅延の差分が同一の範囲で、出力タイミングと Delivery Line 番号を選択可能)を生かしながら最適な調整を行える方法を、TWIRL 提案者による Smallish Station の Funnel の実現法をもとに検討した。
本デザインの詳細については動作概要を参照されたい。

■動作概要
動作原理を図 3 - 25 に示す。図に示すとおり、Delivery Pair Transfer unit を基本単位とした
パイプライン的な構造をもつ。この基本単位を、DPX,Y(1dXd525, 1dYd512)と記述する。
Delivery Pair Transfer unit には 18bit の Delivery Pair のデータが格納されており、それぞれのDelivery Pair Transfer Unit は、1 cycle ごとに以下の処理を実行する。
1.

一つ下(DPX,Y から見た DPX-1,Y+1)の Delivery Pair Transfer unit データが空である場合、そこに Delivery Pait データを転送する。

2.

全ての Delivery Pair Transfer unit の一つ右(DPX,Y から見た DPX+1,Y)に、Deliovery Pair デー
タを転送する。結果、各行の最も右列のデータは Delivery Line に対して出力される。

1.により、Delivery Line 番号と出力タイミングの調整が実現される。1.により調整が可能な
理由は、パイプライン加算部における Bus line 間のデータ転送遅延(¬log2piºの転送遅延)と、Delivery Line 間の転送遅延((¬log2piºが加算される FS(a,b)の転送遅延)の差分が変化しないことが調整のための条件であり、1.のデータ転送はこの条件を満たしているからである。
1.に示すように、調整可能な範囲でデータをなるべく下方向に移動することで、入力時には疎であるデータ列を圧縮し密なデータ列にして出力することが可能となる12。これにより、

12

疎な入力データ列を圧縮して密な出力データ列することが可能である以上、Delivery
Line の本数を(Shamir-Tromer の回答である)525 本より減らすことができると考えられる(入力の 512 本より多く、明らかに冗長)が、この課題については本章の検討範囲外とする。

- 99 -

複数の Delivery Pair 間で、出力先と出力タイミングの最適な調整を実現できると考えられる。
これらの調整と同時に、2.により全体のデータを一つ右にシフトする処理を行う。この時、最も右の列のデータが Delivery Line に出力される。

એਅ䈱䊜䉦䊆䉵䊛䈮䉋䉍䇮Delivery Line⇟ภ䈫಴ജᤨೞ䈱⺞ᢛ䉕ⴕ䈉1.
2.

1 cycle䈗䈫䈮ో૕䉕৻䈧ฝ䈮䉲䊐䊃(ᦨ䉅ฝ䈱䊂䊷䉺䈲Delivery Line䈻಴ജ)䈢䈣䈚䇮৻䈧ਅ䈱ⴕ䈱䊂䊷䉺䈏ⓨ䈪䈅䉏䈳䇮䊂䊷䉺䉕⒖േ䈜䉎䇯Æ䊌䉟䊒䊤䉟䊮ട▚ㇱ䈪⊒↢䈜䉎䇮❑ᣇะ(Delivery line⇟ภ)䈫ᮮᣇะ(Bus line⇟ภ)䈱䋲䈧䈱ㆃᑧᤨ㑆䈱Ꮕಽ䈏䇮⒖േ೨ᓟ䈪ห৻䇯䈖䈱᭎ⷐ࿑䈪䈲(Wi䉕฽䉃)Emission Triplet䈪ᦠ䈇䈩䈇䉎䈏䇮ታⵝ਄䈲 Wi䉕⋭⇛䈚,l䉕3-bit೥㒰䈜䉎䊂䊷䉺౉ജ(⚂ඨᢙ(8375/16384)䈏᦭ല䈭䊂䊷䉺)(WN,0) (WN,4)...

-(WN,2032)䋺-৻䈧ਅⴕ䈱䊂䊷䉺䈏ⓨ䈭䉌⒖േÆDelivery Line⇟ภ䈫಴ജᤨೞ⺞ᢛ䋺
-(W1, 0)(W2, 8)(W0, 0)

DeliveryLine#X,1(WN,2040) (WN,2044)-䋺(W2, 0)1 cycle䈗䈫䈮ో૕䉕৻䈧ฝ䈻⒖േ

...
-(W1, 8)-(W2,2044)

-

䊂䊷䉺಴ജ

... (W2, 2036) (W2, 2040) (W1, 2040) (W1, 2044)(W0, 12)...

(W0, 2032) (W0, 2036) (W0, 2040) (W0, 2044)

DeliveryLine#X,510
DeliverLine#X,511
DeliveryLine#X,525

図 3 - 25 Delivery Line 番号と出力時刻調整の原理

以上における 1.2.を 1cycle で同時に処理するための、Delivery Pair Transfer Unit を実現した
回路を図 3 - 26 に示す。16-1 AND gate を用いて、下 16 個以内にデータの空きがあるかどうかを検出し、空きがあるならデータを右下に、さもなくば右に転送する。データの空き判
定を下 1 個に対してのみ行うのではなく、下 16 個以内全てについて実行することで、図 3 26 の下に示す通り複数のデータを同時に移動することが可能となり、効率的な圧縮を実現することができる。

- 100 -

DPX,Y䈱ਅ16୘એౝ䈮䇮ⓨ䈪䈅䉎䊂䊷䉺䈏ሽ࿷䈜䉎䈭䉌⒖േÆⶄᢙ䈱䊂䊷䉺䉕䉁䈫䉄䈩⒖േ䈜䉎䈖䈫䈏น⢻
Delivery Pair Transfer unit
18

:

DPX,Y

18bit 1-2
DEMUX

16-1
AND

1

1 DPX+1,Y-1

18

DPX,Y+1...

DPX+1,Y...

18

18bit 1-2
18
DEMUX

1

: 16-1ਅ16୘એౝ䈮ⓨ䈐(‘0’)䈏
ሽ࿷䈜䉎䈭䉌ฝਅ䈻䇮䈘䉅䈭䈒䈳ฝ䈻⒖േ

18

18

AND

1 DPX+2,Y-2

18

18bit 1-2 18
DEMUX

DPX+2,Y-1

18
:
DPX,Y

䊶৻䈧⋥ਅ䈱䊂䊷䉺䈱䉂ⓨ䈪䈅䉎䈎್ቯ䈜䉎႐ว

(W2, 4)⒖േ䈪䈐䈭䈇

(W1, 0)

⒖േ䈪䈐䉎

...

18-bit䊧䉳䉴䉺䊶ਅ16୘એౝ䈱䊂䊷䉺䈏ⓨ䈪䈅䉎䈎್ቯ䈜䉎႐ว

-(W2, 4)⒖േ䈪䈐䉎(W1, 0)⒖േ䈪䈐䉎-

図 3 - 26 Delivery Pair Transfer Unit の回路構成- 101 -

3.3.17. パイプライン加算処理部■ブロック図䊌䉟䊒䊤䉟䊮ട▚ㇱ#X (X=1~8)

10bit
18bit

18

cell1,1

18bit

18cell2,1

cell3,1::10

DL_inp#X,525 18bit

cell525,1:10
18

cell525,2

10bit
BL_out#X,1

18

10bit

10
cell2,512

10. . . 181018cell3,511

10. . . 18 cell
525,511

Delivery Line#X,525...

cell1,51218cell2,511:

BL_out#X,2

18

10. . . 18

Delivery Line#X,3

18

10bit

cell1,511

Delivery Line#X,2

cell3,2

bus line #X,1

:

18bit

18

10
18

. . . 18

Delivery Line#X,1

cell2,210
DL_inp#X,3

18

10

BL_inp#X,512

10bit

cell1,210
DL_inp#X,2

BL_inp#X,511

10bit

bus line #X,2

DL_inp#X,1...

cell3,512:1018cell525,512

10bit

BL_out#X,511

bus line #X,512

BL_inp#X,2

bus line #X,511

BL_inp#X,1

10bit
BL_out#X,512

図 3 - 27 パイプライン加算部のブロック図■インターフェース
名称

I/O

ビット長

説明

BL_inp#X,1~512[0:9]

I

5,120

512 個の 10bit データ FS(a,b)=6¬log2piº(X=1~8)(10bitu512)

DL_inp#X,1~525[0:17] I

9,450

525 個の 18bit Delivery Pair データ(¬log2piº, li, ei),

(X=1~8)(18bitu525)(ei=1:Delivery Pair 有り, ei=0: Delivery Pair 無し)

5,120

512 個の 10bit データ FS(a,b)=6¬log2piº

BL_out#X,1~512[0:9](X=1~8)O(10bitu512)(注 1) BL_inp/out#X,1~512 と Bus Line 番号の対応は、表 3 - 3 に従う。
■サブブロックなし- 102 -

■モジュールzcellu268,800 個■機能
Buffer より入力された Delivery Pair に含まれる素因数の対数値¬log2piº,を、素因数情報を蓄積する記憶領域 FS(a,b)に対して加算する処理を行う。この加算処理は、内部に行列状に配置されている cell と呼ばれる各ユニットが、それぞれ独立してデータ加算、縦方向のデータ
転送、横方向のデータ転送を繰り返すことで行う。

表 3 - 3 パイプライン加算部への入出力と Bus Line 番号の対応対応する Bus Line 番号(Y の順)

BL_inp/out#X,Y
X

Y

1

1,2,…,512

0,4,…,2044

2

1,2,…,512

1,5,…,2045

3

1,2,…,512

2,6,…,2046

4

1,2,…,512

3,7,…,2047

5

1,2,…,512

2048,2052,…,4092

6

1,2,…,512

2049,2053,…,4093

7

1,2,…,512

2050,2054,…,4094

8

1,2,…,512

2051,2055,…,4095■TWIRL 論文との違いについてzDelivery Line の本数と構成について、報告者による見直しを行った。これは、DelveryLine の本数が論文の内容からは不自然(210 万本)であったと判断したので、Shamir-Tromer に確認した結果、Bus Line を左右 2,048 本ずつにわけ、それぞれに
2,100 本ずつの Delivery Line、合計 4,200 本13(図 3 - 4)が必要であるとの回答によるものであり、本章のデザインもこれに従う。

■動作概要
図 3 - 27 に示すように、cell と呼ばれるユニットが 525u512 の行列状に配列された構造を持つ。各 cell を cellx,y と表記する(1dxd525, 1dyd512)列方向にならんだ一連の cell を Bus Line
左右それぞれの 2,100 本の Delivery Line を、Interlevaling(2 章参照)構造を考慮してさらに 4 分割することで、525 本u4u2=4,200 本の Delivery Line とみなすことができる。本章におけるパイプライン加算部#1~#8 は、それぞれこの 525 本の Delivery Line を持つものとしてデザインしている。
13- 103 -

と呼び、行方向に並んだ一連の cell を Delivery Line と呼ぶ。パイプライン加算部あたりにBus line は 512 本、Delivery line は 525 本存在する。本ブロック入出力 BL_inp/out#X,1~512と 512 本の Bus Line 番号の対応は表 3 - 3 に従う。525 本の Delivery Line は、図 3 - 4 に示した左右 2,100 本の Delivery Line について、Interleaving 構造を考慮しさらに 4 分割したものに対応する。
この構造を用いた加算処理の基本原理を図 3 - 28 に示す。Bus Line 方向には FS(a,b)のデータ転送が常に行われており、1 cycle ごとに一つ下の cell へ FS(a,b)のデータが転送される。
Delivery Line 方向は、Delivery Pair(¬log2piº, li)のデータ転送が行われている。Delivery Line の
最も左の Cell より入力された Delivery Pair は、li が目的の Bus Line 番号に到着するまで、1cycle ごとに一つ右の Cell に転送されることを繰り返す。目的の Bus Line 番号に到着した
Delivery Pair は、Cell 内部の加算器で¬log2piºを FS(a,b)に加算する処理が行われる。また、Cell は図 3 - 29 に示した回路で実現できる。
(ªlog pi¼ , li) :bus line䋱ᧄ䈅䈢䉍

1cycle䈱ㆃᑧ
8

+

+

+

1

+

+

+

2

+

+

+

3

bus line⇟ภ䈫li䈏৻⥌䈭䉌䇮¬log2 piº䉕ട▚(ªlog p3¼ , l3(=8))

bus line⇟ภ䈫li3䈏⇣䈭䉎Æ ৻䈧ฝ䈱cell䈻ォㅍ

bus line⇟ภ䈫li䈏৻⥌䈭䉌䇮¬log2 piº䉕ട▚

図 3 - 28 パイプライン加算部の基本動作原理- 104 -

F(a,b):Delivery Line1ᧄ䈅䈢䉍1cycle䈱ㆃᑧ

celldelivery line⇟ภ(ªlog p1¼ , l1(=0))ട▚⊒↢䈱᦭ή䈮㑐ଥ䈭䈒䇮
1cycleᲤ䈮1䈧ਅ䈱cell䈻
F(a,b)=¦ (¬log2 piº)䉕ォㅍ

bus line⇟ภ4

bus line⇟ภ 0

(ªlog pi1¼ , li1)䈲
䈠䈱䉁䉁ฝ䈱cell䈻FS(a,b)=¦ (ªlog px¼ )ei=1 : delivery pair䊂䊷䉺᦭䉍
ei=0 : delivery pair䊂䊷䉺ή䈚

10
10

8

(ªlog pi¼ , li䋬ei)
18¦ (ªlog px¼ )ªlog pi¼ªlog pi1¼
9

10

li

10 bitട▚ེ

18

li

1

ei

ei

10

9 bitቯᢙᲧセེ

10

1
1 1bit 2-1 1
1

and

1bit 1NOT

110-bit 2-1 MUX

10䊂䊷䉺᦭䉍䇮䈎䈧bus line # = li 䈭䉌䈳1䈘䉅䈭䈒䈳0
10

1bit
2-1
and

bus line # = li䈭䉌䈳䇮ei䉕0䈮䉪䊥䉝䈚䇮delivery pair䊂䊷䉺ᶖ෰ቯᢙ(bus line⇟ภ)䈫䈱Ყセಣℂ1䈭䉌䈳¦ (ªlog px¼ )+ ªlog pi¼䉕䇮0䈭䉌䈳¦ (ªlog px¼ )䉕ㆬᛯ䊧䉳䉴䉺

図 3 - 29 Largish Station の cell の回路構成- 105 -(ªlog pi¼ , li䋬ei)

1

3.4.

Smallish Station■ブロック図
FS_IN[0:40959]

Smallish Station

10bit*1024=10,240bit
EmitterFunnel#1-1...

EmitterFunnel#1-4...

:

EmitterFunnel#2-8:

EmitterEmitterFunnel#6-1 ... Funnel#6-128...

Segment#1-1
10bit*512=5,120bit

EmitterFunnel#2-1

10bit*1024=10,240bit
Segment#1-4

10bit*512=5,120bit

Segment#2-1

Segment#2-2 ...

:10bit*512=5,120bit

10bit*512=5,120bit

Segment#2-7

Segment#2-8:

10bit*32=320bit

10bit*32=320bit

Segment#6-1

Segment#6-2

10bit*32=320bit

10bit*32=320bit1ᧄ䈅䈢䉍 756 bit(ోㇱ䈪4ᧄ):...

FS_OUT[0:40959]

1ᧄ䈅䈢䉍=3,024 bit䋨ోㇱ䈪128ᧄ䋩

図 3 - 30 Smallish Station のブロック図■インターフェース
名称

I/O

ビット長

説明

FS_IN[0:40959]

I

40,96010bit の FS(a,b)u4,096 個

FS_OUT[0:40959]

O

40,96010bit の FS(a,b)u4,096 個■サブブロックz

Emitter-Funnel#X-Y(X=1,2,…,6, Y=1,2,…,2X+1)

zsegment#X-Y(X=1,2,…,6, Y=1,2,…,2X+1)■モジュールなし■機能- 106 -

10bit*32=320bit

Segment#6-127

Segment#6-12810bit*32=320bit1ᧄ䈅䈢䉍=1,008 bit䋨ోㇱ䈪8ᧄ䋩
:::10bit*32=320bit

10bit*32=320bitf(a,b)が pi を素因数に持つならば、FS(a,b)に¬logpiºを加算する処理を、0dadR, 0<b<H に含まれる全ての格子点(a,b)について行う。ただし、256dpid5.2u105 である。
■TWIRL 論文との違いについてz

基本的な回路構成は提案者の通りである。ただし、pi の大きさに対応する Segment の数(4,本の Bus Line を Gi 個の Segment に分割した時の Gi の値)については、報告者による見直しを行い、提案者の推奨するより若干大きな Gi の値を設定した。
提案者の主張する値では Gi の最小値は 2 であるが、この場合 2,048 本の Bus Line を
一つの Emitter-Funnel が担当することになる。しかしこれは、Smallish Statiion の狙いの一つである、Emitter あたりの Bus Line 本数が少なくし回路実現を容易にするという目標を実現していないと報告者は考える。また全体の回路規模も Gi に反比例する14。これら 2 つの点から、Gi を提案者の値より大きくした方が回路的に有利と報告者は判断し、見直しを行った。Gi を含む見直した結果のパラメータについては、表 3 - 6 に示す。

■動作概要
図 3 - 30 に示す通り、Emitter-Funnel は Semgment に 1 対 1 で接続されている。それぞれの接続において、1cycle に 1 回の割合で以下に示す連携した処理を繰り返すことで、素因数の対数値加算処理を実現する。
z

Emitter-Funnel
Largish Station における Emisison Triplet 発行処理部と Buffer に相当するブロックであり、Delivery Pair(¬log2piº, li)を Segment に発行する処理を実行する。

z

Segment
Largish Statio におけるパイプライン加算部に相当するブロックであり、Emitter-Funnel
から受け取った Delivery Pair(¬log2piº, li)のうち、li の値と一致する bus line 番号にて¬log2piº,の加算処理を行う。
Emitter-Funnel と Segment の IO 長は、表 3 - 4 に従う。Y の最大値は Segment 数 Gi であり、また Segment あたりに含まれる Bus Line 数Ei は Gi よりEi =4096/Gi で与えられる・

例えば Gi を 2 倍すると、Funnel の数が半減し、回路規模が減ったように見えるが、代わりに Funnel への入力列の長さが 2 倍になる。Funnel の回路規模は入力列の 2 乗に比例するため 4 倍となり、トータルでは 2 倍の回路規模増となる。
14- 107 -

表 3 - 4 Emitter-Funnel と Segment の IO 長YEmitter-Funnel からEmitter-Funnel の(1~Gi)

Segment への IO 長

個数

1

1~4

672 bit

42,688 bit2

1~8

896 bit8

7,168 bit

3

1~16

1,344 bit

16

21,504 bit

4

1~32

2,464bit32

78,848 bit

5

1~64

4,256 bit

64

272,384 bit

6

1~128

2,688 bit

128

344,064 bit

X- 108 -

合計 IO 長

3.4.1. Emitter-Funnel■ブロック図

1st Level
Funnel#X-Y-1
1st Level
Funnel#X-Y-7

16

Segment#X-Y

EF_out#DL_NUM[0:15]

...

16
...

...

16
Emitter#X-Y-FF_NUM䋱

...

16

...

16

Emitter#X-Y-1

16
...

...

16
Emitter#X-Y-FF_NUM1

...

16

Emitter#X-Y-1

EF_out#1[0:15]

2nd Level Funnel
uSF_NUM୘

1st Level Funnel
uFF_NUM୘

2nd Level Funnel#X-Y-SF_NUM

Emitter#X-Y-FF_NUM

EmitteruEMIT_NUM୘

14୘

35୘

...

16

2nd Level Funnel#X-Y-15୘

1st Level
Funnel#X-Y-7...

16

Emitter#X-Y-1

...

...

FF_INP୘

16(Gi:䉶䉫䊜䊮䊃ᢙ)
16bit(¬logpiº, li, ei)
16bit(¬logpiº, li, ei)...

Emitter#X-Y-FF_NUM

1st Level
Funnel#X-Y-1

16bit(¬logpiº, li, ei)

Emitter#X-Y-1...

ᦨᄢFF_INP୘

Emitter-Funnel#X-Y(X=1~6,Y=1~Gi)

1616

図 3 - 31 Emitter-Funnel のブロック図■インターフェース
名称

I/O

ビット長

説明

EF_out#1~DL_NUM

O

16uDL_NUM 16bit の Delivery Pair(¬log2piº, li), ei(ei=0 :Delivery Pair なし,[0:15]

ei=1 :Delivery Pair あり)(注 1) EMIT_NUM, FF_INPNUM, FF_NUM, SF_NUM, DL_NUM については表 3 - 5,表 3 - 6を参照。
■サブブロックz

Emitter#X-Y-*, EMIT_NUM 個(X=1,…,6, Y=1,…,Gi, Gi:セグメント数)z

1st Level Funnel#X-Y-*,

FF_NUM 個(X=1,…,6, Y=1,…,Gi, Gi:セグメント数)- 109 -

z

2nd Level Funnel#X-Y-*, SF_NUM 個(X=1,…,6, Y=1,…,Gi, Gi:セグメント数)■モジュールなし■機能接続された Segment に対して 16bit の Delivery Pair(¬log2piº, li), ei を発行する。1cycle あたり、最大 DL_NUM 個のデータを並列に出力する。
■TWIRL 論文との違いについてz

基本的な回路構成は提案者の通りである。Segment の数を表すパラメータ Gi およびEiについて報告者による見直しを行い、提案者の推奨するより若干大きな Gi(小さなEi)に設定した。見直した理由は Smallish Station の章の最初において述べた通りである。これらを基準に他の回路規模パラメータである EMIT_NUM, FF_INPNUM, FF_NUM,
SF_NUM, DL_NUM を設定した。これらの回路規模パラメータの名称と意味については、
表 3 - 5 を参照されたい。また見直した結果であるこれらの回路規模パラメータの値については表 3 - 6 を参照されたい。

■動作概要
Emitter, 1st Level Funnel, 2nd-Level-Funnel の間で連携した処理を、1 cycles に 1 回繰り返すことで実行する。
z

Emitter
Delivery Pair(¬log2piº, li), ei(16bit)を発行する処理を行う。最大 FF_INPNUM 個の Emitter
が一つの 1st Level Funnel に並列に接続されている。

z

1st Level Funnel
最大 FF_INPNUM の並列接続された Emitter から受け取った Delivery Pair(¬log2piº, li) , ei
（データ有り／無し両方）のうち、有効なデータを選別し 5 並列にデータ圧縮した形で出力する。

z

2nd Level Funnel
7 個の並列接続された 1st-Level Funnel から受け取った 35 個の Delivery Pair(¬log2piº, li) , ei
（データ有り／無し両方）のうち、有効なデータを選別し 14 並列にデータ圧縮した形で出力する。

- 110 -

表 3 - 5 Smallish Station の回路規模パラメータ名称と意味

パラメータ名意味

Gi

Smallish Station において、4,096 本の Bus Line を複数に分割した単位を Segment と呼ぶ。
Gi は 4,096 本を分割した結果の Segment 数を表す。

Ei

一つの Segment に含まれる Bus Line 本数=2Ei を決定するパラメータ

EMIT_NUM

一つの Segment に含まれる Emitter の個数。

FF_INPNUM

一つの Segment に含まれる 1st-Level Funnel の入力数。

FF_NUM

一つの Segment に含まれる 1st-Level Funnel の個数。

SF_NUM

一つの Segment に含まれる 2nd-Level Funnel の個数。

DL_NUM

一つの Segment に含まれる Delivery Line の本数。
Segment 内の Delivery Line については図 3 - 39 を参照。

- 111 -

表 3 - 6 Smallish Station の回路規模パラメータ
X

1

2

3

4

5

6

Ei

10

9

8

7

6

5

Segment 数 Gi

4

8

16

32

64

128

1,024

512

256

128

64

32

20,061

16,458

4,642

1,336

392

118

256

128

64

32

16

8

79

129

73

42

25

15

12

19

11

6

4

3

168

266

154

84

56

42

80,244

131,664

74,27242,75225,088

15,104

316

1,032

1,168

1,344

1,600

1,920

48

152

176

192

256

384

218<pi<5.2u105

216<pi<218

214<pi<216

212<pi<214

210<pi<212

28<pi<210(Y=1~Gi)
Segment に含まれる Bus Line 数(=2Ei)
Segment ご と の Emitter 数
EMIT_NUM(pi の範囲に含まれる素数の個数に一致。)
1st-Level-Funnelの 入 力 数

FF_INPNUM
Segment

ごとの

1st-Level-Funnel 数 FF_NUM(=ªEMIT_NUM/FF_INP_NUMº)Segment

ごとの

2nd-Level-Funnel 数 SF_NUM(=ªFF_NUM/7º)
Delivery Line 本数 DL_NUM(=SF_NUMu14)
Emitter の総数(=EMIT_NUMuGi)
1st-Level-Funnel の総数(=FF_NUMuGi)
2nd-Level-Funnel の総数(=SF_NUMuGi)
pi の範囲- 112 -

3.4.2. Emitter■ブロック図7117bitቯᢙ
(piu2-Ei)

Ei-bitട▚ེ
11

1

Eibit

⊒ⴕེ

7bit ᷫ▚ེ
1

7

1

1bit
NOT

CounterB䈪ᩴ䈅䈸䉏䈚䈭䈇㒢䉍䇮1cycle䈗
䈫䈮Counter A䈱୯䉕
-1䊂䉪䊥䊜䊮䊃

…
11

Ei-bitቯᢙpiu212-Ei (modEi)

Delivery pair

11

2-1
AND
11

7-bit 2-1 MUX
7

1Counter A䉕䊂䉪䊥䊜䊮䊃䈚䈢⚿ᨐ䇮䊗䊨䊷⊒↢䈚䈢䈭䉌䈳
Delivery pair(¬log2piº, li)䉕⊒ⴕ䇯䈭䈍䇮li = (ቯᢙ)|(Counter B୯)1...

Delivery Pair⊒ⴕᤨ䈮
(=Counter A䈪䊗䊨䊷⊒↢ᤨ)䈮ቯᢙ䉕Counter B䈮ട▚

1st Level Funnel#X-Y-*

Ei-bitDP_out[0:15]

7-bit

Counter B

Delivery pair(¬log2piº, li), ei

Emitter#X-Y-*Counter A䊧䉳䉴䉺

図 3 - 32 Emitter のブロック図■インターフェース
名称

I/O

ビット長

説明

DP_out [0:15]

O

16

16bit の Delivery Pair(¬log2piº, li), ei(ei=0 :Delivery Pair なし,
ei=1 :Delivery Pair あり)■サブブロックなし■モジュール■機能
Emitter が担当する 1 つの素数 pi に関する周期情報の管理を行うことで、Segment に対し- 113 -

Delivery Pair を発行する処理を行う。
■TWIRL 論文との違いについて
特に無し
■動作概要
TWIRL 提案者による、"Count-down method"をそのまま実装している。この処理においては、
CounterA, CounterB, Delivery Pair 発行器が以下のように連携した処理を実行することで、Piの周期情報を管理し、Delivery Pair(¬log2piº, li), ei を発行する。
z

Counter A
7bit のカウンタであり、基本的に 1 cycle ごとに CounterA の値を-1 デクリメントする処理を行う。ただし、(1cycles 前における)CounterB での加算処理の結果、桁あふれが生じた場合は、デクリメントを 1cycle の間停止する。デクリメントの結果ボローが発生
したら、初期値に戻す。この初期値は、¬piu2-Ei (mod 2Ei) ¼により与えられる。

zCounter B

Ei -bit のカウンタであり、Counter A でボローが発生した場合に定数を加算する処理を行う。この定数は、2D-Eiupi (mod 2Ei), (D=12)により与えられる。
z

Delivery Pair 発行器
CounterA のデクリメントの結果ボローが発生した場合、Delivery Pair を発行する。
発行する Delivery Pair は(定数)|(CounterB 値)で与えられる。この定数は、Emitter#X-Y-*の X,Y から、(定数)=2X+1u(Y1)により与えられる。

- 114 -

3.4.3. 1st-Level/2nd -Level Funnel(N-M Funnel)

16

16

16

DPin#N[0:15]

16

DPin#N-1[0:15]

N-M Funnel

DPin#N-2[0:15]

DPin#4[0:15]

DPin#3[0:15]

DPin#2[0:15]

DPin#1[0:15]■ブロック図

16

16

16

N୘

16

16

N୘

...

N-䊂䊷䉺೉䉺䉟䊚䊮䉫⺞ᢛಣℂㇱ
16

16

16

...

16

16

16

16

DPin#M[0:15]

16

DPin#M-1[0:15]

N-Mᄌ឵ಣℂㇱ
16

M୘

DPin#2[0:15]

DPin#1[0:15]...

図 3 - 33 N-M Funnel のブロック図■インターフェース
名称

I/O

ビット長

説明

DP_out#X [0:15]I

16

16bit の Delivery Pair(¬log2piº, li), ei(ei=0 :Delivery Pair なし,(X=1~N)

ei=1 :Delivery Pair あり)
DP_in#X [0:15]

O

16bit の Delivery Pair(¬log2piº, li), ei

16(ei=0 :Delivery Pair なし,(X=1~M)

ei=1 :Delivery Pair あり)■サブブロックz

N-データ列タイミング調整処理部(1stLevel/2nd-Level Funnel で同一)

- 115 -

z

N-M 変換処理部(1stLevel/2nd-Level Funnel で異なる)■モジュールなし■機能
1st/2nd-Level Funnel の機能を実現する。これらに共通することは、有効もしくは無効なデータである N 個の Delivery Pair を並列に入力することで、有効なデータを選別し M 個のデータ列に圧縮したデータを出力する処理を行う。この N 個ÆM 個の圧縮処理を行うブロックを N-M Funnel と呼び、本章は N-M Funnel の機能仕様を与える。
■TWIRL 論文との違いについてz

基本的な回路構成は提案者の通りである。Segment の数を表すパラメータ Gi およびEIに関する報告者による見直しに伴い、1st-Funnel の入力列数の見直しを行った。見直し
た理由は Smallish Station の章の最初に述べた通りである。見直した結果のパラメータについては、表 3 - 6 を参照。

■動作概要
以下の動作を 1cycle 周期で繰り返す。
z

N-データ列タイミング調整処理部
並列入力された N 列のデータ入力(DPin#1~DP#N)に対し、左から t 番目(DPin#t)のデー
タに対して、データが入力されてから t cycles の間溜め込む処理を t=1~N 全てに行う。
1st/2nd-Level Funnel で同一の構造をもつ。

z

N-M 変換処理部
N 個の入力データを M 個に圧縮するメイン処理を実行、M 個のデータを出力する。
1st/2nd-Level Funnel で異なる構造をもつ。

- 116 -

3.4.4. N-データ列タイミング調整処理部■ブロック図N೉䈠䉏䈡䉏䈮㐳䈘䈏⇣䈭䉎FIFO䉕ਗ䈼䈢᭴ㅧ䈮䉋䉍䇮Ꮐ䈎䉌t⇟⋡䈱䊂䊷䉺䉕t cycle䈱㑆ḳ䉄䈩䈍䈒
DPin#1[0:15]

DPin#2[0:15]

16

16

DPin#3[0:15]...

16

DPin#N[0:15]
16

16bit

16bit

...

:
16bit

16bit

16bit

...

16bit

16bit

16bit

16bit

...

16bit

16

16

16

DPinB#1[0:15]

DPinB#2 DPinB#3[0:15][0:15]

1cycle䈗䈫䈮䇮৻䈧ਅ䈻ォㅍ

16...

DPinB#N[0:15]

䊧䉳䉴䉺

図 3 - 34 N-データ列タイミング調整処理部のブロック図(レジスタによる実装)■インターフェース
名称

I/O

ビット長

説明

DP_in#X [0:15]I

16

16bit の Delivery Pair(¬log2piº, li), ei(ei=0 :Delivery Pair なし,(X=1~N)

ei=1 :Delivery Pair あり)
DP_inB#X [0:15]

O

16bit の Delivery Pair(¬log2piº, li), ei

16(ei=0 :Delivery Pair なし,(X=1~M)

ei=1 :Delivery Pair あり)■機能入力された N 列の Delivery Pair データの各列に対し、t 番目の列のデータが t cycles 後に出力されるように一時的にデータを溜め込んでおく処理を行う。

- 117 -■TWIRL 論文との違いについて
TWIRL 論文と同一のデザインであるが。本デザインで用いられる FIFO の構造については、
図 3 - 35 に示したような工夫が必要と考えられる。
■動作概要
図 3 - 34 に示す通り、N 列それぞれに長さの異なる FIFO を並べた構造により処理する。t
列めの FIFO は長さ t であり、各 FIFO は 1cycle に 1 回データを 1 つ下方向にシフトする。
これにより、入力されてからデータが出力されるまで t cycles を要する。なお、この構造では、N の２乗に比例したレジスタ数を必要とし、N=256(FF_INPNUM の最大値)の場合非常に巨大な回路規模15となる。図 3 - 34 の代わりに、図 3 - 35 に示した形の回路を用いること
で、レジスタを SRAM に置き換えて回路規模を縮小することができる。3.6.1 に示した回路
規模見積もりは、図 3 - 35 の構成を用いた場合を前提として算出している。

㐳䈘i䈱FIFO(i=1~N)䉕SRAM䈪ታ⃻䈜䉎࿁〝᭴ᚑ᭎⇛㸢(iu16u2 bit SRAM+2ui䊎䉾䊃䊧䉳䉴䉺)䈱࿁〝ⷙᮨ䈪ታ⃻น⢻
write䈘䉏䉎
䉝䊄䊧䉴䈮'1'

಴ജ(16bit)
SRAM䉶䊦

(1 cycle䈗䈫䈮Ꮌ࿁)1
01

read䈘䉏䉎
䉝䊄䊧䉴䈮'1'(1 cycle䈗䈫䈮Ꮌ࿁)

0
i䊎䉾䊃

i䊎䉾䊃

...

...

0

0

0

0

16䊎䉾䊃
1bit䊧䉳䉴䉺

1

0

...

...

0

1

౉ജ(16bit)'1'䈱䊤䉟䊮䈮ኻ䈜䉎read/write䈏ታⴕ䈘䉏䉎䇯

図 3 - 35 N-データ列タイミング調整処理部のブロック図(SRAM による実装)

15

Smallish Station 全体で 6.52G gates 必要と換算される。
- 118 -

3.4.5. N-M 変換処理部■ブロック図DPinB#N[0:15]...

DPinB#N-1[0:15]

DPinB#3[0:15]

DPinB#2[0:15]

DPinB#1[0:15]

บᒻ(਄ㄝN୘, ਅㄝ(NM)୘, 㜞䈘M୘)䈪Delivery pair䊂䊷䉺䉕଻ᜬN୘䈱Delivery pair ೉䉕䇮M୘䈱Delivery pair೉䈮࿶❗䈚䈩಴ജ䈜䉎

-

DP1,7

DPout#1[0:15]

-

DP2,6

DPout#2[0:15]

-

M୘

-

-

DP2,1

-

-

-

...

N୘

DP3,1 DP3,2 DP3,3 DP3,4 DP3,5
DP4,1 DP24,2 DP4,3 DP4,4

DPout#M[0:15]

NM୘৻䈧ਅ䈱ⴕ䈱䊂䊷䉺䈏ⓨ䈭䉌⒖േ

1 cycle䈗䈫䈮৻䈧ฝ䉲䊐䊃䊂䊷䉺䈏䈅䈸䉏䉎႐ว䈏䈅䉎䈏䇮⊒↢⏕₸䈲㕖Ᏹ䈮ዊ䈘䈇ᦨฝ೉䈱M୘䈱Delivery
Pair೉䊂䊷䉺䉕಴ജ

Delivery Pair transfer unit B(16bit Delivery Pair䊂䊷䉺䉕଻ᜬ䇮ォㅍ)
図 3 - 36 N-M 変換処理部(1st-Level Funnel)- 119 -

DPinB#N-1[0:15]

DPinB#N[0:15]

-

DP1,7

-

DP2,6

-

DP3,1 DP3,2 DP3,3 DP3,4 DP3,5-

DPinB#3[0:15]

DPinB#1[0:15]

DPinB#2[0:15]

ᐔⴕ྾ㄝᒻ(਄ㄝ,ਅㄝN୘, 㜞䈘M୘)䈱ᒻ䈪Delivery pair䊂䊷䉺䉕଻ᜬN୘䈱Delivery pair ೉䉕䇮M୘䈱Delivery pair೉䈮࿶❗䈚䈩಴ജ䈜䉎

...
N୘

-

-

-

DP2,1

M୘

-

DPout#1[0:15]
DPout#2[0:15]

...

-

-

DP4,1 DP24,2 DP4,3 DP4,4 DP4,5 DP4,6 DP4,7

DPout#M[0:15]N୘৻䈧ਅ䈱ⴕ䈱䊂䊷䉺䈏ⓨ䈭䉌⒖േ

1 cycle䈗䈫䈮৻䈧ฝ䉲䊐䊃䊂䊷䉺䈏䈅䈸䉏䉎႐ว䈏䈅䉎䈏䇮⊒↢⏕₸䈲㕖Ᏹ䈮ዊ䈘䈇ᦨฝ೉䈱M୘䈱Delivery
Pair೉䊂䊷䉺䉕಴ജ

Delivery Pair transfer unit B(16bit Delivery Pair䊂䊷䉺䉕଻ᜬ䇮ォㅍ)
図 3 - 37 N-M 変換処理部(2nd-Level Funnel)■インターフェース
名称

I/O

ビット長

説明

DP_inB#X [0:15]I

16

16bit の Delivery Pair(¬log2piº, li), ei(ei=0 :Delivery Pair なし,(X=1~N)

ei=1 :Delivery Pair あり)
DP_out#X [0:15]

O

16bit の Delivery Pair(¬log2piº, li), ei

16(ei=0 :Delivery Pair なし,(X=1~M)

ei=1 :Delivery Pair あり)■サブブロックなし■モジュールz

以下を含む Delivery Pair Transfer unitBuNuM 個¾

16-bit レジスタ¾

16-bit 1-2 DEMUX¾

1bit X-1 and (X=2,3,...,M, M=14 or 5)- 120 -

■機能
入力された N 列の有効／無効な Delivery Pair データ列から、有効なデータを選別し M 列に変換する処理を行う。
■TWIRL 論文との違いについて
特に無し
■動作概要
Delivery Pair データを２次元的に配置する。配置の仕方は 1st と 2nd で異なり、1st-Level
Funnel においては図 3 - 36,に示す通り、上辺 N 個、下辺 N-M 個、高さ M 個の台形に、
2nd-Level-Funnel においては、図 3 - 37 に示す通り、上辺 N 個、下辺 N 個、高さ M 個の平行四辺形に Delivery Pair データを配置する16。
行列状に配置されたデータの、X 行,Y 列にある Delivery Pair データを DPX,Y(1dXdM,

1dYdN)と記す。各 Delivery Pair データに対して、以下を 1cycle に 1 回繰り返す処理を実行する。
1.

自分より一つ下(DPX,Y に対する DPX+1,Y-1)の Delivery Pair データが空(ei=0)ならば、そこに移動する。

2.

すべての Delivery データ全体を一つ右へ移動する。このとき、最も右列のデータが出力される。

上記 1.2.を 1cycle で実行するために、
Delivery Pair Transfer unit B というモジュールを用いる。、Delivery Pair Transfer unit B の回路構成を図 3 - 38 に示す。これは、図 3 - 26 の Delivery Pair
Tarnsfer Unit とほぼ同様の処理を実行する。つまり、下 M 個以内に空きががあるかどうかを調べ、空きがあるならばデータを右下へ、さもなくば一つ右へデータを転送する処理を繰り返す。Funnel においては、M=5 or 14 と小さいため、下 M 個全ての空き状況を調べる回路
は容易に実現できる。

2nd-Level Funnel の出力先である Delivery Line 間の転送遅延を考慮すると、
2nd-Level
Funnel は台形の構造をとる必要がある。
16- 121 -

ਅM୘એౝ䈮䇮ⓨ䈪䈅䉎䊂䊷䉺䈏ሽ࿷䈜䉎䈭䉌⒖േ
Delivery Pair Transfer unitB
16DP

16bit 1-2
DEMUX

: 1bit M-1

1

AND

1

16

DP

:1bit (M1)-1

ਅM୘એౝ䈮ⓨ䈐(‘0’)䈏
ሽ࿷䈜䉎䈭䉌ฝਅ䈻䇮䈘䉅䈭䈒䈳ฝ䈻⒖േ

16
...

DP

...

16

16bit 1-2
16
DEMUX

1

DP

16

AND

1

16

DP

16bit 1-2 16
DEMUX

DP

16
:

DP

...

16-bit䊧䉳䉴䉺

図 3 - 38 Delivery Pair Transfer Unit B の回路構成図- 122 -

3.4.6. Segment■ブロック図Segment#X-Y-*
BL_inp#1[0:9]

BL_inp#2[0:9]

BL_inp#3
[0:9]

10bit

10bit

10bit

16

cellB1,1
DP_inp#1 16bit[0:15]

10

10:
Bus Line#1

:

10
16

BL_inp#BL_MAX
[0:9]

10bit
Delivery Line#1. . . 16 cellB
cellB1,3
1,BL_MAX
10cellB2,2

16

10
Delivery Line#1
16.
.
.
cellB2,3
cellB2,BL_MAX

10

10

10

:
Bus Line#2:
Bus Line#3:
Bus Line#BL_MAX

10

cellBDL_NUM,1

DP_inp
16bit#DL_NUM[0:15]

16

10
16cellB2,1
DP_inp#2 16bit[0:15]

cellB1,2...

Delivery Line10
#DL_NUM
16...
cellBDL_NUM,BL_MAX
cellBDL_NUM,310cellBDL_NUM,2

10bit

10bit

BL_out#1[0:9]

BL_out#2
[0:9]

16

10bit

10bit

BL_out#3 . . .
BL_out#BL_MAX
[0:9]
[0:9]
(㶎) BL_MAX = 2Ei

図 3 - 39 Segment のブロック図■インターフェース
名称

I/O

ビット長

説明

BL_inp#X [0:9]I

10u2Ei2Ei 個の 10bit データ FS(a,b)=6¬log2piº

I

16uDL_NUM DL_NUM 個 の 16bit Delivery Pair デ ー タ(X=1~2Ei)
DL_inp#X[0:17](¬log2piº, li, ei),

(X=1~DL_NUM)(ei=1:Delivery Pair 有り, ei=0: Delivery Pair 無し)
BL_out#X [0:9]

O

Ei

10u2

2Ei 個の 10bit データ FS(a,b)=6¬log2piº(X=1~2Ei)(注 1)
DL_NUM は、Delivery Line の本数を表す定数。値については表 3 - 6 を参照。

- 123 -

■サブブロックなし■モジュールz

cellBu2Ei uDL_NUM 個■機能
Emitter より入力された Delivery Pair に含まれる素因数の対数値¬log2piº,を、素因数情報を蓄積する記憶領域 FS(a,b)に対して加算する処理を行う。この加算処理は、内部に列状に配置されている cellB と呼ばれる各ユニットが、それぞれ独立してデータ加算、縦方向のデータ転送を繰り返すことで行う。Largish Station の Cell と異なり、横方向のデータ転送は行われない。
■TWIRL 論文との違いについて
基本的な回路構成は提案者の通りである。Segment の数を表すパラメータ Gi およびEi について報告者による見直しを行い、提案者の推奨するより若干大きな Gi(小さなEi)に設定した。
見直した理由は 3.4 に述べた通りである。Gi を含む見直した結果のパラメータについては、
表 3 - 6 に示す。
■動作概要
図 3 - 39 に示すように、cellB と呼ばれるモジュールが行列状に配列された構造を持つ。各cell を cellBx,y と表記する(1dxdDL_NUM, 1dyd2Ei)。列方向にならんだ一連の cellB を Bus Lineと呼ぶ。行方向に並んだ一連の cellB を、便宜的に Delivery Line と呼ぶことにする。("便宜的"というのは、Largish Station と異なり、Delivery Line に沿った横方向のデータ転送は行われないからである。)
この構造を用いた加算処理の基本原理を図 3 - 40 に示す。Bus Line 方向には FS(a,b)のデータ転送が常に行われており、1 cycle ごとに一つ下の cellB へ FS(a,b)のデータが転送される。
Emitter から入力された Delivery Pair(¬log2piº, li)は、Delivery Line に含まれる全ての CellBに対して転送が行われる。各 CellB においては、受け取った Delivery Pair(¬log2piº, li)の li と自身に含まれる bus line 番号を比較し、一致した場合に¬log2piº,を加算する処理を行う。
また、
cellB は図 3 - 41 に示した回路で実現できる。
これは図 3 - 29 に示した、Largish Stationの cell の回路から、横方向へ転送する機能を削除したものである。

- 124 -

bus line⇟ภട▚⊒↢䈱᦭ή䈮㑐ଥ䈭䈒䇮

bus line⇟ภ䈫li䈏⇣䈭䉎㸢૗䉅䈚䈭䈇

01

2 1cycleᲤ䈮1䈧ਅ䈱cell䈻

+

+

+

+

+

+

+

+

+

bus line⇟ภ䈫li䈏৻⥌㸢¬log2 piº䉕ട▚F(a,b)=¦ (¬log2 piº)䉕ォㅍ(ªlog p1¼ , l1(=0))

F(a,b):Delivery Line1ᧄ䈅䈢䉍1cycle䈱ㆃᑧcellB

図 3 - 40 Smallish におけるパイプライン加算部の原理

FS(a,b)=¦ (ªlog px¼ )ei=1 : delivery pair䊂䊷䉺᦭䉍
ei=0 : delivery pair䊂䊷䉺ή䈚

CellB

10

10
¦ (ªlog px¼ )(ªlog pi¼ , li䋬ei)

10ªlog pi¼

16

10 bitട▚ེ

li
ei

10

9 bitቯᢙᲧセེ

10

1
1
1

1bit 12-1and10-bit 2-1 MUX

10䊂䊷䉺᦭䉍䇮䈎䈧bus line # = li 䈭䉌䈳1䈘䉅䈭䈒䈳010ቯᢙ(bus line⇟ภ)䈫䈱Ყセಣℂ1䈭䉌䈳¦ (ªlog px¼ )+ ªlog pi¼䉕䇮0䈭䉌䈳¦ (ªlog px¼ )䉕ㆬᛯ䊧䉳䉴䉺

図 3 - 41 Smallish Station における CellB- 125 -

3.5. Tiny Station■ブロック図
FS_IN[0:40959]

Tiny Station
10bitu1024=10,240bit
Emitters#1-1...

Emitters#2-1...

:

Emitters#1-32

Emitters
#2-64

...

Emitters#7-2048...

TSegment#1-1
10bitu512=5,120bit

10bitu512=5,120bit

Tsegment#2-1

TSegment
#2-2

:

:

Emitters#7-1

10bitu1024=10,240bit...

TSegment#1-32
10bitu512=5,120bit

10bitu512=5,120bit

TSegment#2-63

TSegment#2-64:

10bit*32=320bit

10bit*32=320bitTSegment#7-1

TSegment#7-2

10bitu2=20bit10bitu2=20bit:...

:10bit*32=320bit

10bit*32=320bitTSegment#7-2047

TSegment#7-2048

10bitu2=20bit10bitu2=20bitFS_OUT[0:40959]

図 3 - 42 Tiny Station のブロック図■インターフェース
名称

I/O

ビット長

説明

FS_IN[0:40959]

I

40,96010bit の FS(a,b)u4,096 個

FS_OUT[0:40959]

O

40,96010bit の FS(a,b)u4,096 個■サブブロックz

Emitters#X-Y(X=1,2,…,7, Y=1,2,…,2X+4)zTSegment#X-Y(X=1,2,…,7, Y=1,2,…,2X+4)■モジュールなし■機能f(a,b)が pi を素因数に持つならば、FS(a,b)に¬logpiºを加算する処理を、0dadR, 0<b<H に含ま- 126 -

れる全ての格子点(a,b)について行う。ただし、2dpi<256 である。
■TWIRL 論文との違いについて
特になし
■動作概要
Emitters と TSegment を 1 対 1 で接続することで実現する。Smallish Station と異なり、Funnelを用いない
zEmitters
Delivery Pair(¬log2piº, li)を Segment に発行する。

z

TSegment
TSegment 内に含まれる全ての bus line 番号のうち、Emitters から受け取った Delivery
Pair(¬log2piº, li)のうち、li の値と一致する bus line にて¬log2piº,の加算処理を行う。

Emitters と TSegment の IO 長は、表 3 - 7 に従う。

表 3 - 7 Emitters と TSegment の IO 長XYEmitters から TSegment へ

Emitters の個数

合計 IO 長の IO 長1

1~32

368 bit32

10,304 bit

2

1~64

208 bit64

13,312 bit

3

1~128

112bit128

14,336 bit

4

1~256

80 bit256

20,480 bit

5

1~512

32 bit512

16,384bit

6

1~102432 bit1024

32,768 bit

71~204832 bit2048

65,536 bit

Emitters-TSegment の構造を図 3 - 43 に示す。基本的に、Smallish Station における Emitter とSegment を直結したものを並べただけである。DL_NUM 個の Emitter が、TSegment それぞれの Delivery Line に入力されている。TSegment は、基本的には図 3 - 40 に示した Segmentと同一の構造であり、含まれる Bus Line 数と Delivery Line 数が異なるだけである。X,Y ごとのこれらの値を表 3 - 8 に示す。

- 127 -

16bit(¬logpiº, li, ei)...

Emitter#X-Y-1

Emitter#X-Y-DL_MAX

図 3 - 43...

DL_MAX୘

Emitters-#X-Y-*
TSegment#X-Y-*

16bit(¬logpiº, li, ei)

Emitters-TSegment の構造

表 3 - 8 TSegment ごとに含まれる Bus Line と Delivery Line の本数X

Y

Bus Line 本数

Delivery Line 本数(DL_NUM)

1

1~32

128

23

2

1~64

64

13

3

1~128

32

7

4

1~256

16

5

5

1~512

8

2

6

1~102442

71~20482

2- 128 -

3.6. 詳細検討結果
3.6.1. 回路規模見積もり詳細
報告者の回路設計案から Rational TWIRL の回路規模と回路面積を評価した結果を表 3 - 9に示す。条件は以下の通り。
z

0.09Pm テクノロジーを使用し、集積度が以下である場合を前提とし、回路規模から回路面積を算出。また、1st/2nd Level Funnel の FIFO については、図 3 - 35 に示した SRAMを用いた回路による規模算出を行った。なお、配線に伴う面積は考慮していない。
¾

論理回路:

4.0u10-6mm2/gate

¾

SRAM

:

1.8u10-6mm2/bit¾

DRAM :

0.09u10-6mm2/bit- 129 -

表 3 - 9 Rational TWIRL の回路規模評価結果
ブロック名-1

ブロック名-2

ブロック名-3

論理回路

SRAM

DRAM

回路面積

(M gates)

(bit)

(bit)

(90nm 時の mm2)

LargishEmission Triplet 発

Station

行処理部

223

147,828,736

43,165,768,960

5043

291

なし

なし

1164

329

なし

なし

1316

727

なし

なし

2908

-

1,126

なし

なし

4504

小計

-

2,696

147,828,736

43,165,768,960

14,935

Smallish

Emitter

-

147

なし

なし

588

Station

1st/2nd-Level

-

1280

1,503,936

なし

5120

757

なし

なし

3031

Buffer

-BubbleSort/

Random Shuffle
l-ソート処理部+
l-重複削除処理部
Delelery Line 出
力処理部
パイプライン加算処理部

FunnelSegment(CellB)Tiny Station

小計

-

2,184

1,503,936

なし

8,739

Emitter

-

1.6

なし

なし

6.4

53

なし

なし

212

Segment(CellB)
小計
合計

-

54.6
4,935

218.4
149,332,672

43,165,768,960

23,892

提案者は、Ratinal TWIRL に必要な回路面積は 0.13Pm プロセステクノロジー使用時に15960mm2 であると主張している。テクノロジーの差を考慮すれば、提案者の回路面積見積
もりは報告者の 3.12 倍と報告者は結論づける17。

提案者が実現法を示していない Buffer の l-ソート処理について、報告者の方法ではなく、典型的なバブルソートを用いた実装の場合、さらに 5.6Ggates の論理回路が必要となる。
この場合の全体の回路面積を表 3 - 9 と同じ条件で評価すると、46,292mm2 必要と評価できる。この実装法を用いた場合、提案者の見積もりの 6.05 倍もの回路面積が必要と評価できる。
17- 130 -

3.6.2. 複数の LSI を用いた TWIRL 実現に関する詳細検討
第 2 章で説明したように、TWIRL を 1 個の LSI として製造するためには、90nm プロセスを用いた場合でも直径 100mm 以上のウェハーを必要とするが、そのように巨大なウェハーを製造することは現在の技術では不可能である。この問題を回避するために、現在の技術で製造可能な LSI を複数用いて、Rational TWIRL を実現するという前提のもとに、必要な LSI
数について検討を行った。検討にあたっては、各 LSI はハード規模と IO ピン数の両方について、以下の制約条件を守るものとして、90nm プロセスを用いた場合に必要となる LSI 数の見積もりを行った。
z

回路規模に関する制約条件
最大 1,600mm2/LSI (400Mgates/LSI)z

IO ピン数に関する制約条件
最大 3,000pins/LSI(1,500pins を IO として使用可能。残り 1,500pins は Vcc/Gnd 用)
結論から述べると、回路規模に関する制約条件を用いると LSI を 15 個で実装可能である

が、IO ピン数に関する制約条件も考慮すると、3,362 個必要である。つまり、IO 数のボト
ルネックが原因で膨大な LSI が必要となる。また、これだけの個数の 40mm 角 LSI を１枚のボードに搭載するためには、58u58 個に並べる必要があり、LSI 間の配線領域に 10mm 必要と仮定するとおよそ 3mu3m の巨大なボードが必要となる。よって、2004 年 1 月現在で製造可能な複数の LSI を 1 枚のボードに搭載することで TWIRL 実現を検討した場合、LSI 数が多すぎて製造不可能であり、この原因は IO 数のボトルネックによるものであると報告者
は結論付ける。以下では、個々のブロックの分割法の詳細について説明する。
■回路規模に関する制約条件を考慮した場合
表 3 - 9 の回路規模見積より、Largish Station 全体で 23,892mm2/1,600mm2 = 15 個と評価できる。
■IO ピン数に関する制約条件を考慮した場合。
Largish Station 全体のうち、Emission Triplets 発行処理部に 168 個、Buffer に 218 個、パイプ
ライン加算部に 2,912 個、Smallish Station と TinyStation 全体で 64 個それぞれ必要であり、合計 3,262 個必要と評価できる。
詳細を説明するために、Largish Station の Emission Triplet 発行処理部と Buffer の分割案を
図 3 - 44 に、パイプライン加算部の分割案を図 3 - 45 に、Smallish/Tiny Station の分割案を図- 131 -

3 - 46 にそれぞれ示す。参考のために、図 3 - 44,図 3 - 45,図 3 - 46 には分割前の IO 数と回路規模もあわせて示す。それぞれのブロックの分割方法について以下に説明する。
■Emission Triplet 発行処理部
複数の Emission Triplet 発行処理部を、IO 数が 1,500bit 以内となる単位で一つの LSI にまとめる(図 3 - 44)。つまり、50 個の Emission Triplet 発行処理部を一つの LSI として実装する。
よって、必要な LSI 数は 8,375/50=168 個と評価できる。また、分割前の回路規模が 223M gatesであるので、回路規模に関する制約条件を明らかに満たしている。。
なお、Emission Triplet 発行処理部全体では、30bitu8,375=251,250bit もの出力であり、IO 長が非常に多いにも関わらずこの部分を LSI の単位として区切る理由は、ロジック混載型
DRAM の LSI における論理回路部の回路規模を小さく抑えることを前提としているから18である。
■Buffer
入力(Emission Triplet 発行処理部)から出力(Delivery Line 出力処理部)の方向に沿って、IO
数 が 1,500bit と な る よ う に 分 割 す る ( 図 3 - 44) 。 こ の 場 合 、 必 要 な LSI 数 は(30u8,375+75,600)/1500=218 個と評価できる。
なお、Buffer に対してこのような分割を行った場合、n 分割することにより回路規模が 1/n
なるブロックとならないブロックがある。つまり、分割数 n が特定値 c までなら、分割後の回路規模は 1/n となるが、n が c を超えた場合、分割後の回路規模は 1/n 以下にならないブ
ロックが存在する。ブロックごとの n と c の詳細を以下に示す。これに基づくと、分割後のLSI の規模は 291Mgates/218 + 329M gates/4 + 727Mgates/8 = 174.5M gates となり、回路規模の制約条件である 400Mgates 以内である。
z

Bubble Sort/Random Shuffle
内部結合は密であるが分割は容易であるので、n 分割することで回路規模は 1/n となる。

zl-sort 処理部+l-重複削除処理部
nd4 ならば、n 分割することで回路規模は 1/n となる。しかし、n>4 の場合、n 分割によっても回路規模は 1/n とならない。よって、回路規模を分割前の 1/4 以下にすることはできない(c=4)。なぜなら、このブロックは 16,384 個Æ8,192 個+8,192 個のデータ分類を行うことを繰り返す構造であり、ｎ分割することで 16,384/n 個Æ8,192/n 個+8,192/n 個という構造にすることができると考えられるが、本ブロックの機能はデータを 4,096 通りに分類するという性質上、n>4 にできないからである。

DRAM には仕組み上リフレッシュ機構が必要であるため、一般的には論理回路用の LSIは別の LSI として製造されるが、もしロジック混載型 DRAM を製造する場合は、論理回路部の回路規模が小さいほど製造が容易であると報告者は考える。
18- 132 -

z

DL 出力部#1~#8
nd8 ならば、n 分割することで回路規模は 1/n となる。しかし、n>8 の場合、n 分割によっても回路規模は 1/n とならないと予想する(c=8)。これは、Delivery Line 出力部の内部結合は非常に密なので、ブロック番号ごと分割(最大 8 分割)は非常に簡単であるが、それ以上の分割は困難であると予想されるからである。

■パイプライン加算部
図 3 - 45 に示すように、4 方向に 375bit の IO を配置した LSI を複数用いて実現するのが最も効率的であると考えられる。これは、パイプライン加算部を一つの長方形とみなし、これを複数の LSI により実現する場合、正方形の LSI を用いるのが最も LSI 数が少なく効率的であるからである。この場合、必要な LSI 数は、それぞれのパイプライン加算部を実現するのにª5,120/375ºuª9,450/375º=14u26=364 個必要であり、8 つのパイプライン加算部を実現するためには 364u8=2,912 個必要である。この分割案では n 分割することで回路規模が1/n であり個々の LSI は 1,122Mgates/2,912=0.385Mgates であり回路規模の制約条件を満たす。
223M gates

Buffer 1,346M gates

4୘

DL಴ജㇱ
#4
DL಴ജㇱ
. . . #5

18bit*512=9,216bit

140M gates
DL*525ᧄ

18bit*525=9,450bit

30bit

329Mgates

140M gates
DL*525ᧄ

525ᧄu18bitu8୘
=75,600bit

91M gates
18bit*512=9,216bit

ಽഀන૏

図 3 - 4418bit*525=9,450bit

91M gates

DL಴ജㇱ
#8

Emission Triplet⊒ⴕಣℂㇱ#8375

19bit*8375*2=318,250bit

291M gates

27K gates

140M gates
DL*525ᧄ

91M gates
18bit*512=9,216bit...

=251,250bit

4୘l-䉸䊷䊃ಣℂㇱ&l-㊀ⶄ೥㒰ಣℂㇱ

30bit 30bit*8375...

Emission Triplet⊒ⴕಣℂㇱ#1

27K gates

...

30bit

18bit*525=9,450bit...

18bit*512=9,216bit

DL಴ജㇱ
#1

91M gates

Bubble Sort/Random Shuffle

Emission Triplet⊒ⴕಣℂㇱ#1

27K gates

140M gates
18bit*525=9,450bit

91M gatesu8୘
=727Mgates

DL*525ᧄ
140Mu8=1,122Mgates

IO ピン数を基準とした Emission Triplet 発行処理部+Buffer の分割案

- 133 -

10bit*512=5,120 bit

140M gates
10bit
18bit

Cell1,1

10bit
18

10
18bit
18bit*525=9,450 bit

Cell2,1

18

Cell1,2

Cell1,3

10bit
...

18

...

18

10

10
18

18

Cell2,2

Cell1,512
10

Cell2,3

Cell2,512

10

10

10

10

:

:

:

:

10
18bit

10bit

Cell525,1

10
18

10bit

10
18

Cell525,2

10

Cell525,3

10bit

10bit

...

18

Cell525,512

10bit

…

375bit…

ಽഀන૏䋨ฝ䈫╬ଔ䋩

375bit375bit…

375bit

図 3 - 45

IO ピン数を基準としたパイプライン加算処理部の分割案■Smallish/Tiny Station
64 個必要であると見積もられる。以下に理由を説明する。
まず、図 3 - 46 より、Emitter-Funnel と Segment 間は IO の結合が密であり、Emitter-Funnelと Segment を別々の LSI として実現するのは不利であると考えられる。よって、図 3 - 46の破線で示すように、Emitter-Funnel を一つの LSI に収めながら、Bus Line に沿った形で分割するのが最適であると考えられる。 また、分割にあたっては、Emitter と Segment の性質
か ら 分 割 数 を 2 べ き に 設 定 す る の が 最 適 で あ り 、 64 分 割 な ら ば 、(40,960bit(input)+40,960bit(output))/64=1,280bit となり、1,500bit 以内に収まる。
分割後の回路規模については、
Segment は 1/64 になるが、Gi<64 である一部の Emitter-Funnel
については、分割後の回路規模が 1/Gi 以下にならない。この性質を考慮した場合、分割後の各 LSI の大きさは 757M/64 +404M/4+440M/8+194M/16+103M/32+71M/64+68M/128=184.7
M gates と評価でき、回路規模に関する制約条件を満たす。
さらに上で述べた分割は、Smallish+Tiny Station という一括した形で行うことができ、Tiny
Station の回路規模は小さく(53M gates)無視できるので、分割後の LSI は Smallish と Tiny
Station あわせて 64 個であると結論付けられる。

- 134 -

757Mgate
101Mgatesu4=404Mgates
EmitterFunnel#1-1...

672bitu4= 2,688 bits

40,960 bit

68.8Mgatesu4୘=27.5Mgates

EmitterFunnel#1-4

segment#1-1...

segment#1-4

55M gatesu8=440Mgates
EmitterFunnel#2-1...

EmitterFunnel#2-8

896bitu8= 7,168 bits

54.4Mgatesu8୘=435Mgates
segment#2-1 ...
segment#2-8

1,344bitu16= 21,504 bits

15.7Mgatesu16୘=252Mgates
segment#3-1 ...
segment#3-16

2,464bitu32= 78,848 bits

4.3Mgatesu32୘=137Mgates
segment#4-1 ...
segment#4-32

4,256bitu64=272,384 bits

1.4Mgatesu64୘=92Mgates
segment#5-1 ...
segment#5-64

2,688bitu128= 344,064bits

0.53Mgatesu128୘=69Mgates
segment#6-1 ...
segment#6-128

12.1M gatesu16=194Mgates
EmitterFunnel#3-1...

EmitterFunnel#3-16

3.2M gatesu32=103Mgates
EmitterFunnel#4-1...

EmitterFunnel#4-32

1.1M gatesu64=71Mgates
EmitterFunnel#5-1...

EmitterFunnel#5-64

0.5Matesu128=68Mgates
EmitterFunnel#6-1

Emitter... Funnel#6-128

ಽഀන૏

40,960 bit

図 3 - 46 IO ピン数を基準とした Smallish Station の分割案

3.6.3. 複数のボードを用いた TWIRL 実現に関する詳細検討
3.6.2 節において、2004 年 1 月の時点で製造可能な LSI を複数用いて Ratonal TWIRL を実現する場合、3,362 個もの LSI が必要であり、LSI 数が多すぎて 1 枚のボードでは実現不可能であるとの結論を報告者は得た。よって、さらなる TWIRL 実現可能性の検討として、複数のボードを用いた場合の TWIRL の実現可能性について考察する。
本検討による実現可能性検討方針は以下の通りである。
1.

1 ボードあたり 100 個の LSI を搭載可能という前提条件

2.

分割にあたっては、ボード間の IO 数をなるべく少なくする方法を採用する。

3.

2.の結果、ボード間の IO 数が最大となる箇所により実現可能性を判断する。

4.

ボード間の IO 数が多いほど IO の高速化が難しくなることを考慮すると、TWIRL 提案
者の主張する動作周波数(1GHz)を前提の場合、ボード間 IO が 400bit を超えるなら、現在の技術では実現不可能と報告者は考えるからである。

結論から述べると、パイプライン加算部が原因で、ボード間 IO を 1,500bit 以下にするのは不可能であるため、実現不可能であると考えられる。

- 135 -

本評価については、概要のみ説明する。
■Emission Triplet 発行処理部+Buffer(図 3 - 44 に示す通り、Emission Triplet 発行処理と Bufferの間の IO 数が多く、Buffer からパイプライン加算処理部の間の IO 数が少ない。よって、Emission Triplet 発行処理部の LSI と Buffer の LSI を同一のボードで搭載する方法が最適であると考える。
必要なボードの枚数 n 枚とすると、最小の枚数は 5 枚であり、Buffer からパイプライン加算
処理部の 75,600bit を n 枚で実現すると、ボード間 IO は 75,600/n と評価できる。n が小さいほどボード枚数は小さくなるが、ボード間 IO は多くなる。逆に、ボード枚数を増やすこと
で、ボードごとの IO 数は小さくすることができる。IO 数を優先した場合、n=168+218 の時に、75,600/(168+218)=196bit と評価できる。
■パイプライン加算部
パイプライン加算部 1 個あたり、長方形に配置された 26u14=364 個の LSI を必要とする。
ボードに 100 個の LSI 搭載する場合、ボード間 IO 数最小で実現するためには、10u10 の LSIのボードを用いるのが最適であり、ボード枚数はª26/10ºuª14/10ºu8=48 枚であり、ボード間IO 数は 1,500bitu10=15,000bit と評価できる。ただし、Emission Triplet 発行処理部と同じように、ボードあたりの LSI 数を小さくすることで、ボード枚数を多くする代わりに IO 数を減少させることができるが、パイプライン加算部の格子状の配置されるという性質上、LSI あたりの IO 数である 1,500bit に未満するのは不可能である。
■Smallish/Tiny Station
パイプライン加算部と同じ理由により、ボード間 IO を 1,500bit 以下にするのは不可能である。最小ボード枚数は、64 個 LSI を一つのボードに搭載した場合の 1 枚となる。
なお、ボード間の IO 数が問題となっている以上、ボードの枚数に関する議論は重要でな
いかもしれないが、上記の最小枚数を合計すると、5+48+1=54 枚と評価できる。

- 136 -

参考文献
[Ber01] Daniel J. Bernstein, “Circuits for integer factorization: a proposal”, preprint, 2001. Availabe at http://cr.yp.to/papers/nfscircuit.pdf[CRY02] 情報処理振興事業協会 (IPA), 通信・放送機構 (TAO), “暗号技術評価報告書 (2002 年度版)”, March, 2002. Availabe at http://www.shiba.tao.go.jp/kenkyu/CRYPTREC/

PDF/c02_report.pdf[Cha94] Chin-Chieh Chao, “Multiport Memory Design for An MCM Coprocessor”, Technical
Report No.ICL94-037, pp.95-113, Department of Electrical Engineering Stanford Univ.,
December 1994.
[F+03] J. Franke and others, “RSA-576”, Email announcement, December 2003. Available at
http://www.crypto-world.com/announcements/rsa576.txt[GS03] Willi Geiselmann and Rainer Steinwandt, “A dedicated sieving hardware”, PKC 2003,
LNCS 2567, pp.254-266, Springer-Verlag, 2003.
[GS04] Willi Geiselmann and Rainer Steinwandt, “Yet another sieveing device”, CT-RSA 2004,
LNCS 2964, pp.278-291, Springer-Verlag, 2004. (Preliminary version is included in IACR
ePrint Archive, 2003/202, 2003. Available at http://eprint.iacr.org/2003/202.
pdf)[IK03] 伊豆 哲也, 木田 祐司, “素因数分解の現状について”, 日本応用数理学会論文誌 Vol. 13,
No. 2, pp.289-304, 2003.
[Kob95] 小林 芳直, “定本 ASIC のシステム設計―論理回路の記述からステート・マシンの設計まで”, CQ 出版, 1995.

[Kob98] 小林 芳直, “定本 ASIC の論理回路設計―高速・高信頼ディジタル・システムのための設計ノウハウ”, CQ 出版, 1998.

[LL93] Arjen K. Lenstra and H.W. Lenstra (eds.), “The development of the number field sieve”,
Vol. 1554 in Lecture Notes in Mathematics (LNM), Springer-Verlag, 1993.

– 137 –

[LS00] Arjen K. Lenstra and Adi Shamir, “Analysis and optimization of the TWINKLE factoring
device”, EUROCRYPT 2000, LNCS 1807, pp.35-52, Springer-Verlag, 2000.
[LSTT02] Arjen K. Lenstra, Adi Shamir, Jim Tomlinson and Eran Tromer, “Analysis of Bernstein’s circuit”, ASIACRYPT 2002, LNCS 2501, pp.1-26, Springer-Verlag, 2002.
[LTS+03] Arjen K. Lenstra, Eran Tromer, Adi Shamir, Wil Kortsmit, Bruce Dodson, James
Hughes and Paul Leyland, “Factoring estimates for a 1024-bit RSA modulus”, ASIACRYPT
2003, LNCS 2894, pp.55-74, Springer-Verlag, 2003.
[RSA03] RSA Security, “TWIRL and RSA Key Size”, May 2003. Available at http://www.
rsasecurity.com/rsalabs/technotes/twirl.html[Sha99] Adi Shamir, “Factoring large numbers with the TWINKLE device (extended abstract)”,
CHES 1999, LNCS 1717, pp.2-12, Springer-Verlag, 1999.
[ST03] Adi Shamir and Eran Tromer, “Factoring large numbers with the TWIRL device”,
CRYPTO 2003, LNCS 2729, pp.1-26, Springer-Verlag, 2003.

– 138 –