一种数据流控制方法和装置与流程

文档序号:14869020发布日期:2018-07-06 12:29阅读:195来源:国知局

本发明涉及数据分发处理技术,特别涉及一种可应用于虚拟货币矿机的数据流控制方法和装置。



背景技术:

虚拟货币(例如比特币)矿机主要由控制板和算力板构成。其中,控制板的作用是从虚拟货币矿池中抓取任务数据,对任务进行必要的hash运算,以将所抓取的任务数据拆分或者转换成各个算力板能够处理的子任务数据,然后把子任务数据按照严格的时序要求发送给各个算力板处理,再从各个算力板读取运算结果,把符合要求的结果递交给矿池。矿池会根据矿机递交结果的数量发放虚拟货币奖励。如果在控制板侧,任务数据不能按照严格的时序要求定时发送到算力板,则不能充分地发挥出算力板的运算性能,影响矿机的实际算力。

目前的主流矿机方案采用一个控制板带三个算力板。而控制板的主流方案是采用xilinx公司的fpgazynq-7000。基于fpga硬件的良好性能,使得该方案具有能够将任务按严格的时序(通过fpga的硬件描述语言实现)送给算力板的优点,但是该方案的成本过高,而且货源不稳定。面对日益增长的挖矿难度和算力提升需求,该方案显然并不具备成本优势。



技术实现要素:

有鉴于此,本发明提供一种数据流控制方法和装置,以替代现有的fpga方案的算力板,降低挖矿硬件成本,并向算力板提供优秀的任务数据发送时序。

本申请的技术方案是这样实现的:

一种数据流控制方法,包括:

获取任务数据;

将所述任务数据转换为符合计算格式的多个子任务数据;

将所述多个子任务数据缓存于环形缓冲区;

从所述环形缓冲区中获取子任务数据并转发至计算装置进行任务计算。

进一步,将所述多个子任务数据缓存于环形缓冲区的速度大于从所述环形缓冲区中获取子任务数据的速度。

进一步,按照预定的时序,从所述环形缓冲区中定时获取所述子任务数据并转发至计算装置。

进一步,所述任务数据为从虚拟货币矿池获取的任务数据;

所述计算装置为算力板。

一种数据流控制装置,包括:

获取任务数据,将所述任务数据转换为符合计算格式的多个子任务数据,并将所述多个子任务数据缓存于环形缓冲区的数据分配单元;

连接于所述数据分配单元以提供所述环形缓冲区的内存单元;以及,

连接于所述内存单元以从所述环形缓冲区中获取子任务数据并分别转发至至少一个计算装置进行任务计算的至少一个数据转发单元。

进一步,所述环形缓冲区为至少一个,并且,所述环形缓冲区与数据转发单元为一一对应关系,每个所述数据转发单元只从与其对应的环形缓冲区中获取子任务数据。

进一步,所述数据分配单元、内存单元和数据转发单元通过总线相互连接;

所述数据流控制装置还包括连接于所述总线的网络连接端口和连接于计算装置的数据分发端口。

进一步,所述数据分配单元和数据转发单元为位于一连接于所述总线的多核处理器中的内核;其中,

所述数据分配单元为所述多核处理器中所划分出的任一内核,该内核通过总线进而通过网络连接端口获取任务数据;

所述数据转发单元为除所述数据分配单元以外所述多核处理器中所划分出的其它所有内核,且每一个数据转发单元分别与每一个计算装置一一对应,进而每一个数据转发单元从所述环形缓冲区中获取子任务数据后,通过数据分发端口将所获取子任务数据转发至与其对应的计算装置进行任务计算。

进一步,所述多核处理器中分配为所述数据分配单元的内核运行所述数据流控制装置的主线程,并在所述环形缓冲区未满时向所述环形缓冲区中缓存所述子任务数据,在所述环形缓冲区已满时处理除向所述环形缓冲区中缓存所述子任务数据以外的其它事务;

所述多核处理器中分配为所述数据转发单元的内核运行矿工线程,以按照预定的时序,从所述环形缓冲区中定时获取所述子任务数据并转发至所述计算装置。

进一步,所述多核处理器为四核处理器;

每台所述数据流控制装置连接三台计算装置。

进一步,所述任务数据为从虚拟货币矿池获取的任务数据;所述计算装置为算力板。

从上述方案可以看出,本发明的数据流控制方法和装置,通过向缓冲区中不断地存储子任务数据,并且只要缓存没满,就一直向缓存中填充子任务数据,保证计算装置始终能够从缓存中获得子任务数据进行计算,从而能够充分发挥计算装置的算力。缓存采用环形缓冲设计,可避免线程之间的锁竞争问题,避免向计算装置分发子任务数据的中断。由于可以采用总线结构实现本发明的数据流控制方法和装置,因此,可以替代现有的fpga方案的算力板,降低挖矿硬件成本,并同样能够向算力板提供优秀的任务数据发送时序。

