<feed xmlns='http://www.w3.org/2005/Atom'>
<title>mirrors/arti.git/crates/hashx/src/program.rs, branch arti-v1.1.8</title>
<subtitle>mirror of https://gitlab.torproject.org/tpo/core/arti
</subtitle>
<id>http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v1.1.8</id>
<link rel='self' href='http://git.dilluti0n.com/mirrors/arti.git/atom?h=arti-v1.1.8'/>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/'/>
<updated>2023-08-25T20:14:24Z</updated>
<entry>
<title>hashx: Cleanup around Instruction and NUM_INSTRUCTIONS</title>
<updated>2023-08-25T20:14:24Z</updated>
<author>
<name>Micah Elizabeth Scott</name>
<email>beth@torproject.org</email>
</author>
<published>2023-08-25T20:11:47Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=2cb50d1be35a4a6623ff318fcf8ac2620521bb1f'/>
<id>urn:sha1:2cb50d1be35a4a6623ff318fcf8ac2620521bb1f</id>
<content type='text'>
This patch tries to make some of the expressions around NUM_INSTRUCTIONS
more convenient. We can import it directly where it's needed, but most
uses are replaced by new type aliases for InstructionArray and
InstructionVec.

No change to any hashx_cachegrind iai benchmarks
</content>
</entry>
<entry>
<title>RFC: hashx: Make Architecture::compile take an array ref</title>
<updated>2023-08-25T17:12:56Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2023-08-23T10:11:11Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=f789f0914b65391b293aac75ab86720028ffa88f'/>
<id>urn:sha1:f789f0914b65391b293aac75ab86720028ffa88f</id>
<content type='text'>
generate_interp_1000x
  Instructions:           219216169 (No change)
  L1 Accesses:            278017243 (-0.000441%)
  L2 Accesses:                 1257 (+4389.286%)
  RAM Accesses:                 415 (-0.479616%)
  Estimated Cycles:       278038053 (+0.001744%)

generate_interp_1000x_c
  Instructions:           272748034 (No change)
  L1 Accesses:            349932964 (No change)
  L2 Accesses:                   76 (-1.298701%)
  RAM Accesses:                 411 (+0.243902%)
  Estimated Cycles:       349947729 (+0.000009%)

generate_compiled_1000x
  Instructions:           256896028 (+0.175731%)
  L1 Accesses:            342543838 (+0.131802%)
  L2 Accesses:               149273 (-10.34924%)
  RAM Accesses:                 810 (-0.246305%)
  Estimated Cycles:       343318553 (+0.106328%)

generate_compiled_1000x_c
  Instructions:           281855218 (No change)
  L1 Accesses:            362569035 (-0.000001%)
  L2 Accesses:                   88 (+1.149425%)
  RAM Accesses:                 473 (+0.211864%)
  Estimated Cycles:       362586030 (+0.000010%)

interp_u64_hash_1000x
  Instructions:            13450926 (No change)
  L1 Accesses:             16622561 (+0.000024%)
  L2 Accesses:                   28 (No change)
  RAM Accesses:                 390 (-1.015228%)
  Estimated Cycles:        16636351 (-0.000817%)

interp_8b_hash_1000x_c
  Instructions:             8618541 (No change)
  L1 Accesses:             12316160 (-0.000008%)
  L2 Accesses:                   80 (No change)
  RAM Accesses:                 433 (+0.231481%)
  Estimated Cycles:        12331715 (+0.000276%)

compiled_u64_hash_100000x
  Instructions:            87311792 (+0.000520%)
  L1 Accesses:             94396598 (+0.000463%)
  L2 Accesses:                  215 (+2.380952%)
  RAM Accesses:                 774 (-0.641849%)
  Estimated Cycles:        94424763 (+0.000304%)

compiled_8b_hash_100000x_c
  Instructions:            91547640 (No change)
  L1 Accesses:             98838166 (-0.000007%)
  L2 Accesses:                  137 (+3.007519%)
  RAM Accesses:                 488 (+0.618557%)
  Estimated Cycles:        98855931 (+0.000119%)
