[Discuss-gnuradio] GRAS build error on armv7

2013-07-26 Thread Manoj Gudi
We've been successful in building dependencies for gnuradio on armv7
platform, however while building GRAS, we got this error:

*Scanning dependencies of target gras
[ 13%] Building CXX object
lib/CMakeFiles/gras.dir/__/Theron/Theron/Receiver.cpp.o
[ 13%] Generating GrExtras_Ops.pyc
[ 13%] Generating GrExtras_Ops.pyo
make[2]: warning:  Clock skew detected.  Your build may be incomplete.
[ 13%] Built target pygen_python_grextras_da046
[ 13%] Swig source
/tmp/ccONtg2w.s: Assembler messages:
/tmp/ccONtg2w.s:3234: Error: bad instruction `pause'
/tmp/ccONtg2w.s:3243: Error: bad instruction `pause'
/tmp/ccONtg2w.s:3266: Error: bad instruction `pause'
/tmp/ccONtg2w.s:3275: Error: bad instruction `pause'
/tmp/ccONtg2w.s:3406: Error: bad instruction `pause'
/tmp/ccONtg2w.s:3415: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4479: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4488: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4511: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4520: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4540: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4549: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4677: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4686: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4735: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4744: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4816: Error: bad instruction `pause'
/tmp/ccONtg2w.s:4825: Error: bad instruction `pause'
make[2]: Warning: File `/usr/include/python2.7/Python.h' has modification
time 4.1e+08 s in the future
[ 13%] Building CXX object
PMC/python/PMC/CMakeFiles/_PMCBool.dir/PMCBoolPYTHON_wrap.cxx.o
/home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx: In function
'void SWIG_InitializeModule(void*)':
/home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx:3433:21:
warning: statement has no effect [-Wunused-value]
*

In my opinion this is an assembler issue for armV7, but I've got no leads
on how to solve this. Will mapping this instruction with an equivalent
assembly instruction for armV7 work?

Here's /proc/cpuinfo
*$ cat /proc/cpuinfo
Processor   : ARMv7 Processor rev 2 (v7l)
BogoMIPS: 1001.88
Features: swp half thumb fastmult vfp edsp neon vfpv3
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x3
CPU part: 0xc08
CPU revision: 2

Hardware: sun5i
Revision: 
Serial  : 
*
OS version: Linaro image 13.06
Kernel: linux-sunxi 3.0.62+
___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


Re: [Discuss-gnuradio] GRAS build error on armv7

2013-07-26 Thread Josh Blum


On 07/26/2013 07:57 AM, Manoj Gudi wrote:
> We've been successful in building dependencies for gnuradio on armv7
> platform, however while building GRAS, we got this error:
> 

This line is probably the culprit.
https://github.com/captaintrash/theron/blob/master/Include/Theron/Detail/Threading/Utils.h#L163

The thread pools can operate on condition variables or spin locks. For
the spin lock implementation, there is a "pause" instruction --
obviously not applicable on arm. I think you can simply comment this out
to get things rolling.

Supposing this is the issue. What is the recommended fix... just a
simple #ifdef __X86_64__ around this line?

-josh

