• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于OpenCL的CPU模塊設(shè)計(jì)與實(shí)現(xiàn)

    2018-05-14 09:57:28曾亞周琦章杰

    曾亞 周琦 章杰

    摘要:OpenCL作為異構(gòu)系統(tǒng)下程序設(shè)計(jì)的主流架構(gòu)之一,已經(jīng)在大量異構(gòu)計(jì)算系統(tǒng)中應(yīng)用。由于異構(gòu)系統(tǒng)最初的用途是用于在計(jì)算機(jī)系統(tǒng)中加速數(shù)值計(jì)算,設(shè)計(jì)人員在OpenCL框架下編寫的模塊大部分是用于數(shù)值計(jì)算,以及與數(shù)值計(jì)算息息相關(guān)的圖像處理。本文介紹一種通過OpenCL搭建CPU模塊的方法。CPU功能模塊可在部分情況下分擔(dān)或接管異構(gòu)系統(tǒng)中部分CPU的工作。同時(shí)在一些支持可重構(gòu)架構(gòu)的異構(gòu)系統(tǒng)中,CPU模塊可以替代異構(gòu)系統(tǒng)中的CPU,這大大增加了異構(gòu)系統(tǒng)的靈活度。本文涉及的CPU模塊兼容MIPS32指令集。

    關(guān)鍵詞:OpenCL;異構(gòu)系統(tǒng);CPU設(shè)計(jì);MIPS

    中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1007-9416(2018)02-0160-02

    近年來,隨著單個(gè)CPU的各方面性能都達(dá)到了極限,只靠單個(gè)或者多個(gè)通用處理器(以下簡稱CPU)來提高計(jì)算機(jī)系統(tǒng)性能的解決方案已經(jīng)不適用了。專用協(xié)處理器配合CPU的組合方式成了現(xiàn)在增強(qiáng)計(jì)算機(jī)系統(tǒng)性能的主要途徑,“CPU+專用協(xié)處理器”構(gòu)建的異構(gòu)系統(tǒng)成了當(dāng)前大規(guī)模數(shù)據(jù)處理的首選解決方案。不過,由于異構(gòu)系統(tǒng)本身最初是用于解決計(jì)算機(jī)系統(tǒng)數(shù)值計(jì)算過慢的問題,也使得異構(gòu)系統(tǒng)中幾乎大部分模塊都是直接用于數(shù)值計(jì)算,造成了異構(gòu)系統(tǒng)在實(shí)際應(yīng)用中也僅限于用在與數(shù)值計(jì)算息息相關(guān)的圖像處理,信號處理,神經(jīng)網(wǎng)絡(luò)等方面。

    OpenCL全稱Open Computing Language,是指開放計(jì)算語言,用于編寫在異構(gòu)平臺上執(zhí)行的程序。作為現(xiàn)在流行的異構(gòu)系統(tǒng)編程框架,可以讓異構(gòu)系統(tǒng)的應(yīng)用可以不局限于數(shù)值計(jì)算中,也可用于非數(shù)值運(yùn)算中。系統(tǒng)中協(xié)處理器不僅可以通過使用高級語言進(jìn)行編程,而且OpenCL把協(xié)處理器與主處理器(大部分情況下由CPU擔(dān)任)統(tǒng)一在一個(gè)框架下編程,這使得兩者的數(shù)據(jù)交換變得非常簡便與靈活。在某些狀況下,協(xié)處理器可以承擔(dān)主處理器的工作,分?jǐn)偵踔两庸苤魈幚砥鞯墓ぷ?,主處理器只要把?shù)據(jù)直接送入?yún)f(xié)處理器即可。這不僅拓寬了異構(gòu)系統(tǒng)的使用范圍,也減輕了主處理器的負(fù)擔(dān)。特別是異構(gòu)系統(tǒng)中如果支持協(xié)處理器可重構(gòu)功能,那異構(gòu)系統(tǒng)的使用范圍可以大大增加。

    本文通過OpenCL架構(gòu),設(shè)計(jì)一個(gè)在“CPU+GPU”的異構(gòu)系統(tǒng)中能夠運(yùn)行的CPU模塊。此模塊兼容開源的MIPS32指令集,易于理解與掌握,方便設(shè)計(jì)人員應(yīng)用。選擇MIPS架構(gòu)的理由是,MIPS架構(gòu)源代碼公開,相關(guān)資料豐富,易于理解與掌握?,F(xiàn)在不少大學(xué)本科計(jì)算機(jī)專業(yè)課中,通過MIPS架構(gòu)來講解計(jì)算機(jī)系統(tǒng)原理架構(gòu),甚至部分大學(xué)的“微機(jī)原理與接口技術(shù)”課程中的用MIPS CPU代替老舊的8086CPU。

    1 異構(gòu)系統(tǒng)架構(gòu)概述

    1.1 OpenCL基本介紹

    OpenCL(Open Computing Language,中文名為開放計(jì)算語言)是一個(gè)在異構(gòu)系統(tǒng)中設(shè)計(jì)應(yīng)用的框架,目的是方便在異構(gòu)系統(tǒng)下編寫程序的,此異構(gòu)系統(tǒng)可通過CPU、GPU、DSP、FPGA或其他類型的處理器與硬件加速器所組成。(見圖1)

    OpenCL平臺模型定義了使用OpenCL的一種高層模式,這個(gè)模型如圖1所示。這平臺包括一個(gè)宿主機(jī)(圖1中的Host),設(shè)備就是執(zhí)行指令流的地方。因此OpenCL的設(shè)備通常被稱為計(jì)算設(shè)備(圖1中的Compute Device),計(jì)算設(shè)備可以是GPU、FPGA等任何OpenCL架構(gòu)下支持的任意處理器。

    OpenCL的運(yùn)行步驟比較復(fù)雜。基本上分為以下步驟:

    (1)初始化階段,獲取設(shè)備信息,創(chuàng)建上下文(用于協(xié)調(diào)主機(jī)以及計(jì)算設(shè)備與主機(jī)的一種交互機(jī)制)。

    (2)創(chuàng)建內(nèi)存對象,然后創(chuàng)建程序?qū)ο?,同時(shí)生成內(nèi)核對象。內(nèi)存對象存儲(chǔ)內(nèi)核執(zhí)行數(shù)據(jù),程序?qū)ο蠹闯绦蛟次募蛘叨M(jìn)制代碼數(shù)據(jù)。內(nèi)核對象是設(shè)備程序的入口。

    (3)配置內(nèi)核參數(shù),并配置工作數(shù)組的組織形式。同時(shí)將內(nèi)核對象,以及工作數(shù)組參數(shù)放入命令隊(duì)列中送入?yún)f(xié)處理器中執(zhí)行。

    (4)返回執(zhí)行結(jié)果,并釋放資源,程序結(jié)束。

    1.2 CPU模塊基本介紹

    由于本文編寫的是CPU模塊,在這里需要簡單講解一下CPU的工作原理。

    CPU的主要運(yùn)作原理是執(zhí)行儲(chǔ)存在內(nèi)存中里的一系列指令。CPU工作架構(gòu)有馮·諾伊曼結(jié)構(gòu)(von Neumann architecture)以及哈佛結(jié)構(gòu)(Harvard architecture),由于MIPS架構(gòu)屬于馮·諾伊曼結(jié)構(gòu)(von Neumann architecture)架構(gòu),因此本文只討論馮·諾伊曼結(jié)構(gòu)的運(yùn)行方式。馮·諾伊曼CPU的運(yùn)作原理可分為五個(gè)階段:提取、解碼、執(zhí)行、訪存和寫回(見圖2)。

    提?。篊PU自動(dòng)地從存儲(chǔ)器取出指令。為此,CPU能夠知道取出指令的存儲(chǔ)器地址,提取階段中的存儲(chǔ)器地址可以是生成,也可以是指令指定。

    解碼:CPU對從存儲(chǔ)器取出的指令進(jìn)行分析。指令分析有2個(gè)部分:1.指令中的操作命令,即需要CPU進(jìn)行什么操作。2.指令中的操作數(shù)地址,即操作數(shù)的有效地址。

    執(zhí)行:從解碼階段中獲取“操作命令”以及“操作數(shù)地址”后,形成控制型號,通過對CPU內(nèi)各個(gè)部件的控制,完成指令操作。

    訪存:CPU會(huì)訪問內(nèi)存(或者高速緩存)訪問內(nèi)存讀或者寫數(shù)據(jù)。

    寫回:CPU把完成執(zhí)行階段的結(jié)果寫入對應(yīng)的存儲(chǔ)器地址中。這一步是CPU執(zhí)行的最后一個(gè)階段。

    2 CPU功能模塊設(shè)計(jì)

    通過上文的講解,我們知道了OpenCL的結(jié)構(gòu)以及CPU模塊的運(yùn)作原理。OpenCL最簡單的工程通常有2類文件:.c以及.cl文件,.c文件運(yùn)行于主處理器上,.cl文件運(yùn)行于協(xié)處理器上。由于在本文的工程中,主CPU的功能就是用于輸送CPU模塊的二進(jìn)制命令,所以CPU模塊的編寫集中于.cl文件中。

    2.1 CPU模塊整體概述

    CPU模塊的對外接口需要盡量與實(shí)際CPU保持一致,這樣能夠方便設(shè)計(jì)人員能快速熟悉模塊使用。CPU模塊對外接口主要分兩塊:指令與數(shù)據(jù)。它們各自有相同功能的輸入輸出接口變量。而這些輸入輸出接口為以下這些:

    clk:時(shí)鐘信號

    rst:復(fù)位信號

    int_i[6]:外部硬件中斷輸入

    data_i[32]:輸入數(shù)據(jù)

    ack_i:輸入響應(yīng)

    addr_o[32]:輸出地址

    data_o[32]:輸出數(shù)據(jù)

    we_o:輸出使能信號

    2.2 CPU模塊內(nèi)部功能實(shí)現(xiàn)

    CPU模塊內(nèi)部依照CPU執(zhí)行步驟進(jìn)行區(qū)分,分為提取、解碼、執(zhí)行、訪存和寫回 這五個(gè)部分。

    提取部分:主要功能是從對應(yīng)指令地址取出指令。代碼實(shí)現(xiàn)上,是通過把指令變量上獲取的指令代碼賦到內(nèi)部變量中。同時(shí)把指令地址變量指向下一個(gè)地址。

    解碼部分:主要功能是解析指令,從指令中解析出操作類型,所需的源操作數(shù),要寫入的目的寄存器地址等。代碼實(shí)現(xiàn)上,根據(jù)MIPS32指令集對指令代碼進(jìn)行分割,并把數(shù)值賦給對應(yīng)內(nèi)容的代碼。

    執(zhí)行部分:主要功能是執(zhí)行指令。代碼實(shí)現(xiàn)上,通過一個(gè)巨大的switch來應(yīng)對MIPS32的各自指令操作,;例如加減乘運(yùn)算(MIPS支持乘法)、移位操作或者邏輯操作。

    訪存部分:主要功能是對一些需要執(zhí)行存儲(chǔ)器操作的。代碼實(shí)現(xiàn)上,是把指令執(zhí)行結(jié)果寫到對外接口的變量中。

    寫回部分:主要功能是把相關(guān)指令操作的操作數(shù)寫入寄存器。代碼實(shí)現(xiàn)上,是把相關(guān)數(shù)值寫入代表寄存器的內(nèi)容。

    3 仿真與功能實(shí)現(xiàn)

    CPU模塊在設(shè)計(jì)之時(shí)就需要考慮到模塊驗(yàn)證。本文通過GNU環(huán)境下的MIPS交叉編譯環(huán)境編譯生成MIPS命令文件,本文生成的二進(jìn)制文件是一個(gè)冒泡算法。通過程序?qū)嶒?yàn)證明,CPU模塊能夠正常解析程序命令,能夠得出預(yù)期的實(shí)驗(yàn)結(jié)果。

    4 結(jié)語

    本文通過OpenCL架構(gòu)編寫在異構(gòu)架構(gòu)中能使用的CPU模塊。此CPU模塊支持完整的MIPS32指令集,并且在支持可重構(gòu)的異構(gòu)系統(tǒng)中,能夠依照需求讓協(xié)處理器能夠?qū)崿F(xiàn)CPU功能。在實(shí)際使用中拓寬了異構(gòu)系統(tǒng)的使用范圍,同時(shí)也豐富了設(shè)計(jì)人員在設(shè)計(jì)異構(gòu)系統(tǒng)的模塊庫。由于當(dāng)前很少有用于非數(shù)值運(yùn)算的異構(gòu)系統(tǒng)模塊,不僅僅上CPU模塊本身的功能拓展(比如把CPU模塊中添加內(nèi)存管理機(jī)制等),適合異構(gòu)系統(tǒng)的非數(shù)值運(yùn)算模塊編寫成了下一階段的工作重點(diǎn)與方向。

    參考文獻(xiàn)

    [1]薛勃,周玉潔.MIPS32 指令集兼容的CPU模擬器設(shè)計(jì)[J].計(jì)算機(jī)工程,2010,35(1):263-265.

    [2]姚英彪,曾憲彬.嵌入式系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)的QtMIPS仿真軟件開發(fā)[J].實(shí)驗(yàn)室研究與探索,2017,36(1):99-103.

    [3]葉繼華,郭 帆,余 敏,馬麗紅,陶 玲.Intel X86 系列 CPU 模擬器的研究與實(shí)現(xiàn) [J].江西師范大學(xué)學(xué)報(bào)(自然科學(xué)版). 2007. 31(6): 643-644.

    [4]Dominic Sweetman. See MIPS Run[M]. San Francisco, California: Morgan Kaufmann,2006.

    [5]范興山,彭 軍,黃樂天.基于OpenCL的FPGA 設(shè)計(jì)優(yōu)化方法研究[J].電子技術(shù)應(yīng)用,2014,40(1):16-19.

    [6]Aaftab Munshi, Benedict R. Gaster, Timothy G. Mattson, James Fung, Dan Ginsburg. OpenCL Programming Guide [M]. Boston , Massachusetts. : Addison-Wesley, 2006.

    新营市| 马山县| 南昌市| 盐城市| 新营市| 阜阳市| 威宁| 太湖县| 宜兰市| 玛多县| 炉霍县| 元朗区| 望谟县| 新巴尔虎右旗| 滦平县| 麦盖提县| 西华县| 两当县| 肃南| 盘锦市| 蚌埠市| 南郑县| 陇川县| 永泰县| 山阳县| 天长市| 江山市| 寿宁县| 遵义县| 巴林左旗| 西昌市| 桂平市| 都江堰市| 牡丹江市| 南和县| 紫金县| 徐水县| 台中县| 日喀则市| 萨迦县| 靖边县|