Browse Source

fix(dnn/x86): fix gcc5 -O0 compiler error

GitOrigin-RevId: 237e2f27f2
tags/v0.4.0
Megvii Engine Team Xinran Xu 5 years ago
parent
commit
64401dfef0
4 changed files with 86 additions and 78 deletions
  1. +84
    -0
      dnn/src/x86/avx_helper.h
  2. +1
    -1
      dnn/src/x86/conv_bias/f32/strategy_2x3_8x8.cpp
  3. +1
    -1
      dnn/src/x86/conv_bias/f32/strategy_6x3_8x8.cpp
  4. +0
    -76
      dnn/src/x86/simd_helper.h

+ 84
- 0
dnn/src/x86/avx_helper.h View File

@@ -17,6 +17,10 @@
#include <avx2intrin.h> #include <avx2intrin.h>
#include <fmaintrin.h> #include <fmaintrin.h>


#if !defined (__clang__)
#pragma GCC target ("avx")
#endif

namespace megdnn { namespace megdnn {
namespace x86 { namespace x86 {


@@ -27,6 +31,86 @@ static inline __m256 _mm256_loadu2_m128_emulate(
_mm_loadu_ps(hiaddr), 1); _mm_loadu_ps(hiaddr), 1);
} }


template <typename ctype, size_t len>
struct Vector;

template <>
struct Vector<float, 8> {
__m256 value;
Vector() {}
Vector(const float v) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_set1_ps(v);
}
Vector(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = lr.value;
}
Vector(const Vector&& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = std::move(lr.value);
}
Vector(const __m256& v) MEGDNN_ATTRIBUTE_TARGET("avx") { value = v; }
static Vector load(const float* addr) MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector v;
v.value = _mm256_loadu_ps(addr);
return v;
}
static void save(float* addr, const Vector& v)
MEGDNN_ATTRIBUTE_TARGET("avx") {
_mm256_storeu_ps(addr, v.value);
}
void save(float* addr) MEGDNN_ATTRIBUTE_TARGET("avx") {
save(addr, *this);
}
Vector operator+(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_add_ps(value, lr.value);
return dst;
}
Vector& operator+=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_add_ps(value, lr.value);
return *this;
}
Vector operator-(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_sub_ps(value, lr.value);
return dst;
}
Vector& operator-=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_sub_ps(value, lr.value);
return *this;
}
Vector operator*(float lr)MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_mul_ps(value, _mm256_set1_ps(lr));
return dst;
}
Vector operator*(const Vector& lr)MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_mul_ps(value, lr.value);
return dst;
}
Vector& operator*=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_mul_ps(value, lr.value);
return *this;
}
Vector& operator=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = lr.value;
return *this;
}
Vector& operator=(const Vector&& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = std::move(lr.value);
return *this;
}
Vector operator-() MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = -value;
return dst;
}
};

#if !defined (__clang__)
#pragma GCC reset_options
#endif

} // namespace x86 } // namespace x86
} // namespace megdnn } // namespace megdnn




+ 1
- 1
dnn/src/x86/conv_bias/f32/strategy_2x3_8x8.cpp View File

@@ -15,7 +15,7 @@
#include "src/fallback/conv_bias/winograd/winograd.h" #include "src/fallback/conv_bias/winograd/winograd.h"
#include "src/x86/conv_bias/f32/strategy.h" #include "src/x86/conv_bias/f32/strategy.h"
#include "src/x86/elemwise_helper/op_unary.h" #include "src/x86/elemwise_helper/op_unary.h"
#include "src/x86/simd_helper.h"
#include "src/x86/avx_helper.h"


#include <x86intrin.h> #include <x86intrin.h>
#ifdef WIN32CMAKE #ifdef WIN32CMAKE


+ 1
- 1
dnn/src/x86/conv_bias/f32/strategy_6x3_8x8.cpp View File

@@ -16,7 +16,7 @@
#include "src/fallback/conv_bias/winograd/winograd.h" #include "src/fallback/conv_bias/winograd/winograd.h"
#include "src/x86/conv_bias/f32/strategy.h" #include "src/x86/conv_bias/f32/strategy.h"
#include "src/x86/elemwise_helper/op_unary.h" #include "src/x86/elemwise_helper/op_unary.h"
#include "src/x86/simd_helper.h"
#include "src/x86/avx_helper.h"


#include <x86intrin.h> #include <x86intrin.h>
#ifdef WIN32CMAKE #ifdef WIN32CMAKE


+ 0
- 76
dnn/src/x86/simd_helper.h View File

@@ -140,82 +140,6 @@ struct simd_traits<SIMDType::FMA>: simd_traits_avx_base {
} }
}; };


template <typename ctype, size_t len>
struct Vector;

template <>
struct Vector<float, 8> {
__m256 value;
Vector() {}
Vector(const float v) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_set1_ps(v);
}
Vector(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = lr.value;
}
Vector(const Vector&& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = std::move(lr.value);
}
Vector(const __m256& v) MEGDNN_ATTRIBUTE_TARGET("avx") { value = v; }
static Vector load(const float* addr) MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector v;
v.value = _mm256_loadu_ps(addr);
return v;
}
static void save(float* addr, const Vector& v)
MEGDNN_ATTRIBUTE_TARGET("avx") {
_mm256_storeu_ps(addr, v.value);
}
void save(float* addr) MEGDNN_ATTRIBUTE_TARGET("avx") {
save(addr, *this);
}
Vector operator+(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_add_ps(value, lr.value);
return dst;
}
Vector& operator+=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_add_ps(value, lr.value);
return *this;
}
Vector operator-(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_sub_ps(value, lr.value);
return dst;
}
Vector& operator-=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_sub_ps(value, lr.value);
return *this;
}
Vector operator*(float lr)MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_mul_ps(value, _mm256_set1_ps(lr));
return dst;
}
Vector operator*(const Vector& lr)MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = _mm256_mul_ps(value, lr.value);
return dst;
}
Vector& operator*=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = _mm256_mul_ps(value, lr.value);
return *this;
}
Vector& operator=(const Vector& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = lr.value;
return *this;
}
Vector& operator=(const Vector&& lr) MEGDNN_ATTRIBUTE_TARGET("avx") {
value = std::move(lr.value);
return *this;
}
Vector operator-() MEGDNN_ATTRIBUTE_TARGET("avx") {
Vector dst;
dst.value = -value;
return dst;
}
};

} // namespace x86 } // namespace x86
} // namespace megdnn } // namespace megdnn




Loading…
Cancel
Save