kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #34544
Re: MacOS + OpenMP
-
To:
Jon Evans <jon@xxxxxxxxxxxxx>, Jeff Young <jeff@xxxxxxxxx>
-
From:
Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx>
-
Date:
Thu, 1 Mar 2018 15:09:56 +0100
-
Authentication-results:
spf=pass (sender IP is 188.184.36.48) smtp.mailfrom=cern.ch; lists.launchpad.net; dkim=none (message not signed) header.d=none;lists.launchpad.net; dmarc=bestguesspass action=none header.from=cern.ch;
-
Cc:
KiCad Developers <kicad-developers@xxxxxxxxxxxxxxxxxxx>
-
In-reply-to:
<CA+qGbCDAtbkmNug9v8ymU7n85xLCn_rVY9Zh-Y7Lp6JDs=Th4w@mail.gmail.com>
-
Spamdiagnosticmetadata:
NSPM
-
Spamdiagnosticoutput:
1:99
-
User-agent:
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0
On 01/03/18 15:01, Jon Evans wrote:
> I missed that change to STL, oops!
> In that case we should standardize on STL for all new code in the future
> so that it will work on Mac.
Me too.
I don't understand the purpose of it - now all zone calculation (except
for insulated copper island removal) works in a *single* worker thread
(the main thread is just refreshing the progress dialog).
It means ~3.5x slower zone refilling on a 4-core CPU.
Can anybody comment on that?
Tom
> There are already many edge cases I have found (or users have reported)
> where KiCad is extremely slow, and we need to have a good story for
> multiprocessing so that we can take advantage of it where it makes sense
> to increase performance and/or responsiveness.
>
> -Jon
>
> On Thu, Mar 1, 2018 at 8:48 AM, Jeff Young <jeff@xxxxxxxxx
> <mailto:jeff@xxxxxxxxx>> wrote:
>
> There’s performance and there’s responsiveness.
>
> The footprint loading and zone filling were moved to STL so that
> progress reporting would work on Mac.
>
> As long as we don’t introduce more OpenMP into core stuff, I’m not
> that fixated on what we use for raytracing.
>
> Cheers,
> Jeff.
>
>
>> On 1 Mar 2018, at 13:34, Tomasz Wlostowski
>> <tomasz.wlostowski@xxxxxxx <mailto:tomasz.wlostowski@xxxxxxx>> wrote:
>>
>> On 01/03/18 14:29, Jon Evans wrote:
>>> It is also used for zone filling and in my new eeschema connectivity
>>> code that I'm hoping to get merged soon after V5 release.
>>>
>>> I'm happy to help with research / testing of alternatives if we can't
>>> use OpenMP on Mac.
>>>
>> I'd like to hear from a *single* Apple user who designs boards of
>> sufficient complexity for the multithreading to really have an
>> impact on
>> performance. What's next, rewriting Kicad in Objective-C?
>>
>> - my 5 cents
>>
>> Tom
>>
>>
>>> Jon
>>>
>>> On Thu, Mar 1, 2018, 08:26 Wayne Stambaugh <stambaughw@xxxxxxxxx
>>> <mailto:stambaughw@xxxxxxxxx>
>>> <mailto:stambaughw@xxxxxxxxx>> wrote:
>>>
>>> Ughh! Thank you Apple. I'm not opposed to this idea if
>>> OpenMP isn't a
>>> viable option on macos. I would like to see our macos port be
>>> on par
>>> with linux and windows ports.
>>>
>>> Wayne
>>>
>>> On 3/1/2018 8:20 AM, Bernhard Stegmaier wrote:
>>>> I did look around a bit.
>>>> Looks like OpenMP isn’t a friend of Xcode clang, because Apple
>>>> has its
>>>> own Grand Central Dispatch (libdispatch) implementation/library
>>>> doing
>>>> similar things (at first glance, didn’t look into details).
>>>> So, I guess OpenMP maybe won’t happen soon with stock toolchain
>>>> or we
>>>> would have to use non-stock toolchain (probably with all
>>>> problems that
>>>> come with that - I have seen bad things mixing compilers, etc.).
>>>>
>>>> Seems to be quite easy to convert OpenMP for loop parallelisation
>>> to GCD:
>>>> <<<
>>>> //#pragma omp parallel for
>>>> //for( signed int i = 0; i < aPolySet.OutlineCount(); ++i )
>>>> dispatch_queue_t queue =
>>>> dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
>>>> dispatch_apply(aPolySet.OutlineCount(), queue, ^(size_t i)
>>>> {
>>>> ...
>>>> }
>>>> );
>>>>>>>
>>>>
>>>> I just naively replaced all of the OpenMP for loops like above
>>>> and now
>>>> 3d-Viewer uses all cores.
>>>> On my i7-3770T rendering time decreased from about 100s to 30s.
>>>>
>>>> I also did it for the ratsnest loop but didn’t notice any difference
>>>> (maybe my test PCB was just to small).
>>>>
>>>> I could play around a bit to put that stuff into some nice syntax
>>> maybe
>>>> similar to what Microsoft has with concurrency::parallel_for_each
>>>> https://msdn.microsoft.com/en-us/library/dd492857.aspx
>>>> <https://msdn.microsoft.com/en-us/library/dd492857.aspx>
>>>> So, at least ugly #ifdef around each parallel for loop could be
>>> hidden.
>>>>
>>>> Don’t get me wrong, I don’t want to add just another parallelisation
>>>> library/mechanism.
>>>> And… I guess it won’t be possible to transparently cover all the
>>> OpenMP
>>>> pragma stuff maybe needed inside for loop body or maybe other stuff
>>>> needed for GCD (e.g. when writing to variables outside for body).
>>>>
>>>> Thoughts? Would this be an option?
>>>>
>>>> Oh, yes:
>>>> I did look into using STL std::async.
>>>> Doesn’t seem to be a good idea, because it usually doesn’t seem
>>>> to use
>>>> anything like thread pools, etc. on various platforms.
>>>> You probably don’t want to create that much threads… :)
>>>>
>>>>
>>>> Regards,
>>>> Bernhard
>>>>
>>>>> On 1. Mar 2018, at 08:40, Bernhard Stegmaier
>>> <stegmaier@xxxxxxxxxxxxx
>>> <mailto:stegmaier@xxxxxxxxxxxxx> <mailto:stegmaier@xxxxxxxxxxxxx
>>> <mailto:stegmaier@xxxxxxxxxxxxx>>
>>>>> <mailto:stegmaier@xxxxxxxxxxxxx <mailto:stegmaier@xxxxxxxxxxxxx>
>>> <mailto:stegmaier@xxxxxxxxxxxxx
>>> <mailto:stegmaier@xxxxxxxxxxxxx>>>> wrote:
>>>>>
>>>>> I had a quick look where OpenMP is used.
>>>>>
>>>>> I found it somewhere in the connectivity/ratsnest code.
>>>>> I don’t know of any complaints in that area and even on my old HW I
>>>>> had never a bad experience.
>>>>>
>>>>> And then, 3D-Viewer.
>>>>>
>>>>> So, in my opinion it is basically only about 3D-Viewer… I don’t
>>>>> know
>>>>> if user experience will be that bad without OpenMP.
>>>>> IMHO it’s only the Raytracing view, which isn’t intended to be used
>>>>> for normal viewing stuff anyway.
>>>>>
>>>>> If I find some time over the weekend I will also try… but I don’t
>>>>> think it will be worth it.
>>>>>
>>>>>
>>>>> Regards,
>>>>> Bernhard
>>>>>
>>>>>> On 1. Mar 2018, at 00:50, Jeff Young <jeff@xxxxxxxxx
>>>>>> <mailto:jeff@xxxxxxxxx>
>>> <mailto:jeff@xxxxxxxxx>
>>>>>> <mailto:jeff@xxxxxxxxx ;<mailto:jeff@xxxxxxxxx
>>>>>> <mailto:jeff@xxxxxxxxx>>>> wrote:
>>>>>>
>>>>>> Or rip it out and use STL?
>>>>>>
>>>>>>> On 28 Feb 2018, at 23:38, Jon Evans <jon@xxxxxxxxxxxxx
>>>>>>> <mailto:jon@xxxxxxxxxxxxx>
>>> <mailto:jon@xxxxxxxxxxxxx>
>>>>>>> <mailto:jon@xxxxxxxxxxxxx ;<mailto:jon@xxxxxxxxxxxxx
>>>>>>> <mailto:jon@xxxxxxxxxxxxx>>>> wrote:
>>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>> Does anyone have a working build setup for getting OpenMP-enabled
>>>>>>> KiCad out of MacOS?
>>>>>>> If so, please share how -- I tried for a bit but couldn't get it
>>>>>>> going (I'm not super familiar with the MacOS toolchain yet).
>>>>>>>
>>>>>>> We should make sure that the 5.0 release is built with OpenMP,
>>>>>>> otherwise our Mac users are going to have a slower user
>>>>>>> experience.
>>>>>>>
>>>>>>> -Jon
>>>>>>> _______________________________________________
>>>>>>> Mailing list: https://launchpad.net/~kicad-developers
>>>>>>> <https://launchpad.net/~kicad-developers>
>>>>>>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>>
>>>>>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>>>>>> <https://launchpad.net/~kicad-developers>
>>>>>>> More help : https://help.launchpad.net/ListHelp
>>>>>>> <https://help.launchpad.net/ListHelp>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Mailing list: https://launchpad.net/~kicad-developers
>>>>>> <https://launchpad.net/~kicad-developers>
>>>>>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>>
>>>>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>>>>> <https://launchpad.net/~kicad-developers>
>>>>>> More help : https://help.launchpad.net/ListHelp
>>>>>> <https://help.launchpad.net/ListHelp>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Mailing list: https://launchpad.net/~kicad-developers
>>>>> <https://launchpad.net/~kicad-developers>
>>>>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>>
>>>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>>>> <https://launchpad.net/~kicad-developers>
>>>>> More help : https://help.launchpad.net/ListHelp
>>>>> <https://help.launchpad.net/ListHelp>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Mailing list: https://launchpad.net/~kicad-developers
>>>> <https://launchpad.net/~kicad-developers>
>>>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>>> <https://launchpad.net/~kicad-developers>
>>>> More help : https://help.launchpad.net/ListHelp
>>>> <https://help.launchpad.net/ListHelp>
>>>>
>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~kicad-developers
>>> <https://launchpad.net/~kicad-developers>
>>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>
>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>> <https://launchpad.net/~kicad-developers>
>>> More help : https://help.launchpad.net/ListHelp
>>> <https://help.launchpad.net/ListHelp>
>>>
>>>
>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~kicad-developers
>>> <https://launchpad.net/~kicad-developers>
>>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>> Unsubscribe : https://launchpad.net/~kicad-developers
>>> <https://launchpad.net/~kicad-developers>
>>> More help : https://help.launchpad.net/ListHelp
>>> <https://help.launchpad.net/ListHelp>
>>>
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~kicad-developers
>> <https://launchpad.net/~kicad-developers>
>> Post to : kicad-developers@xxxxxxxxxxxxxxxxxxx
>> <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>> Unsubscribe : https://launchpad.net/~kicad-developers
>> <https://launchpad.net/~kicad-developers>
>> More help : https://help.launchpad.net/ListHelp
>> <https://help.launchpad.net/ListHelp>
>
>
Follow ups
References