> *Scanning dependencies of target gras
> [ 13%] Building CXX object
> lib/CMakeFiles/gras.dir/__/Theron/Theron/Receiver.cpp.o
> [ 13%] Generating GrExtras_Ops.pyc
> [ 13%] Generating GrExtras_Ops.pyo
> make[2]: warning:  Clock skew detected.  Your build may be incomplete.
> [ 13%] Built target pygen_python_grextras_da046
> [ 13%] Swig source
> /tmp/ccONtg2w.s: Assembler messages:
> /tmp/ccONtg2w.s:3234: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:3243: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:3266: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:3275: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:3406: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:3415: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4479: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4488: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4511: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4520: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4540: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4549: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4677: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4686: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4735: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4744: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4816: Error: bad instruction `pause'
> /tmp/ccONtg2w.s:4825: Error: bad instruction `pause'
> make[2]: Warning: File `/usr/include/python2.7/Python.h' has modification
> time 4.1e+08 s in the future
> [ 13%] Building CXX object
> PMC/python/PMC/CMakeFiles/_PMCBool.dir/PMCBoolPYTHON_wrap.cxx.o
> /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx: In function
> 'void SWIG_InitializeModule(void*)':
> /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx:3433:21:
> warning: statement has no effect [-Wunused-value]
> *
> 
> In my opinion this is an assembler issue for armV7, but I've got no leads
> on how to solve this. Will mapping this instruction with an equivalent
> assembly instruction for armV7 work?
> 
> Here's /proc/cpuinfo
> *$ cat /proc/cpuinfo
> Processor   : ARMv7 Processor rev 2 (v7l)
> BogoMIPS: 1001.88
> Features: swp half thumb fastmult vfp edsp neon vfpv3
> CPU implementer : 0x41
> CPU architecture: 7
> CPU variant : 0x3
> CPU part: 0xc08
> CPU revision: 2
> 
> Hardware: sun5i
> Revision: 
> Serial  : 
> *
> OS version: Linaro image 13.06
> Kernel: linux-sunxi 3.0.62+
> 

___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


Re: [Discuss-gnuradio] GRAS build error on armv7

2013-07-26 Thread Manoj Gudi
Yes I'll work on it and send you a patch with conditional preprocessors.


On Sat, Jul 27, 2013 at 3:06 AM, Ashton Mason  wrote:

> Hi guys
>
> Yes that line is no doubt the culprit; The 'pause' is intended to help
> prevent a spinning thread from burning a core that could be used instead by
> another thread (or hyperthread). I'm not sure what the equivalent is on ARM
> processors (if any).
>
> Certainly commenting it out is one easy way around it; the #ifdef
> __X86_64__ seems reasonable; there might even be an ARM equivalent we could
> conditionally use instead.
>
> Ash
>
>
>
> On 26 July 2013 20:29, Josh Blum  wrote:
>
>>
>>
>> On 07/26/2013 07:57 AM, Manoj Gudi wrote:
>> > We've been successful in building dependencies for gnuradio on armv7
>> > platform, however while building GRAS, we got this error:
>> >
>>
>> This line is probably the culprit.
>>
>> https://github.com/captaintrash/theron/blob/master/Include/Theron/Detail/Threading/Utils.h#L163
>>
>> The thread pools can operate on condition variables or spin locks. For
>> the spin lock implementation, there is a "pause" instruction --
>> obviously not applicable on arm. I think you can simply comment this out
>> to get things rolling.
>>
>> Supposing this is the issue. What is the recommended fix... just a
>> simple #ifdef __X86_64__ around this line?
>>
>> -josh
>>
>> > *Scanning dependencies of target gras
>> > [ 13%] Building CXX object
>> > lib/CMakeFiles/gras.dir/__/Theron/Theron/Receiver.cpp.o
>> > [ 13%] Generating GrExtras_Ops.pyc
>> > [ 13%] Generating GrExtras_Ops.pyo
>> > make[2]: warning:  Clock skew detected.  Your build may be incomplete.
>> > [ 13%] Built target pygen_python_grextras_da046
>> > [ 13%] Swig source
>> > /tmp/ccONtg2w.s: Assembler messages:
>> > /tmp/ccONtg2w.s:3234: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:3243: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:3266: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:3275: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:3406: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:3415: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4479: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4488: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4511: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4520: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4540: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4549: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4677: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4686: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4735: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4744: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4816: Error: bad instruction `pause'
>> > /tmp/ccONtg2w.s:4825: Error: bad instruction `pause'
>> > make[2]: Warning: File `/usr/include/python2.7/Python.h' has
>> modification
>> > time 4.1e+08 s in the future
>> > [ 13%] Building CXX object
>> > PMC/python/PMC/CMakeFiles/_PMCBool.dir/PMCBoolPYTHON_wrap.cxx.o
>> > /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx: In
>> function
>> > 'void SWIG_InitializeModule(void*)':
>> > /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx:3433:21:
>> > warning: statement has no effect [-Wunused-value]
>> > *
>> >
>> > In my opinion this is an assembler issue for armV7, but I've got no
>> leads
>> > on how to solve this. Will mapping this instruction with an equivalent
>> > assembly instruction for armV7 work?
>> >
>> > Here's /proc/cpuinfo
>> > *$ cat /proc/cpuinfo
>> > Processor   : ARMv7 Processor rev 2 (v7l)
>> > BogoMIPS: 1001.88
>> > Features: swp half thumb fastmult vfp edsp neon vfpv3
>> > CPU implementer : 0x41
>> > CPU architecture: 7
>> > CPU variant : 0x3
>> > CPU part: 0xc08
>> > CPU revision: 2
>> >
>> > Hardware: sun5i
>> > Revision: 
>> > Serial  : 
>> > *
>> > OS version: Linaro image 13.06
>> > Kernel: linux-sunxi 3.0.62+
>> >
>>
>
>
___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio


