新聞中心

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

        基于GPU的AES算法實現

        作者: 時間:2011-06-14 來源:網絡 收藏


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

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


        關鍵詞: 實現 算法 AES GPU 基于

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 福贡县| 定结县| 永新县| 巴马| 梓潼县| 泗洪县| 江油市| 略阳县| 永丰县| 忻城县| 隆安县| 湘西| 霍城县| 岳阳县| 怀来县| 出国| 彩票| 独山县| 普兰店市| 马公市| 富源县| 深州市| 博爱县| 阿图什市| 固始县| 皋兰县| 莱州市| 洛浦县| 上高县| 天等县| 丹巴县| 神池县| 泰兴市| 兴文县| 大关县| 确山县| 雷波县| 乐业县| 乌拉特后旗| 平泉县| 方山县|