SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
x86/x64最適化勉強会#2
研究動向(Intel Lab.等)から考える
    x86/x64最適化手法
                           2011/10/1
                  Takeshi YAMAMURO




                                       1
Today Agenda



 本日の概要

CPU上のマルチコア化や,各種ペナルティの増大に対して,ペナルティの軽減,
または完全に排除するデータ構造やアルゴリズムの研究に関する話題
----
本日は2000年以降のIntel Lab.や関連研究者による成果の俯瞰が目的
本スライドの目的は以下
    ・マルチコア/メニーコア時代における性能改善観点の理解
    ・具体例でのx86/x64最適化アルゴリズムの概要理解
      ⇒探索,整数圧縮,並び替え処理




                                    2
Today Agenda
•   自己紹介
•   Intel Lab.とは?
•   最近の研究動向
•   研究分野における最適化の観点
    – キャッシュミス/DTLBミスの低減化
    – 分岐排除
    – メモリバンド使用量の考慮
•   具体例1: SIMD命令を利用した探索の分岐排除
•   具体例2: 整数の固定長圧縮によるPipelineハザードの回避
•   具体例3: SIMD命令を利用した並び替え処理の分岐排除
•   まとめ




                                       3
自己紹介
• 名前
     – 山室健 / YAMAMURO Takeshi
• 所属
     – NTT研究所 / サイバースペース研究所
• 研究分野・興味
     – データ工学 / データベース周辺技術
          探索,圧縮,並び替え
     – マルチコアCPU上の性能改善                              Twitterのアイコン
     – GPUを利用したアルゴリズムの高速化
• よく利用するWebサービス
 -   Twitter: http://twitter.com/maropu
 -   SlideShare: http://www.slideshare.net/maropu0804
 -   github: https://github.com/maropu
 -   はてぶ: http://b.hatena.ne.jp/maropu



                                                              4
Intel Lab.とは?
• Intel Parallel Computing Lab.
    – http://pcl.intel-research.net/
    – USとインドの2拠点
• 所属研究者は約20名程度
• 研究目的(上記URLから抜粋)

Our lab's goal is worldwide leadership in highly parallel computing, and to
ensure Intel's leadership for this application segment. We also seek to be
 an industry role-model for application-driven architecture research. We
   work in close collaboration with leading academic and industry co-
travelers to understand hardware and software architectural implications
    for Intel's upcoming multicore/manycore compute platforms




                                                                        5
Intel Lab.とは?
    • Intel Parallel Computing Lab.
          – http://pcl.intel-research.net/
          – USとインドの2拠点
    • 所属研究者は約20名程度
    • 研究目的(上記URLから抜粋)

    Our lab's goal is worldwide leadership in highly parallel computing, and to
    ensure Intel's leadership for this application segment. We also seek to be
     an industry role-model for application-driven architecture research. We
       work in close collaboration with leading academic and industry co-
    travelers to understand hardware and software architectural implications
        for Intel's upcoming multicore/manycore compute platforms



                             x86/x64コアを大量に搭載したHPC向けメ
                              ニーコアアーキテクチャ『Knights Ferry』
                                                                            6
http://cloud.watch.impress.co.jp/docs/news/20101111_406140.html
CPU最適化に関する近年の研究動向 / データベース周辺
• データベース界隈では’99年以降メモリ-CPU間の最適化が流行

  P. A. Boncz et al.: Database architecture optimized for the new
  bottleneck: Memory access, VLDB’99 (VLDB 10 years best paper)
                                 アルゴリズムや条件によって
                             オンメモリ上でも10~100倍の性能差が発生

• 近年の傾向: 参照データサイズ<メモリサイズ
  – 近年のメモリサイズ拡大と,低価格化が原因


• 近年CPU最適化されたアルゴリズム多くの提案
  – データベース内の主要カーネルである探索/圧縮/並び替え

                                   本日の後半スライドでPick-up!!




                                                                    7
研究分野における最適化の観点
• 本日紹介する3つの観点
 – キャッシュミス/DTLBミスの低減化
 – 分岐排除
 – メモリバンド使用量の考慮




                        8
キャッシュミス/DTLBミスの低減化
• CPU内の処理速度に比べメモリに対するR/Wは遅い
   Sandy Bridgeの場合の各ペナルティ(Intel最適化マニュアル参照)
      L1 Data: 4 cycle , LLC: 26-31 cycle
      L2 unified: 12 cycle, DTLB: 7 cycle

• 各境界(キャッシュライン/Page)を考慮して参照を局所化
• ある条件下ではDTLBミスが性能低下の原因に


                            キャッシュライン
                             (ex. 64B)

                      ・・・
                      ・・・    Page(ex. 4KiB)


      参照パタンが
     ランダムの場合
                      ・・・




     にペナルティ大
   ⇒参照の局所化が必要

                                              9
