Git Product home page Git Product logo

Comments (6)

soc avatar soc commented on May 5, 2024

Further thoughts:

  • Would it make sense to also add functions for the (trivial) inverse operations ("Count of Number of Bits Set to 0", "Number of Leading One Bits", "Number of Trailing One Bits")?
  • What's a good, consistent naming scheme for these functions? Ideas:
    • countZeroes/countOnes, countLeadingZeroes/countLeadingOnes, countTrailingZeroes/countTrailingOnes
    • countZeroBits/countOneBits, countLeadingZeroBits/countLeadingOneBits, countTrailingZeroBits/countTrailingOneBits
    • countZeroes/countOnes, countZeroesLeading/countOnesLeading, countZeroesTrailing/countOnesTrailing
    • ...

from dora.

soc avatar soc commented on May 5, 2024

Hardware requirements:

  • POPCNT requires at least Nehalem/K10
  • LZCNT requires at least Haswell/K10.
  • TZCNT requires at least Haswell/Piledriver.

The newest instruction is therefore at least 7-8 years old – I'd think it would be reasonable to implement the bit ops without a fallback, and instead check on VM startup that the CPU is recent enough ...

from dora.

dinfuehr avatar dinfuehr commented on May 5, 2024

Personally I would simply assume that the CPU is recent enough and not implement a fallback or startup check at all ;)

But obviously feel free to implement whatever feels right to you.

from dora.

soc avatar soc commented on May 5, 2024

Makes sense! Maybe we should have code to deal with unsupported instructions in general though, because currently that crashes the runtime with

error: trap not detected (signal 4, addr 0x7f114d840fe7).

Took me a while to figure out why the code was fine on my workstation, but fell apart on my old notebook. :-)

from dora.

soc avatar soc commented on May 5, 2024

Weird, the crash doesn't seem to be related to an unsupported instruction; I get the same on a machine that supports popcount.

from dora.

soc avatar soc commented on May 5, 2024

Let's close this and open individual issues for operations that may be worthwhile to implement.

from dora.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.