<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機與無線通信 > 設計應用 > 基于GPU的AES算法實現(xiàn)

          基于GPU的AES算法實現(xiàn)

          作者: 時間:2011-06-14 來源:網(wǎng)絡 收藏


          2 CUDA編程簡介
          2.1 CUDA簡介
          CUDA全稱是Compute Unified Device Architecture,是NVIDIA公司在2006年11月推出的一種在上進行通用計算的架構(gòu)。它具有全新的并行編程模型,不需要像傳統(tǒng)開發(fā)方式那樣進行圖形API的映射就可以使用的資源進行并行計算。CUDA是一個包含軟件和硬件的完整的并行計算架構(gòu),它的硬件設備是具有多個流處理器核的圖形并且支持CUDA的GPU,軟件部分包括編譯工具、驅(qū)動程序、runtime庫和一些常用的數(shù)學運算庫。
          2.2 CUDA中GPU結(jié)構(gòu)
          在CUDA架構(gòu)下,開發(fā)者可以通過創(chuàng)建和管理大量的線程來使用GPU的硬件資源進行并行計算。在CUDA中線程的創(chuàng)建和切換是由硬件來的,不會占用軟件的執(zhí)行時間。在CUDA的rtmtime庫中提供了訪問GPU硬件資源的接口,用戶通過調(diào)用runtime庫中的函數(shù)就可以直接訪問GPU的硬件資源。CUDA的編程語言是一種C語言的擴展,提供了通用的DRAM尋址方式,從而提供了很大的編程靈活性。操作系統(tǒng)可以管理多個并發(fā)運行的CUDA程序和圖形應用程序來訪問GPU。

          3 CUDA編程模型
          由于GPU的特點,它很適合做高密度數(shù)據(jù)的并行運算,但是對于不能并行的具有復雜執(zhí)行路徑的程序執(zhí)行效率就會很低。因此當通過CUDA在GPU上進行通用計算的開發(fā)時,是把在應用程序中高密度數(shù)據(jù)可以進行并行計算的部分做成一個稱作kernel的函數(shù)在GPU設備上執(zhí)行,而應用程序中的其他串行執(zhí)行的部分由主機上的CPU來完成。一個在GPU上執(zhí)行的kernel可以包含極高數(shù)量并發(fā)執(zhí)行的線程,在CUDA架構(gòu)中是通過設計kernel中的線程來完成通用計算的GPU的。主機和GPU設備之間的交互是通過在主機和設備各自的DRAM之間傳輸數(shù)據(jù)來的,而這種數(shù)據(jù)傳輸是由設備的DMA引擎完成的,因此數(shù)據(jù)的傳輸并不會造成太多主機CPU開銷。
          一個kernel中的線程是被分成具有相同大小的線程塊的,線程塊可以是一維、二維或者三維的,因此對應的線程就可以具有一維、二維或者三維的索引。在一個線程塊中每個線程都具有一個一維的ID,這個ID和索引具有以下kernel關(guān)系:對于一維的線程塊,線程就等于其索引;對于大小為ID(Dx,Dy)的二維線程塊,索引為(x,y)的線程ID為(x+v Dx);對于大小為(Dx,Dy,Dz)的三維線程塊,索引為(x,y,z)的線程ID為(x+y Dx+z Dx Dy)。
          同一個線程塊中的線程之間可以通過同步操作來協(xié)同內(nèi)存訪問。當通過調(diào)用內(nèi)置函數(shù)_syncthreads()在kernel中建立同步點時,一個線程塊中的執(zhí)行到同步點的線程會被掛起直到這個線程塊中所有的線程都到達這個同步點。
          為了線程之間能夠有效地協(xié)同工作,同步操作被設計成只需要一條指令就可以實現(xiàn),并且同一個線程塊中的線程需要在同一個多核處理器上執(zhí)行。因此每個線程塊中全部線程的數(shù)量就受到一個處理器核上的存儲資源的限制。在當前的GPU上,一個線程塊可以包含最多512個線程。
          雖然一個線程塊可以包含的線程數(shù)量有限制,但是一個kernel可以包括多個大小相同的線程塊,kernel中的線程數(shù)就等于每個塊中線程的數(shù)量乘以線程塊的數(shù)量。線程塊之間是獨立的,它們可以并行地執(zhí)行,也可以串行地順序執(zhí)行。這就允許線程塊在多個處理器核之間按照任何順序調(diào)度,從而使得開發(fā)具有靈活性和可擴展性。而且這樣線程塊的數(shù)量就可以根據(jù)待處理數(shù)據(jù)的大小決定,而不是由系統(tǒng)中多核處理器的個數(shù)決定,也就是說線程塊的數(shù)量可以大于多核處理器的數(shù)量。因此kernel中可以具有大量的線程塊,從而具有極高的線程數(shù)。但是由于線程塊之間執(zhí)行的不確定性,不同線程塊的線程之間不能進行同步操作。
          3.1 設計
          首先把待處理的大數(shù)據(jù)塊劃分為尺寸相同的多個小數(shù)據(jù)塊,然后使用標準的對各個小數(shù)據(jù)塊進行并行的運算,運算完成后把每個小數(shù)據(jù)塊的值按順序保存在一起,最后再把所有的輸出結(jié)果使用標準的來處理得到最后的結(jié)果,這樣就可以使用大量的線程來并行地對每個小數(shù)據(jù)塊進行運算。但是當數(shù)據(jù)分塊足夠多線程數(shù)很大時,就需要將線程劃分為多個線程塊。由于不同線程塊中的線程之間不能進行同步,所以設計了兩個kernel,第一個kernel的任務是使用大量并發(fā)執(zhí)行的線程對原始數(shù)據(jù)分成的多個小塊數(shù)據(jù)進行運算,并把結(jié)果按照順序保存在設備DKAM中。等第一個kernel執(zhí)行完成后,由主機啟動第二個kernel,這個kernel會根據(jù)主機提供的地址和數(shù)據(jù)大小對第一個kernel的計算得到的中間值進行運算,這一步只需用一個線程來執(zhí)行,由于中間值的大小遠遠小于原始數(shù)據(jù),所以這一步的計算開銷是很小的。
          3.2 算法優(yōu)化
          GPU計算雖然高效,但是也有瓶頸。CPU代碼在調(diào)用GPU的kernel函數(shù)時,首先要將內(nèi)存中的數(shù)據(jù)塊讀到流中,處理完后,又要將流寫回內(nèi)存。


          關(guān)鍵詞: 實現(xiàn) 算法 AES GPU 基于

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();