ラージページについての考察

同カテゴリーの次の記事

ギャザーによる構造化されたデータのベクトル化

この記事は、インテル® デベロッパー・ゾーンに掲載されている「Large Page Considerations」の日本語参考訳です。


デフォルトで有効な MPSS オペレーティング・システムの THP を使用する

MPSS バージョン 2.1.4982-15 以降は、スタックおよびヒープ割り当てデータを 4KB ページから 2MB ページに自動的にプロモートする「Transparent Huge Pages (THP)」をサポートしています。このため、スタティックおよびダイナミック・データが、連続するデータ・アクセス・パターンの場合、uOS によって 4KB ページから 2MB ページに自動的に変換されます。詳細は、http://software.intel.com/en-us/blogs/2013/07/09/transparent-huge-pages-on-intel-xeon-phi-coprocessors (英語) を参照してください。

「Transparent Huge Pages」は、カーネルバージョン 2.6.38 で導入された Linux* カーネルの機能です。Linux* が (利用可能なページに関してアプリケーションがスタベーション状態になることなく) ラージページを割り当てる方法については、http://lwn.net/Articles/423584/ (英語) が参考になります。

mmap を使用して 2MB ページのデータをユーザープログラムで直接割り当てる

malloc/new の代わりに mmap システムコールに MAP_HUGETLB 引数を使用して、2MB ページのダイナミック・データをユーザープログラムで直接割り当てることができます。データ・アクセス・パターンから uOS による THP が適用されなくても、2MB ページでデータを割り当てることでプログラムに利点がある場合は、この方法が便利です。次のマクロは、mmap を用いてデータを 2MB ページで割り当てる方法を示しています。

#include <sys/mman.h>
#define my_malloc(size) \
            mmap(NULL, size, PROT_READ | PROT_WRITE, \
            MAP_PRIVATE | MAP_HUGETLB | MAP_ANONYMOUS, 0, 0);
#define my_free(addr,size) munmap(addr, size);

libhugetlbfs などのライブラリー・ソリューションを使用する               

別の回避策は、libhugetlbfs などのライブラリーを利用して malloc されたデータおよびスタティック・データをすべて 2MB ページで自動的に割り当てることです (Fortran でも動作します) – http://software.intel.com/en-us/articles/optimizing-memory-bandwidth-on-stream-triad (英語) のヒントを参照してください。

オフロードプログラムのラージページ

オフロードプログラムでは、THP の自動プロモーションはスタティック・データ (MIC 側で定義) または malloc/new 呼び出しを使用して、オフロード領域内部で割り当てられたダイナミック・データに適用されます。

in/out/nocopy 節でポインター変数の #pragma offload により割り当てられたデータの場合、THP は適用されません。環境変数 MIC_USE_2MB_BUFFERS を (ホストで) 指定して、割り当てが 2MB ページで行われるしきい値を設定できます。詳細は、http://www.isus.jp/article/mic-article/effective-use-of-the-intel-compilers-offload-features を参照してください。

次のステップ

この記事は、「Programming and Compiling for Intel® Many Integrated Core Architecture」(英語) の一部「Large Page Considerations」の翻訳です。インテル® Xeon Phi™ コプロセッサー上にアプリケーションを移植し、チューニングを行うには、各リンクのトピックを参照してください。アプリケーションのパフォーマンスを最大限に引き出すために必要なステップを紹介しています。

インテル® メニー・インテグレーテッド・コア アーキテクチャーに対する準備に戻る

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事