我正在使用__m256作爲模板類的參數(請參閱下面的代碼)。當相剋在Ubuntu 16.10編譯++ 6.2版本,它提醒我關於屬性的模板參數被忽略:gcc警告的含義:忽略模板參數上的屬性(-Wignored-attributes)
warning: ignoring attributes on template argument ‘__m256 {aka __vector(8) float}’ [-Wignored-attributes] typedef vec_array<__m256> vec256
的__m256類型似乎有關於對準一些屬性(也許其它的嗎?)。下面顯示的這個基本容器類的唯一目的(並生成警告)是處理這些特殊Intel變量(__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);
}