← Back to team overview

kicad-developers team mailing list archive

Re: Net names and net codes

 

Hi Maciej,

I will do very soon as well as send you a patch for my changes.

Carl


On Mon, Jan 27, 2014 at 5:47 AM, Maciej Sumiński <maciej.suminski@xxxxxxx>wrote:

> That is a good start, I hope we can get even more performance boost now.
> Could you please try the lp:~cern-kicad/kicad/ratsnest_threadsafe branch
> to check if it solves the problem with createDelaunay() function?
> It would be great if you shared your changes (especially if they crash the
> application), so I could test them as well and look for fixes.
>
> Regards,
> Orson
>
>
> On 01/24/2014 04:35 PM, Carl Poirier wrote:
>
>>
>> I think that we will have a very great speedup if each thread can have
>> its own Triangulation. Just by parallelizing the loop in
>> RN_DATA::recalculate() but going sequentially with one Triangulation, I
>> still have ~25% gain in calculation time.
>>
>> On Wed, Jan 22, 2014 at 2:59 PM, Maciej Sumiński
>> <maciej.suminski@xxxxxxx <mailto:maciej.suminski@xxxxxxx>> wrote:
>>
>>     Hi Carl,
>>
>>     Thank you for putting efforts to boost the performance of the
>> ratsnest.
>>     The function is brought by an external library
>>     (http://www.sintef.no/__Projectweb/Geometry-Toolkits/__TTL/
>>     <http://www.sintef.no/Projectweb/Geometry-Toolkits/TTL/>), I am not
>>
>>     sure what is exactly inside. The expected output should be a
>>     Delaunay triangulation of all nodes that are taken into account
>>     while computing ratsnest.
>>     The only issue I am aware of, is the function does not handle well
>>     empty containers, but it should not be the case right now.
>>
>>     Now, when I looked again to the source code, RN_DATA is derived
>>     after hed::Node class (include/ttl/halfedge/__hetriang.h), which
>>
>>     contains a static field. Another thing is (I believe this is the
>>     main source of troubles) static hed::Triangulation
>>     (include/ttl/halfedge/__hetraits.h:73).
>>
>>     Sorry that I did not say about that before, but I have just
>>     discovered that it is done that way. I will try to change it, but
>>     unfortunately there are little chances that I manage to do that
>>     before Sunday.
>>
>>     Regards,
>>     Orson
>>
>>
>>
>>     On 01/22/2014 06:08 PM, Carl Poirier wrote:
>>
>>         Maciej,
>>
>>         Can you summarize to me how the function
>>         "Triangulation::__createDelaunay(
>>
>>         nodes.begin(), nodes.end() )" works, and what are the data
>>         structures
>>         involved?
>>
>>         I believe there are some dependencies in there.
>>
>>
>>         On Tue, Jan 21, 2014 at 4:05 PM, Cirilo Bernardo
>>         <cirilo_bernardo@xxxxxxxxx <mailto:cirilo_bernardo@xxxxxxxxx>
>>         <mailto:cirilo_bernardo@yahoo.__com
>>         <mailto:cirilo_bernardo@xxxxxxxxx>>> wrote:
>>
>>               >__________________________________
>>
>>               > From: Carl Poirier <carl.poirier.2@xxxxxxxxx
>>         <mailto:carl.poirier.2@xxxxxxxxx>
>>              <mailto:carl.poirier.2@gmail.__com
>>
>>         <mailto:carl.poirier.2@xxxxxxxxx>>>
>>               >To: Marco Serantoni <marco.serantoni@xxxxxxxxx
>>         <mailto:marco.serantoni@xxxxxxxxx>
>>              <mailto:marco.serantoni@gmail.__com
>>
>>         <mailto:marco.serantoni@xxxxxxxxx>>>
>>               >Cc: Kicad Developers
>>         <kicad-developers@lists.__launchpad.net
>>         <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>
>>              <mailto:kicad-developers@__lists.launchpad.net
>>
>>         <mailto:kicad-developers@xxxxxxxxxxxxxxxxxxx>>>
>>
>>               >Sent: Wednesday, January 22, 2014 3:51 AM
>>               >Subject: Re: [Kicad-developers] Net names and net codes
>>               >
>>               >
>>               >
>>               >There are some things in the code that don't like being
>>              multithreaded. If I parallelize the for loop in
>>              RN_DATA::Recalculate( int aNet ), I get a segfault. It does
>> not
>>              happen if I put a lock to the call updateNet( i ), but
>>         obviously
>>              there is no increase in performance. I'm trying to find out
>>         what's
>>              the problem now.
>>               >
>>               >
>>               >
>>              This sounds to me like data is being altered by different
>>         threads
>>              and possibly there is some memory reallocation happening
>>         (growing
>>              arrays, etc). Locks are only needed when there is contention
>>              somewhere and of course locks should only be held for as
>>         short as
>>              needed. Another pitfall with threading is that some
>>         variables may
>>              need to be declared 'volatile' if they can be altered in
>>         another
>>              thread while one function is executing. For example, let's
>>         say the
>>              variable 'bool someX' can be altered in 2 threads;
>>         something like
>>              this can happen:
>>
>>              1. FunctionA starts, and runs a loop while(!someX) { ... }
>>              2. FunctionB sets 'someX' to 'true'
>>              3. FunctionA continues to run the loop, which is not the
>>         intended
>>              behavior
>>
>>              Of course similar things can happen when using shared
>>         memory and
>>              forked processes.
>>
>>              Threading has other problems to watch out for - for
>>         example, are
>>              there any static variables in functions? If so then you
>> simply
>>              cannot thread those functions without locks.
>>
>>              - Cirilo
>>
>>
>>
>>
>>         _________________________________________________
>>         Mailing list: https://launchpad.net/~kicad-__developers
>>         <https://launchpad.net/~kicad-developers>
>>         Post to     : kicad-developers@lists.__launchpad.net
>>         <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>
>>
>>
>>
>>
>

References