discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Manoj Gudi
Subject: Re: [Discuss-gnuradio] GRAS build error on armv7
Date: Mon, 29 Jul 2013 17:01:48 +0530

That sounds good.

From: manojgudi <address@hidden>
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 <address@hidden> wrote:
Or call out code for specific architectures, including ARM and x86, but default to nothing.



On 29 July 2013 11:56, Philip Balister <address@hidden> 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 <address@hidden> wrote:
>
>> Thanks Manoj!
>>
>>
>>
>> On 27 July 2013 05:16, Manoj Gudi <address@hidden> 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 <address@hidden>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 <address@hidden> 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        : 0000
>>>>>> Serial          : 0000000000000000
>>>>>> *
>>>>>> OS version: Linaro image 13.06
>>>>>> Kernel: linux-sunxi 3.0.62+
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]