That sounds good. From: manojgudi <manoj.p.g...@gmail.com> 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 <a...@ashtonmason.net> wrote: > Or call out code for specific architectures, including ARM and x86, but > default to nothing. > > > > On 29 July 2013 11:56, Philip Balister <phi...@balister.org> 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 <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 >> > >> > >
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio