国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種帶多級Cache的SIMD眾核處理器上的稀疏矩陣存儲方法

      文檔序號:8319086閱讀:345來源:國知局
      一種帶多級Cache的SIMD眾核處理器上的稀疏矩陣存儲方法
      【技術(shù)領(lǐng)域】
      [0001] 本發(fā)明涉及并行程序設(shè)計(jì)領(lǐng)域,特別涉及一種帶多級Cache的SMD眾核處理器上 的稀疏矩陣存儲方法。
      【背景技術(shù)】
      [0002] 稀疏矩陣向量乘(SpMV)是很多科學(xué)和工程應(yīng)用的一個(gè)重要的計(jì)算核心,它的計(jì) 算效率是科學(xué)和工程應(yīng)用的計(jì)算性能的關(guān)鍵。該算法的主要功能是計(jì)算 y = y+Ax,其中A是 一個(gè)二維稀疏矩陣,X和y都是一維稠密的向量。然而該算法核心在現(xiàn)代具有多級Cache的 SMD眾核處理器上,由于稀疏矩陣非零元分布的不規(guī)則性,其SMD利用率很低,導(dǎo)致SpMV 性能較差。要想提高該算法的性能,我們往往需要綜合考慮輸入集和計(jì)算平臺的特性,然后 選擇合適的稀疏矩陣存儲格式,這些格式可以有效利用具體計(jì)算矩陣的數(shù)據(jù)特點(diǎn)和計(jì)算平 臺的結(jié)構(gòu)特點(diǎn)。
      [0003] 隨著多核CPU的快速發(fā)展,其單指令多數(shù)據(jù)SIMD計(jì)算單元的計(jì)算寬度也越來越 大。例如,Intel MMX指令提供了 64位寬度的SMD支持,Intel SSE指令則支持128位的 SMD支持,Intel AVX指令支持256位的SMD操作。近年來英特爾推出了 Intel Xeon Phi 協(xié)處理器,其提供了 512位的SMD計(jì)算單元。這些處理器的共同特點(diǎn)是:每個(gè)計(jì)算核心都 具有能夠處理長向量的寬SMD計(jì)算單元,并具有多層高速緩存(Cache)結(jié)構(gòu)。
      [0004] 由于這些處理器擁有寬SMD計(jì)算部件,所以其非常適合稠密矩陣的計(jì)算。而稀疏 矩陣向量乘要想在這種帶多級Cache的SMD處理器上獲得很高的計(jì)算性能,需要克服由于 稀疏矩陣非零元分布不規(guī)則導(dǎo)致的計(jì)算瓶頸:
      [0005] (I)SMD利用率較低;
      [0006] (2)x向量中的數(shù)據(jù)重用率低,使得高速緩存缺失和訪存延遲開銷很大;
      [0007] 本發(fā)明充分地利用了帶多級Cache的SMD眾核處理器的各種硬件特性,如每個(gè) 核上的寬SMD計(jì)算能力,多級高速緩存等,提出了一種對稀疏矩陣進(jìn)行分塊壓縮的存儲辦 法,稱為ERB (ELLPACK Register Blocking),該方法是一種寄存器分塊優(yōu)化方法。該方法有 效地解決了稀疏矩陣向量乘在帶多級Cache的SMD眾核處理器上的計(jì)算瓶頸,提供了一種 可以高效地利用其結(jié)構(gòu)特征的稀疏矩陣存儲格式。

      【發(fā)明內(nèi)容】

      [0008] 本發(fā)明提出一種帶多級Cache的SMD眾核處理器上的稀疏矩陣存儲方法 ERB (ELLPACK Register Blocking),之前的工作表明,基于ELLPACK的稀疏矩陣向量乘算法 可以有效地利用寬SMD計(jì)算能力,而且ELLPACK的變種在CPU、GPU和MIC等具有寬SMD 計(jì)算能力的架構(gòu)上都表現(xiàn)出了不俗的計(jì)算性能。所以,本發(fā)明在ELLPACK的基礎(chǔ)上,通過對 以ELLPACK格式存儲的稀疏矩陣進(jìn)行分塊和壓縮等操作,提出一種可以有效解決【背景技術(shù)】 中所述瓶頸的寄存器分塊優(yōu)化的稀疏矩陣存儲方法。
      [0009] 本發(fā)明實(shí)現(xiàn)的針對具有寬SMD計(jì)算單元的處理器的稀疏矩陣存儲方法ERB的具 體實(shí)現(xiàn)步驟如圖1所示,本發(fā)明的格式轉(zhuǎn)換過程共有5個(gè)步驟,具體如下:
      [0010] (1)特征提取及矩陣掃描,按行掃描稀疏矩陣,獲取稀疏矩陣中非零元個(gè)數(shù)最多的 行的非零元個(gè)數(shù)a以及處理器SIMD處理單元中可同時(shí)計(jì)算的非零元個(gè)數(shù)b,圖2、圖3、圖4 中假設(shè)b為2,計(jì)算得到大于a且為b的整數(shù)倍的最小值作為臨時(shí)行寬度。按行掃描稀疏 矩陣A,用數(shù)組Value順序存儲稀疏矩陣每一行的非零元,每行非零元個(gè)數(shù)不足臨時(shí)行寬度 的,在該行補(bǔ)〇。用數(shù)組Colidx存儲Value中每一個(gè)非零元對應(yīng)的列索引值,對Value中的 零元(Value中存儲全部非零元,但由于每行非零元個(gè)數(shù)不同,所以在每行最后補(bǔ)0,使每行 長度相等,補(bǔ)的〇即此處的零元),在Colidx中存儲為-1。稀疏矩陣A掃描結(jié)果如圖2所 不O
      [0011] ⑵列分塊,將步驟1得到的稀疏矩陣按列寬為b進(jìn)行按列分塊。由于下面的轉(zhuǎn)換 過程同時(shí)應(yīng)用于Value矩陣和Colidx矩陣,并且操作完全一致,故以下僅以Value數(shù)組的 變換作圖闡明。在步驟1得到的稀疏矩陣中,將Value矩陣和Co I i dx矩陣按同一固定列寬 度為b分塊。
      [0012] (3)列壓縮,在按列分塊的基礎(chǔ)上,對每一個(gè)列塊,將其中全零的行去除,并將其余 行依次向上壓縮。Value矩陣的列分塊和列壓縮的過程如圖3所示。圖中列塊1中,第2行 的元素都是零元,則將第三行及其后的行向上壓縮。
      [0013] (4)行分塊,在列壓縮的基礎(chǔ)上,對每一個(gè)列塊按行分塊大小為b進(jìn)行按行分塊得 到子塊。并用相同的辦法處理子塊的非零元的列信息矩陣,此外還要保存子塊每一行的行 信息。Value矩陣的行分塊過程如圖4所示。
      [0014] (5)按行存儲,將子塊內(nèi)的數(shù)值按行存儲,并將所有的塊按行存儲,則得到ERB存 儲格式的稀疏矩陣。
      [0015] 在按行存儲后,轉(zhuǎn)換過程執(zhí)行完畢,稀疏矩陣最終的存儲格式如圖5所示,接下來 就需要將分好的子塊平均分配到處理器各核上進(jìn)行稀疏矩陣向量乘的計(jì)算。
      [0016] 與現(xiàn)有技術(shù)中存在的問題相比較,本發(fā)明所具有的優(yōu)點(diǎn)和積極效果主要體現(xiàn)在:
      [0017] (1)本發(fā)明通過對稀疏矩陣進(jìn)行列分塊和列壓縮,使得矩陣中的非零元集中,在最 后ERB存儲格式的每個(gè)子塊中,非零元的密度高。相比較目前在具有寬SMD計(jì)算單元的處 理器上的稀疏矩陣向量乘算法可以提高每個(gè)計(jì)算核的SMD寄存器和SMD計(jì)算單元的利用 率,是一種寄存器分塊優(yōu)化的存儲方法;
      [0018] (2)本發(fā)明通過對稀疏矩陣進(jìn)行細(xì)粒度的劃分,然后對每個(gè)塊進(jìn)行稀疏矩陣向量 乘的過程中保留了稀疏矩陣非零元之間固有的局部性,相比較目前基于ELLPACK的優(yōu)化辦 法,有效地保留了稀疏矩陣非零元固有的局部性,從而很好地利用了具有寬SIMD計(jì)算單元 的處理器結(jié)構(gòu)高速緩存中的局部性;
      [0019] 本發(fā)明提出的方法相較于Intel MKL中已有的稀疏矩陣向量乘算法,算法運(yùn)行時(shí) 的實(shí)際表現(xiàn)好很多,而且本優(yōu)化方法對稀疏矩陣的模式?jīng)]有限制,是一個(gè)通用的能夠有效 提高稀疏矩陣向量乘算法在帶多級Cache的SIMD眾核處理器上計(jì)算效率的存儲方法。
      【附圖說明】
      [0020] 圖1、針對具有寬SMD計(jì)算單元的處理器的稀疏矩陣存儲格式轉(zhuǎn)換過程示意圖;
      [0021] 圖2(a)、稀疏矩陣A掃描結(jié)果示意圖,普通的稀疏矩陣A ;
      [0022] 圖2(b)、為掃描后的結(jié)果格式;
      [0023] 圖3(a)、矩陣的Value矩陣列分塊及列壓縮示意圖,按列塊大小為2進(jìn)行按列分 塊,形成3個(gè)列塊;
      [0024] 圖3 (b),在每個(gè)列塊中,分別進(jìn)行按列壓縮,列塊1的第2行,列塊2的第1行和第 2行由于是全零的行,則被其后的行所壓縮;
      [0025] 圖4、矩陣的Value矩陣行分塊示意圖,圖中先按行塊大小為2進(jìn)行按行分塊,去掉 全為〇的塊后,則剩余4個(gè)子塊;
      [0026] 圖5、稀疏矩陣ERB存儲格式示意圖,轉(zhuǎn)換結(jié)果由三個(gè)數(shù)組組成,其中value數(shù)組按 列存儲矩陣的非零元的值;colidx數(shù)組按列存儲矩陣非零元的列坐標(biāo);row_perm數(shù)組存儲 每個(gè)塊中每行的原始行坐標(biāo)。
      【具體實(shí)施方式】
      [0027] 本節(jié)將本發(fā)明應(yīng)用于一個(gè)典型的在帶多級Cache的SMD眾核處理器上的稀疏矩 陣向量乘計(jì)算。從而進(jìn)一步說明本發(fā)明的目的、優(yōu)點(diǎn)和關(guān)鍵技術(shù)特征。這個(gè)實(shí)施只是該方 案的一個(gè)典型范例,凡采取替換或者等效變換而形成的技術(shù)方案,均落在本發(fā)明要求保護(hù) 的范圍之內(nèi)。
      [0028] 對于一個(gè)要計(jì)算的稀疏矩陣A :
      [0029]
      【主權(quán)項(xiàng)】
      1. 一種帶多級化che的SIMD眾核處理器上的稀疏矩陣存儲方法,其特征在于;將稀疏 矩陣通過五次矩陣變換后進(jìn)行存儲,包括W下步驟: 特征提取及矩陣掃描:獲取稀疏矩陣中非零元最多的行的非零元個(gè)數(shù)a W及處理器 SIMD處理單元中可同時(shí)計(jì)算的非零元個(gè)數(shù)b,計(jì)算得到大于a且為b的整數(shù)倍的最小值作 為臨時(shí)行寬度,按行掃描稀疏矩陣A,用數(shù)組Value順序存儲稀疏矩陣每一行的非零元,每 行非零元個(gè)數(shù)不足臨時(shí)行寬度的,在該行后補(bǔ)0,用數(shù)組Colidx存儲Value中每一個(gè)元素對 應(yīng)的列索引值,對Value中的零元,在其對應(yīng)的Colidx值為-1 ; 列分塊,將特征提取得到的b的值作為列分塊寬度,對Colidx數(shù)組和Value數(shù)組按列 劃分為多個(gè)列塊"; 列壓縮,在按列分塊的基礎(chǔ)上,對每一個(gè)塊,將其中全零的行去除,并將其余行依次向 上壓縮; 行分塊,在列壓縮的基礎(chǔ)上,對每一個(gè)列塊在Value和Colidx的值按行寬為b進(jìn)行按 行分塊得到子塊,并用row_perm數(shù)組保存每個(gè)子塊的行索引信息; 按行存儲,將子塊內(nèi)的元素按行存儲,并將所有的塊按行存儲,則得到ERB存儲格式的 稀疏矩陣。
      2. 根據(jù)權(quán)利要求1所述的方法,其特征在于:在計(jì)算時(shí),從文件中讀入與稀疏矩陣相關(guān) 的Value, Colidx和row_pe;rm數(shù)組,然后根據(jù)子塊大小確定每個(gè)子塊所在的位置從Value 數(shù)組中讀入各子塊的非零元的值,從Colidx中讀入各子塊中非零元的列坐標(biāo)信息,從row_ perm中讀入各子塊的行信息;然后將各子塊按固定的分配算法分配到不同的核上去進(jìn)行 稀疏矩陣向量乘的計(jì)算。
      3. 根據(jù)權(quán)利要求1所述的方法,其特征在于;矩陣變換過程中參數(shù)包括: 1) 稀疏矩陣;行數(shù),列數(shù),非零元個(gè)數(shù),每行非零元個(gè)數(shù),按行和按列分塊大??; 2) 處理器;SIMD計(jì)算單元寬度; 3) 數(shù)據(jù)類型;單精度浮點(diǎn)類型,或雙精度浮點(diǎn)類型。
      【專利摘要】本發(fā)明公開了一種帶多級Cache的SIMD眾核處理器上的稀疏矩陣存儲方法,包括:(1)獲取矩陣A中行非零元個(gè)數(shù)最大值a,處理器SIMD單元可同時(shí)計(jì)算的非零元個(gè)數(shù)b,計(jì)算大于a且為b的倍數(shù)的最小值作為臨時(shí)行寬度;(2)對矩陣A,數(shù)組Value和Colidx分別順序存儲每一行的非零元值和列坐標(biāo),每行非零元個(gè)數(shù)不足臨時(shí)行寬度的,在該行尾分別補(bǔ)0和-1;(3)對Colidx和Value按b列分塊;(4)每個(gè)列塊按行壓縮,使列塊中有非零元的行集中于列塊上部;(6)列塊按b行分塊,得到子塊;(7)去除全零子塊,將子塊按行存儲。本發(fā)明的存儲方法將稀疏矩陣分成稠密子塊,在保留非零元局部性的基礎(chǔ)上,提高了對處理器SIMD處理單元以及寄存器的利用率,提高了稀疏矩陣向量乘的性能。
      【IPC分類】G06F12-08, G06F9-38
      【公開號】CN104636273
      【申請?zhí)枴緾N201510091269
      【發(fā)明人】韓文廷, 張愛民, 江霞, 安虹, 陳俊仕, 孫蓀, 汪朝輝
      【申請人】中國科學(xué)技術(shù)大學(xué)
      【公開日】2015年5月20日
      【申請日】2015年2月28日
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1