キャッシュミス/DTLBミスの低減化

具体例 / 木構造のメモリレイアウト:
R. A. Hankins and J. M. Patel: Effect of node size on the performance of
cache-conscious b+-trees, SIGMETRICS’03

                               x                       x
        Penalty = h( x)  (       cache _ penalty        TLB _ penalty )
                              64                     4096
                                            size: x

                                            NODE



 h(x)




                                      ※前提: キャシュライン 64B/Page 4KiB/
                                      各NODE内データはすべて参照
                                                                              10
キャッシュミス/DTLBミスの低減化

具体例 / 木構造のメモリレイアウト:
R. A. Hankins and J. M. Patel: Effect of node size on the performance of
問題: sizeをいくつに設定すべきか?
cache-conscious b+-trees, SIGMETRICS’03
   ⇒直観的なアプローチ: キャッシュラインサイズに調整
                         x                     x
     Penalty = h( x)  (  cache _ penalty        TLB _ penalty )
                        64                   4096
                                        size: x

                                         NODE



 h(x)




                                  ※前提: キャシュライン 64B/Page 4KiB/
                                  各NODE内データはすべて参照
                                                                           11
キャッシュミス/DTLBミスの低減化

具体例 / 木構造のメモリレイアウト:
R. A. Hankins and J. M. Patel: Effect of node size on the performance of
問題: sizeをいくつに設定すべきか?
cache-conscious b+-trees, SIGMETRICS’03
   ⇒直観的なアプローチ: キャッシュラインサイズに調整
   ⇒その場合h(x)が高くなり,Penaltyが大きくなる可能性
                          x                     x
                h( x)  (  cache _ penalty 
     Penalty = はキャッシュラインより多少大きいほうが良いとの結果
    実際,size                                         TLB _ penalty )
                         64                   4096
                                        size: x

                                         NODE



 h(x)




                                  ※前提: キャシュライン 64B/Page 4KiB/
                                  各NODE内データはすべて参照
                                                                           12
分岐排除
• x86/64系のCPUは分岐ミスのIPCへのペナルティが高い
    M. Zukowski et al.: Super-Scalar RAM-CPU Cache Compression,
    IEEE ICDE’06


• Xeon vs. Itanium
   – Xeon系とItanium系では
     分岐によるペナルティ特性
     が異なる
   – Itanium系に比べXeon系
     のx86/64 CPUは分岐確率
     が均等の時にIPCが最悪に




                                         if-then pathsのペナルティ
                                       赤実線だけに注目(横軸: 分岐確率)         13
メモリバンド使用量の考慮
•   コア当たりに使用可能なメモリバンド量は年々減少
     M. Reilly: When multicore isn’t enough: Trends and the future for
     multi-multicore systems, HPEC'08