附图说明

图1为本发明的数据流控制方法的流程示意图;

图2为本发明的数据流控制装置结构示意图;

图3为采用总线结构的数据流控制装置实施例示意图;

图4为本发明的一个应用场景中的实施例框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。

如图1所示为本发明的数据流控制方法的流程示意图,该方法包括:

获取任务数据;

将所述任务数据转换为符合计算格式的多个子任务数据;

将所述多个子任务数据缓存于环形缓冲区;

从所述环形缓冲区中获取子任务数据并转发至计算装置进行任务计算。

该方法可利用现有的总线结构实现,需要说明的是,其中各个步骤均是按照严格时序进行,以使得计算装置能够尽可能满负荷工作,避免计算装置的闲置,保证计算装置算力的充分发挥,在以下的说明中将进一步阐述。

本发明中,将所述多个子任务数据缓存于环形缓冲区的速度大于从所述环形缓冲区中获取子任务数据的速度。这样做的目的在于,只要有子任务数据需要处理,计算装置便随时都能够获得子任务数据,任务数据不会堵塞于环形缓冲区之前而让计算装置处于闲置(或者待机)状态,从而充分发挥计算装置的算力。

本发明中,按照预定的时序,从所述环形缓冲区中定时获取所述子任务数据并转发至计算装置。这样做的目的在于,保证能够在指定的时间范围内发送完成子任务数据,避免打断发送子任务数据或者避免子任务数据发送失败,从而避免计算装置由于时序问题导致的子任务数据接收失败造成的算力下降。

本发明的数据流控制方法可应用于虚拟货币的挖掘,例如比特币。其中,所述任务数据例如为从虚拟货币矿池获取的任务数据,对应地,所述计算装置例如为虚拟货币矿机的算力板。而本发明的数据流控制方法可应用于虚拟货币矿机的控制板。

同时,本发明还提供了一种数据流控制装置,如图2所示,该数据流控制装置1包括数据分配单元101、内存单元102和数据转发单元103。其中,所述数据分配单元101用于获取任务数据,将所述任务数据转换为符合计算格式的多个子任务数据,并将所述多个子任务数据缓存于环形缓冲区。所述内存单元102连接于所述数据分配单元101用以提供所述环形缓冲区。所述数据转发单元103数量为至少一个,所述数据转发单元103连接于所述内存单元102以从所述环形缓冲区中获取子任务数据并分别转发至至少一个计算装置2进行任务计算,其中每个数据转发单元103与计算装置2一一对应。

本发明采用环形缓冲区的设计,是考虑到环形缓冲的是一种免锁的设计,从而可以避免锁竞争所导致的获取子任务数据的线程停顿而降低计算装置2的算力。进一步地,本发明实施例中,所述环形缓冲区为至少一个,并且,所述环形缓冲区与数据转发单元103为一一对应关系,每个所述数据转发单元103只从与其对应的环形缓冲区中获取子任务数据,这样能够避免多个数据转发单元103之间对缓冲区的访问冲突。

本发明实施例中,所述数据分配单元101依次轮流地向每一个环形缓冲区中填充子任务数据。在填充每一个环形缓冲区之前会判断当前要填充的环形缓冲区是否已满,如果已满,则跳过该环形缓冲区而填充下一个环形缓冲区。另外,如果所有的环形缓冲区都被子任务数据填满,数据分配单元101就按照一预定的时间间隔,查询所有的环形缓冲区是否有空间存放子任务数据。

本发明的数据流控制装置应用于虚拟货币挖掘,例如比特币挖掘时,所述任务数据为从虚拟货币矿池获取的任务数据,所述计算装置2为算力板。进一步地,数据分配单元101连接于矿池3,该矿池3为虚拟货币(例如比特币、莱特币等)矿池,任务数据便来源于矿池3。该应用中,所述数据流控制装置即为虚拟货币矿机的控制板。

本发明的数据流控制装置可采用总线结构实施。其中,数据分配单元101和数据转发单元102可由多核处理器中不同的内核实现。图3为本发明的数据流控制装置采用总线结构的一个实施例示意图。其中,数据流控制装置1还包括总线104,所述数据分配单元101、内存单元102和数据转发单元103通过总线104相互连接。该数据流控制装置1还包括连接于所述总线104的网络连接端口106和连接于计算装置2的数据分发端口107。

进一步地,所述数据分配单元101和数据转发单元102为位于一连接于所述总线104的多核处理器105中的内核。其中,所述数据分配单元101为所述多核处理器105中所划分出的任一内核,该内核通过总线104进而通过网络连接端口106从矿池3获取任务数据,其中,网络连接端口106通过例如互联网络连接于所述矿池3。

所述数据转发单元103为除所述数据分配单元101以外的所述多核处理器105中所划分出的其它所有内核,且每一个数据转发单元103分别与每一个计算装置2一一对应,进而每一个数据转发单元103从内存单元102中的环形缓冲区中获取子任务数据后,通过数据分发端口107将所获取子任务数据转发至与其对应的计算装置2进行任务计算。