Re: [Discuss-gnuradio] GRAS build error on armv7

2013-07-29 Thread Manoj Gudi
There is no equivalent instruction of pause in ARM that hints the following
loop is a spin-lock loop; However I just mapped pause into NOP and its not
throwing an error (yet)  :D

Here's the diff:

diff --git a/Include/Theron/Detail/Threading/Utils.h
b/Include/Theron/Detail/Threading/Utils.h
index 8c6baf2..76947c7 100644
--- a/Include/Theron/Detail/Threading/Utils.h
+++ b/Include/Theron/Detail/Threading/Utils.h
@@ -168,8 +168,12 @@ THERON_FORCEINLINE void Utils::YieldToHyperthread()
 YieldProcessor();

 #elif THERON_GCC
+   #ifdef __arm__
+   __asm__ __volatile__ ("NOP");
+   #else
+   __asm__ __volatile__("pause");
+   #endif

-__asm__ __volatile__ ("pause");

 #endif



Can anybody comment on performance degradation?


On Sun, Jul 28, 2013 at 8:37 PM, Ashton Mason  wrote:

> Thanks Manoj!
>
>
>
> On 27 July 2013 05:16, Manoj Gudi  wrote:
>
>> Yes I'll work on it and send you a patch with conditional preprocessors.
>>
>>
>> On Sat, Jul 27, 2013 at 3:06 AM, Ashton Mason wrote:
>>
>>> Hi guys
>>>
>>> Yes that line is no doubt the culprit; The 'pause' is intended to help
>>> prevent a spinning thread from burning a core that could be used instead by
>>> another thread (or hyperthread). I'm not sure what the equivalent is on ARM
>>> processors (if any).
>>>
>>> Certainly commenting it out is one easy way around it; the #ifdef
>>> __X86_64__ seems reasonable; there might even be an ARM equivalent we could
>>> conditionally use instead.
>>>
>>> Ash
>>>
>>>
>>>
>>> On 26 July 2013 20:29, Josh Blum  wrote:
>>>


 On 07/26/2013 07:57 AM, Manoj Gudi wrote:
 > We've been successful in building dependencies for gnuradio on armv7
 > platform, however while building GRAS, we got this error:
 >

 This line is probably the culprit.

 https://github.com/captaintrash/theron/blob/master/Include/Theron/Detail/Threading/Utils.h#L163

 The thread pools can operate on condition variables or spin locks. For
 the spin lock implementation, there is a "pause" instruction --
 obviously not applicable on arm. I think you can simply comment this out
 to get things rolling.

 Supposing this is the issue. What is the recommended fix... just a
 simple #ifdef __X86_64__ around this line?

 -josh

 > *Scanning dependencies of target gras
 > [ 13%] Building CXX object
 > lib/CMakeFiles/gras.dir/__/Theron/Theron/Receiver.cpp.o
 > [ 13%] Generating GrExtras_Ops.pyc
 > [ 13%] Generating GrExtras_Ops.pyo
 > make[2]: warning:  Clock skew detected.  Your build may be incomplete.
 > [ 13%] Built target pygen_python_grextras_da046
 > [ 13%] Swig source
 > /tmp/ccONtg2w.s: Assembler messages:
 > /tmp/ccONtg2w.s:3234: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:3243: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:3266: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:3275: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:3406: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:3415: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4479: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4488: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4511: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4520: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4540: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4549: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4677: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4686: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4735: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4744: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4816: Error: bad instruction `pause'
 > /tmp/ccONtg2w.s:4825: Error: bad instruction `pause'
 > make[2]: Warning: File `/usr/include/python2.7/Python.h' has
 modification
 > time 4.1e+08 s in the future
 > [ 13%] Building CXX object
 > PMC/python/PMC/CMakeFiles/_PMCBool.dir/PMCBoolPYTHON_wrap.cxx.o
 > /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx: In
 function
 > 'void SWIG_InitializeModule(void*)':
 > /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx:3433:21:
 > warning: statement has no effect [-Wunused-value]
 > *
 >
 > In my opinion this is an assembler issue for armV7, but I've got no
 leads
 > on how to solve this. Will mapping this instruction with an equivalent
 > assembly instruction for armV7 work?
 >
 > Here's /proc/cpuinfo
 > *$ cat /proc/cpuinfo
 > Processor   : ARMv7 Processor rev 2 (v7l)
 > BogoMIPS: 1001.88
 > Features: swp half thumb fastmult vfp edsp neon vfpv3
 > CPU implementer : 0x41
 > CPU architecture: 7
 > CPU variant : 0x3
 > CPU part: 0xc08
 > CPU revision: 2
 >
 > Hardware: sun5i
 > Revision: 
 > Serial  : 000

Re: [Discuss-gnuradio] GRAS build error on armv7

2013-07-29 Thread Philip Balister
On 07/29/2013 09:08 AM, Manoj Gudi wrote:
> There is no equivalent instruction of pause in ARM that hints the following
> loop is a spin-lock loop; However I just mapped pause into NOP and its not
> throwing an error (yet)  :D

Wny not only insert the asm for x86 and no code for all other archs.
This patch will break on PPC and other non x86 archs.

Philip

> 
> Here's the diff:
> 
> diff --git a/Include/Theron/Detail/Threading/Utils.h
> b/Include/Theron/Detail/Threading/Utils.h
> index 8c6baf2..76947c7 100644
> --- a/Include/Theron/Detail/Threading/Utils.h
> +++ b/Include/Theron/Detail/Threading/Utils.h
> @@ -168,8 +168,12 @@ THERON_FORCEINLINE void Utils::YieldToHyperthread()
>  YieldProcessor();
> 
>  #elif THERON_GCC
> +   #ifdef __arm__
> +   __asm__ __volatile__ ("NOP");
> +   #else
> +   __asm__ __volatile__("pause");
> +   #endif
> 
> -__asm__ __volatile__ ("pause");
> 
>  #endif
> 
> 
> 
> Can anybody comment on performance degradation?
> 
> 
> On Sun, Jul 28, 2013 at 8:37 PM, Ashton Mason  wrote:
> 
>> Thanks Manoj!
>>
>>
>>
>> On 27 July 2013 05:16, Manoj Gudi  wrote:
>>
>>> Yes I'll work on it and send you a patch with conditional preprocessors.
>>>
>>>
>>> On Sat, Jul 27, 2013 at 3:06 AM, Ashton Mason wrote:
>>>
 Hi guys

 Yes that line is no doubt the culprit; The 'pause' is intended to help
 prevent a spinning thread from burning a core that could be used instead by
 another thread (or hyperthread). I'm not sure what the equivalent is on ARM
 processors (if any).

 Certainly commenting it out is one easy way around it; the #ifdef
 __X86_64__ seems reasonable; there might even be an ARM equivalent we could
 conditionally use instead.

 Ash



 On 26 July 2013 20:29, Josh Blum  wrote:

>
>
> On 07/26/2013 07:57 AM, Manoj Gudi wrote:
>> We've been successful in building dependencies for gnuradio on armv7
>> platform, however while building GRAS, we got this error:
>>
>
> This line is probably the culprit.
>
> https://github.com/captaintrash/theron/blob/master/Include/Theron/Detail/Threading/Utils.h#L163
>
> The thread pools can operate on condition variables or spin locks. For
> the spin lock implementation, there is a "pause" instruction --
> obviously not applicable on arm. I think you can simply comment this out
> to get things rolling.
>
> Supposing this is the issue. What is the recommended fix... just a
> simple #ifdef __X86_64__ around this line?
>
> -josh
>
>> *Scanning dependencies of target gras
>> [ 13%] Building CXX object
>> lib/CMakeFiles/gras.dir/__/Theron/Theron/Receiver.cpp.o
>> [ 13%] Generating GrExtras_Ops.pyc
>> [ 13%] Generating GrExtras_Ops.pyo
>> make[2]: warning:  Clock skew detected.  Your build may be incomplete.
>> [ 13%] Built target pygen_python_grextras_da046
>> [ 13%] Swig source
>> /tmp/ccONtg2w.s: Assembler messages:
>> /tmp/ccONtg2w.s:3234: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:3243: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:3266: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:3275: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:3406: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:3415: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4479: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4488: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4511: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4520: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4540: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4549: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4677: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4686: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4735: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4744: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4816: Error: bad instruction `pause'
>> /tmp/ccONtg2w.s:4825: Error: bad instruction `pause'
>> make[2]: Warning: File `/usr/include/python2.7/Python.h' has
> modification
>> time 4.1e+08 s in the future
>> [ 13%] Building CXX object
>> PMC/python/PMC/CMakeFiles/_PMCBool.dir/PMCBoolPYTHON_wrap.cxx.o
>> /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx: In
> function
>> 'void SWIG_InitializeModule(void*)':
>> /home/aakash/gras/build/PMC/python/PMC/PMCBoolPYTHON_wrap.cxx:3433:21:
>> warning: statement has no effect [-Wunused-value]
>> *
>>
>> In my opinion this is an assembler issue for armV7, but I've got no
> leads
>> on how to solve this. Will mapping this instruction with an equivalent
>> assembly instruction for armV7 work?
>>
>> Here's /proc/cpuinfo
>> *$ cat /proc/cpuinfo
>> Processor   : ARMv7 Processor rev 2 (v7l)
>> BogoMIPS: 1001.88
>> Features  

