Using all processors



  • On 12/05/2014 at 12:03, xxxxxxxx wrote:

    With a python tag plugin, I'm calculating voxels, so a lot of polygon handing.
    Now I see that cinema is not using all processors (only 1 out of 4) on my Windows 7 machine.
    When rendering it uses all processors, but not with my python tag plugin.
     
    What to do, so that cinema will use all processors?



  • On 12/05/2014 at 12:58, xxxxxxxx wrote:

    It's a CPython Limitation, read up on the GIL and Multiprocessing in Python.

    -Niklas



  • On 13/05/2014 at 01:08, xxxxxxxx wrote:

    So, in C++ cinema uses uses all / more processors?
    -Pim



  • On 13/05/2014 at 01:36, xxxxxxxx wrote:

    Hi pgrooff

    I guess that´s why e.g. supervoxels was written in c++.

    http://www.remotion4d.net/redokuwiki/doku.php?id=supervoxels2013

    Funny, I also created a voxelizer in the past few days.

    cheers
    Martin



  • On 13/05/2014 at 06:07, xxxxxxxx wrote:

    Originally posted by xxxxxxxx

    Funny, I also created a voxelizer in the past few days.

    Yes, it is quite a challenge, but fun.
    The main challenge is to optimize, improve the algorithm step by step.
    I am doing a prototype in python and then port it to C++.

    One of the things I like to do with the voxels, is to explode volumetric objects.

    Also with "supervoxels" you have threading option / nr of cores options. 
    Very advanced and interesting. But I guess you can divide the processing in parts and assign that to different threads (processors?).

    I saw your new post sharing your voxelizer. Great thanks.
    I do not use particle, but straight forward cubes.

    -Pim



  • On 14/05/2014 at 01:39, xxxxxxxx wrote:

    I´ve never used threads before and I´m not sure if I understand this right.
    If I open a new thread in c4d, is it only a user thread and not a Kernel thread?
    Does that mean that I'm only working on one Kernel and I just delegate tasks to several User threads?

    And is this the right usage, cause within the function it says that I´m still using the Main thread?

      
    import c4d  
    from c4d.threading import C4DThread  
      
    class firstThread(c4d.threading.C4DThread) :  
      k=0  
      def func1(self,k) :  
          print  c4d.threading.GeIsMainThread(),"main"  
            
          for i in xrange(1,8000) :  
              x=1000000/i  
                
              for j in xrange(1,1000) :  
                  y=1000000/j  
                  k=x*y  
          print c.IsRunning(),"first inside"                      
          return k  
        
    class secondThread(c4d.threading.C4DThread) :  
      o=0  
      def func2(self,o) :  
          print  c4d.threading.GeIsMainThread(),"main"  
          for i in xrange(1,8000) :  
              x=1000000/i  
                
              for j in xrange(1,1000) :  
                  y=1000000/j  
                  o=x*y  
                                 
          return o  
      
        
    c= firstThread()  
    d= secondThread()  
      
    #Start Threads      
    c.Start()  
    k= 0  
    print c.IsRunning(),"first"  
      
    k= c.func1(op)   
    d.Start()  
    o= 0  
    print d.IsRunning(),"second"  
    o= d.func2(op)  
      
    c.End()  
    d.End()  
    print o+k  
    

    Martin


Log in to reply