</content>
</entry>
<entry>
<title>Rustfmt</title>
<updated>2023-08-24T16:01:44Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2023-08-24T16:01:44Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=b1fd9934a166392e8dc0acada4b5bea376569fb5'/>
<id>urn:sha1:b1fd9934a166392e8dc0acada4b5bea376569fb5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>hashx: FixedCapacityVec: Replace .into_boxed_array method with Try</title>
<updated>2023-08-24T12:50:29Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2023-08-24T12:30:38Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=42eea856dd05b82f53e9d71e7ee3225b4f6851a1'/>
<id>urn:sha1:42eea856dd05b82f53e9d71e7ee3225b4f6851a1</id>
<content type='text'>
This version pushes the panic into the call site, which seems much
better.  No change to the iai results.
</content>
</entry>
<entry>
<title>hashx: FixedCapacityVec: Move into its own module</title>
<updated>2023-08-24T12:50:20Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2023-08-24T12:23:20Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=6529846787aa65dc480edcca4a3e9cab1712e75b'/>
<id>urn:sha1:6529846787aa65dc480edcca4a3e9cab1712e75b</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Rustfmt</title>
<updated>2023-08-23T11:02:24Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2023-08-23T11:02:24Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=99def36084e65491482cd6871adc8972ccfd82ee'/>
<id>urn:sha1:99def36084e65491482cd6871adc8972ccfd82ee</id>
<content type='text'>
</content>
</entry>
<entry>
<title>RFC: hashx: Introduce FixedCapacityVec</title>
<updated>2023-08-23T10:59:24Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2023-08-23T10:48:40Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=3deb358cd2dd588baa560d347f1e69d078e28d9d'/>
<id>urn:sha1:3deb358cd2dd588baa560d347f1e69d078e28d9d</id>
<content type='text'>
This is quite shoddy.  It shouldn't be merged without some tidying up
and unit tests and so on.  Also I am confused about the difference
between NUM_INSTRUCTIONS and model::REQUIRED_INSTRUCTIONS.

However:

generate_interp_1000x
  Instructions:           220115418 (-1.147100%)
  L1 Accesses:            278918725 (-0.936103%)
  L2 Accesses:                   25 (-98.46248%)
  RAM Accesses:                 414 (-0.956938%)
  Estimated Cycles:       278933340 (-0.938920%)

generate_interp_1000x_c
  Instructions:           272748034 (No change)
  L1 Accesses:            349932970 (+0.000001%)
  L2 Accesses:                   76 (-1.298701%)
  RAM Accesses:                 405 (-0.491400%)
  Estimated Cycles:       349947525 (-0.000021%)

generate_compiled_1000x
  Instructions:           257344624 (-0.982784%)
  L1 Accesses:            343007206 (-0.753942%)
  L2 Accesses:               152502 (-17.12839%)
  RAM Accesses:                 809 (-0.369458%)
  Estimated Cycles:       343798031 (-0.797384%)

generate_compiled_1000x_c
  Instructions:           281855218 (No change)
  L1 Accesses:            362569043 (+0.000002%)
  L2 Accesses:                   87 (-4.395604%)
  RAM Accesses:                 466 (-0.427350%)
  Estimated Cycles:       362585788 (-0.000023%)

interp_u64_hash_1000x
  Instructions:            13451818 (-0.100680%)
  L1 Accesses:             16623452 (-0.105967%)
  L2 Accesses:                   28 (No change)
  RAM Accesses:                 392 (-1.507538%)
  Estimated Cycles:        16637312 (-0.107138%)

interp_8b_hash_1000x_c
  Instructions:             8618541 (No change)
  L1 Accesses:             12316165 (+0.000032%)
  L2 Accesses:                   80 (-2.439024%)
  RAM Accesses:                 428 (-0.465116%)
  Estimated Cycles:        12331545 (-0.000616%)

compiled_u64_hash_100000x
  Instructions:            87312230 (-1.358594%)
  L1 Accesses:             94397055 (-1.669415%)
  L2 Accesses:                  212 (-0.469484%)
  RAM Accesses:                 776 (-0.767263%)
  Estimated Cycles:        94425275 (-1.669144%)

compiled_8b_hash_100000x_c
  Instructions:            91547640 (No change)
  L1 Accesses:             98838176 (+0.000009%)
  L2 Accesses:                  134 (-4.964539%)
  RAM Accesses:                 481 (-0.414079%)
  Estimated Cycles:        98855681 (-0.000097%)
</content>
</entry>
<entry>
<title>RFC: hashx: Make Program a boxed array</title>
<updated>2023-08-23T10:02:08Z</updated>
<author>
<name>Ian Jackson</name>
<email>ijackson@chiark.greenend.org.uk</email>
</author>
<published>2023-08-23T10:02:08Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=4ac8f3c4e99340152824cbe537cd951716376c6f'/>
<id>urn:sha1:4ac8f3c4e99340152824cbe537cd951716376c6f</id>
<content type='text'>
generate_interp_1000x
  Instructions:           222669662 (-0.146601%)
  L1 Accesses:            281554367 (+0.069275%)
  L2 Accesses:                 1623 (-90.13494%)
  RAM Accesses:                 418 (No change)
  Estimated Cycles:       281577112 (+0.042908%)

