大阪府立大学
大学院理学系研究科 情報数理科学専攻
        ☆北野晃司 藤本典幸
   現在主流の整数型
    ◦ 32bit
    ◦ 64bit
   多倍長整数演算
    ◦ 1ワードに収まらない整数を対象とした演算
    ◦ 研究が盛ん
   GPGPU
    ◦ GPUによる汎用計算
    ◦ 近年注目されている


2             大阪府立大学 北野晃司   Next⇒動機・目的
   多倍長整数演算は時間がかかる
    ◦ 特に積、商、平方根の演算
   商、平方根
    ◦ ニュートン法を用いて高速化可能
     高速な乗算が使える場合
   GPUを用いて多倍長整数乗算を高速に解く手法を提
    案
※ニュートン法による逆数を求める漸化式⇒Xn+1=2*Xn-a*Xn^2
        平方根を求める漸化式⇒Xn+1=(Xn + a/Xn) /2 aは適当な初期
値


3                大阪府立大学 北野晃司
                                      Next⇒提案内容
   積表という並列処理に適した
        データ構造とその処理法の提案



       2つの多倍長整数の和を高速に求める
        アルゴリズムの実装方法



4            大阪府立大学 北野晃司   Next⇒発表の流れ
   GPUによる並列処理の概要   時間の都合により割愛

       提案手法

       評価実験

       まとめと今後の課題




5              大阪府立大学 北野晃司
   GPUによる並列処理の概要
       提案手法
        ◦ 積表
        ◦ 積表に対する効率的な処理法の提案
         概要とその利点
         具体的な処理の流れ
        ◦ 列総和配列から積への変換
        ◦ 多倍長整数の和を求めるアルゴリズムの実装方法
       評価実験
       まとめと今後の課題



6                大阪府立大学 北野晃司
• 10進数における積
 積表
     ◦ – 筆算を元に得られた表
       右図のような筆算で求めることが可
       能                            2 0
       – 下位からの桁上げ値をその値が
         必要な列自身に計算させる          ?
     縦方向に並列に計算できるか?
     – 列ごとの総和が他の列の演算と       縦の総和から積への変
                            換
      ⇒主な問題が2つ
       は独立に行える


1.   各値が下位からの桁上げ値を
     必要とすること
2.   縦方向に総和計算を行うだけでは
     正しい積の1桁にならないこと
     後半で解決


7             大阪府立大学 北野晃司      Next⇒積表の構成
   多倍長整数A×Bの積表
    ◦   Aは5桁、Bは3桁
    ◦   BASEは多倍長整数の基数
    ◦   BASE=10なら10進数
    ◦   A[0]がAの1の位の数
                        ~~~~~~~~~~~~~~~~~~~
       要素の規則性
    ◦    2行ごとに添字が1変わる
    ◦    桁数を変えても同様




8                大阪府立大学 北野晃司      Next⇒積表の一般化
   多倍長整数A×Bの積表
    ◦ Aはa桁、Bはb桁(a≧b)
   赤と緑の部分
    ◦ 列数は共にb列
    ◦ 行数は1列毎に2行ずつ増減
   黄の部分
    ◦ 列数はa-b列
    ◦ 行数はb×2行




9               大阪府立大学 北野晃司   Next⇒積表の単純な処理法
:1スレッ
    積表の処理                   ド
     ◦ 1列に1スレッドの割り当て
     ◦ 列ごとの総和計算



    この処理の欠点
     ◦ スレッド毎の演算回数の差
     ◦ 処理が早く終わったスレッド
       はただ待つだけ
     ◦ 演算器が遊んでフルに性能が
       発揮できない

10             大阪府立大学 北野晃司   Next⇒積表の再構成
   欠点を解決するための変形
         ◦ 緑の部分を赤の部分に結合
         ◦ 列数は(a-b)+b=a列
         ◦ 行数はb×2行




11                大阪府立大学 北野晃司 Next⇒再構成した積表の要素
A[0]×B[0]%BASE
                                  α列

• 積表内の要素は、同色内で
                            A[α]×B[0]%BASE
  は上下の順番は結果に無関          A[a-1]×B[0]/BASE
  係                        A[α-1]×B[0]/BASE
                        A[a-1]×B[1]%BASE
                           A[α-1]×B[1]%BASE
• 適切に並び替え、
  次の性質を持たせる             A[a-2]×B[1]/BASE      ・
     • 右からα列目では0行目でAの      A[α-2]×B[1]/BASE
       添字αの要素を参照
                                              ・
     • 行が下に行くと、2行間隔で    A[a-2]×B[2]%BASE
                           A[α-2]×B[2]%BASE   ・
       参照するAの添字は1減少                 ・
     • Aの添字がマイナスになる時    A[a-3]×B[2]/BASE
                                    ・
       は0-1⇒a-1として参照                ・
     • どの列においても、β行ではB
       の添字⌊β/2 ⌋を参照
     • 偶数行では基数で割った剰余、
       奇数行では基数で割った商
