• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
研究動向から考えるx86/x64最適化手法
 

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

on

  • 13,448 views

 

Statistics

Views

Total Views
13,448
Views on SlideShare
13,164
Embed Views
284

Actions

Likes
17
Downloads
83
Comments
0

6 Embeds 284

http://paper.li 134
http://a0.twimg.com 73
https://twitter.com 69
http://tweetedtimes.com 3
http://tweetedtimes.com 3
http://b.hatena.ne.jp 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • 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 labs goal is worldwide leadership in highly parallel computing, and toensure Intels 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 Intels upcoming multicore/manycore compute platforms 5
    • Intel Lab.とは? • Intel Parallel Computing Lab. – http://pcl.intel-research.net/ – USとインドの2拠点 • 所属研究者は約20名程度 • 研究目的(上記URLから抜粋) Our labs goal is worldwide leadership in highly parallel computing, and to ensure Intels 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 Intels upcoming multicore/manycore compute platforms x86/x64コアを大量に搭載したHPC向けメ ニーコアアーキテクチャ『Knights Ferry』 6http://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 ofcache-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, HPEC08• アルゴリズムで扱うデータ量が増えた場合に,コア数に対して処理速 度がスケールしないという報告 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 NODE5NODE4 ex. 2分木の例 17
    • 具体例1: SIMD命令を利用した探索の分岐排除• 想定する処理 n個の昇順値(D1≦D2≦…≦Dn)から任意の値を探索する処理• 高速化に用いられる一般的な索引データ構造 2分木,B木,…参照が一様の場合分岐 48 NODE1 によるペナルティ大 NODE2 12 68 NODE3 7 20 NODE5NODE4 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分木 FASTThrouputs 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 A4SIMDレジスタ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