SSoelvsten / adiar

An I/O-efficient implementation of (Binary) Decision Diagrams
https://ssoelvsten.github.io/adiar/
MIT License
24 stars 13 forks source link

More options in adiar::adiar_init #40

Closed SSoelvsten closed 3 years ago

SSoelvsten commented 4 years ago

Partially in the same spirit as #15 it would be of use to us to hide initialisation of TPIE in an init function for Adiar. This function can provide one or more of the following options:

SSoelvsten commented 3 years ago

On the last point, I'll have to ask though: does the user really need to specify this? This customization will probably turn into a slowdown. The more label bits we support, the fewer bits we support per layer. So, the more bits we have for the label, the more likely it is we will run out of identifiers. The specific size of each layer is described in the following table.

label bits max_label id bits nodes per level
16 65 535 46 1.5 PiB
20 1 048 575 42 96 TiB
22 4 194 303 40 24 TiB
23 8 388 607 39 12 TiB
24 16 777 215 38 6 TiB
25 33 554 431 37 3 TiB
26 67 108 863 36 1.5 TiB

We intend to manipulate big BDDs, so each level shouldn't be too restricted in size. In all cases, one can technically run out of nodes (max size is 2max_label). Isn't the question really what is the number to cover all expected usage? To me, 22, 23 or 24 bits for the label seems the best choice? Sylvan has 24 bits for the label [Dijk16].