看了很多内容,很杂,本篇内容就用来总结我自己对异构架构和并行计算的理解。
我认为只需要理解以下几个点,就能大致了解异构架构:
1.串行和并行
2.cpu和gpu各自的优点和缺点
3.cuda
1. 串行和并行
一段程序在处理器上会被拆分为多个线程,然后线程会被分配到多个核心上去计算。一个核心一次只能运行一个线程,所以多个核心需要计算时,就需要在一个核心上串联地执行,即后续的线程需要等待前面的线程执行完毕才能得到执行。
很自然能想到,当核心数变多的时候,就能够处理更多的线程了。多个核心在运行时是相互独立的,当多个线程之间没有数据依赖的时候,多个数据就能够实现并行了。
2.cpu和gpu各自的优缺点
从cpu和gpu硬件上的设计其实很容易得出各自的优缺点。cpu搭载的处理核心数较少,只有大概几个到十几个不等,但有大量的逻辑处理单元,能够处理复杂的分支预测;而gpu的架构设计完全相反,gpu上搭载的处理核心数大得多,都是上百的数量级,但是没有处理复杂分支预测的逻辑单元。
所以不难分析:
cpu:核心数量少,较弱的大数据处理能力,但有强大的处理分支预测等逻辑问题的能力
gpu:较多的核心,较强的大数据处理能力,但没有处理复杂逻辑问题的能力。
3.cuda
cuda是一种异构计算平台。
面对cpu具有的强大的逻辑处理能力和gpu强大的数据处理能力,将两者的长处结合起来是很有必要的,所以cuda就是一个将两个架构平台联系在一起的、能够协作编程、协作处理问题的一个平台。cuda平台能够提供c/c++、python等编程语言,通过提供了一系列接口来操作gpu,实现cpu和gpu的协同计算。