Author

Topic: 能不能设计出一种比Yac更加难以用GPU挖矿的山寨币? (Read 1426 times)

member
Activity: 93
Merit: 10
想法是不错,但好像没有必要再造个yac出来。目前这样的算法已经可以确保只用cpu来计算了。botnet的加入可以为yac造势。先把这只鸡养大,然后才有得做
…………
对,有道理。
只是yac目前的日子似乎并不好过,难度上升、价格降低,而且Vircurex说6月30日后就不再支持yac了。
member
Activity: 93
Merit: 10
……当然可以适当期望算法能充分利用CPU指令的特点而不是GPU指令的特点。……

我感觉这是个值得考虑的方向。
CPU拥有一些别特别的指令,这些指令在其他简单的处理器(比如GPU的流处理器)中没有。比如,我想X86的反正切指令atan2就是这样的一个例子。
-------------------------------

在常见的X86 CPU中Atan2函数是由硬件实现的。
-------------------------------
在GPU的流处理器中,我不清楚是否包含这个指令,但我猜应该没有,因为硬件的消耗应该很大。
然后,设计一种挖矿算法,在hash的过程中还要调用Atan2函数,即使对内存没有要求,GPU也没法挖矿了。
newbie
Activity: 15
Merit: 0
>>1. 很多跳转。
>>2. 挖矿代码非常长。

哈希算法不是加密算法,当通常和加密算法一样对待。制作一个复杂算法的问题是,算法的有效性难以分析,你不知道这个算法出来是不是伪随机性特别高?是不是有可能被别人简化(也就是类似破解)?对类似比特币的模式还有一个风险,有可能会对特定内容的block算不出规定难度前面若干个0的哈希值。所以期望过分复杂的算法不是好事情。当然可以适当期望算法能充分利用CPU指令的特点而不是GPU指令的特点。

>>3. 自修改代码

对于开源的项目,自修改代码总是可以等价成不自修改代码的形式的。

>>4. 挖矿过程需要动用硬盘。

会对电脑损耗很大,影响电脑执行其它工作,不是好的想法。附带说如果真这样设计,用大内存虚拟硬盘速度会比内存快千倍,所以反而无效。


我的设想是算法将速度限定到内存的速度上,即算法的瓶颈在内存的随机读速度,这是电脑中除硬盘外速度提升最慢的部件,就是CPU先在内存中生成一个比如256MB的远大于缓存容量的随机序列,再从这个随机序列随机读来使得CPU的cache失效,使得DDR2、DDR3也不比DDR快多少,CPU多核更是无用。这样的好处是对CPU占用并不大,甚至也能同时运行其它任务而不受过分大的影响。
legendary
Activity: 1288
Merit: 1227
Away on an extended break
给botnet赚钱罗。
member
Activity: 261
Merit: 10
重點是設計出來要做什麼?
member
Activity: 93
Merit: 10
Yacoin用了不同难度的scrypt,jane等算法,目前只能用CPU挖矿,但是要真想用GPU挖矿的话,似乎也没有理论上难以逾越的困难,至少在scrypt要占用的内存尚没有达到非常大的时候,GPU挖矿程序还是可以写出来的,只是目前没有人写而已。
    那么能不能设计出某种算法,只能使用CPU来完成,无法使用GPU。我指的“无法使用”是指显卡挖矿要比用CPU挖矿消耗更多的电能。
    这里提供几个可能的思路(我自己想的)
  1. 很多跳转。 CPU擅长执行复杂的逻辑指令,遇到一大堆跳转也是家常便饭,相比之下GPU就比较头疼了。如果有某种算法,编译成目标代码之后必然有很多跳转,那就好了。
  2. 挖矿代码非常长。如果挖矿代码(的目标代码)长达好几M,对于CPU,不会有什么问题。对于GPU,则可能有问题,也许会内存不足(我对GPU通用计算没什么了解,不知道其中是否有类似代码段之类的概念,这一点存疑)
  3. 自修改代码(self-modifying code, SMC), 一段代码在运行的过程中修改自己,其逻辑关系肯定是令人头疼的,对于GPU来说肯定是相当棘手的。但是问题在于什么样的算法需要用自修改代码?也就是说某种算法,被编译成普通的目标代码之后运行的效率远比不上自修改代码。
  4. 挖矿过程需要动用硬盘。高端显卡的显存再大也无法和硬盘比拟。那么如果硬盘中有大约10G的数据是挖矿所需要的,那么GPU的强大运算能力很可能就无法发挥出来了。我是这样设想的,挖矿的时候,先把所有的合法的交易打包起来,hash一下,然后根据这个hash结果读取一下硬盘上某个地方的一些数据。
比如说,历史交易数据就可以作为这样的样本,比特币的区块链有好几G了,早就超过主流显卡的显存了。
当普通用户(非矿工)在判断某个区块是否合法的时候,要读取硬盘应该是非常合理的,反正本来也要把整个区块链都遍历一遍以便判断每一个交易都是合法的,最后再判断是否接受这个区块的时候再从硬盘上读取个几M数据也不会明显增加负担。

暂时就想到这么多。
以上几种方法也许可以同时使用,以便联合打压GPU,让挖矿不再是一种门槛很高的活动。
Jump to: