2014-12-10

2014-11-post-Urbanaのレビュー: N4320-N4331

N4320: Make exception-specifications be part of the type system

例外指定を型システムに含める提案。

関数ポインターを経由した例外指定の偽装がコンパイル時に検出できるようになる。

void (*p)() throw(int);
void (**pp)() throw() = &p;   // エラー

struct S { typedef void (*p)(); operator p(); };
void (*q)() noexcept = S();   // エラー

N4321: Towards Implementation and Use of memory_order_consume

memory_order_consumeの効果とLinuxカーネルでは使いにくい問題点などを解説したうえで、Linus Torvaldsでも満足する機能を設計している。

N4322: Linux-Kernel Memory Model

LinuxカーネルにおけるメモリモデルをC++の規格と比較してまとめたもの。

N4323: Out-of-Thin-Air Execution is Vacuous

複数のスレッドからのメモリアクセスによって競合を起こした場合、まったく脈絡のない値が現れることが規格上許されている。しかし、全く脈絡のない値が現れるのは問題である。この虚空から現れいでたる(Out-of-Thin-Air)値についての具体例の考察。

N4324: Use Cases for Thread-Local Storage

タイトル通り、TLSの利用例

TLS(Thread Local Storage)は長年利用されているにもかかわらず、その必要性が一般に理解されていない。C++標準化委員会の会議においてすら、TLSの存在価値に懐疑的な意見が出された。SIMDやGPGPUの専門家はTLSの存在意義に懐疑的で、逆にベクトルループ内でTLSが正しく動かないことに不満を持つものもいる。

この文書はその意見に答えて、TLSの既存の利用例や、SIMDやGPGPUにおけるTLSサポートの難しさ、TLSの代替機能などを考察している。

TLSの利用例として、例えばLinuxカーネルでは、CPUごとに必要な変数としてTLSを用いている。CPUごとに500以上もの静的なTLS変数と、100以上の動的なTLS変数が存在する。

TLSの最も主要な利用例としては、統計カウンターである。スレッドごと、CPUごとにカウンターを分割して、個別にカウンターを更新した後、最後に加算してすべてのスレッドのカウンターの値を得る。

TLSの他の利用例としては、オーバーヘッドの低いログやトレースを実装するために使われている。

TLSはメモリーアロケーターのスレッドごとのキャッシュにも使われている。

等など

なぜTLSはSIMDやGPGPUでは問題になるのか。TLSを初期化、破棄するにはコストがかかる。特にTLS変数がコンストラクターやデストラクターを持つ場合は、ミリ秒単位の時間が使われるかもしれない。これは、ひとつの実行単位がマイクロ秒単位のSIMDにとっては、無駄が多すぎる。GPGPUの実行単位はもう少し長いが、それでも問題だ。GPGPUの場合は、実行媒体が非常に多いので、GPGPUスレッドごとにTLS変数を作るのは、メモリーフットプリント上好ましくない。

TLSとSIMD/GPGPUは共存できるのか。SIMDレーンごとにTLS変数を初期化破棄するのはいかにも無茶だ。しかし、SIMDベクトルループ内でTLS変数の利用を禁止すると、従来のライブラリ、とくにerrnoに依存するようなライブラリが軒並み使えなくなってしまう。

N4325: C++ Standard Evolution Active Issues List
N4325: C++ Standard Evolution Completed Issues List
N4337: C++ Standard Evolution Closed Issues List

C++に提案中の新機能に対する議論中の問題、解決済みの問題、却下された問題の一覧。

N4328: C++ Standard Library Issues History for C++14

標準ライブラリのC++14に対する更新履歴の一覧。なかなか新しい文書だ。さすがに更新履歴が長くなってきたから分離したのだろうか。

N4329: C++ Standard Library Active Issues List
C++ Standard Library Defect Report List
N4331C++ Standard Library Closed Issues List

標準ライブラリで議論されている問題、解決済みの問題、却下された問題の一覧。

ドワンゴ広告

この記事はドワンゴ勤務中に書かれた。

ドワンゴにはボルダリング部があり、毎週水曜日に部員は仕事後にボルダリングに行っている。

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

No comments:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.