What GPU miners may not know about ProgPoW

Andrea Lanfranchi
5 min readJan 14, 2019

--

There’s a quite of rumors nowadays about ProgPoW mining algorithm being implemented (or not implemented) into Ethereum main chain.
Whether it will happen or not this is not going to be discussed in this article.

Being the developer who worked the most on the integration of ProgPoW into ethminer I reckon there are some aspects which are not well known to GPU miners: they see in ProgPoW the solution to get rid of ASICs (incoming) dominance. Unfortunately many of the technical aspects about what exactly is ProgPoW and how it works may not be well known and may cause some troubles when trying to find the best possible tuning for their GPUs.

Here you can find a detailed technical description from the original developers of the algo. Nevertheless some further explanations are needed as, the more I talk to miners, the more they appear confused.

What ProgPoW is.

ProgPoW is an acronym which stands for Programmable Proof of Work. But its real complete definition should be Ethash/ProgPoW. In fact ProgPoW is an additional, programmable, hashing layer built on top of the well known ethash algorithm. The keyword is “programmable” : while ethash cycle repeat a constant loop of instructions which never gets modified (beside the fact those instructions access a memory area — called DAG — which grows in size every new epoch which is 30k blocks), ProgPoW is designed in such a way that CPU (CPU) process generate a new set of (math) instructions, with a new order of execution, every 50 blocks (i.e. every 12.5 minutes roughly). The new “source” is then compiled into a search kernel (CUDA/OpenCL) and pushed into the GPU which starts the hashing work. To summarize: a new kernel is generated by CPU every 12.5 minutes.

Yet ProgPoW keeps the memory accesses of the classic ethash sharing the very same DAG memory area. The new set of math instructions are specifically designed to get full advantage of all the components of a commodity GPU which can be considered an general purpose ASIC. Programmability, on the other hand, is not a point of strength for specialized ASICs. Their manufacturers would struggle to design a device with a sensible gain over a GPU without introducing GPU components.

This, in principle, is the goal of ProgPoW. The best words for ProgPoW rationale are described here by the original developer team.

What ProgPoW is not.

Though it might be tempting to consider ProgPoW “the” solution in the fight against ASICs, this is not true. ProgPoW can delay the incoming wave of specialized ASICs and mitigate the advantages future generations of ASICs may have over commodity GPUs. But nothing prevents specialized hardware manufacturers from investing considerable amounts of money in the design of new, more powerful, more programmable devices.

In respect of the ethereum network the ProgPoW proposal has always been described as an ad-interim solution to prevent the network from being manipulated by few actors while waiting for finality to come to light (PoS).

Who gets more advantage from the (not-sure) adoption of ProgPoW ?

In general the network itself which could be kept profitably safe by a wider audience of miners who use their commodity hardware. As a consequence GPU miners might find their revenues slightly increased. At a cost though as we’ll see later on. Miners have loudly called for ProgPoW and many developers, like me, listened.

Obviously specialized hardware manufacturers might not be happy of such an adoption as their development would need to go through a totally new industrialization project which takes time and a lot of investments.

No surprise then that after the last All Devs Call, where there was an indication to go ahead in studying the possible ProgPoW adoption, one big ASIC manufacturer like Linzhi just twitted their need to get involved in an open project to build a “good ASIC” for ProgPoW.

What about NVIDIA and AMD ?

The two main GPU manufacturers would not be so favoured by ProgPoW, in my opinion, due to a simple fact: ProgPoW will preserve actual hardware investment by GPU miners slowing down the rush to top-class pseudo specialized devices. This does not mean you’ll be able to re-enter the mining business with 3GB GPUs (this will be impossible due to DAG remaining the same as ethash and growing at same pace). Instead ProgPoW balances the memory bandwidth requirements (to access the DAG) with more computation tasks which involve the cores efficiency. This means the classic underclock of cores is no more effective.

What is the mining cost of ProgPoW ?

ProgPoW comes at a cost. For all. Reduced hashing rate in respect to ethash (from -56% up to -65%) and more power drain per GPU (+10% at least.). This is due to the fact, as stated above, ProgPoW makes use of all GPU components, including cores for computational activity. This means you won’t underclock cores anymore. If you sum all of this with the lowered issuance of the incoming Costantinopole upgrade you might think this is not economically viable. Nevertheless expect (if ProgPoW will ever be implemented) a huge drop of hashrate worldwide with consequent drop of difficulty. Do your math carefully.

Which will be my expected hashing rate ?

This question has no answer. ProgPoW is programmable which implies a change in the search kernel every 50 blocks. Each kernel has it’s own speed so you can’t expect a steady constant hashing speed (though variance should stay within a range of +/- 6~7%). Do not expect anymore a constant steady line of “reported hashrate” on the graphs provided by the pools of your choice.

I see NVIDIA cards hash better on ProgPoW than AMD ones.

Straight answer yes. But … there are a few caveats. I saw many comparisons that do not take into account the change in hashing rate among ProgPoW periods (see above) thus they’re inaccurate. Nevertheless … yes … as kernels need to be compiled on the fly (when period of 50 blocks changes) CUDA compiler performs and optimizes better than OpenCL one.

I heard a lot of lies about the ProgPoW project being funded by NVIDIA but those are simply to be classified as bullshits: ProgPoW code is public, open-source, and does the exact same operations (quite simple indeed) on GPUs from both vendors. Most of the differences come from the way kernels are compiled.

This leads to another very important consideration. 99.99% of AMD GPU miners make use of modified BIOSes in bundle with software miners which embed binary (manually optimized) kernels. All of this will not be useful anymore ! AMD binary kernel optimization is not possible as new kernels are generated on the fly every 50 blocks. Modded BIOS (which tamper with memory access latency) won’t be anymore effective. In other words … stock BIOSes will be as effective as modded ones.

Should I get ready for ProgPoW ?

Well … your call. The implementation on Ethereum main chain is not decided yet. Unfortunately the vast majority of arguments are political rather than technical. And this leads to a very confused situation which, imho, would last long.

--

--