{"id":322,"date":"2010-04-19T17:56:21","date_gmt":"2010-04-19T21:56:21","guid":{"rendered":"https:\/\/blogs.mathworks.com\/steve\/2010\/04\/19\/performance-improvements-in-r2010a\/"},"modified":"2019-10-29T13:25:53","modified_gmt":"2019-10-29T17:25:53","slug":"performance-improvements-in-r2010a","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/steve\/2010\/04\/19\/performance-improvements-in-r2010a\/","title":{"rendered":"Performance improvements in R2010a"},"content":{"rendered":"<p>\r\nLast month we shipped R2010a, the first of our two releases this year. R2010a includes <a href=\"https:\/\/www.mathworks.com\/help\/releases\/R2010a\/toolbox\/images\/rn\/\">version 7.0 of Image Processing Toolbox<\/a>, a major update.\r\n<\/p>\r\n\r\n<p>\r\nFor the last several releases we've been working on improving the performance of various toolbox functions, and R2010a continues the trend. I want to show you a few plots of the cumulative improvements made over many releases.\r\n<\/p>\r\n\r\n<p>\r\nThe first plot shows the speed of <tt>imfilter<\/tt> going back to Release 12 Service Pack 1.\r\n<\/p>\r\n\r\n<p>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/imfilter_nonsep.png\" alt=\"imfilter relative speed\" \/>\r\n<\/p>\r\n\r\n<p>\r\nThe <tt>imfilter<\/tt> plot shows eight different performance benchmarks over time. Each of the eight curves is individually normalized to the slowest time for that curve. So, for example, the double-precision image, 50-by-50 filter benchmark runs almost 100 times faster in R2010a than it did in R12.1 (on the same computer). The single-precision, 50-by-50 benchmark runs about 61 times faster.\r\n<\/p>\r\n\r\n<p>\r\nYou can see in this plot how performance has changed over time. Several of the benchmarks got faster in R13 Service Pack 1, and then again in R14 Service Pack 1. Single-precision filtering improved in R2008b. It looks like we messed up something in R2009b, when several of the benchmark tests got slower. I have no idea what happened then, but we recovered that loss and much more with the latest R2010a release.\r\n<\/p>\r\n\r\n<p>\r\nHere's another plot that shows the relative speed of several <tt>bwmorph<\/tt> operations over time. We made improvements in R2007b and again in R2009b.\r\n<\/p>\r\n\r\n<p>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/bwmorph.png\" alt=\"bwmorph relative speed\" \/>\r\n<\/p>\r\n\r\n<p>\r\nA couple of the <tt>bwmorph<\/tt> curves also show a tick upward in R2010a. That's because we gave an extra boost to the <tt>'skel'<\/tt> (skeletonization) operation.\r\n<\/p>\r\n\r\n<p>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/bwmorph_skel.png\" alt=\"bwmorph skel relative speed\" \/>\r\n<\/p>\r\n\r\n<p>\r\nBelow are benchmark plots for <tt>imresize<\/tt>, <tt>iradon<\/tt>, and <tt>bwhitmiss<\/tt>.\r\n<\/p>\r\n\r\n<p>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/imresize.png\" alt=\"imresize relative speed\" \/>\r\n<\/p>\r\n\r\n<p>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/iradon.png\" alt=\"iradon relative speed\" \/>\r\n<\/p>\r\n\r\n<p>\r\n<img decoding=\"async\" src=\"https:\/\/blogs.mathworks.com\/images\/steve\/2010\/bwhitmiss.png\" alt=\"bwhitmiss relative speed\" \/>\r\n<\/p>\r\n\r\n<p>\r\nLater I'll more of the performance improvements, and I'll discuss some of the other new features of the release.\r\n<\/p>\r\n\r\n<p>\r\nPS. The Boston Marathon is still going on as I type this. I'd like to congratulate John and Alex, both developers in my area, for racing well. Alex, who is responsible for some of the speed improvements I described above, finished 49th overall (47th among men) out of a field of about 26,000 runners. That man is all about speed!\r\n<\/p>","protected":false},"excerpt":{"rendered":"<p>\r\nLast month we shipped R2010a, the first of our two releases this year. R2010a includes version 7.0 of Image Processing Toolbox, a major update.\r\n\r\n\r\n\r\nFor the last several releases we've been... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/steve\/2010\/04\/19\/performance-improvements-in-r2010a\/\">read more >><\/a><\/p>","protected":false},"author":42,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[520,86,370,156,659],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/322"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/users\/42"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/comments?post=322"}],"version-history":[{"count":1,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/322\/revisions"}],"predecessor-version":[{"id":3677,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/posts\/322\/revisions\/3677"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/media?parent=322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/categories?post=322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/steve\/wp-json\/wp\/v2\/tags?post=322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}