•   アルゴリズムで扱うデータ量が増えた場合に,コア数に対して処理速
    度がスケールしないという報告
     C. Kim(Intel corp.) et al.: Designing Fast Architecture Sensitive Tree
     Search on Modern Multi-Core/Many-Core Processors, ACM TODS’11
      可能使用量(GiB/# of cores)
       コア当たりのメモリバンド




                              2005                            2008
                                      年代                                      14
研究 - CPU最適化アルゴリズムに関する具体例

・探索 - FAST
 C. Kim(Intel corp.) et al.: Designing Fast Architecture Sensitive Tree
 Search on Modern Multi-Core/Many-Core Processors, ACM TODS’11
・圧縮 - VSEncoder
 F. Silvestri et al, VSEncoding: Efficient Coding and Fast Decoding of
 Integer Lists via Dynamic Programming, ACM CIKM’10
・並び替え – bitonic-sort
 J. Chhugani(Intel corp.) et al.: Efficient Implementation of Sorting on
 Multi-Core SIMD CPU Architecture, VLDB’08


                                                                           15
探索 - FAST




            16
具体例1: SIMD命令を利用した探索の分岐排除
• 想定する処理
  n個の昇順値(D1≦D2≦…≦Dn)から任意の値を探索する処理

• 高速化に用いられる一般的な索引データ構造
   2分木,B木,…


                          NODE1
                     48

        NODE2   12        68
                           NODE3


   7            20   NODE5
NODE4
                ex. 2分木の例


                                    17
具体例1: SIMD命令を利用した探索の分岐排除
• 想定する処理
  n個の昇順値(D1≦D2≦…≦Dn)から任意の値を探索する処理

• 高速化に用いられる一般的な索引データ構造
   2分木,B木,…


参照が一様の場合分岐           48
                          NODE1
 によるペナルティ大

        NODE2   12        68
                           NODE3


   7            20   NODE5
NODE4
                ex. 2分木の例


                                    18
具体例1: SIMD命令を利用した探索の分岐排除
 • 想定する処理
   n個の昇順値(D1≦D2≦…≦Dn)から任意の値を探索する処理

 • 高速化に用いられる一般的な索引データ構造
    2分木,B木,…


参照が一様の場合分岐            48
                           NODE1
 によるペナルティ大

         NODE2   12        68
                            NODE3


    7            20   NODE5
 NODE4
                 ex. 2分木の例
   ポインタ利用の実装では
jump毎にキャッシュ/DTLBミス
                                     19
具体例1: SIMD命令を利用した探索の分岐排除
 • 想定する処理
   n個の昇順値(D1≦D2≦…≦Dn)から任意の値を探索する処理

 • 高速化に用いられる一般的な索引データ構造
    2分木,B木,…


参照が一様の場合分岐            48
                           NODE1
 によるペナルティ大                          Code Snippet
                                    NODE {
         NODE2   12        68           int compare_key;
                            NODE3       NODE *left, *right;
                                    } node;
                 20                 ….
    7                 NODE5
                                    if (search_key > node->compare_key)
 NODE4                                  node = node->right;
                 ex. 2分木の例          else
   ポインタ利用の実装では                          node = node->left;
jump毎にキャッシュ/DTLBミス
                                                                    20
具体例1: SIMD命令を利用した探索の分岐排除
• 2分木の探索におけるペナルティ
 – 測定:222個の値に対する探索範囲と実行効率(IPC)の関係


       1.2                                       2.E+06


                                                 2.E+06




                                                          分岐予測ミス回数
       0.8
                                                 1.E+06
 IPC




                                                 8.E+05
       0.4
                   IPC                           4.E+05
                   分岐予測ミス
       0.0                                       0.E+00
             0.1    1   5   10   25   50   100

                        探索範囲(%)
                                      測定に用いたCPUはXeon X5260
                                      CPUプロファイラはoprofile-0.9.6

                                                                     21
具体例1: SIMD命令を利用した探索の分岐排除
• 索引の探索におけるCPU内のペナルティサイクルの考え方
 R. A. Hankins and J. M. Patel: Effect of node size on the performance of
 cache-conscious b+-trees, SIGMETRICS’03

                    一様な参照を前提に,探索の際に発生する分岐処理の
                    50%をペナルティ(投機ロードと分岐ペナルティ)として加算




                                                                            22
具体例1: SIMD命令を利用した探索の分岐排除
• 参考論文:
  C. Kim(Intel corp.) et al.: Designing Fast Architecture Sensitive Tree
  Search on Modern Multi-Core/Many-Core Processors, ACM TODS’11
                                        ※Knights Ferry上の評価も実施
• 提案アプローチ
    - SIMD命令を利用した差分移動(分岐排除)
    - キャッシュライン/Pageによるデータのブロック化
    - 各ノード内の比較キーの圧縮    今回は扱わない
• 使用するSIMD命令:
    32-bitのSIMD比較命令(_mm_cmpgt_epi32)




                                                                           23
具体例1: SIMD命令を利用した探索の分岐排除

アプローチ概要(33を探索値と想定):
                                        探索値は33

                             48
                        12        68
           7            20             55
                                                 ・・・

       2       9   13        33   49        57




                                                       24
具体例1: SIMD命令を利用した探索の分岐排除

アプローチ概要(33を探索値と想定):
                                 探索値は33

    SIMD命令で同時        ① 48
    比較するブロック
                     12     68
      ② 7       ③ 20        ④ 55
                                        ・・・

       2    9   13     33   49     57




                                              25
具体例1: SIMD命令を利用した探索の分岐排除

アプローチ概要(33を探索値と想定):
                                      探索値は33

    SIMD命令で同時        ① 48
    比較するブロック
                         12     68
      ② 7       ③ 20            ④ 55
                                            ・・・

       2    9   13        33     49    57


 ①          ②                 ③             ④
 12 48 68   2   7    9        13 20 33      49 55 57   ・・・
メモリ上の連続領域(*__tree_data)


                                                             26
具体例1: SIMD命令を利用した探索の分岐排除

 アプローチ概要(33を探索値と想定):




  探索値をロードした
SIMDレジスタ(__skey)
  33 33 33


  12 48 68         2   7   9   13 20 33   49 55 57   ・・・
  メモリ上の連続領域(*__tree_data)


                                                           27
具体例1: SIMD命令を利用した探索の分岐排除

 アプローチ概要(33を探索値と想定):




  探索値をロードした
SIMDレジスタ(__skey)
   33 33 33
_mm_cmpgt_epi32()で比較

   12 48 68        2   7   9   13 20 33   49 55 57   ・・・
  メモリ上の連続領域(*__tree_data)


                                                           28
具体例1: SIMD命令を利用した探索の分岐排除

 アプローチ概要(33を探索値と想定):




  探索値をロードした
SIMDレジスタ(__skey)       結果を3-bitに集約
   33 33 33              (lookup)

_mm_cmpgt_epi32()で比較

   12 48 68        2    7   9   13 20 33   49 55 57   ・・・
  メモリ上の連続領域(*__tree_data)


                                                            29
具体例1: SIMD命令を利用した探索の分岐排除

 アプローチ概要(33を探索値と想定):
                                       比較結果を次の
                                      比較位置に変換する表
                                         (rtable[])
                                       集約値         offset値

                                             ・・・                   23行
  探索値をロードした
SIMDレジスタ(__skey)       結果を3-bitに集約
   33 33 33              (lookup)

_mm_cmpgt_epi32()で比較

   12 48 68        2    7   9   13 20 33   49 55 57          ・・・
  メモリ上の連続領域(*__tree_data)


                                                                   30
具体例1: SIMD命令を利用した探索の分岐排除

 アプローチ概要(33を探索値と想定):
                                       比較結果を次の
                                      比較位置に変換する表
                                         (rtable[])
                                       集約値           offset値

                                               ・・・                   23行
  探索値をロードした
SIMDレジスタ(__skey)       結果を3-bitに集約
   33 33 33              (lookup)
                                           前の位置とoffset位置から
_mm_cmpgt_epi32()で比較                        次の比較位置を特定

   12 48 68        2    7   9   13 20 33    49 55 57           ・・・
  メモリ上の連続領域(*__tree_data)


                                                                     31
具体例1: SIMD命令を利用した探索の分岐排除

差分移動のCode Snippet:

 int cur = 0;
 int mask32[4] __attribute__((aligned(16));

 __skey = _mm_set_epi32(33, 33, 33, 33);
 __ckey = _mm_loadu_si128((__m128i *)&__tree_data[cur]);

 __mask = _mm_cmpgt_epi32(__skey, __ckey);

 _mm_store_si128((__m128i *)mask32, __mask);

 lookup = (mask32[0] & 0x04) | (mask32[1] & 0x02) | (mask32[2] & 0x01);
 cur = rtable[lookup];
 ….




                                                                      32
具体例1: SIMD命令を利用した探索の分岐排除
• 測定に使用するコード
 – https://github.com/maropu/FAST
• 測定に用いるマシン環境
 – Xeon X5260 - Wolfdale-DP
 – 16GiB
• 測定に用いるデータと処理
 – 222~228個の値に対する索引
 – 探索処理は全範囲に対して一様に実施




                                    33
具体例1: SIMD命令を利用した探索の分岐排除
 • 性能(Throughputs)評価


            5.0E+07

                                           約4.5xの高速化
            4.0E+07
                       2分木
                       FAST
Throuputs




            3.0E+07


            2.0E+07


            1.0E+07


            0.0E+00
                      22       24     26        28

                           索引総数(対数表記 log#)

                                                       34
圧縮 - VSEncoder




                 35
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 想定する処理
   n個の符号無し整数(D1, D2, …, Dn)を格納するために必要な
  データ量の削減処理

• 整数格納に用いられる一般的な2つのデータ構造
   1. 任意の型(uint32_t,uint16_t,uint8_t)の固定長表現
   2. 各値に異なるbit長を割り当てる可変長表現




                                              36
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 固定長表現と可変長表現のイメージ

                                                           uint8_tを利用した固定長表現
bit-length




                                                                          可変長表現




             D[] = 1, 3, 2, 9, 1, 3, 7, 2, 2, 2, 23, 45, 1, 9, 5, 4, 8, 3, 1, 8, 8, 2, …



                                                                                           37
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 符号なし整数の可変長表現のビット割り当て
 – [bit長部][MSBを取り除いた符号なし整数部]
    ※各値は可変長になるため先頭に後続のbit長を値毎に記録




                                   38
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 可変長符号の例: Gamma符号
  – 歪度が負(小さい値が多い)の場合に,圧縮率が高くなるように設計
  – Gamma符号の値は以下から構成:
       [bit長のUnary-code表現][MSBを取り除いたbit列]



   ex.1 - 3 (11) → 01 1
              bit長の MSBを除いた
            unary-code bit列

   ex.2 - 23 (10111) → 00001 01111

   ex.2 - 259 (100000011) → 000000001 00000011



                                                 39
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 整数間の制御依存関係

     後続の開始位置が前の符号長に依存


     011000010111100000000100000011   ・・・

     メモリ上の連続領域(*__bits_data)




                                            40
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 整数間の制御依存関係

     後続の開始位置が前の符号長に依存


     011000010111100000000100000011                     ・・・

     メモリ上の連続領域(*__bits_data)


       整数の展開処理のCode Snippet:
       for (i = 0; i < N; i++) {
          while (__bit_read(1, __bits_data) == 1)
              rest ++;
          d = (1 << rest) | __bit_read(rest, __bits_data);
       }

           ※__bit_read(a, b)はbのbit列からa-bit取り出し,ビットを
           指しているポインタを取り出した分だけ進めるfunction


                                                              41
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 参考論文:
  F. Silvestri et al, VSEncoding: Efficient Coding and Fast Decoding of
  Integer Lists via Dynamic Programming, ACM CIKM’10


• 提案アプローチ
    - n個の整数列を固定長表現のPartitionに分割
    - 各Partitionは固定長表現であるため効率的に展開処理可能
    - Partition方法は動的計画法(DP)を利用して最適化




                                                                          42
具体例2: 整数の固定長圧縮によるPipelineハザード回避
bit-length




                                                          固定長表現のPartitionに分割




             D[] = 1, 3, 2, 9, 1, 3, 7, 2, 2, 2, 23, 45, 1, 9, 5, 4, 8, 3, 1, 8, 8, 2, …

                圧縮後のサイズを表現するコスト関数を定義してPartitionをDPで最適化

                                                                                           43
具体例2: 整数の固定長圧縮によるPipelineハザード回避




                   bit長と個数は別途保存


       4-bit, 10                    6-bit, 2   4-bit, 10
 D[] = 1, 3, 2, 9, 1, 3, 7, 2, 2, 2, 23, 45, 1, 9, 5, 4, 8, 3, 1, 8, 8, 2, …



                                                                               44
具体例2: 整数の固定長圧縮によるPipelineハザード回避




  (bit長, 個数)の組から
それを展開する関数に対応付け
 bit長   個数    展開用関数

           ・・・




        4-bit, 10                    6-bit, 2   4-bit, 10
  D[] = 1, 3, 2, 9, 1, 3, 7, 2, 2, 2, 23, 45, 1, 9, 5, 4, 8, 3, 1, 8, 8, 2, …



                                                                                45
具体例2: 整数の固定長圧縮によるPipelineハザード回避

                                       4-bit長の整数10個を32-bitに
                                       展開するCode Snippet:
                                      __unpack4_10(uint32_t *out, uint64_t b)
                                      {
  (bit長, 個数)の組から
                                        out[0] = b & 0x0f;
それを展開する関数に対応付け
                                        out[1] = (b >> 4) & 0x0f;
 bit長   個数    展開用関数                     out[2] = (b >> 8) & 0x0f;
                                        ….
           ・・・                          out[9] = (b >> 36) & 0x0f;
                                      }



        4-bit, 10                    6-bit, 2   4-bit, 10
  D[] = 1, 3, 2, 9, 1, 3, 7, 2, 2, 2, 23, 45, 1, 9, 5, 4, 8, 3, 1, 8, 8, 2, …



                                                                                46
具体例2: 整数の固定長圧縮によるPipelineハザード回避
• 測定に使用するコード
 – https://github.com/maropu/vsencoder
• 測定に用いるサーバ環境
 – Core i5/U470- Arrandale
 – 4GiB
• 測定に用いるデータと処理
 – ポアソン分布λ=8, 512, 4096の32-bit符号なし整数を圧縮
 – 1秒あたりに何個の整数を展開できるか/圧縮率を調査
      展開速度はMIPS(MIllion Per Second)で表示




                                          47
具体例2: 整数の固定長圧縮によるPipelineハザード回避




                    λ=8      λ=512      λ=4096

    Gamma       35.2MIPS    15.6MIPS    12.6MIPS
                   12.9%       42.8%       61.3%

   VSEncoder   416.6MIPS   416.7MIPS   357.1MIPS
                 10.83%      29.11%      38.48%




                                                   48
並び替え – bitonic-sort




                      49
具体例3: SIMD命令を利用した並び替え処理の分岐排除
• 想定する処理
  n個の値(D1, D2, …, Dn)を昇順に並び替える処理

• 値の並び替えを行う一般的なアルゴリズム
   quick-sort:
   pivoit値を利用した並び替え,計算量: 最良Θ(N_logN)/最悪Θ(N2)
   GNU Cの標準ライブラリで利用可能 qsort()

quick-sort処理の概要:

                  9       2       5   3     8       7       4    6

                                          <6≦
              2       3   5       4                 6       9   8        7
             <4≦                                    <8≦

          2       3           4       5         6       7            9       8
        <3≦               <5≦              <7≦                  <9≦

         2        3           4       5         6       7           8        9   50
具体例3: SIMD命令を利用した並び替え処理の分岐排除
• 参考論文:
   J. Chhugani(Intel corp.) et al.: Efficient Implementation of Sorting on
   Multi-Core SIMD CPU Architecture, VLDB’08


• 提案アプローチ
    - 計算量O(N_log2N)のbitonic-sortのSIMD実装
    - SIMDのmax/min/shuffle命令を利用した分岐排除
    - Software Pipelining技法を利用したPipelineハザードの回避
                                                       今回は扱わない
• 使用するSIMD命令:
    32-bitのSIMD max命令(_mm_max_ps)
    32-bitのSIMD min命令(_mm_min_ps)
    32-bitのSIMD shuffle命令(_mm_shuffle_ps)



                                                                             51
具体例3: SIMD命令を利用した並び替え処理の分岐排除
• bitonic-sortとは・・・
   min/maxの比較器ネットワークを利用した並び替え処理
• 以下の文献が詳しい
  Thomas H. Cormen: Introduction to Algorithms(2nd), MIT Press, 2001
                               ※2009年刊行の3rd editionからは除外




                                                                       52
具体例3: SIMD命令を利用した並び替え処理の分岐排除

bitonic-sortの処理概要(4x4 bitonic merge network):

SIMDレジスタA:      A1 A2 A3 A4
SIMDレジスタB:      B1 B2 B3 B4

                A1 B4     A2 B3     A3 B2     A4 B1
      Level1:   min/max   min/max   min/max   min/max


      Level2:   min/max   min/max   min/max   min/max


      Level3:   min/max   min/max   min/max   min/max



                          ソートされた整数列
                                                        53
具体例3: SIMD命令を利用した並び替え処理の分岐排除

bitonic-sortのCode Snippet:

      B = _mm_shuffle_ps(B, B, 0x1b); /* Reverse SIMD register B */

      L1 = _mm_min_ps(A, B); /* Level 1 */
      H1 = _mm_max_ps(A, B);
      L1p = _mm_shuffle(L1, H1, 0xe4);
      H1p = _mm_shuffle(L1, H1, 0x4e);

      L2 = _mm_min_ps(A, B); /* Level 2 */
      H2 = _mm_max_ps(A, B);
      L2p = _mm_shuffle(L1, H1, 0xd8);
      H2p = _mm_shuffle(L1, H1, 0x8d);

      L3 = _mm_min_ps(A, B); /* Level 3 */
      H3 = _mm_max_ps(A, B);
      O1 = _mm_shuffle(L1, H1, 0x88);
      O2 = _mm_shuffle(L1, H1, 0xdd);

                                                                      54
具体例3: SIMD命令を利用した並び替え処理の分岐排除
• 測定に使用するコード
 – https://github.com/maropu/bitonic_sort
• 測定に用いるサーバ環境
 – Xeon X5670 - Westmere-EP
 – 16GiB
• 測定に用いるデータと処理
 – 222~228個の値をランダムに配置したユニークなkey集合
 – 上記の値を並び替え完了するまでの時間を測定
    • qsort (glibc): GNUCの標準ライブラリ
    • qsort(naïve): 自作のquick-sortコード
    • bitonic-sort: 今回紹介したSIMD命令を利用した並び替え処理




                                              55
具体例3: SIMD命令を利用した並び替え処理の分岐排除



          160

          140         qsort (stdlib)
                      qsort (naive)
          120
                      bitonic-sort
処理時間(s)




          100

          80

          60

          40

          20

           0
                22(16Mib)   24(64Mib)   26(256Mib)   28(1GiB)   30(4GiB)

                      key数(対数表記log#,カッコ内はサイズ)

                                                                           56
まとめ

• 次世代プラットフォーにおける最適化を研究するIntel Lab.
• 研究分野における最適化の観点
  – キャッシュミス/DTLBミスの低減化
  – 分岐排除
  – メモリバンド使用量の考慮
• 最近の研究におけるx86/64最適化
  – FAST: 差分移動を利用した分岐排除
  – VSEncoder: Partition毎の固定長表現を用いた制御のハザードの回避
  – bitonic-sort: SIMDのmax/min/shuffleを利用した分岐排除




          Thanks for your attention!!


                                              57

Más contenido relacionado

La actualidad más candente

Tensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャTensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャHitoshiSHINABE1
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門Fixstars Corporation
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナドYoshihiro Mizoguchi
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)RyuichiKanoh
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法MITSUNARI Shigeo
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解MITSUNARI Shigeo
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門Fixstars Corporation
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介Preferred Networks
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けRecruit Technologies
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理Norishige Fukushima
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺MITSUNARI Shigeo
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説Takateru Yamagishi
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 

La actualidad más candente (20)

Tensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャTensorflow Liteの量子化アーキテクチャ
Tensorflow Liteの量子化アーキテクチャ
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門いまさら聞けない!CUDA高速化入門
いまさら聞けない!CUDA高速化入門
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド圏論のモナドとHaskellのモナド
圏論のモナドとHaskellのモナド
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
深層学習フレームワークにおけるIntel CPU/富岳向け最適化法
 
AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解AVX-512(フォーマット)詳解
AVX-512(フォーマット)詳解
 
ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門ARM CPUにおけるSIMDを用いた高速計算入門
ARM CPUにおけるSIMDを用いた高速計算入門
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
ngx_mrubyを用いた柔軟なABテスト基盤
ngx_mrubyを用いた柔軟なABテスト基盤ngx_mrubyを用いた柔軟なABテスト基盤
ngx_mrubyを用いた柔軟なABテスト基盤
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 

Destacado

Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮moai kids
 
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4Takeshi Yamamuro
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
Introduction to Modern Analytical DB
Introduction to Modern Analytical DBIntroduction to Modern Analytical DB
Introduction to Modern Analytical DBTakeshi Yamamuro
 
SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-Takeshi Yamamuro
 
VLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging HardwareVLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging HardwareTakeshi Yamamuro
 
VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-Takeshi Yamamuro
 
SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-Takeshi Yamamuro
 
VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-Takeshi Yamamuro
 
ワールドクラスオセロプログラム"HAYABUSA"
ワールドクラスオセロプログラム"HAYABUSA"ワールドクラスオセロプログラム"HAYABUSA"
ワールドクラスオセロプログラム"HAYABUSA"uenokazu
 
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編Kazuhiro Takahashi
 
Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題Takeshi Yamamuro
 
正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜Ryoma Sin'ya
 
オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話京大 マイコンクラブ
 

Destacado (20)

Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
llvm入門
llvm入門llvm入門
llvm入門
 
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
Introduction to Modern Analytical DB
Introduction to Modern Analytical DBIntroduction to Modern Analytical DB
Introduction to Modern Analytical DB
 
SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-
 
VLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging HardwareVLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging Hardware
 
VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-
 
SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-SIGMOD'10勉強会 -Session 8-
SIGMOD'10勉強会 -Session 8-
 
20150516 icde2015 r19-4
20150516 icde2015 r19-420150516 icde2015 r19-4
20150516 icde2015 r19-4
 
20150513 legobease
20150513 legobease20150513 legobease
20150513 legobease
 
VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-
 
Ras piでrt linux
Ras piでrt linuxRas piでrt linux
Ras piでrt linux
 
ワールドクラスオセロプログラム"HAYABUSA"
ワールドクラスオセロプログラム"HAYABUSA"ワールドクラスオセロプログラム"HAYABUSA"
ワールドクラスオセロプログラム"HAYABUSA"
 
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
 
Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題
 
20160908 hivemall meetup
20160908 hivemall meetup20160908 hivemall meetup
20160908 hivemall meetup
 
正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜正規表現に潜む対称性 〜等式公理による等価性判定〜
正規表現に潜む対称性 〜等式公理による等価性判定〜
 
オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話
 

Similar a 研究動向から考えるx86/x64最適化手法

[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)Insight Technology, Inc.
 
MemoryPlus Workshop
MemoryPlus WorkshopMemoryPlus Workshop
MemoryPlus WorkshopHitoshi Sato
 
2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen直久 住川
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムShinya Takamaeda-Y
 
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較griddb
 
昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴Takuya Utsunomiya
 
2012-03-08 MSS研究会
2012-03-08 MSS研究会2012-03-08 MSS研究会
2012-03-08 MSS研究会Kimikazu Kato
 
Linux の hugepage の開発動向
Linux の hugepage の開発動向Linux の hugepage の開発動向
Linux の hugepage の開発動向Naoya Horiguchi
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生MITSUNARI Shigeo
 
分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介Orb, Inc.
 
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介Hiroki Nakahara
 
Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase IBM Analytics Japan
 
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...Deep Learning JP
 
第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)RCCSRENKEI
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Wataru Fukatsu
 
2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)Takahiro Shinagawa
 
CNNの構造最適化手法(第3回3D勉強会)
CNNの構造最適化手法(第3回3D勉強会)CNNの構造最適化手法(第3回3D勉強会)
CNNの構造最適化手法(第3回3D勉強会)MasanoriSuganuma
 
MapReduceによる大規模データを利用した機械学習
MapReduceによる大規模データを利用した機械学習MapReduceによる大規模データを利用した機械学習
MapReduceによる大規模データを利用した機械学習Preferred Networks
 

Similar a 研究動向から考えるx86/x64最適化手法 (20)

[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
[INSIGHT OUT 2011] A12 ひとつのデータベース技術では生き残れない part1 カラムナーデータベース(Shinkubo)
 
MemoryPlus Workshop
MemoryPlus WorkshopMemoryPlus Workshop
MemoryPlus Workshop
 
2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen2021 03-09-ac ri-nngen
2021 03-09-ac ri-nngen
 
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステムオープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
オープンソースコンパイラNNgenでつくるエッジ・ディープラーニングシステム
 
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較
ビッグデータ×IoT時代のデータベースのアーキテクチャとメカニズムの比較
 
昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴昨今のストレージ選定のポイントとCephStorageの特徴
昨今のストレージ選定のポイントとCephStorageの特徴
 
2012-03-08 MSS研究会
2012-03-08 MSS研究会2012-03-08 MSS研究会
2012-03-08 MSS研究会
 
Halide for Memory
Halide for MemoryHalide for Memory
Halide for Memory
 
Linux の hugepage の開発動向
Linux の hugepage の開発動向Linux の hugepage の開発動向
Linux の hugepage の開発動向
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介分散型台帳技術Orb DLTの紹介
分散型台帳技術Orb DLTの紹介
 
Orb oracle
Orb oracleOrb oracle
Orb oracle
 
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
2値ディープニューラルネットワークと組込み機器への応用: 開発中のツール紹介
 
Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase
 
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...
[DL輪読会]Pervasive Attention: 2D Convolutional Neural Networks for Sequence-to-...
 
第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)第5回 配信講義 計算科学技術特論B(2022)
第5回 配信講義 計算科学技術特論B(2022)
 
Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)Orb dlt technical_overview(特許情報なし)
Orb dlt technical_overview(特許情報なし)
 
2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)2012-04-25 ASPLOS2012出張報告(公開版)
2012-04-25 ASPLOS2012出張報告(公開版)
 
CNNの構造最適化手法(第3回3D勉強会)
CNNの構造最適化手法(第3回3D勉強会)CNNの構造最適化手法(第3回3D勉強会)
CNNの構造最適化手法(第3回3D勉強会)
 
MapReduceによる大規模データを利用した機械学習
MapReduceによる大規模データを利用した機械学習MapReduceによる大規模データを利用した機械学習
MapReduceによる大規模データを利用した機械学習
 

Más de Takeshi Yamamuro

LT: Spark 3.1 Feature Expectation
LT: Spark 3.1 Feature ExpectationLT: Spark 3.1 Feature Expectation
LT: Spark 3.1 Feature ExpectationTakeshi Yamamuro
 
Quick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + αQuick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + αTakeshi Yamamuro
 
MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理Takeshi Yamamuro
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTaming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTakeshi Yamamuro
 
LLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecodeLLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecodeTakeshi Yamamuro
 
20180417 hivemall meetup#4
20180417 hivemall meetup#420180417 hivemall meetup#4
20180417 hivemall meetup#4Takeshi Yamamuro
 
An Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List CompressionAn Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List CompressionTakeshi Yamamuro
 
A x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequencesA x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequencesTakeshi Yamamuro
 
VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-Takeshi Yamamuro
 

Más de Takeshi Yamamuro (11)

LT: Spark 3.1 Feature Expectation
LT: Spark 3.1 Feature ExpectationLT: Spark 3.1 Feature Expectation
LT: Spark 3.1 Feature Expectation
 
Apache Spark + Arrow
Apache Spark + ArrowApache Spark + Arrow
Apache Spark + Arrow
 
Quick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + αQuick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + α
 
MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTaming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache Spark
 
LLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecodeLLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecode
 
20180417 hivemall meetup#4
20180417 hivemall meetup#420180417 hivemall meetup#4
20180417 hivemall meetup#4
 
An Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List CompressionAn Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List Compression
 
A x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequencesA x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequences
 
VAST-Tree, EDBT'12
VAST-Tree, EDBT'12VAST-Tree, EDBT'12
VAST-Tree, EDBT'12
 
VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-
 

研究動向から考えるx86/x64最適化手法