OCLvanitygen is fast because the addresses stay in the GPU (only a match is returned). It is also fast because a typical GPU has 1000 processing units. It would probably be even faster if you removed the final check to see if the generated address matches a pattern.
I imagine it wouldn't be much of a stretch after you get oclvanitygen compiling to remove the pattern-checking code in CL and return all addresses; how fast the C wrapper could deal with such a stream of data would then be the issue. The generated addresses would not be secure and random though; the private keys would be *VERY* related to each other - oclvanitygen just increments from an initial random value. To generate good addresses for actual use (not just some impossiburu hacking project), you need a true random source with a fast data stream - the ECDSA will not be the speed limiting factor.
It took some doing, but after a couple days of messing with things, I wrote a CPU x64 C# version that can output sequential private keys and their addresses (compressed and uncompressed) starting at any given index at a rate of about 25K/core/min (on my i7 3930K). It obviously uses EC addition instead of multiplication. However, even though this might sound decent, I wanted to generate approx 1 billion addresses (no, not as a hacking attempt- a billion is 8.6E-67% of the keyspace so don't worry), and I need my CPU for my day job. Running one instance of this (which is all the CPU power I can spend on it) would take nearly a month (24/7) to generate the 1 billion addresses. My GPU is almost always free however, so if anyone knows how to edit the oclvanitygen code (I don't know much C++ and no opencl) such that:
- it can take any start index in the form of a hex private key
- it does not check against a pattern and instead spits out ALL of the addresses and private keys to file (or the screen and I'll redirect stdout) as it goes
- ensure that the incrementing of the private keys is 1, not some other number
I could use the tips (also how to compile for Win 7 x64). Thanks for all the helpful replies.