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 <a...@ashtonmason.net> wrote:

> Thanks Manoj!
>
>
>
> On 27 July 2013 05:16, Manoj Gudi <manoj.p.g...@gmail.com> 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 <a...@ashtonmason.net>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 <j...@joshknows.com> 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
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to