<html><head></head><body><div class="ydp71fba53eyahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:13px;"><div></div>
        <div dir="ltr" data-setdir="false">Thanks everyone for the excellent suggestions. I think I've got enough to go off and experiment with. Now, does anyone know of a good profiling tool that works on MS Windows?</div><div dir="ltr" data-setdir="false"><br></div><ul><li>SBCL has what I need, but Windows support has always been problematic, and neither sb-profile nor sb-sprof work on Windows.</li><li>CCL has <a href="https://mr.gy/blog/sam.html" class="">sam</a>, but it only works on MacOS; the other CCL profilers appear to have bit-rot, or are Linux-specific.</li><li><a href="https://gitlab.common-lisp.net/dkochmanski/metering" class="">Metering </a>seems to be the best option I've found so far, but lacks CPU monitoring, and there doesn't appear to be a way to get the raw data, only the provided statistical summaries.</li></ul><div><br></div><div dir="ltr" data-setdir="false">Actually the time macro would be useful for this kind of profiling if it returned something useful in the second value, like a struct containing all the information it prints. I might try modifying that if nothing else turns up.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Does anyone know of a profiler that works on MS Windows?</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><br></div><div><br></div><div><br></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><br></div><div><br></div>
        
        </div><div id="yahoo_quoted_2639696044" class="yahoo_quoted">
            <div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
                
                <div>
                    On Thursday, October 24, 2019, 10:46:57 PM GMT+8, Tim Bradshaw <tfb@tfeb.org> wrote:
                </div>
                <div><br></div>
                <div><br></div>
                <div><div id="yiv4758091349"><div>On 24 Oct 2019, at 14:06, Steven Nunez <<a rel="nofollow" shape="rect" class="yiv4758091349" ymailto="mailto:steve_nunez@yahoo.com" target="_blank" href="mailto:steve_nunez@yahoo.com">steve_nunez@yahoo.com</a>> wrote:<br class="yiv4758091349" clear="none"><div><blockquote class="yiv4758091349" type="cite"><br class="yiv4758091349Apple-interchange-newline" clear="none"><div class="yiv4758091349"><span class="yiv4758091349" style="">(deftype simple-double-float-vector (&optional (length '*))</span><br class="yiv4758091349" style="" clear="none"><span class="yiv4758091349" style="">  "Simple vector of double-float elements."</span><br class="yiv4758091349" style="" clear="none"><span class="yiv4758091349" style="">  `(simple-array double-float (,length)))</span></div></blockquote></div><br class="yiv4758091349" clear="none"><div class="yiv4758091349"><br class="yiv4758091349" clear="none"></div><div class="yiv4758091349">One trick you could do to make claims about types which should be checked fairly fast (but, don't do this in an inner loop), if you have a list of things all of which you want to be of some good type, is</div><div class="yiv4758091349"><br class="yiv4758091349" clear="none"></div><div class="yiv4758091349">(coerce list-of-things '(vector good-type))</div><div class="yiv4758091349"><br class="yiv4758091349" clear="none"></div><div class="yiv4758091349">And then write inner loops which assume suitable vectors of good-type objects.</div><div class="yiv4758091349"><br class="yiv4758091349" clear="none"></div><div class="yiv4758091349">This has one nice property and one nasty one.  The nice property is that (coerce (coerce something a-type) a-type) only conses one instance of a-type, so you can write functions which take either lists of elements or things you've already turned into vectors.</div><div class="yiv4758091349"><br class="yiv4758091349" clear="none"></div><div class="yiv4758091349">The nasty property is that you have to be aware of upgraded-array-element-type and in particular it does not have to be the case that (coerce '(1 2 3) '(vector fixnum)) returns a vector of fixnums: it could easily return a vector of machine integers, which will be bigger than fixnums.</div><div class="yiv4758091349yqt3571111097" id="yiv4758091349yqtfd22259"><div class="yiv4758091349"><br class="yiv4758091349" clear="none"></div><div class="yiv4758091349">--tim</div></div></div></div></div>
            </div>
        </div></body></html>