所述多核处理器105中分配为所述数据分配单元101的内核运行所述数据流控制装置的主线程,并在所述环形缓冲区未满时向所述环形缓冲区中缓存所述子任务数据,在所述环形缓冲区已满时处理除向所述环形缓冲区中缓存所述子任务数据以外的其它事务;所述多核处理器105中分配为所述数据转发单元103的内核运行矿工线程,以按照预定的时序,从所述环形缓冲区中定时获取所述子任务数据并转发至所述计算装置2。

作为一个具体实施例,所述多核处理器105为四核处理器,每台所述数据流控制装置1连接三台计算装置2。

以下结合一具体应用场景对本发明的数据流控制方法和装置进行进一步说明。

图4为本发明的数据流控制方法和装置的一个具体应用场景实施例框图。该应用场景是对比特币矿机的一个应用。该应用场景中,采用全志h3四核处理器,四个cpucore(内核)分工如下:

core0,即0号内核,运行主线程(mainthread),主要负责对从矿池获取的任务数据进行必要的hash运算(依据比特币原理需要在控制板进行相应的hash运算),进而能够将任务数据拆分成分配各个算力板进行计算的子任务数据,并把子任务数据缓存在环形缓冲。

core1、core2、core3,即1号内核、2号内核、3号内核,均运行miner(矿工)线程,即core1运行0号矿工线程(minerthread0)、即core2运行1号矿工线程(minerthread1)、即core3运行2号矿工线程(minerthread2),负责从环形缓存中取出子任务数据,并分别通过3个uart串口(即串口0、串口1、串口2)把子任务数据发送到3块算力板(即算力板0、算力板1、算力板2)。

其中,core0不断轮流地向任务缓存0、任务缓存1和任务缓存2中写入子任务数据,以充分利用core0的cpu资源。任务缓存采用环境缓冲结构,从而实现免锁。使用core1、core2、core3这三个内核分别运行3个矿工线程,从任务缓存中取出子任务数据,按照设定的时序通过串口向对应的算力板(如core1对应算力板0、core2对应算力板1、core3对应算力板2)发送子任务数据。要保证任务分配不会中断而影响算力板的计算,core0向任务缓存0、任务缓存1和任务缓存2中写入任务的速度要大于core1、core2、core3读取子任务数据的速度。core0运行的主线程会依次轮流地向向任务缓存0、任务缓存1和任务缓存2填充子任务数据,在填充每一个任务缓存之前,主线程会判断该任务缓存是否已满,如果已满,则转而填充下一个任务缓存,如果所有任务缓存都满了,主线程则每100μs(微秒)查询一次所有的任务缓存是否有空间存放子任务数据,当所有的任务缓存的至少其中之一出现空间未满(有子任务数据刚刚被取出),则填充子任务数据至该未满的任务缓存。

要保证任务通过串口发送的时序要求,关键点如下:

(1)使用3个core(即core1、core2、core3)分别运行3个miner线程,每个core运行一个miner线程,每个miner线程负责向一块算力板通过串口按照严格的时序要求定时发送子任务数据;这3个core不分担hash计算工作,否则串口发送过程会被打断,不能保证指定的时间范围内发送完子任务数据。

例如,每个miner线程向一块算力板通过串口定时发送子任务数据的时序为每800μs发送一个子任务数据,每个子任务数据有49个byte(字节)数据,串口的波特率为1mbit/s,如果串口传输不被打断,则需要490μs才能发送完子任务数据,如果中间被打断,就不能保证800μs内能传输完成。

(2)要使用任务缓存,因为core0用于hash计算的工作cpu资源可能会被系统的更底层工作打断,为了充分利用其能连续工作时的cpu资源,就设计了任务缓存,只要缓存没满,就一直进行hash计算生成子任务数据并向任务缓存填充。

(3)core0主线程对任务缓存的写入操作,和core1、core2、core3的3个miner线程对任务缓存的读取操作都不能持锁,否则,就会让miner线程因为和其它线程之间的锁竞争问题导致阻塞,影响发送子任务数据的时序,进而影响算力板算力。这就要求任务缓存的数据结构是免锁设计的。而采用环形缓冲结构便能够解决免锁的问题。

本发明的数据流控制方法和装置,通过向缓冲区中不断地存储子任务数据,并且只要缓存没满,就一直向缓存中填充子任务数据,保证计算装置始终能够从缓存中获得子任务数据进行计算,从而能够充分发挥计算装置的算力。缓存采用环形缓冲设计,可避免线程之间的锁竞争问题,避免向计算装置分发子任务数据的中断。由于可以采用总线结构实现本发明的数据流控制方法和装置,因此,可以替代现有的fpga方案的算力板,降低挖矿硬件成本,并同样能够向算力板提供优秀的任务数据发送时序。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1