。
“陈教授,秦教授说的是数据通路的问题。我说的是时间同步的问题。”
他指着黑板上的两个方块:“两个核心一起算一个任务,怎么保证它们步调一致?核心a算得快,核心b算得慢,a等不等b?如果不等,结果怎么拼?如果等,快的那个就闲着,效率上不去。”
他看向陈教授:“这个同步问题,比通信瓶颈更难。几十个核心要同步,需要非常复杂的时钟网络和控制逻辑。”
陈教授点点头:“包教授说得对。同步是并行计算的死穴。但也不是完全无解。”
他走到黑板前,在“同步难题”
旁边又写了几个字:“松耦合”
、“异步并行”
。
“一种思路,是松耦合。让各个核心相对独立,不需要每步都同步。a算完自己的那块,结果先放着;b算完自己的那块,也先放着。等所有核心都算完了,再统一合并。这叫‘分而治之,异步执行’。”
“另一种思路,是异步并行。每个核心按自己的节奏跑,需要数据交换的时候,通过握手信号来协调。你给我个信号,说你算完了;我收到信号,知道可以取你的结果了。这样不需要全局同步,只需要局部协调。”
他放下粉笔:“这两种思路,都比紧耦合、全局同步容易实现。但代价是,编程复杂。程序员要想清楚,什么时候该同步,什么时候可以异步。”
包康建点点头,在本子上记了几笔。
魏知远举手了。
他走到台上,拿起粉笔,在“同步难题”
旁边,又写了四个字:“负载均衡”
。
“陈教授,包教授说的是时间同步的问题。我说的是任务分配的问题。”
他指着黑板上的两个方块:“一个任务切分成两块,分给两个核心。如果这两块一样大,两个核心同时算完,完美。但如果一块大一块小,大的那个算半天,小的那个算完就闲着,浪费。”
“这叫负载不均衡。几十个核心的情况下,任务切分要做到完全均衡,几乎不可能。总有一些核心忙死,一些核心闲死。”
他看向陈教授:“这个问题怎么解?”
陈教授想了想:“魏教授,这个问题,没有完美解。只能靠动态调度。”
他在黑板上写下“动态调度”
四个字。
“不是事先把任务切死。是准备一个任务池,谁算完了,自己来池子里取下一个任务。这样算得快的核心多干点,算得慢的核心少干点,大家都不闲着。”
“代价是,任务池的访问会变成新的瓶颈。所有人都来池子里取任务,池子门口的队就排长了。”
魏知远点点头,在本子上记了一笔。
刘星海站起来。
他走到台上,看着黑板上那些密密麻麻的字:“通信瓶颈、同步难题、负载均衡。。。。。。”
他转过身,面对全场。
“同志们,陈教授今天提的这个思路,把一个问题摆在了我们面前,昆仑工程,到底要做多大?”
他顿了顿:“是做一台能用的机器,解决眼前的问题?还是做一个平台,为未来的展铺路?”