12             大阪府立大学 北野晃司
                             Next⇒再構成した積表の具体
   5桁×3桁での例
         ◦ 赤と緑、黄、の2種類の長方形




         • 列総和計算に必要な演算回数
          – どの列も同じ(2×b 回)
         • 赤と緑の長方形
          – 赤の総和と緑の総和が個別に必要なことに注意
13                  大阪府立大学 北野晃司 Next⇒効率的な処理法の提
   GPUによる並列処理の概要
        提案手法
         ◦ 積表
         ◦ 積表に対する効率的な処理法の提案
          概要とその利点
          具体的な処理の流れ
         ◦ 列総和配列から積への変換
         ◦ 多倍長整数の和を求めるアルゴリズムの実装方法
        評価実験
        まとめと今後の課題



14                大阪府立大学 北野晃司
   水色の領域
     ◦ 赤のみを含む・緑のみを
       含む・境界を含むの3種類
     ◦ 1ブロックが1領域を担当

     領域分けによって利点が
     2つ生まれる


                   ※BLOCK_SIZE=1ブロック中のスレッド数

15             大阪府立大学 北野晃司   Next⇒領域分けによる利点
512列
                             b列
                           ・
 GPU GTX480では              ・
  例え
 最大23040スレッドが              ・
  ば・・・
 同時にアクティブになれ
 る                 1
                   b×
                   0        ・
                   2
                   2    512スレッド並
                            ・
                   4
                   行
 これは並列性の低い手法       行    列   ・
領域分けは並列性を高める
Aは1024桁 Bは512桁とな
る
                     例:BLOCK_SIZE=16な
                     ら
16                     16384スレッド並列
         大阪府立大学 北野晃司 Next⇒領域分けによる利点
   1つの領域内で列総和計算に必要なAの要素数が
     BLOCK_SIZE×2、Bの要素数がBLOCK_SIZE
     ◦ sharedメモリに乗せることが可能なデータ数
     ◦ sharedメモリの使用によりデバイスメモリの参照回数が
       減少

     今回の実験環境の場合                GTX480

     1MPが使用するsharedメモ
     リは最大18KB<48KB          sharedメモリ 48KB設
                            定
                        1MP:最大1536スレッドアクティブ

                            BLOCK_SIZE=256
                        1ブロック:sharedメモリ 3KB使用

17                大阪府立大学 北野晃司    Next⇒具体的な処理の流れ
   GPUによる並列処理の概要
        提案手法
         ◦ 積表
         ◦ 積表に対する効率的な処理法の提案
          概要とその利点
          具体的な処理の流れ
         ◦ 列総和配列から積への変換
         ◦ 多倍長整数の和を求めるアルゴリズムの実装方法
        評価実験
        まとめと今後の課題



18                大阪府立大学 北野晃司
列総和計算に必要なAとBの要素を
      すべてsharedメモリに載せる


     sharedメモリ上の要素を用いて赤と緑
      の部分の列総和を個別に求めていく


       求めた列総和を列総和配列の
        適切な場所へ足し込む

19         大阪府立大学 北野晃司   Next⇒最初の処理について
列総和計算に必要なAとBの要素を
              すべてsharedメモリに載せる

     BLOCK_SIZE×2
    a-1             10   AのBLOCK_SIZE×2要素
A         ・・・            BのBLOCK_SIZE要素が必要
           BLOCK_SIZE
    b-1             10
B         ・・・             これら要素はすべて
                          A、B内で連続した要
          コアレスアクセ
             ス            素
            可能

20                       大阪府立大学 北野晃司 Next⇒2つ目の処理につい
sharedメモリ上の要素を用いて赤と緑
      の部分の列総和を個別に求めていく
 ↓Aの要素を格納したsharedメモリ
                        ・・・


     ・・     ←1ウォー
     ・      プ
                        ・・・
 ↑Bの要素を格納したsharedメモリ
                       バンクコンフリクトを
                           回避
21           大阪府立大学 北野晃司   Next⇒最後の処理について
求めた列総和を列総和配列の
              適切な場所へ足し込む
                                   ・
•    列colを計算するスレッド                 ・         総
•    赤の部分の総和                       ・         列
                                             和
     • 列総和を格納する配列Sの添字col                     総
                                             の
       へ足し込む                                 和
                                             足
•    緑の部分の総和                                 し
                                             計
     •   配列Sの添字col+a(Aの桁数)へ                  込
                                             算
         足し込む                                み


                     S        ・・    ・・       ・
                         ・         ・       ・・
22                  大阪府立大学 北野晃司    Next⇒黄の長方形の処理
   先と同様に領域分け
         ◦ 赤のみ(緑のみ)に対する処理
           と同様
        それらとの違い
         ◦ 参照するAやBの添字
         ◦ 総和を足し込むSの添字




