算力分享就是让两个或多个的主机同时运行一个程序,来加快这个程序的执行速度。
这个概念可以类比并发,并发是让一个主机运行多个程序(准确说,并发是一个同时具有多个活动的系统),而算力分享是让一个程序被多个主机所运行。 现在我们有两个主机a和主机B,我们应该如何实现让它们同时运行一个程序。 首先主机a和主机B建立连接。 我们需要主机a和主机B同时运用一个链接程序,这个连接程序需要能够让两个主机可以相互互传信息。 第二步,当两个主机在执行这个链接程序的时候,如果发现自己的CPU时间使用已经超过了80%(我们假设是主机a),那么这一个链接程序,将会启动内存管理和进程管理,把主机a中内存中含有的程序复制一份,再把内存中原有的那份删除,之后发送给主机B,(主机a等待主机B回传结果),当主机B接到主机a传来的信息之后,将会把从主机a接收的程序复到给自己的内存中,然后开始执行,回传结果。 主机a等到结果,开始执行结果,指令计数器加一,最后重新执行链接程序。 这个过程描述起来是简单的,而执行起来是复杂的,其中最为复杂的就是分清楚运算过程与执行结果。 举一个图形计算的例子,假设主机a正在运行一款3a游戏,其中的图形计算导致主机a的CPU时间不足。 主机a开始执行链接程序,等待主机B回传结果,这就引来一个问题,我虽然把程序的传输描述成一个简单的粘贴复制,但它并不是一个简单的粘贴复制,一个图形计算最后的结果会被直接执行在这个主机上,主机B如果是原本的照抄,那么最后的结果就是主机B出现了主机A中应该出现的画面,而主机A并没有进行显示。 如果我们把这两个主机共同执行一个程序,比作两个人共同计算一道复杂的数学题的话,那么问题就是我们如何确保另外一个人拿的是题目而回传的就是结果,主机B上应该执行的是程序的运算过程而不是程序的结果。 说的更确切来讲,我们需要主机B回传的信息究竟是什么?它应该以怎样的形式或者格式回传这些信息?最关键的一个问题,我们怎么确保这一系列过程在一个非常短的时间内发生?这些问题我们需要接下来漫长的探索。