第四百三十五章 终究是钱的问题


    首长笑了:“老刘,你这个比方打得好。我懂了。”

    他看向陈教授:“陈教授,你这个思路,我支持。但问题来了,这个多核心的机器,现在能造吗?”

    陈教授摇摇头:“造不了。技术上还有很多难题没解决。”

    “那你说这个干什么?”首长问。

    陈教授笑了笑:“首长,我说这个,不是要现在就造。我是希望,在宋教授设计这个核心的时候,给它留几个接口,留几条线,让它将来能跟别的核心连起来。就像盖房子,现在只盖一间,但地基要打好,将来想加盖的时候,直接往上接就行,不用把房子拆了重盖。”

    首长点点头,看向宋颜:“宋教授,你能留这个接口吗?”

    宋颜想了想:“能。但要多占几个引脚,多几条控制线。”

    “占就占。”首长说,“现在多花点功夫,将来少走弯路。”

    陈教授说完,台下沉默了。

    但沉默只持续了几秒,就有人举手。

    是秦世襄。

    “陈教授,您这个思路,我支持。但我有几个技术问题,想问清楚。”

    他站起来,走到台上,拿起粉笔。

    “第一,通信瓶颈。”他在黑板上画了两个方块,中间画了一条线,“两个核心之间交换数据,这条路有多宽?能跑多快?如果这条路太窄,数据堵在路上,就算有100个核心,也只能干等着。”

    他看着陈教授:“您那个全局管理核心,怎么保证数据通路不堵?”

    陈教授想了想:“这个问题,我现在没有现成的答案。但方向是明确的。第一,数据通路要足够宽。不能只是一根线,要一组线。第二,交换方式要高效。不能一个核心发完数据另一个才能发,要能并行交换。第三,协议要简单。越复杂的协议越慢。”

    秦世襄点点头,在黑板上写下“通信瓶颈”四个字。

    包康建举手了。

    他走到台上,拿起粉笔,在秦世襄写的“通信瓶颈”旁边,又写了四个字:“同步难题”。

    “陈教授,秦教授说的是数据通路的问题。我说的是时间同步的问题。”

    他指着黑板上的两个方块:“两个核心一起算一个任务,怎么保证它们步调一致?核心A算得快,核心B算得慢,A等不等B?如果不等,结果怎么拼?如果等,快的那个就闲着,效率上不去。”

    他看向陈教授:“这个同步问题,比通信瓶颈更难。几十个核心要同步,需要非常复杂的时钟网络和控制逻辑。”

    陈教授点点头:“包教授说得对。同步是并行计算的死穴。但也不是完全无解。”

    他走到黑板前,在“同步难题”旁边又写了几个字:“松耦合”、“异步并行”。

    “一种思路,是松耦合。让各个核心相对独立,不需要每步都同步。A算完自己的那块,结果先放着;B算完自己的那块,也先放着。等所有核心都算完了,再统一合并。这叫‘分而治之,异步执行’。”

    “另一种思路,是异步并行。每个核心按自己的节奏跑,需要数据交换的时候,通过握手信号来协调。你给我发个信号,说你算完了;我收到信号,知道可以取你的结果了。这样不需要全局同步,只需要局部协调。”

    他放下粉笔:“这两种思路,都比紧耦合、全局同步容易实现。但代价是,编程复杂。程序员要想清楚,什么时候该同步,什么时候可以异步。”

    包康建点点头,在本子上记了几笔。

    魏知远举手了。

    他走到台上,拿起粉笔,在“同步难题”旁边,又写了四个字:“负载均衡”。

    “陈教授,包教授说的是时间同步的问题。我说的是任务分配的问题。”

    他指着黑板上的两个方块:“一个任务切分成两块,分给两个核心。如果这两块一样大,两个核心同时算完,完美。但如果一块大一块小,大的那个算半天,小的那个算完就闲着,浪费。”

    “这叫负载不均衡。几十个核心的情况下,任务切分要做到完全均衡,几乎不可能。总有一些核心忙死,一些核心闲死。”

    他看向陈教授:“这个问题怎么解?”

    陈教授想了想:“魏教授,这个问题,没有完美解。只能靠动态调度。”

    他在黑板上写下“动态调度”四个字。

    “不是事先把任务切死。是准备一个任务池,谁算完了,自己来池子里取下一个任务。这样算得快的核心多干点,算得慢的核心少干点,大家都不闲着。”

    “代价是,任务池的访问会变成新的瓶颈。所有人都来池子里取任务,池子门口的队就排长了。”

    魏知远点点头,在本子上记了一笔。

    刘星海站起来。

 

本章未完,请点击下一页继续阅读>>