23               大阪府立大学 北野晃司
                            Next⇒列総和配列から積への変換
   GPUによる並列処理の概要
        提案手法
         ◦ 積表
         ◦ 積表に対する効率的な処理法の提案
          概要とその利点
          具体的な処理の流れ
         ◦ 列総和配列から積への変換
         ◦ 多倍長整数の和を求めるアルゴリズムの実装方法
        評価実験
        まとめと今後の課題



24                大阪府立大学 北野晃司
• 列総和配列Sの一例(10進数での例)
       S    6   18   45   98   48   34   15   78   64   57

     • Sのそれぞれの要素を基数で割った商を配列S2に格納
     • Sは基数で割った剰余に変更
       S    6   8    全要素が基数に収まる 8
                     5  8多倍長整数 5
                           8 4                     4    7
 S2    0    1   4    9 ように処理が必要 6
                        4多倍長整数 7
                           3 1                     5    0

     • 多倍長整数和S+S2の計算
S+S2 0      8   3    5    3    1    6    3    4    9    7

           以上の結果S+S2が多倍長整数AとBの積とな
 る


                     大阪府立大学 北野晃司
25                        Next⇒多倍長整数和を求めるアルゴリズムの実装方法
   GPUによる並列処理の概要
        提案手法
         ◦ 積表
         ◦ 積表に対する効率的な処理法の提案
          概要とその利点
          具体的な処理の流れ
         ◦ 列総和配列から積への変換
         ◦ 多倍長整数の和を求めるアルゴリズムの実装方法
        評価実験
        まとめと今後の課題



26                大阪府立大学 北野晃司
 対応する1桁同士の和を並列に計算し、
       繰り上がりの処理すると・・・
      連続した繰り上がりの伝播が性能を下げ
       る       ・・
            伝播     ・ 伝播
                  伝播               繰り上がり
                             伝播 繰り上がり
         +  +    +       +     +   +   +
          ・
          ・              ・・
          ・          ・
                遂次性の強い計算

27               大阪府立大学 北野晃司
                                Next⇒伝播も考慮したアルゴリズ
 様々な方法が存在
 今回実装するのは全加算器の実装方法
  carry skip adderと本質的に同じ

   ただし
    ◦ 伝播が少ない場合にはより高速に計算できるように
      工夫
    ◦ さらに、基数を大きくして伝播の確率を下げる


28           大阪府立大学 北野晃司   Next⇒実装するアルゴリズ
X            1 5 8 6 6 2 5 3 3 9
   X、Y、繰り上がり情報
  多倍長整数和X+Yを求める
  繰り上がり情報が2であ
                 Y            2 6 1 3 2 9 4 9 4 5
  XとYの各桁から繰り上がり
   る部分を書き換える
   配列Zの3配列の要素を
  情報の配列Zを得る
   2の前が1なら1、0なら0 Z
   足し合わせる                   0 1 2 2 0 1 2 1 0 1 0
  に
   得られた配列の全要素
  2が連続しているなら下
   を基数で割った剰余に               0 1 2 0 0 1 1 1 0 1 0
   位から上位へ遂次的に処
  繰り上がり情報
   理                 Z      0 1 0 0 0 1 1 1 0 1 0
   ◦ 1:各桁の和≧基数
     1:繰り上がりあり
     2:各桁の和=基数-1(例では
   ◦ 2:伝播の可能性あり
     ◦ 9)
       0:繰り上がりなし
     ◦ 0:いずれでもない      X+Y     4 1 9 9 9 2 0 2 8 4



29                 大阪府立大学 北野晃司          Next⇒評価実験
   GPUによる並列処理の概要
        提案手法
        評価実験
         ◦ CPUによる多倍長演算ライブラリとの比較
         ◦ GPUによる既存の研究との比較
        まとめと今後の課題




30                大阪府立大学 北野晃司
    NTL(A Library for doing Number Theory)
     ◦ CPUによる多倍長演算ライブラリ(SIMD命令未使用)
     ◦ 出典:http://www.shoup.net/ntl/


    GMP(The GNU Multiple Precision Arithmetic Library)
     ◦ CPUによる多倍長演算ライブラリ(SSE2命令およびMMX命令使
       用)
     ◦ NTLよりも一般的に高速
     ◦ 出典:http://gmplib.org/

    NTL、GMPと提案手法の比較
     ◦ 6種類のbit数において36通りの組み合わせの
       多倍長整数乗算の実行時間

31                     大阪府立大学 北野晃司              Next⇒実験環境
   CPU
     ◦ 2.93GHz Intel Core i3(1コアのみ使
       用)
    GPU
     ◦ NVIDIA GeForce GTX480
                                       ※GMPはWindowsを公式に
    OS
     ◦ 64bit Windows7 Professional SP1
                                       はサポートしていないため、
                                       GMPプログラムのみ
     コンパイラ                            OS:64bit Linux (ubuntu 11.04)
     ◦ Visual Studio 2008 Professional   コンパイラ:g++ 4.5.2
    CUDA                                を使用
     ◦ Ver 3.2
    ディスプレイドライバ
     ◦ Ver 285.62