Re: [Discuss-gnuradio] GRAS build error on armv7

2013-07-29 Thread Manoj Gudi
That sounds good.

From: manojgudi 
Date: Mon, 29 Jul 2013 17:00:35 +0530
Subject: [PATCH] fixed ASM

---
 Include/Theron/Detail/Threading/Utils.h |7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/Include/Theron/Detail/Threading/Utils.h
b/Include/Theron/Detail/Threading/Utils.h
index 8c6baf2..e2811f1 100644
--- a/Include/Theron/Detail/Threading/Utils.h
+++ b/Include/Theron/Detail/Threading/Utils.h
@@ -168,8 +168,11 @@ THERON_FORCEINLINE void Utils::YieldToHyperthread()
 YieldProcessor();

 #elif THERON_GCC
-
-__asm__ __volatile__ ("pause");
+#ifdef __arm__
+__asm__ __volatile__ ("NOP");
+#elif __X86_64__
+   __asm__ __volatile__("pause");
+#endif

 #endif

-- 
1.7.9.5



On Mon, Jul 29, 2013 at 4:31 PM, Ashton Mason  wrote:

> Or call out code for specific architectures, including ARM and x86, but
> default to nothing.
>
>
>
> On 29 July 2013 11:56, Philip Balister  wrote:
>
>> On 07/29/2013 09:08 AM, Manoj Gudi wrote:
>> > There is no equivalent instruction of pause in ARM that hints the
>> following
>> > loop is a spin-lock loop; However I just mapped pause into NOP and its
>> not
>> > throwing an error (yet)  :D
>>
>> Wny not only insert the asm for x86 and no code for all other archs.
>> This patch will break on PPC and other non x86 archs.
>>
>> Philip
>>
>> >
>> > Here's the diff:
>> >
>> > diff --git a/Include/Theron/Detail/Threading/Utils.h
>> > b/Include/Theron/Detail/Threading/Utils.h
>> > index 8c6baf2..76947c7 100644
>> > --- a/Include/Theron/Detail/Threading/Utils.h
>> > +++ b/Include/Theron/Detail/Threading/Utils.h
>> > @@ -168,8 +168,12 @@ THERON_FORCEINLINE void Utils::YieldToHyperthread()
>> >  YieldProcessor();
>> >
>> >  #elif THERON_GCC
>> > +   #ifdef __arm__
>> > +   __asm__ __volatile__ ("NOP");
>> > +   #else
>> > +   __asm__ __volatile__("pause");
>> > +   #endif
>> >
>> > -__asm__ __volatile__ ("pause");
>> >
>> >  #endif
>> >
>> >
>> >
>> > Can anybody comment on performance degradation?
>> >
>> >
>> > On Sun, Jul 28, 2013 at 8:37 PM, Ashton Mason 
>> wrote:
>> >
>> >> Thanks Manoj!
>> >>
>> >>
>> >>
>> >> On 27 July 2013 05:16, Manoj Gudi  wrote:
>> >>
>> >>> Yes I'll work on it and send you a patch with conditional
>> preprocessors.
>> >>>
>> >>>
>> >>> On Sat, Jul 27, 2013 at 3:06 AM, Ashton Mason > >wrote:
>> >>>
>>  Hi guys
>> 
>>  Yes that line is no doubt the culprit; The 'pause' is intended to
>> help
>>  prevent a spinning thread from burning a core that could be used
>> instead by
>>  another thread (or hyperthread). I'm not sure what the equivalent is
>> on ARM
>>  processors (if any).
>> 
>>  Certainly commenting it out is one easy way around it; the #ifdef
>>  __X86_64__ seems reasonable; there might even be an ARM equivalent
>> we could
>>  conditionally use instead.
>> 
>>  Ash
>> 
>> 
>> 
>>  On 26 July 2013 20:29, Josh Blum  wrote:
>> 
>> >
>> >
>> > On 07/26/2013 07:57 AM, Manoj Gudi wrote:
>> >> We've been successful in building dependencies for gnuradio on
>> armv7
>> >> platform, however while building GRAS, we got this error:
>> >>
>> >
>> > This line is probably the culprit.
>> >
>> >
>> https://github.com/captaintrash/theron/blob/master/Include/Theron/Detail/Threading/Utils.h#L163
>> >
>> > The thread pools can operate on condition variables or spin locks.
>> For
>> > the spin lock implementation, there is a "pause" instruction --
>> > obviously not applicable on arm. I think you can simply comment
>> this out
>> > to get things rolling.
>> >
>> > Supposing this is the issue. What is the recommended fix... just a
>> > simple #ifdef __X86_64__ around this line?
>> >
>> > -josh
>> >
>> >> *Scanning dependencies of target gras
>> >> [ 13%] Building CXX object
>> >> lib/CMakeFiles/gras.dir/__/Theron/Theron/Receiver.cpp.o
>> >> [ 13%] Generating GrExtras_Ops.pyc
>> >> [ 13%] Generating GrExtras_Ops.pyo
>> >> make[2]: warning:  Clock skew detected.  Your build may be
>> incomplete.
>> >> [ 13%] Built target pygen_python_grextras_da046
>> >> [ 13%] Swig source
>> >> /tmp/ccONtg2w.s: Assembler messages:
>> >> /tmp/ccONtg2w.s:3234: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:3243: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:3266: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:3275: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:3406: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:3415: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:4479: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:4488: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:4511: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:4520: Error: bad instruction `pause'
>> >> /tmp/ccONtg2w.s:4540: Error: bad instruction `pause'
>> >>>

