[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
> -Original Message- > From: Qiu, Michael > Sent: Friday, November 27, 2015 3:22 PM > To: Ananyev, Konstantin > Cc: Thomas Monjalon; dev at dpdk.org > Subject: Re: [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4 > > Sorry for not explaining clearly. > > For gcc version start from version 4.4, x86intrin.h will be include, and > inside x86intrin.h, immintrin.h will be directly include without > check AVX Yes, but inside immintrin.h there is a check. At least that what I am seeing for gcc4.4.3: #ifdef __AVX__ #include #endif Isn't it the same for your case? Konstantin > (as I know, AVX is not exist when gcc >= 4.4),so no AVX macro does not mean > vector disable. > > Only gcc < 4.4 and no macro AVX will disable vector. > > This is my understanding, may be wrong :) > > Thanks, > Michael > > > ? 2015?11?2710:09?Ananyev, Konstantin > > ??? > > > > > > > >> -Original Message- > >> From: Qiu, Michael > >> Sent: Friday, November 27, 2015 2:02 PM > >> To: Ananyev, Konstantin > >> Cc: Thomas Monjalon; dev at dpdk.org > >> Subject: Re: [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4 > >> > >> I just replied that Marco AVX only exist in gcc version < 4.4 , otherwise > >> it will not exist. > > > > If macro __AVX__ not defined, then > > #if defined(__AVX__) > > would always be false and SCHED_VECTOR_ENABLE also wouldn't be defined. > > So still don't understand why that is a problem > > Konstantin > > > >> > >> What's your suggest will not work if gcc version greater than 4.3. > >> > >> So still need to check gcc version. Any other solution? > >> > >> Thanks, > >> Michael > >> > >>> ? 2015?11?27????8:34?Ananyev, Konstantin >>> intel.com> ??? > >>> > >>> > >>>> -Original Message- > >>>> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Qiu, Michael > >>>> Sent: Friday, November 27, 2015 11:53 AM > >>>> To: Thomas Monjalon > >>>> Cc: dev at dpdk.org > >>>> Subject: Re: [dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc > >>>> 4.3.4 > >>>> > >>>> really?I don't think so. > >>>> > >>>> AVX Marco only exist in the gcc version below 4.4, I still need to > >>>> check if below or beyond 4.4 am I right? > >>>> > >>>> Thanks, > >>>> Michael > >>> > >>> > >>> If you look at lib/librte_eal/common/include/arch/x86/rte_vect.h, you'll > >>> see the code similar > >>> to one you are trying to put into rte_shed.c: > >>> > >>> lib/librte_eal/common/include/arch/x86/rte_vect.h: > >>> ... > >>> #if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > >>> > >>> #ifdef __SSE__ > >>> #include > >>> #endif > >>> > >>> #ifdef __SSE2__ > >>> #include > >>> #endif > >>> > >>> #ifdef __SSE3__ > >>> #include > >>> #endif > >>> > >>> #if defined(__SSE4_2__) || defined(__SSE4_1__) > >>> #include > >>> #endif > >>> > >>> #if defined(__AVX__) > >>> #include > >>> #endif > >>> > >>> #else > >>> > >>> #include > >>> > >>> #endif > >>> ... > >>> > >>> So I think you can do just like that: > >>> > >>> #include > >>> #if defined(__AVX__) > >>> #define SCHED_VECTOR_ENABLE > >>> #endif > >>> > >>> inside rte_sched.c > >>> > >>> Konstantin > >>> > >>> > >>>> > >>>> > >>>>> ? 2015?11?275:01?Thomas Monjalon ??? > >>>>> > >>>>> 2015-11-27 02:26, Qiu, Michael: > >>>>>>>> On 2015/11/27 5:29, Thomas Monjalon wrote: > >>>>>>>> 2015-11-26 18:49, Michael Qiu: > >>>>>>>> gcc 4.3.4 does not include "immintrin.h", and will post below error: > >>>>>>>> lib/librte_sched/rte_sched.c:56:23: error: > >>>>>>>> immintrin.h: No such file or directory > >>>>>>>> > >>>>>>>> To avoid this issue, a gcc version check is need and a flag to > >>>>>>>> indicate > >>>>>>>> vector ablility. > >>>>>>> [...] > >>>>>>>> +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > >>>>>>>> + > >>>>>>>> +#if defined(__AVX__) > >>>>>>>> #include > >>>>>>>> +#define SCHED_VECTOR_ENABLE > >>>>>>>> +#endif > >>>>>>>> + > >>>>>>>> +#else > >>>>>>>> + > >>>>>>>> +#include > >>>>>>>> +#define SCHED_VECTOR_ENABLE > >>>>>>>> + > >>>>>>>> +#endif > >>>>>>> This kind of complication is managed by EAL. > >>>>>>> I think we should include rte_vect.h. > >>>>>> > >>>>>> As I know here it needs a flag to identify whether the platform support > >>>>>> AVX, if not it will not use it, so I don't know if we could only simply > >>>>>> include rte_vect.h? > >>>>> > >>>>> It's not exclusive. > >>>>> You can include rte_vect.h and check AVX to define SCHED_VECTOR_ENABLE. > >>>>>
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
> -Original Message- > From: Qiu, Michael > Sent: Friday, November 27, 2015 2:02 PM > To: Ananyev, Konstantin > Cc: Thomas Monjalon; dev at dpdk.org > Subject: Re: [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4 > > I just replied that Marco AVX only exist in gcc version < 4.4 , otherwise it > will not exist. If macro __AVX__ not defined, then #if defined(__AVX__) would always be false and SCHED_VECTOR_ENABLE also wouldn't be defined. So still don't understand why that is a problem Konstantin > > What's your suggest will not work if gcc version greater than 4.3. > > So still need to check gcc version. Any other solution? > > Thanks, > Michael > > > ? 2015?11?278:34?Ananyev, Konstantin > > ??? > > > > > >> -Original Message- > >> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Qiu, Michael > >> Sent: Friday, November 27, 2015 11:53 AM > >> To: Thomas Monjalon > >> Cc: dev at dpdk.org > >> Subject: Re: [dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc > >> 4.3.4 > >> > >> really?I don't think so. > >> > >> AVX Marco only exist in the gcc version below 4.4, I still need to check > >> if below or beyond 4.4 am I right? > >> > >> Thanks, > >> Michael > > > > > > If you look at lib/librte_eal/common/include/arch/x86/rte_vect.h, you'll > > see the code similar > > to one you are trying to put into rte_shed.c: > > > > lib/librte_eal/common/include/arch/x86/rte_vect.h: > > ... > > #if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > > > > #ifdef __SSE__ > > #include > > #endif > > > > #ifdef __SSE2__ > > #include > > #endif > > > > #ifdef __SSE3__ > > #include > > #endif > > > > #if defined(__SSE4_2__) || defined(__SSE4_1__) > > #include > > #endif > > > > #if defined(__AVX__) > > #include > > #endif > > > > #else > > > > #include > > > > #endif > > ... > > > > So I think you can do just like that: > > > > #include > > #if defined(__AVX__) > > #define SCHED_VECTOR_ENABLE > > #endif > > > > inside rte_sched.c > > > > Konstantin > > > > > >> > >> > >>> ? 2015?11?275:01?Thomas Monjalon ??? > >>> > >>> 2015-11-27 02:26, Qiu, Michael: > >>>>>> On 2015/11/27 5:29, Thomas Monjalon wrote: > >>>>>> 2015-11-26 18:49, Michael Qiu: > >>>>>> gcc 4.3.4 does not include "immintrin.h", and will post below error: > >>>>>> lib/librte_sched/rte_sched.c:56:23: error: > >>>>>> immintrin.h: No such file or directory > >>>>>> > >>>>>> To avoid this issue, a gcc version check is need and a flag to indicate > >>>>>> vector ablility. > >>>>> [...] > >>>>>> +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > >>>>>> + > >>>>>> +#if defined(__AVX__) > >>>>>> #include > >>>>>> +#define SCHED_VECTOR_ENABLE > >>>>>> +#endif > >>>>>> + > >>>>>> +#else > >>>>>> + > >>>>>> +#include > >>>>>> +#define SCHED_VECTOR_ENABLE > >>>>>> + > >>>>>> +#endif > >>>>> This kind of complication is managed by EAL. > >>>>> I think we should include rte_vect.h. > >>>> > >>>> As I know here it needs a flag to identify whether the platform support > >>>> AVX, if not it will not use it, so I don't know if we could only simply > >>>> include rte_vect.h? > >>> > >>> It's not exclusive. > >>> You can include rte_vect.h and check AVX to define SCHED_VECTOR_ENABLE. > >>>
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
I just replied that Marco AVX only exist in gcc version < 4.4 , otherwise it will not exist. What's your suggest will not work if gcc version greater than 4.3. So still need to check gcc version. Any other solution? Thanks, Michael > ? 2015?11?278:34?Ananyev, Konstantin ??? > > >> -Original Message- >> From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Qiu, Michael >> Sent: Friday, November 27, 2015 11:53 AM >> To: Thomas Monjalon >> Cc: dev at dpdk.org >> Subject: Re: [dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4 >> >> really?I don't think so. >> >> AVX Marco only exist in the gcc version below 4.4, I still need to check if >> below or beyond 4.4 am I right? >> >> Thanks, >> Michael > > > If you look at lib/librte_eal/common/include/arch/x86/rte_vect.h, you'll see > the code similar > to one you are trying to put into rte_shed.c: > > lib/librte_eal/common/include/arch/x86/rte_vect.h: > ... > #if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > > #ifdef __SSE__ > #include > #endif > > #ifdef __SSE2__ > #include > #endif > > #ifdef __SSE3__ > #include > #endif > > #if defined(__SSE4_2__) || defined(__SSE4_1__) > #include > #endif > > #if defined(__AVX__) > #include > #endif > > #else > > #include > > #endif > ... > > So I think you can do just like that: > > #include > #if defined(__AVX__) > #define SCHED_VECTOR_ENABLE > #endif > > inside rte_sched.c > > Konstantin > > >> >> >>> ? 2015?11?275:01?Thomas Monjalon ??? >>> >>> 2015-11-27 02:26, Qiu, Michael: >>>>>> On 2015/11/27 5:29, Thomas Monjalon wrote: >>>>>> 2015-11-26 18:49, Michael Qiu: >>>>>> gcc 4.3.4 does not include "immintrin.h", and will post below error: >>>>>> lib/librte_sched/rte_sched.c:56:23: error: >>>>>> immintrin.h: No such file or directory >>>>>> >>>>>> To avoid this issue, a gcc version check is need and a flag to indicate >>>>>> vector ablility. >>>>> [...] >>>>>> +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) >>>>>> + >>>>>> +#if defined(__AVX__) >>>>>> #include >>>>>> +#define SCHED_VECTOR_ENABLE >>>>>> +#endif >>>>>> + >>>>>> +#else >>>>>> + >>>>>> +#include >>>>>> +#define SCHED_VECTOR_ENABLE >>>>>> + >>>>>> +#endif >>>>> This kind of complication is managed by EAL. >>>>> I think we should include rte_vect.h. >>>> >>>> As I know here it needs a flag to identify whether the platform support >>>> AVX, if not it will not use it, so I don't know if we could only simply >>>> include rte_vect.h? >>> >>> It's not exclusive. >>> You can include rte_vect.h and check AVX to define SCHED_VECTOR_ENABLE. >>>
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
> -Original Message- > From: dev [mailto:dev-bounces at dpdk.org] On Behalf Of Qiu, Michael > Sent: Friday, November 27, 2015 11:53 AM > To: Thomas Monjalon > Cc: dev at dpdk.org > Subject: Re: [dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4 > > really?I don't think so. > > AVX Marco only exist in the gcc version below 4.4, I still need to check if > below or beyond 4.4 am I right? > > Thanks, > Michael If you look at lib/librte_eal/common/include/arch/x86/rte_vect.h, you'll see the code similar to one you are trying to put into rte_shed.c: lib/librte_eal/common/include/arch/x86/rte_vect.h: ... #if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) #ifdef __SSE__ #include #endif #ifdef __SSE2__ #include #endif #ifdef __SSE3__ #include #endif #if defined(__SSE4_2__) || defined(__SSE4_1__) #include #endif #if defined(__AVX__) #include #endif #else #include #endif ... So I think you can do just like that: #include #if defined(__AVX__) #define SCHED_VECTOR_ENABLE #endif inside rte_sched.c Konstantin > > > > ? 2015?11?275:01?Thomas Monjalon ??? > > > > 2015-11-27 02:26, Qiu, Michael: > >>> On 2015/11/27 5:29, Thomas Monjalon wrote: > >>> 2015-11-26 18:49, Michael Qiu: > >>>> gcc 4.3.4 does not include "immintrin.h", and will post below error: > >>>>lib/librte_sched/rte_sched.c:56:23: error: > >>>>immintrin.h: No such file or directory > >>>> > >>>> To avoid this issue, a gcc version check is need and a flag to indicate > >>>> vector ablility. > >>> [...] > >>>> +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > >>>> + > >>>> +#if defined(__AVX__) > >>>> #include > >>>> +#define SCHED_VECTOR_ENABLE > >>>> +#endif > >>>> + > >>>> +#else > >>>> + > >>>> +#include > >>>> +#define SCHED_VECTOR_ENABLE > >>>> + > >>>> +#endif > >>> This kind of complication is managed by EAL. > >>> I think we should include rte_vect.h. > >> > >> As I know here it needs a flag to identify whether the platform support > >> AVX, if not it will not use it, so I don't know if we could only simply > >> include rte_vect.h? > > > > It's not exclusive. > > You can include rte_vect.h and check AVX to define SCHED_VECTOR_ENABLE. > >
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
really?I don't think so. AVX Marco only exist in the gcc version below 4.4, I still need to check if below or beyond 4.4 am I right? Thanks, Michael > ? 2015?11?275:01?Thomas Monjalon ??? > > 2015-11-27 02:26, Qiu, Michael: >>> On 2015/11/27 5:29, Thomas Monjalon wrote: >>> 2015-11-26 18:49, Michael Qiu: gcc 4.3.4 does not include "immintrin.h", and will post below error: lib/librte_sched/rte_sched.c:56:23: error: immintrin.h: No such file or directory To avoid this issue, a gcc version check is need and a flag to indicate vector ablility. >>> [...] +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) + +#if defined(__AVX__) #include +#define SCHED_VECTOR_ENABLE +#endif + +#else + +#include +#define SCHED_VECTOR_ENABLE + +#endif >>> This kind of complication is managed by EAL. >>> I think we should include rte_vect.h. >> >> As I know here it needs a flag to identify whether the platform support >> AVX, if not it will not use it, so I don't know if we could only simply >> include rte_vect.h? > > It's not exclusive. > You can include rte_vect.h and check AVX to define SCHED_VECTOR_ENABLE. >
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
2015-11-27 02:26, Qiu, Michael: > On 2015/11/27 5:29, Thomas Monjalon wrote: > > 2015-11-26 18:49, Michael Qiu: > >> gcc 4.3.4 does not include "immintrin.h", and will post below error: > >> lib/librte_sched/rte_sched.c:56:23: error: > >> immintrin.h: No such file or directory > >> > >> To avoid this issue, a gcc version check is need and a flag to indicate > >> vector ablility. > > [...] > >> +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > >> + > >> +#if defined(__AVX__) > >> #include > >> +#define SCHED_VECTOR_ENABLE > >> +#endif > >> + > >> +#else > >> + > >> +#include > >> +#define SCHED_VECTOR_ENABLE > >> + > >> +#endif > > This kind of complication is managed by EAL. > > I think we should include rte_vect.h. > > As I know here it needs a flag to identify whether the platform support > AVX, if not it will not use it, so I don't know if we could only simply > include rte_vect.h? It's not exclusive. You can include rte_vect.h and check AVX to define SCHED_VECTOR_ENABLE.
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
On 2015/11/27 5:29, Thomas Monjalon wrote: > 2015-11-26 18:49, Michael Qiu: >> gcc 4.3.4 does not include "immintrin.h", and will post below error: >> lib/librte_sched/rte_sched.c:56:23: error: >> immintrin.h: No such file or directory >> >> To avoid this issue, a gcc version check is need and a flag to indicate >> vector ablility. > [...] >> +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) >> + >> +#if defined(__AVX__) >> #include >> +#define SCHED_VECTOR_ENABLE >> +#endif >> + >> +#else >> + >> +#include >> +#define SCHED_VECTOR_ENABLE >> + >> +#endif > This kind of complication is managed by EAL. > I think we should include rte_vect.h. As I know here it needs a flag to identify whether the platform support AVX, if not it will not use it, so I don't know if we could only simply include rte_vect.h? Thanks, Michael > >
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
2015-11-26 18:49, Michael Qiu: > gcc 4.3.4 does not include "immintrin.h", and will post below error: > lib/librte_sched/rte_sched.c:56:23: error: > immintrin.h: No such file or directory > > To avoid this issue, a gcc version check is need and a flag to indicate > vector ablility. [...] > +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) > + > +#if defined(__AVX__) > #include > +#define SCHED_VECTOR_ENABLE > +#endif > + > +#else > + > +#include > +#define SCHED_VECTOR_ENABLE > + > +#endif This kind of complication is managed by EAL. I think we should include rte_vect.h.
[dpdk-dev] [PATCH] lib/librte_sched: Fix compile with gcc 4.3.4
gcc 4.3.4 does not include "immintrin.h", and will post below error: lib/librte_sched/rte_sched.c:56:23: error: immintrin.h: No such file or directory To avoid this issue, a gcc version check is need and a flag to indicate vector ablility. Signed-off-by: Michael Qiu --- lib/librte_sched/rte_sched.c | 16 +++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c index d47cfc2..780b314 100644 --- a/lib/librte_sched/rte_sched.c +++ b/lib/librte_sched/rte_sched.c @@ -53,7 +53,21 @@ #endif #ifdef RTE_SCHED_VECTOR + +#if (defined(__ICC) || (__GNUC__ == 4 && __GNUC_MINOR__ < 4)) + +#if defined(__AVX__) #include +#define SCHED_VECTOR_ENABLE +#endif + +#else + +#include +#define SCHED_VECTOR_ENABLE + +#endif + #endif #define RTE_SCHED_TB_RATE_CONFIG_ERR (1e-7) @@ -1667,7 +1681,7 @@ grinder_schedule(struct rte_sched_port *port, uint32_t pos) return 1; } -#ifdef RTE_SCHED_VECTOR +#ifdef SCHED_VECTOR_ENABLE static inline int grinder_pipe_exists(struct rte_sched_port *port, uint32_t base_pipe) -- 1.9.3