32                        大阪府立大学 北野晃司            Next⇒NTLとの実験結果
多倍長整数積A×Bの計算時間
 単位はミリ秒

※左は提案手法、右はNTLによる結果




           参考:256Kbits=262144bits≒10進数80
33         大阪府立大学 北野晃司 Next⇒NTLに対する速度向上率
   下表はNTLに対する、提案手法の速度向上率
        実験したすべての場合において提案手法はNTLを上回る速
         度
        最大で70倍を超える速度向上率




34               大阪府立大学 北野晃司
                               Next⇒GMPとの実験結果
多倍長整数積A×Bの計算時間
 単位はミリ秒

※左は提案手法(再掲)、右はGMPによる結果




35         大阪府立大学 北野晃司 Next⇒GMPに対する速度向上率
   下表はGMPに対する、提案手法の速度向上率
        実験したすべての場合において提案手法はGMPを上回る速
         度
        最大で10倍を超える速度向上率




                大阪府立大学 北野晃司
36                            Next⇒GPUによる既存研究と比較
   GPUによる並列処理の概要
        提案手法
        評価実験
         ◦ CPUによる多倍長演算ライブラリとの比較
         ◦ GPUによる既存の研究との比較
        まとめと今後の課題




37                大阪府立大学 北野晃司





     出典[3]: Emmart, N. and Weems, C., “High Precision Integer Multiplication
     with a GPU,” IEEE Int'l Parallel & Distributed Processing Symposium (IPDPS),
     pp.1781-1787 , May 2011.


38                             大阪府立大学 北野晃司                    Next⇒比較実験結果
   右表はGPUによるFFT乗算の実行結果



   GPUによるFFT乗算の255Kbits×255Kbits
              VS
       提案手法の255Kbits×255Kbits


        0.207ミリ秒 VS 0.590ミリ
        秒
          FFT乗算         提案手
        法 提案手法が約三倍遅い


                                       出典[3]
39                大阪府立大学 北野晃司
                                    Next⇒考察(計算量)
 提案手法の計算量はM桁×N桁においてО(M
  N)
 FFT乗算は同一桁数であることを条件とし、
   N桁×N桁においてO(N log N log log N)
  特に、Nが2の累乗の時にはО(N log N)
     同一bit数(桁数)では計算量的に不
              利



