You could use a tree for that, but my understanding is that a heap is much
more efficient?

Yes. I have a feeling dcollections will use heap from phobos (to avoid duplication) for a full priority queue.

-Steve

I tried a Fibonacci tree. It didn't beat the good old array based priority queue. And the more I read about garbage collection and CPU L1/L2 caches, my understanding is that packed arrays and indexes are the best choice if the amount of data is not too much. I did a test with a circular linked list. As long as it is correctly ordered in memory, the CPU is able to prefetch everything into L1 by the time the next pointer is read, independent of the byte count. It could be a few KB up to a GB. But when I randomly reordered the locations of the list nodes in memory it was up to 80x slower for the cases from several MB on. It only stayed fast as long as the complete data fit into the L1 cache. So what I learned from that is to avoid pointers to memory outside the current allocation block and to use a ushort now and then where appropriate ^^. I hope these didn't get slower on amd64.

Reply via email to