kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #34550
Re: MacOS + OpenMP
The purpose is it works on Mac.
But it does appear I misread the std::max( omp_get_num_procs(), 2 ) part.
Patch coming.
Cheers,
Jeff.
> On 1 Mar 2018, at 14:09, Tomasz Wlostowski <tomasz.wlostowski@xxxxxxx> wrote:
>
> 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
-
MacOS + OpenMP
From: Jon Evans, 2018-02-28
-
Re: MacOS + OpenMP
From: Jeff Young, 2018-02-28
-
Re: MacOS + OpenMP
From: Bernhard Stegmaier, 2018-03-01
-
Re: MacOS + OpenMP
From: Bernhard Stegmaier, 2018-03-01
-
Re: MacOS + OpenMP
From: Wayne Stambaugh, 2018-03-01
-
Re: MacOS + OpenMP
From: Jon Evans, 2018-03-01
-
Re: MacOS + OpenMP
From: Tomasz Wlostowski, 2018-03-01
-
Re: MacOS + OpenMP
From: Jeff Young, 2018-03-01
-
Re: MacOS + OpenMP
From: Jon Evans, 2018-03-01
-
Re: MacOS + OpenMP
From: Tomasz Wlostowski, 2018-03-01