generate_interp_1000x_c
  Instructions:           272748034 (No change)
  L1 Accesses:            349932970 (+0.000001%)
  L2 Accesses:                   74 (No change)
  RAM Accesses:                 407 (-0.731707%)
  Estimated Cycles:       349947585 (-0.000029%)

generate_compiled_1000x
  Instructions:           259898868 (-0.124860%)
  L1 Accesses:            345603941 (+0.055045%)
  L2 Accesses:               193008 (-4.001910%)
  RAM Accesses:                 812 (-0.490196%)
  Estimated Cycles:       346597401 (+0.043228%)

generate_compiled_1000x_c
  Instructions:           281855218 (No change)
  L1 Accesses:            362569040 (+0.000000%)
  L2 Accesses:                   88 (+2.325581%)
  RAM Accesses:                 468 (-0.636943%)
  Estimated Cycles:       362585860 (-0.000026%)

interp_u64_hash_1000x
  Instructions:            13465375 (-0.024687%)
  L1 Accesses:             16641089 (-0.028974%)
  L2 Accesses:                   25 (+8.695652%)
  RAM Accesses:                 398 (+0.505051%)
  Estimated Cycles:        16655144 (-0.028470%)

interp_8b_hash_1000x_c
  Instructions:             8618541 (No change)
  L1 Accesses:             12316165 (+0.000016%)
  L2 Accesses:                   78 (No change)
  RAM Accesses:                 430 (-0.462963%)
  Estimated Cycles:        12331605 (-0.000551%)

compiled_u64_hash_100000x
  Instructions:            88514787 (-0.000365%)
  L1 Accesses:             95999693 (+0.000196%)
  L2 Accesses:                  208 (-0.952381%)
  RAM Accesses:                 782 (-0.255102%)
  Estimated Cycles:        96028103 (+0.000112%)

compiled_8b_hash_100000x_c
  Instructions:            91547640 (No change)
  L1 Accesses:             98838171 (-0.000002%)
  L2 Accesses:                  137 (+3.007519%)
  RAM Accesses:                 483 (-0.412371%)
  Estimated Cycles:        98855761 (-0.000053%)
</content>
</entry>
<entry>
<title>hashx: Use a boxed slice for Program storage</title>
<updated>2023-08-21T22:27:28Z</updated>
<author>
<name>Micah Elizabeth Scott</name>
<email>beth@torproject.org</email>
</author>
<published>2023-08-21T22:19:16Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=26b5ae9a3c20e682dde718aae7f54536fea94383'/>
<id>urn:sha1:26b5ae9a3c20e682dde718aae7f54536fea94383</id>
<content type='text'>
This is a very small change that converts our Vec cheaply into a boxed
slice during program generation. Program generation speed shows no
changes, and there's no change when using compiled hashes, but is a
surprisingly effective 10% speedup to interpreted hash execution.

Signed-off-by: Micah Elizabeth Scott &lt;beth@torproject.org&gt;
</content>
</entry>
<entry>
<title>hashx: New approach to avoid memcpy in Program</title>
<updated>2023-08-21T22:27:28Z</updated>
<author>
<name>Micah Elizabeth Scott</name>
<email>beth@torproject.org</email>
</author>
<published>2023-08-15T21:35:05Z</published>
<link rel='alternate' type='text/html' href='http://git.dilluti0n.com/mirrors/arti.git/commit/?id=ceacd5c98808ed8ecd91d6645be3ad32ce606ad0'/>
<id>urn:sha1:ceacd5c98808ed8ecd91d6645be3ad32ce606ad0</id>
<content type='text'>
I was trying to eliminate all the places where we copied a Program
(about 4100 bytes) except for the one final copy into a Box; but that
approach was proving too annoying. Even returning a Program via Result
will cause multiple unnecessary copies that don't optimize out.

This patch switches approaches, and instead allocates a Vec&lt;Instruction&gt;
presized to the correct capacity. This allocation is made as early as
possible and retained for the lifetime of the program if necessary.
This means we'll never avoid a heap allocation, but we can always
avoid extra copies and we don't need a separate Box for interpreted
programs.

Performance effects are subtle. Overall wallclock time doesn't change
much. Cachegrind shows some accesses moving up from RAM to L2 cache.
Using GDB to probe memcpy sizes shows that large (&gt;1024b) memcpy are now
totally gone in the generate-interp test.

Signed-off-by: Micah Elizabeth Scott &lt;beth@torproject.org&gt;
</content>
</entry>
</feed>
