私はテンプレートクラスの引数として__m256を使用しています(下記のコードを参照)。 Ubuntuの16.10でG ++バージョン6.2でコンパイルすると、それは属性がテンプレート引数に無視さについて私に警告します:gcc警告:テンプレート引数の属性を無視する(-Wignored-attributes)
warning: ignoring attributes on template argument ‘__m256 {aka __vector(8) float}’ [-Wignored-attributes] typedef vec_array<__m256> vec256
__m256タイプはアライメントに関するいくつかの属性持っているようだ(そしておそらくいくつかの他の?)。以下に示すこのプリミティブコンテナクラスの唯一の目的は、これらの特別なインテル変数(__m256、__m128など)のヒープ上でのメモリアライメントを処理することです。
私は全体のプログラムでこのコンテナクラスを使用すると、正常に動作しているようです。しかし、私の質問は、gccがこれらの属性を無視しているときの意味です(gccのマニュアルで問題点をすでに読んでいます)。
- 誰もこれらの警告を取り除く良い方法がありますか?
- これについて心配する必要はありますか?
- この警告を無視した場合に起こりうる最悪のことは何ですか?
参考として、以下のコードでこの警告が表示されます。
この件に関するお手伝いやご意見は大変ありがとうございます。ありがとうございます。
///////////////////////////////////////////////////////////////////////////////
// System includes:
#include <x86intrin.h>
#include <cstdint>
static const size_t AVX_alignment = 32;
template<typename VecT>
class vec_array
{
protected:
VecT* m_pdata;
size_t m_num_vector_elements;
public:
vec_array();
vec_array(size_t num_vector_elements);
virtual ~vec_array();
void allocate(size_t num_vector_elements);
void free();
};
template<typename VecT>
vec_array<VecT>::vec_array() : m_pdata(nullptr), m_num_vector_elements(0)
{}
template<typename VecT>
vec_array<VecT>::vec_array(size_t num_vector_elements) : m_pdata(nullptr),
m_num_vector_elements(num_vector_elements)
{
allocate(num_vector_elements);
}
template<typename VecT>
vec_array<VecT>::~vec_array()
{
free();
}
template<typename VecT>
void vec_array<VecT>::allocate(size_t num_vector_elements)
{
if(m_num_vector_elements == num_vector_elements)
return;
m_num_vector_elements = num_vector_elements;
free();
m_pdata = reinterpret_cast<VecT*>(_mm_malloc(m_num_vector_elements*sizeof(VecT), AVX_alignment));
}
template<typename VecT>
void vec_array<VecT>::free()
{
if(m_pdata != nullptr)
_mm_free(m_pdata);
}
typedef vec_array<__m256> vec256;
int main()
{
vec256 test_vec(10);
}