<html><head></head><body><div>
           
    
    
      
        <meta charset="utf-8">
      
      
        <div id="compose-body-wrapper" dir="auto"><div dir="auto"><div dir="auto">Hello Martin,</div><div dir="auto">I'm trying to understand what you're saying but my background is in numerical methods where tasks are split into threads for acceleration purposes. If a single layer is rendered by a single core (as you write and I was observing), how would a 1,000 x 1,000 (or a 5,000 x 5,000) layer be handled? Wouldn't it take too long? (However, you want to define 'too long'). </div><div dir="auto">As far as more details about the process, the tensor 'var' (n x m x index where I have tried different combinations but let's say n x m is 100 x 200) of floating point numbers is manipulated according to the following pseudo-code:</div><div dir="auto"># Initial manipulations</div><div dir="auto">            dims = var.dimensions</div><div dir="auto">            shape = var.shape</div><div dir="auto">            driver_name = 'GTIFF'</div><div dir="auto">            driver = gdal.GetDriverByName(driver_name) </div><div dir="auto">            np_dtype = var.dtype</div><div dir="auto">            type_code = gdal_array.NumericTypeCodeToGDALTypeCode(np_dtype)</div><div dir="auto">            gdal_ds = driver.Create(_my_path_, cols, rows, 1, gdal.GDT_UInt16) </div><div dir="auto">            gdal_ds.SetProjection(_my_projection_)</div><div dir="auto">            gdal_ds.SetGeoTransform(_my_transformation_)</div><div dir="auto"># Creation of the bands and scaled matrix </div><div dir="auto">            band = gdal_ds.GetRasterBand(1) </div><div dir="auto">            data = var[_chosen_index_]</div><div dir="auto">            data = ma.getdata(data)</div><div dir="auto">            data_scaled =  np.interp(data, (data.min(), data.max()), (0, 255))</div><div dir="auto">            data_scaled2 = data_scaled.astype(int) # This is to rescale into integers so that it can color the layer</div><div dir="auto"># *** Lines to set up the color palette ***</div><div dir="auto"># Write the array to band once everything has been rescaled</div><div dir="auto">            band.WriteArray(data_scaled2)</div><div dir="auto">            gdal_ds.FlushCache()  </div><div dir="auto"><br></div><div dir="auto">This procedure seems to work well and takes a reasonable amount of time. Then, the time is consumed when doing the rendering itself. I'm not entirely sure what you mean by 'sub-optimal raster format' or 'thre are overviews missing' so I cannot address them specifically.</div><div dir="auto">Thanks,</div><div dir="auto">Arturo</div><div><br></div></div><div dir="auto"><br></div><div dir="auto" id="tmjah_g_1299"><br></div><br></div><div class="replyHeader" dir="auto">Martin Dobias wrote:</div><br><br><div><blockquote cite="mid:CAC2XbFdWLu-0VKRWYK-YF0XSN5FSoFHfX8Ztm6R6HTfcPa4MNw@mail.gmail.com" type="cite" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Hi<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 26, 2023 at 11:30 PM afernandez via QGIS-Developer <<a href="mailto:qgis-developer@lists.osgeo.org">qgis-developer@lists.osgeo.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div>
            
     
     
       
         
       
       
         <div id="m_-6129067434502316114compose-body-wrapper" dir="auto"><div dir="auto"><div dir="auto">Hello,</div><div dir="auto">One of my project would greatly 
benefit from a much faster rendering. After some testing, the bulk 
(>99%) of the time is spent at rendering the layer with 
QgsRasterLayer(...,...). What I have also noticed is that rendering time 
does not change with the number of cores, which suggests that the renderer 
might be using a single thread. I checked the API documentation but 
couldn't find anything about multithreading or some other procedure to 
accelerate rendering. I was wondering if anyone has any suggestion or has 
faced a similar difficulty. </div></div></div></div></div></blockquote></div><div class="gmail_quote"><br></div><div class="gmail_quote">Multi-threaded rendering is done at the granularity of whole map layers, so a single layer is rendered by a single CPU core. Therefore if you have just one layer that is slow to render, the multi-threading is not going to help. It is best to do some testing how you can improve the layer's rendering - for example, it could be that you are using some sub-optimal raster format, or there are overviews missing, or something else... one would need more details.</div><div class="gmail_quote"><br></div><div class="gmail_quote">Regards</div><div class="gmail_quote">Martin</div><div class="gmail_quote"><br></div></div></blockquote></div>
      
    
  
        </div></body></html>