40          大阪府立大学 北野晃司 Next⇒考察(FFT乗算の欠
   異なる2つのbit数を扱う際には大きい方に合わせ
         てパディングを行うため性能が低下
        また、2393216進数(384Kbits)なのでbit数が
         393216の倍数でないときも同様に性能が落ちる


        255Kbits×255Kbitsの方が
         383Kbits×383Kbitsより遅い
        510Kbitsと766Kbitsでも同
         様
                                      出典[3]

41                  大阪府立大学 北野晃司   Next⇒考察(異なるbit
   提案手法では8Kbits×255Kbitsを
    0.0451ミリ秒で実行
   FFT乗算では0.207ミリ秒より
    遅くなると予想できる

                                 出典[3]
提案手法はGPUによるFFT乗算に対し、異な
るbit数の乗算では4倍以上の性能が出せる




42              大阪府立大学 北野晃司   Next⇒まとめと今後の課
   GPUによる並列処理の概要
        提案手法
        評価実験
        まとめと今後の課題




43              大阪府立大学 北野晃司
   実装したアルゴリズムはCPUによる既存の多倍長演
     算          ライブラリを上回る速度
    GPUによる既存研究のうち最速のものと比較すると、
     異なるbit数の乗算では4倍以上の速度

    より小さい整数に対する効率的な手法が必要
     ◦ 実際の問題で扱う整数は数Kbits程度が主流
     ◦ 提案手法では十分な並列性が得られない




44              大阪府立大学 北野晃司

More Related Content

PPTX
GPUによる多倍長整数乗算の高速化手法の提案
PDF
kagamicomput201704
PDF
Replace
PDF
kagamicomput201706
PDF
PRML_titech 8.1 - 8.2
GPUによる多倍長整数乗算の高速化手法の提案
kagamicomput201704
Replace
kagamicomput201706
PRML_titech 8.1 - 8.2

What's hot (20)

PDF
明日使えないすごいビット演算
PDF
kagamicomput201707
PDF
2011年11月11日
PDF
kagamicomput201702
PDF
kagami_comput2015_6
PDF
VBAで数値計算 03 数式実装パターン
PDF
AtCoder Beginner Contest 035 解説
PDF
kagamicomput201703
PDF
kagamicomput201701
PDF
kagamicomput201708
PDF
ゼロから作るDeepLearning 3.3~3.6章 輪読
PPTX
Angle-Based Outlier Detection周辺の論文紹介
PDF
Lispでやる記号微分
PDF
kagamicomput201709
PDF
VBAで数値計算 08 行列
PDF
公開鍵暗号(7): データ圧縮
PPTX
第三回統計学勉強会@東大駒場
PDF
PRML 8.2 条件付き独立性
PDF
Pyramid
PDF
kagamicomput201806
明日使えないすごいビット演算
kagamicomput201707
2011年11月11日
kagamicomput201702
kagami_comput2015_6
VBAで数値計算 03 数式実装パターン
AtCoder Beginner Contest 035 解説
kagamicomput201703
kagamicomput201701
kagamicomput201708
ゼロから作るDeepLearning 3.3~3.6章 輪読
Angle-Based Outlier Detection周辺の論文紹介
Lispでやる記号微分
kagamicomput201709
VBAで数値計算 08 行列
公開鍵暗号(7): データ圧縮
第三回統計学勉強会@東大駒場
PRML 8.2 条件付き独立性
Pyramid
kagamicomput201806
Ad

Similar to GPUによる多倍長整数乗算の高速化手法の提案とその評価 (11)

PDF
競技プログラミングでの線型方程式系
PDF
第15回 配信講義 計算科学技術特論B(2022)
PDF
PRML復々習レーン#9 6.3-6.3.1
PPTX
【解説】 一般逆行列
PDF
第14回 配信講義 計算科学技術特論B(2022)
PDF
DDPC 2016 予選 解説
PDF
衝突判定
PDF
CMSI計算科学技術特論A (2015) 第11回 行列計算における高速アルゴリズム2
PPTX
[DL輪読会]Flow-based Deep Generative Models
PDF
AI course report part 1
PPTX
AI course report part 1(Fix)
競技プログラミングでの線型方程式系
第15回 配信講義 計算科学技術特論B(2022)
PRML復々習レーン#9 6.3-6.3.1
【解説】 一般逆行列
第14回 配信講義 計算科学技術特論B(2022)
DDPC 2016 予選 解説
衝突判定
CMSI計算科学技術特論A (2015) 第11回 行列計算における高速アルゴリズム2
[DL輪読会]Flow-based Deep Generative Models
AI course report part 1
AI course report part 1(Fix)
Ad

GPUによる多倍長整数乗算の高速化手法の提案とその評価

  • 2. 現在主流の整数型 ◦ 32bit ◦ 64bit  多倍長整数演算 ◦ 1ワードに収まらない整数を対象とした演算 ◦ 研究が盛ん  GPGPU ◦ GPUによる汎用計算 ◦ 近年注目されている 2 大阪府立大学 北野晃司 Next⇒動機・目的
  • 3. 多倍長整数演算は時間がかかる ◦ 特に積、商、平方根の演算  商、平方根 ◦ ニュートン法を用いて高速化可能  高速な乗算が使える場合  GPUを用いて多倍長整数乗算を高速に解く手法を提 案 ※ニュートン法による逆数を求める漸化式⇒Xn+1=2*Xn-a*Xn^2 平方根を求める漸化式⇒Xn+1=(Xn + a/Xn) /2 aは適当な初期 値 3 大阪府立大学 北野晃司 Next⇒提案内容
  • 4. 積表という並列処理に適した データ構造とその処理法の提案  2つの多倍長整数の和を高速に求める アルゴリズムの実装方法 4 大阪府立大学 北野晃司 Next⇒発表の流れ
  • 5. GPUによる並列処理の概要 時間の都合により割愛  提案手法  評価実験  まとめと今後の課題 5 大阪府立大学 北野晃司
  • 6. GPUによる並列処理の概要  提案手法 ◦ 積表 ◦ 積表に対する効率的な処理法の提案  概要とその利点  具体的な処理の流れ ◦ 列総和配列から積への変換 ◦ 多倍長整数の和を求めるアルゴリズムの実装方法  評価実験  まとめと今後の課題 6 大阪府立大学 北野晃司
  • 7. • 10進数における積  積表 ◦ – 筆算を元に得られた表 右図のような筆算で求めることが可 能 2 0 – 下位からの桁上げ値をその値が 必要な列自身に計算させる ? 縦方向に並列に計算できるか? – 列ごとの総和が他の列の演算と 縦の総和から積への変 換 ⇒主な問題が2つ は独立に行える 1. 各値が下位からの桁上げ値を 必要とすること 2. 縦方向に総和計算を行うだけでは 正しい積の1桁にならないこと 後半で解決 7 大阪府立大学 北野晃司 Next⇒積表の構成
  • 8. 多倍長整数A×Bの積表 ◦ Aは5桁、Bは3桁 ◦ BASEは多倍長整数の基数 ◦ BASE=10なら10進数 ◦ A[0]がAの1の位の数 ~~~~~~~~~~~~~~~~~~~  要素の規則性 ◦ 2行ごとに添字が1変わる ◦ 桁数を変えても同様 8 大阪府立大学 北野晃司 Next⇒積表の一般化
  • 9. 多倍長整数A×Bの積表 ◦ Aはa桁、Bはb桁(a≧b)  赤と緑の部分 ◦ 列数は共にb列 ◦ 行数は1列毎に2行ずつ増減  黄の部分 ◦ 列数はa-b列 ◦ 行数はb×2行 9 大阪府立大学 北野晃司 Next⇒積表の単純な処理法
  • 10. :1スレッ  積表の処理 ド ◦ 1列に1スレッドの割り当て ◦ 列ごとの総和計算  この処理の欠点 ◦ スレッド毎の演算回数の差 ◦ 処理が早く終わったスレッド はただ待つだけ ◦ 演算器が遊んでフルに性能が 発揮できない 10 大阪府立大学 北野晃司 Next⇒積表の再構成
  • 11. 欠点を解決するための変形 ◦ 緑の部分を赤の部分に結合 ◦ 列数は(a-b)+b=a列 ◦ 行数はb×2行 11 大阪府立大学 北野晃司 Next⇒再構成した積表の要素
  • 12. A[0]×B[0]%BASE α列 • 積表内の要素は、同色内で A[α]×B[0]%BASE は上下の順番は結果に無関 A[a-1]×B[0]/BASE 係 A[α-1]×B[0]/BASE A[a-1]×B[1]%BASE A[α-1]×B[1]%BASE • 適切に並び替え、 次の性質を持たせる A[a-2]×B[1]/BASE ・ • 右からα列目では0行目でAの A[α-2]×B[1]/BASE 添字αの要素を参照 ・ • 行が下に行くと、2行間隔で A[a-2]×B[2]%BASE A[α-2]×B[2]%BASE ・ 参照するAの添字は1減少 ・ • Aの添字がマイナスになる時 A[a-3]×B[2]/BASE ・ は0-1⇒a-1として参照 ・ • どの列においても、β行ではB の添字⌊β/2 ⌋を参照 • 偶数行では基数で割った剰余、 奇数行では基数で割った商 12 大阪府立大学 北野晃司 Next⇒再構成した積表の具体
  • 13. 5桁×3桁での例 ◦ 赤と緑、黄、の2種類の長方形 • 列総和計算に必要な演算回数 – どの列も同じ(2×b 回) • 赤と緑の長方形 – 赤の総和と緑の総和が個別に必要なことに注意 13 大阪府立大学 北野晃司 Next⇒効率的な処理法の提
  • 14. GPUによる並列処理の概要  提案手法 ◦ 積表 ◦ 積表に対する効率的な処理法の提案  概要とその利点  具体的な処理の流れ ◦ 列総和配列から積への変換 ◦ 多倍長整数の和を求めるアルゴリズムの実装方法  評価実験  まとめと今後の課題 14 大阪府立大学 北野晃司
  • 15. 水色の領域 ◦ 赤のみを含む・緑のみを 含む・境界を含むの3種類 ◦ 1ブロックが1領域を担当 領域分けによって利点が 2つ生まれる ※BLOCK_SIZE=1ブロック中のスレッド数 15 大阪府立大学 北野晃司 Next⇒領域分けによる利点
  • 16. 512列 b列 ・ GPU GTX480では ・ 例え 最大23040スレッドが ・ ば・・・ 同時にアクティブになれ る 1 b× 0 ・ 2 2 512スレッド並 ・ 4 行 これは並列性の低い手法 行 列 ・ 領域分けは並列性を高める Aは1024桁 Bは512桁とな る 例:BLOCK_SIZE=16な ら 16 16384スレッド並列 大阪府立大学 北野晃司 Next⇒領域分けによる利点
  • 17. 1つの領域内で列総和計算に必要なAの要素数が BLOCK_SIZE×2、Bの要素数がBLOCK_SIZE ◦ sharedメモリに乗せることが可能なデータ数 ◦ sharedメモリの使用によりデバイスメモリの参照回数が 減少 今回の実験環境の場合 GTX480 1MPが使用するsharedメモ リは最大18KB<48KB sharedメモリ 48KB設 定 1MP:最大1536スレッドアクティブ BLOCK_SIZE=256 1ブロック:sharedメモリ 3KB使用 17 大阪府立大学 北野晃司 Next⇒具体的な処理の流れ
  • 18. GPUによる並列処理の概要  提案手法 ◦ 積表 ◦ 積表に対する効率的な処理法の提案  概要とその利点  具体的な処理の流れ ◦ 列総和配列から積への変換 ◦ 多倍長整数の和を求めるアルゴリズムの実装方法  評価実験  まとめと今後の課題 18 大阪府立大学 北野晃司
  • 19. 列総和計算に必要なAとBの要素を すべてsharedメモリに載せる sharedメモリ上の要素を用いて赤と緑 の部分の列総和を個別に求めていく 求めた列総和を列総和配列の 適切な場所へ足し込む 19 大阪府立大学 北野晃司 Next⇒最初の処理について
  • 20. 列総和計算に必要なAとBの要素を すべてsharedメモリに載せる BLOCK_SIZE×2 a-1 10 AのBLOCK_SIZE×2要素 A ・・・ BのBLOCK_SIZE要素が必要 BLOCK_SIZE b-1 10 B ・・・ これら要素はすべて A、B内で連続した要 コアレスアクセ ス 素 可能 20 大阪府立大学 北野晃司 Next⇒2つ目の処理につい
  • 21. sharedメモリ上の要素を用いて赤と緑 の部分の列総和を個別に求めていく ↓Aの要素を格納したsharedメモリ ・・・ ・・ ←1ウォー ・ プ ・・・ ↑Bの要素を格納したsharedメモリ バンクコンフリクトを 回避 21 大阪府立大学 北野晃司 Next⇒最後の処理について
  • 22. 求めた列総和を列総和配列の 適切な場所へ足し込む ・ • 列colを計算するスレッド ・ 総 • 赤の部分の総和 ・ 列 和 • 列総和を格納する配列Sの添字col 総 の へ足し込む 和 足 • 緑の部分の総和 し 計 • 配列Sの添字col+a(Aの桁数)へ 込 算 足し込む み S ・・ ・・ ・ ・ ・ ・・ 22 大阪府立大学 北野晃司 Next⇒黄の長方形の処理
  • 23. 先と同様に領域分け ◦ 赤のみ(緑のみ)に対する処理 と同様  それらとの違い ◦ 参照するAやBの添字 ◦ 総和を足し込むSの添字 23 大阪府立大学 北野晃司 Next⇒列総和配列から積への変換
  • 24. GPUによる並列処理の概要  提案手法 ◦ 積表 ◦ 積表に対する効率的な処理法の提案  概要とその利点  具体的な処理の流れ ◦ 列総和配列から積への変換 ◦ 多倍長整数の和を求めるアルゴリズムの実装方法  評価実験  まとめと今後の課題 24 大阪府立大学 北野晃司
  • 25. • 列総和配列Sの一例(10進数での例) S 6 18 45 98 48 34 15 78 64 57 • Sのそれぞれの要素を基数で割った商を配列S2に格納 • Sは基数で割った剰余に変更 S 6 8 全要素が基数に収まる 8 5 8多倍長整数 5 8 4 4 7 S2 0 1 4 9 ように処理が必要 6 4多倍長整数 7 3 1 5 0 • 多倍長整数和S+S2の計算 S+S2 0 8 3 5 3 1 6 3 4 9 7 以上の結果S+S2が多倍長整数AとBの積とな る 大阪府立大学 北野晃司 25 Next⇒多倍長整数和を求めるアルゴリズムの実装方法
  • 26. GPUによる並列処理の概要  提案手法 ◦ 積表 ◦ 積表に対する効率的な処理法の提案  概要とその利点  具体的な処理の流れ ◦ 列総和配列から積への変換 ◦ 多倍長整数の和を求めるアルゴリズムの実装方法  評価実験  まとめと今後の課題 26 大阪府立大学 北野晃司
  • 27.  対応する1桁同士の和を並列に計算し、 繰り上がりの処理すると・・・  連続した繰り上がりの伝播が性能を下げ る ・・ 伝播 ・ 伝播 伝播 繰り上がり 伝播 繰り上がり + + + + + + + ・ ・ ・・ ・ ・ 遂次性の強い計算 27 大阪府立大学 北野晃司 Next⇒伝播も考慮したアルゴリズ
  • 28.  様々な方法が存在  今回実装するのは全加算器の実装方法 carry skip adderと本質的に同じ  ただし ◦ 伝播が少ない場合にはより高速に計算できるように 工夫 ◦ さらに、基数を大きくして伝播の確率を下げる 28 大阪府立大学 北野晃司 Next⇒実装するアルゴリズ
  • 29. X 1 5 8 6 6 2 5 3 3 9 X、Y、繰り上がり情報  多倍長整数和X+Yを求める  繰り上がり情報が2であ Y 2 6 1 3 2 9 4 9 4 5  XとYの各桁から繰り上がり る部分を書き換える 配列Zの3配列の要素を  情報の配列Zを得る 2の前が1なら1、0なら0 Z 足し合わせる 0 1 2 2 0 1 2 1 0 1 0  に 得られた配列の全要素  2が連続しているなら下 を基数で割った剰余に 0 1 2 0 0 1 1 1 0 1 0 位から上位へ遂次的に処  繰り上がり情報 理 Z 0 1 0 0 0 1 1 1 0 1 0 ◦ 1:各桁の和≧基数 1:繰り上がりあり 2:各桁の和=基数-1(例では ◦ 2:伝播の可能性あり ◦ 9) 0:繰り上がりなし ◦ 0:いずれでもない X+Y 4 1 9 9 9 2 0 2 8 4 29 大阪府立大学 北野晃司 Next⇒評価実験
  • 30. GPUによる並列処理の概要  提案手法  評価実験 ◦ CPUによる多倍長演算ライブラリとの比較 ◦ GPUによる既存の研究との比較  まとめと今後の課題 30 大阪府立大学 北野晃司
  • 31. NTL(A Library for doing Number Theory) ◦ CPUによる多倍長演算ライブラリ(SIMD命令未使用) ◦ 出典:http://www.shoup.net/ntl/  GMP(The GNU Multiple Precision Arithmetic Library) ◦ CPUによる多倍長演算ライブラリ(SSE2命令およびMMX命令使 用) ◦ NTLよりも一般的に高速 ◦ 出典:http://gmplib.org/  NTL、GMPと提案手法の比較 ◦ 6種類のbit数において36通りの組み合わせの 多倍長整数乗算の実行時間 31 大阪府立大学 北野晃司 Next⇒実験環境
  • 32. CPU ◦ 2.93GHz Intel Core i3(1コアのみ使 用)  GPU ◦ NVIDIA GeForce GTX480 ※GMPはWindowsを公式に  OS ◦ 64bit Windows7 Professional SP1 はサポートしていないため、 GMPプログラムのみ  コンパイラ OS:64bit Linux (ubuntu 11.04) ◦ Visual Studio 2008 Professional コンパイラ:g++ 4.5.2  CUDA を使用 ◦ Ver 3.2  ディスプレイドライバ ◦ Ver 285.62 32 大阪府立大学 北野晃司 Next⇒NTLとの実験結果
  • 33. 多倍長整数積A×Bの計算時間  単位はミリ秒 ※左は提案手法、右はNTLによる結果 参考:256Kbits=262144bits≒10進数80 33 大阪府立大学 北野晃司 Next⇒NTLに対する速度向上率
  • 34. 下表はNTLに対する、提案手法の速度向上率  実験したすべての場合において提案手法はNTLを上回る速 度  最大で70倍を超える速度向上率 34 大阪府立大学 北野晃司 Next⇒GMPとの実験結果
  • 36. 下表はGMPに対する、提案手法の速度向上率  実験したすべての場合において提案手法はGMPを上回る速 度  最大で10倍を超える速度向上率 大阪府立大学 北野晃司 36 Next⇒GPUによる既存研究と比較
  • 37. GPUによる並列処理の概要  提案手法  評価実験 ◦ CPUによる多倍長演算ライブラリとの比較 ◦ GPUによる既存の研究との比較  まとめと今後の課題 37 大阪府立大学 北野晃司
  • 38. 出典[3]: Emmart, N. and Weems, C., “High Precision Integer Multiplication with a GPU,” IEEE Int'l Parallel & Distributed Processing Symposium (IPDPS), pp.1781-1787 , May 2011. 38 大阪府立大学 北野晃司 Next⇒比較実験結果
  • 39. 右表はGPUによるFFT乗算の実行結果  GPUによるFFT乗算の255Kbits×255Kbits VS 提案手法の255Kbits×255Kbits 0.207ミリ秒 VS 0.590ミリ 秒 FFT乗算 提案手 法 提案手法が約三倍遅い 出典[3] 39 大阪府立大学 北野晃司 Next⇒考察(計算量)
  • 40.  提案手法の計算量はM桁×N桁においてО(M N)  FFT乗算は同一桁数であることを条件とし、 N桁×N桁においてO(N log N log log N) 特に、Nが2の累乗の時にはО(N log N) 同一bit数(桁数)では計算量的に不 利 40 大阪府立大学 北野晃司 Next⇒考察(FFT乗算の欠
  • 41. 異なる2つのbit数を扱う際には大きい方に合わせ てパディングを行うため性能が低下  また、2393216進数(384Kbits)なのでbit数が 393216の倍数でないときも同様に性能が落ちる  255Kbits×255Kbitsの方が 383Kbits×383Kbitsより遅い  510Kbitsと766Kbitsでも同 様 出典[3] 41 大阪府立大学 北野晃司 Next⇒考察(異なるbit
  • 42. 提案手法では8Kbits×255Kbitsを 0.0451ミリ秒で実行  FFT乗算では0.207ミリ秒より 遅くなると予想できる 出典[3] 提案手法はGPUによるFFT乗算に対し、異な るbit数の乗算では4倍以上の性能が出せる 42 大阪府立大学 北野晃司 Next⇒まとめと今後の課
  • 43. GPUによる並列処理の概要  提案手法  評価実験  まとめと今後の課題 43 大阪府立大学 北野晃司
  • 44. 実装したアルゴリズムはCPUによる既存の多倍長演 算 ライブラリを上回る速度  GPUによる既存研究のうち最速のものと比較すると、 異なるbit数の乗算では4倍以上の速度  より小さい整数に対する効率的な手法が必要 ◦ 実際の問題で扱う整数は数Kbits程度が主流 ◦ 提案手法では十分な並列性が得られない 44 大阪府立大学 北野晃司