From: Robert Klemme Date: 2009-11-17T21:54:04+09:00 Subject: Re: Looking for Set implementation in C --0016e6d7e681a238a80478909e4d Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable 2009/11/16 Shot (Piotr Szotkowski) : > Robert Klemme: > >> 2009/11/16 Shot (Piotr Szotkowski) : > >>> The Set class in MRI is implemented in pure Ruby (lib/set.rb). I vaguel= y >>> remember someone posting here a C (re)implementation of the class, but >>> I can=92t remember the details and it=92s hard to google it =96 all I c= ould >>> find is the [ruby-talk:24465] thread. > >> Why do you need that? Do you encounter any performance issues >> in the adapter code to Hash (which is implemented in C)? > > My initial performance tests (with the very nice perftools.rb gem from > Aman Gupta) seem to suggest that I spend most of the time in (C-based) > Hash#each_key, mostly due to calls from Set#each =96 but it looks like > the Set#each calls themselves add a significant overhead. Interestingly that does not need to be the case. Try out the attached test. I am suspecting thought that differences might be caused by GC because I cannot see a clear pattern and in some cases MySet is faster than Hash with each_key which technically cannot be the case because one calls the other. Kind regards robert --=20 remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/ --0016e6d7e681a238a80478909e4d Content-Type: application/octet-stream; name="sb.rb" Content-Disposition: attachment; filename="sb.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g24nzbxd1 CnJlcXVpcmUgJ3NldCcKcmVxdWlyZSAnYmVuY2htYXJrJwoKY2xhc3MgTXlTZXQKICBpbmNsdWRl IEVudW1lcmFibGUKCiAgZGVmIGluaXRpYWxpemUoZW51bSkKICAgIEBoID0ge30KICAgIGVudW0u ZWFjaCB7fHgsfCBAaFt4XSA9IHRydWV9CiAgZW5kCgogIGRlZiBlYWNoKCZiKQogICAgQGguZWFj aF9rZXkoJmIpCiAgICBzZWxmCiAgZW5kCmVuZAoKU01BTEwgPSAxMApMQVJHRSA9IDEwMF8wMDAK CmRlZiB3b3JrKHgpCiAgeCA8PCAxMAplbmQKCnNtcyA9ICgxLi5TTUFMTCkudG9fc2V0LmZyZWV6 ZQpzbW15ID0gTXlTZXQubmV3KHNtcykuZnJlZXplCnNtaCA9IHt9CnNtcy5lYWNoIHt8a3wgc21o W2tdID0gdHJ1ZX0Kc21oLmZyZWV6ZQoKbHMgPSAoMS4uTEFSR0UpLnRvX3NldC5mcmVlemUKbG15 ID0gTXlTZXQubmV3KGxzKS5mcmVlemUKbGggPSB7fQpscy5lYWNoIHt8a3wgbGhba10gPSB0cnVl fQpsaC5mcmVlemUKCkJlbmNobWFyay5ibWJtIDMwIGRvIHxifAoKICBiLnJlcG9ydCAibGFyZ2Ug aGFzaCBlbXB0eSIgZG8KICAgIFNNQUxMLnRpbWVzIGRvCiAgICAgIGxoLmVhY2gge3xrLGV8IH0K ICAgIGVuZAogIGVuZAoKICBiLnJlcG9ydCAibGFyZ2UgaGFzaCBlayBlbXB0eSIgZG8KICAgIFNN QUxMLnRpbWVzIGRvCiAgICAgIGxoLmVhY2hfa2V5IHt8a3wgfQogICAgZW5kCiAgZW5kCgogIGIu cmVwb3J0ICJsYXJnZSBzZXQgZW1wdHkiIGRvCiAgICBTTUFMTC50aW1lcyBkbwogICAgICBscy5l YWNoIHt8ZXwgfQogICAgZW5kCiAgZW5kCgogIGIucmVwb3J0ICJsYXJnZSBteXNldCBlbXB0eSIg ZG8KICAgIFNNQUxMLnRpbWVzIGRvCiAgICAgIGxteS5lYWNoIHt8ZXwgfQogICAgZW5kCiAgZW5k CgogIGIucmVwb3J0ICJsYXJnZSBoYXNoIHdvcmsiIGRvCiAgICBTTUFMTC50aW1lcyBkbwogICAg ICBsaC5lYWNoIHt8ayxlfCB3b3JrIGt9CiAgICBlbmQKICBlbmQKCiAgYi5yZXBvcnQgImxhcmdl IGhhc2ggZWsgd29yayIgZG8KICAgIFNNQUxMLnRpbWVzIGRvCiAgICAgIGxoLmVhY2hfa2V5IHt8 a3wgd29yayBrfQogICAgZW5kCiAgZW5kCgogIGIucmVwb3J0ICJsYXJnZSBzZXQgd29yayIgZG8K ICAgIFNNQUxMLnRpbWVzIGRvCiAgICAgIGxzLmVhY2gge3xlfCB3b3JrIGV9CiAgICBlbmQKICBl bmQKCiAgYi5yZXBvcnQgImxhcmdlIG15c2V0IHdvcmsiIGRvCiAgICBTTUFMTC50aW1lcyBkbwog ICAgICBsbXkuZWFjaCB7fGV8IHdvcmsgZX0KICAgIGVuZAogIGVuZAoKICAjIC0tLS0tLS0tLS0t LS0tLS0tCgogIGIucmVwb3J0ICJzbWFsbCBoYXNoIGVtcHR5IiBkbwogICAgTEFSR0UudGltZXMg ZG8KICAgICAgc21oLmVhY2gge3xrLGV8IH0KICAgIGVuZAogIGVuZAoKICBiLnJlcG9ydCAic21h bGwgaGFzaCBlayBlbXB0eSIgZG8KICAgIExBUkdFLnRpbWVzIGRvCiAgICAgIHNtaC5lYWNoX2tl eSB7fGt8IH0KICAgIGVuZAogIGVuZAoKICBiLnJlcG9ydCAic21hbGwgc2V0IGVtcHR5IiBkbwog ICAgTEFSR0UudGltZXMgZG8KICAgICAgc21zLmVhY2gge3xlfCB9CiAgICBlbmQKICBlbmQKCiAg Yi5yZXBvcnQgInNtYWxsIG15c2V0IGVtcHR5IiBkbwogICAgTEFSR0UudGltZXMgZG8KICAgICAg c21teS5lYWNoIHt8ZXwgfQogICAgZW5kCiAgZW5kCgogIGIucmVwb3J0ICJzbWFsbCBoYXNoIHdv cmsiIGRvCiAgICBMQVJHRS50aW1lcyBkbwogICAgICBzbWguZWFjaCB7fGssZXwgd29yayBrfQog ICAgZW5kCiAgZW5kCgogIGIucmVwb3J0ICJzbWFsbCBoYXNoIGVrIHdvcmsiIGRvCiAgICBMQVJH RS50aW1lcyBkbwogICAgICBzbWguZWFjaF9rZXkge3xrfCB3b3JrIGt9CiAgICBlbmQKICBlbmQK CiAgYi5yZXBvcnQgInNtYWxsIHNldCB3b3JrIiBkbwogICAgTEFSR0UudGltZXMgZG8KICAgICAg c21zLmVhY2gge3xlfCB3b3JrIGV9CiAgICBlbmQKICBlbmQKCiAgYi5yZXBvcnQgInNtYWxsIG15 c2V0IHdvcmsiIGRvCiAgICBMQVJHRS50aW1lcyBkbwogICAgICBzbW15LmVhY2gge3xlfCB3b3Jr IGV9CiAgICBlbmQKICBlbmQKCmVuZAo= --0016e6d7e681a238a80478909e4d--