Actually it is a surprise to me that the dict version compares so favourably to both the tuple version and the ets version considering that it is implemented wholly in Erlang while the others are implemented in C in the emulator. It must have got something right. :-)
<br><br>It might help a lot if there was support for it in the emulator. Not completely implement it there but have some support functions. There are some parts which would be difficult to do in the emulator. Future EEP?<br>
<br>Robert<br><br><div><span class="gmail_quote">On 22/10/2007, <b class="gmail_sendername">Caoyuan</b> <<a href="mailto:dcaoyuan@gmail.com">dcaoyuan@gmail.com</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
It seems GC is also a key for performance now :-) per my tbray4.erl<br>code, which uses plain Dict<br><br>After I added [{min_heap_size, 3000}] to spawn_opt, the elapsed time<br>dropped from 7.7 sec to 5.7s immediately.<br>
<br>The code is at:<br><a href="http://blogtrader.net/page/dcaoyuan/entry/learning_coding_parallelization_was_tim">http://blogtrader.net/page/dcaoyuan/entry/learning_coding_parallelization_was_tim</a><br><br><br>On 10/22/07, Thomas Lindgren <
<a href="mailto:thomasl_erlang@yahoo.com">thomasl_erlang@yahoo.com</a>> wrote:<br>><br>> --- Steve Vinoski <<a href="mailto:vinoski@ieee.org">vinoski@ieee.org</a>> wrote:<br>><br>> > Anders sent me his code and I ran it on my 8-core
<br>> > Linux box, with the<br>> > following performance results. VICTORY is right! :-)<br>> ><br>> > real    0m1.904s<br>> > user    0m7.917s<br>> > sys     0m1.185s<br>> ><br>> > Like I mentioned to Anders in private email, it's
<br>> > nice to have someone more<br>> > experienced with Erlang finally taking a look at<br>> > this; I'm still a relative<br>> > newbie.<br>> > One thing I've liked about this entire exercise is
<br>> > that the early attempts<br>> > at solving Tim Bray's Wide Finder in Erlang were<br>> > taking minutes to execute<br>> > and were providing only partial answers. Several of<br>> > us then started
<br>> > whittling away at it, and because of the richness of<br>> > the language, we had a<br>> > variety of different avenues to explore. Over time,<br>> > we've vastly increased<br>> > the performance of our solutions. Anders's solution
<br>> > now beats Ruby on the<br>> > same machine by about 0.3s, and because of the way<br>> > it uses multiple cores,<br>> > it will likely execute extremely quickly and<br>> > efficiently when Tim gets a
<br>> > chance to try it on his T5120.<br>> ><br>> > Yes, fast solutions in other languages were quickly<br>> > found, but those had<br>> > almost nowhere to go beyond their initial forms in<br>
> > terms of improvement, not<br>> > because they were already so fast, but because the<br>> > languages ran out of<br>> > alternatives. This is especially true when it comes<br>> > to taking advantage of
<br>> > the T5120's many cores. I'm a fan of many languages,<br>> > including Ruby, Python,<br>> > Perl, and C++, all of which have figured prominently<br>> > in the collection of<br>> > various Wide Finder solutions. But for my money,
<br>> > Erlang has fulfilled Tim's<br>> > original wishes the best, which is to take the best<br>> > possible advantage of<br>> > all those cores.<br>><br>> Well done, everyone. You've chewed this over pretty
<br>> well, I'd say, and it has been interesting to see how<br>> things have improved over time. Here are a couple of<br>> thoughts on further improvements:<br>><br>> 1. Native code compilation? It's a bit hit-and-miss,
<br>> but this could be the sort of problem that gains from<br>> it.<br>><br>> 2. The speedup is 4.15 on 8 cores (if I'm reading<br>> things right: user/real). What is the bottleneck? Too<br>> small input, too much I/O, or is there something that
<br>> could be improved or tuned further?<br>><br>> And for language fans, the language itself could be a<br>> bit more helpful. While we haven't emphasized regexp<br>> crunching, it still seems like things could be easier.
<br>> Here are some quick thoughts.<br>><br>> 0. Not having to write the Boyer-Moore stuff by hand<br>><br>> 1. Working with binaries like strings should be easier<br>><br>> 2. Reading lines from files
<br>><br>> 3. Appropriate data chunking for file processing<br>> (people tried all from a few KB to several MB per<br>> chunk -- could the system figure out an appropriate<br>> size on its own?)<br>><br>
> 4. Perhaps a streaming interface would be even better?<br>> Jay Nelson suggested one a few years ago.<br>><br>> 5. When looking at the use of dictionaries, it struck<br>> me that ets:update_counter/3 could have avoided the
<br>> use of dictionaries and merging altogether. But, alas,<br>> there is the well-known snag that if the key does not<br>> exist in the table, you need to insert it yourself.<br>> Which means you get a race condition that, as far as I
<br>> can see, ets can't handle safely. (Or could I be more<br>> creative?)<br>><br>> 6. More intuitive APIs -- it's been instructive, and a<br>> bit alarming, to see how people outside the "core"
<br>> community have had to struggle with false starts on<br>> this. More and better documentation and tutorials.<br>><br>> Best,<br>> Thomas<br>><br>><br>> __________________________________________________
<br>> Do You Yahoo!?<br>> Tired of spam?  Yahoo! Mail has the best spam protection around<br>> <a href="http://mail.yahoo.com">http://mail.yahoo.com</a><br>> _______________________________________________<br>
> erlang-questions mailing list<br>> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>> <a href="http://www.erlang.org/mailman/listinfo/erlang-questions">http://www.erlang.org/mailman/listinfo/erlang-questions
</a><br>><br><br><br>--<br>- Caoyuan<br>_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br><a href="http://www.erlang.org/mailman/listinfo/erlang-questions">
http://www.erlang.org/mailman/listinfo/erlang-questions</a><br></blockquote></div><br>