PY2
Q: 如何用Python提取出一段Python代码中的所有注释?
A: Python的注释要么是#号开头,要么是三引号'''包裹起来,也许你会采用正则表达式,但是实际上这么做会把代码里的#和'''全部弄出来。所以仔细想想,其实你需要写的是一个类似Python解释器的东西,准确的说,是用Python实现一棵“Python注释”的语法树,只不过,解释器需要逐过程解释代码,而你只需要逐行解释注释就可以了。这里面涉及到一些很简单的编译原理,如果你是一个CS的学生,实现起来并不太难。(但是有些烦。)
AR2
Q: Nehalem架构引入了X58芯片组,取代了南北桥,同时引入了QPI(快速通道互联),你知道QPI与传统的FSB相比,有何异同吗,它的主要优势体现在什么方面?
A:QPI是一种点对点、serial(串行)的硬件互联方式,而FSB采用了在一条总线中进行并行传输的方式进行互联,由于点对点以及serial的传输方式,QPI的数据传输完整性和电力消耗都远远小于FSB,且拥有更快的速度和更低的延迟。而还有一种叫做DMI的东东,则是介于FSB和QPI的另一种互联方式。
AR3
Q: 在费米架构的GPU中,每个SM独占L1 Cache,这个Cache基于程序员和硬件同时托管,所有SM共享一个L2 Cache,这个Cache只由硬件托管,请问缓存在处理器核心或者SM之间共享有何意义,为何要做这样的设计?
A:这主要是为了让设备之间能够通过相同的共享缓存进行通信,这可以使得处理器之间不再需要通过延迟极高的全局内存进行通信,减少了数据写回所需的时间,大大优化了原子操作的速度。
AR4
Q: GPU上基于SIMD的实现模式与多核CPU上基于MIMD的实现模式各有什么优缺点?
A:由于每个执行单元的指令流都是相同的,SIMD模式会把指令的获取时间均摊到一个单元,若出现分支,则将它们序列化。而MIMD在出现分支时,则不会序列化,这其实是CPU和GPU硬件构造决定的,CPU上有更多的译码器和指令存储器,而且拥有更高的指令带宽。因此SIMD用于处理大量数据操作(比如高密度浮点计算)是很有优势的,而指令密集型操作则适合交给CPU采用MIMD方式完成。
AR5
Q: GPU存取计算机系统中的主DRAM内存是非常缓慢的,以费米架构为基准,GPU为程序员提供了多种不同层次的存储器,有哪几个不同层次和类型的存储器,它们各自的带宽和延迟周期是多少?
A:
存储类型 | 寄存器 | 共享内存 | 纹理内存 | 常量内存 | 全局内存 |
---|---|---|---|---|---|
带宽 | ~8TB/s | ~1.5TB/s | ~200MB/s | ~200MB/s | ~200MB/s |
延迟(Cycles) | 1 | 1~32 | 400~600 | 400~600 | 400~600 |