<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hi Arturo,</p>
    <p>make sure you create overviews on your big rasters or QGIS will
      re-read the whole file all the time to render an appropriate
      representation in the map.</p>
    <p>Cheers, Hannes<br>
    </p>
    <div class="moz-cite-prefix">Am 30.05.23 um 04:35 schrieb afernandez
      via QGIS-Developer:<br>
    </div>
    <blockquote type="cite"
      cite="mid:e4867467c3728.ad83e8afff7c4@odyhpc.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <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"
                    moz-do-not-send="true" class="moz-txt-link-freetext">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>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
QGIS-Developer mailing list
<a class="moz-txt-link-abbreviated" href="mailto:QGIS-Developer@lists.osgeo.org">QGIS-Developer@lists.osgeo.org</a>
List info: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
Unsubscribe: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
</pre>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
Johannes Kröger / GIS-Entwickler/-Berater

---------------------------------------------
Aufwind durch Wissen!
Web-Seminare und Online-Schulungen
bei der <a class="moz-txt-link-abbreviated" href="http://www.foss-academy.com">www.foss-academy.com</a>
---------------------------------------------

WhereGroup GmbH
c/o KK03 GmbH
Lange Reihe 29
20099 Hamburg
Germany

Tel: +49 (0)228 / 90 90 38 - 36
Fax: +49 (0)228 / 90 90 38 - 11

<a class="moz-txt-link-abbreviated" href="mailto:johannes.kroeger@wheregroup.com">johannes.kroeger@wheregroup.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.wheregroup.com">www.wheregroup.com</a>
Geschäftsführer:
Olaf Knopp, Peter Stamm 
Amtsgericht Bonn, HRB 9885
-------------------------------
</pre>
  </body>
</html>