2

カスタム アロケータを指定しない限り、アラインされた構造体 (たとえば、std::vector に配置された SIMD ベクトル) に問題がある STL の漠然とした記憶があります。

このドキュメントによると、 VS 2012/VC11 はc++ アライメントを部分的にサポートしています。これは、カスタム アロケーターを提供しなくても、VS STL 実装が整列された構造体を処理できるようになったことを意味しますか?

4

1 に答える 1

3

__declspec(align(N))いいえ。これは、VC++ コンパイラが、型 (構文)に必要なアラインメントを指定する方法をサポートしていることを意味します。VC++ は常にそれをサポートしており、基本的には「部分的」としてリストされています。

それとは別に、標準ライブラリ コンテナー内の SIMD ベクトルが動作することが保証されていることを示す C++11 アライメント仕様については何も知りません。C++11 のアライメントは、基本的に、この点に関して、コンパイラーが既に行ったことを形式化したものにすぎません (私の知る限りでは、間違っていることを証明していただければ幸いです)。

SIMD ベクトルは、標準で「オーバーアラインされた型」と呼ばれるものです (「拡張アラインメント」に関する部分を参照してください)。つまり、基本的には「私たちは何も保証せず、そのような型をどのように処理するか/処理するかは完全にコンパイラ次第です。

つまり、C++11 のこの部分を実装しても、SIMD オブジェクトの処理方法が変わるとは限りません。

于 2012-10-10T09:04:41.453 に答える