Re: [Discuss-gnuradio] GRAS build error on armv7

2013-07-29 Thread Josh Blum


On 07/29/2013 07:31 AM, Manoj Gudi wrote:
> That sounds good.

I second that. Just ifdef the pause for the fix.

For a little extra information here. The thread pools in Theron can have
different yield strategies. GRAS happens to use by default the condition
variable strategy. So the code in question actually has zero impact at
runtime unless a spin lock yield is requested.

Beyond just compiling, in the near future, we will get to test questions
like. Which strategy works better on arm? And that yield code in
particular, what in particular would be most optimal for arm.

Some relevant links.
http://docs.theron-library.com/5.01/structTheron_1_1Framework_1_1Parameters.html
https://github.com/guruofquality/gras/wiki/Threading

-josh

> 
> From: manojgudi 
> Date: Mon, 29 Jul 2013 17:00:35 +0530
> Subject: [PATCH] fixed ASM
> 
> ---
>  Include/Theron/Detail/Threading/Utils.h |7 +--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/Include/Theron/Detail/Threading/Utils.h
> b/Include/Theron/Detail/Threading/Utils.h
> index 8c6baf2..e2811f1 100644
> --- a/Include/Theron/Detail/Threading/Utils.h
> +++ b/Include/Theron/Detail/Threading/Utils.h
> @@ -168,8 +168,11 @@ THERON_FORCEINLINE void Utils::YieldToHyperthread()
>  YieldProcessor();
> 
>  #elif THERON_GCC
> -
> -__asm__ __volatile__ ("pause");
> +#ifdef __arm__
> +__asm__ __volatile__ ("NOP");
> +#elif __X86_64__
> +   __asm__ __volatile__("pause");
> +#endif
> 
>  #endif
> 
> 
> 
> ___
> Discuss-gnuradio mailing list
> Discuss-gnuradio@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
> 

___
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio