使用圖形處理單元的統(tǒng)計分析的制作方法
【技術(shù)領(lǐng)域】
[0001] 大規(guī)模或龐大規(guī)模統(tǒng)計分析(有時被稱作MaSSA)可以涉及:一次檢查大量數(shù)據(jù)。 例如,在天文學(xué)、物理學(xué)、遙感、海洋學(xué)和生物學(xué)中使用的科學(xué)儀器可以產(chǎn)生較大數(shù)據(jù)量。高 效處理這種大量數(shù)據(jù)可能是富有挑戰(zhàn)性的。
【附圖說明】
[0002] 關(guān)于下面的附圖來描述一些實施例: 圖1是根據(jù)示例實施方式的系統(tǒng)的示意圖。
[0003] 圖2是根據(jù)示例實施方式的系統(tǒng)的示意工作流圖。
[0004] 圖3是根據(jù)示例實施方式的數(shù)據(jù)結(jié)構(gòu)的示意圖。
[0005] 圖4是描繪了根據(jù)示例實施方式的用于在GPU上執(zhí)行指令的技術(shù)的流程圖。
[0006] 圖5是描繪了根據(jù)示例實施方式的用于使用GPU執(zhí)行統(tǒng)計分析的技術(shù)的流程圖。
【具體實施方式】
[0007] 傳統(tǒng)數(shù)據(jù)庫系統(tǒng)可能在為大規(guī)模統(tǒng)計分析處理數(shù)據(jù)時遭遇某些困難。當(dāng)前數(shù)據(jù)庫 系統(tǒng)可以接近于以元素粒度存儲數(shù)據(jù)。例如,諸如矩陣之類的數(shù)據(jù)結(jié)構(gòu)可以被存儲在陣列 中,并且該矩陣中的每個數(shù)據(jù)元素可以對應(yīng)于該陣列中的元素。具有許多元素的密集陣列 (例如,表示大矩陣的陣列)可以占用大量存儲空間,并在一些情況下可以大于可用的存儲 器。
[0008] 此外,數(shù)據(jù)庫查詢引擎使用迭代執(zhí)行模型來逐元素地對所存儲的數(shù)據(jù)執(zhí)行函數(shù)。 由此,迭代遍歷數(shù)據(jù)結(jié)構(gòu)中的每個元素以滿足復(fù)雜的查詢請求可能是相對低效的。在較大 數(shù)據(jù)集的上下文中,可能加劇在執(zhí)行這種查詢請求時的低效,從而使數(shù)據(jù)庫系統(tǒng)的性能降 級。
[0009] 圖1是根據(jù)一些實施方式的示例系統(tǒng)100的示意圖。系統(tǒng)100的數(shù)據(jù)庫子系統(tǒng) 105可以包括彼此通信的處理器110、存儲器120和儲存器130。儲存器130可以存儲用戶 定義數(shù)據(jù)135,其在下文中更詳細(xì)描述。在一些實施方式中,用戶定義數(shù)據(jù)135還可以被存 儲在存儲器120中。盡管在一些實施方式中對數(shù)據(jù)庫子系統(tǒng)進(jìn)行參考,但是注意,本文描述 的技術(shù)或機制還可以被用在其他系統(tǒng)中。
[0010] 數(shù)據(jù)庫子系統(tǒng)105還可以與圖形處理單元(GPU) 140進(jìn)行通信。GPU 140可以耦 合至GPU存儲器150, GPU存儲器150可以存儲GPU庫160。GPU 140可以是能夠執(zhí)行傳統(tǒng) 地由諸如處理器110之類的中央處理單元(CPU)執(zhí)行的特定計算的圖形處理單元。該能力 可以被稱作圖形處理單元中的通用計算(GPGPU)。這種能力可以附加于GPU 140的執(zhí)行用 于計算機圖形的計算的能力,計算機圖形提供用于在顯示設(shè)備(未示出)中顯示的圖像。
[0011] GPU庫160可以提供接口以供數(shù)據(jù)庫子系統(tǒng)105訪問GPU 140,以便執(zhí)行傳統(tǒng)地由 CPU (例如,處理器110)執(zhí)行的特定計算。的確,GPU庫160可以提供對用于GPU 140以及 GPU存儲器150的指令集的訪問。例如,通過GPU庫160,開發(fā)者可能能夠使用標(biāo)準(zhǔn)編程語 言(諸如C)來對指令進(jìn)行編碼以在GPU 140上執(zhí)行,以便利用GPU 140的并行處理架構(gòu)。
[0012] 在一些實施方式中,GPU 140可以具有多個處理核,其中,每個核能夠同時處理多 個線程。GPU 140可以具有相對較高的并行處理能力,這可以有益于諸如由大規(guī)模統(tǒng)計分析 產(chǎn)生的那些數(shù)據(jù)集之類的較大數(shù)據(jù)集上的操作。GPU 140內(nèi)的某些處理核可以具有相對較 高的浮點計算能力,這可以在大規(guī)模統(tǒng)計分析中合適。其他處理核可以具有相對較低的浮 點計算能力并可以僅用于處理圖形數(shù)據(jù)。例如,在矩陣上執(zhí)行的代數(shù)運算(例如矩陣乘法、 轉(zhuǎn)置、加法等)可以有助于由GPU 140提供的并行處理架構(gòu)和浮點計算能力。
[0013] 在一些實施方式中,用戶定義數(shù)據(jù)135可以包括用于將數(shù)據(jù)結(jié)構(gòu)劃分成多個段并 將這些段存儲為表或陣列中的數(shù)據(jù)元素的指令。關(guān)于圖3更詳細(xì)地描述這種表。此外,用 戶定義數(shù)據(jù)135還可以包括用于逐段地而不是逐元素地對數(shù)據(jù)結(jié)構(gòu)執(zhí)行操作的用戶定義 函數(shù)。為了執(zhí)行該操作,用戶定義函數(shù)可以引用GPU庫160以指示GPU 140執(zhí)行該函數(shù)。
[0014] 圖2提供了根據(jù)一些實施方式的數(shù)據(jù)庫系統(tǒng)200的示意工作流圖。數(shù)據(jù)庫系統(tǒng)200 可以包括用于接收查詢202并返回查詢202的結(jié)果204的數(shù)據(jù)庫引擎210。在一些實施方 式中,數(shù)據(jù)庫引擎210可以包括與圖1的數(shù)據(jù)庫子系統(tǒng)105類似的部件,諸如處理器110和 存儲器120。
[0015] 如圖2中所示,數(shù)據(jù)庫引擎210可以響應(yīng)于接收到查詢202而訪問用戶定義數(shù)據(jù) 220 (類似于圖1中的用戶定義數(shù)據(jù)135)。用戶定義數(shù)據(jù)220可以包括在儲存器230中存 儲的數(shù)據(jù)元素上操作的用戶定義函數(shù)。此外,這些數(shù)據(jù)元素可以被包含在大規(guī)模統(tǒng)計分析 中使用的大型數(shù)據(jù)結(jié)構(gòu)內(nèi)。由此,GPU 240中的GPU庫250可以被調(diào)用或引用以執(zhí)行用戶 定義函數(shù),以便利用GPU 240的并行處理能力。
[0016] 在一些實例中,數(shù)據(jù)庫引擎210可以是使用PostgreSQL來實現(xiàn)的,PostgreSQL提 供了開源對象關(guān)系數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)。PostgreSQL可以提供框架以供開發(fā)者通過 使用各種用戶定義的定義來擴展ORDBMS。例如,用戶定義類型(UDT)可以使開發(fā)者能夠在 PostgreSQL內(nèi)創(chuàng)建唯一數(shù)據(jù)結(jié)構(gòu)。類似地,用戶定義函數(shù)(UDF)可以實現(xiàn)對在UDT上操作 的函數(shù)的創(chuàng)建。用戶定義聚合體(UDA)可以是對一組值執(zhí)行計算并返回單個值的UDF的 類型。因此,不是創(chuàng)建完全新的編程語言以管理大規(guī)模數(shù)據(jù)分析中的許多數(shù)據(jù),而是諸如 PostgreSQL之類的現(xiàn)有數(shù)據(jù)庫框架可以被簡單地擴展以通過使用UDT、UDF和UDA來提供 期望的功能。
[0017] 例如,可以創(chuàng)建UDT數(shù)據(jù)結(jié)構(gòu),其用于將矩陣存儲為子矩陣的集合,而不是矩陣中 的個體數(shù)據(jù)元素的集合??梢詣?chuàng)建各種UDF和UDA,其可以在上面創(chuàng)建的UDT數(shù)據(jù)結(jié)構(gòu)上操 作。例如,開發(fā)者可以創(chuàng)建對UDT數(shù)據(jù)結(jié)構(gòu)執(zhí)行矩陣乘法(即,以子矩陣粒度而不是以數(shù)據(jù) 元素粒度)的UDF。當(dāng)與逐元素地操作的函數(shù)相比時該級別的抽象可以實現(xiàn)數(shù)據(jù)庫系統(tǒng)200 中精簡的輸入/輸出(I/O)操作。
[0018] 在一些實施方式中,GPU庫250可以依照計算統(tǒng)一數(shù)據(jù)架構(gòu)(CUDA)、開放計算語言 (OpenCL)或其組合。OpenCL可以提供用于編寫可跨包括CPU、GPU和其他類型的處理器的異 構(gòu)平臺執(zhí)行的程序的標(biāo)準(zhǔn)。因此,在OpenCL下編寫的程序可以生成可由處理器110和GPU 140二者執(zhí)行的指令。CUDA可以是有NVIDIA公司開發(fā)以具體管理NVIDIA GPU的并行計算 架構(gòu)。使用CUDA,開發(fā)者可以使用"C"編程語言來調(diào)用CUDA庫中的函數(shù)以執(zhí)行NVIDIA GPU 上的指令。因此,在一些示例中,GPU 140可以是與CUDA庫相關(guān)聯(lián)的NVIDIA GPU。
[0019] 圖3是描繪了根據(jù)一些實施方式的數(shù)據(jù)結(jié)構(gòu)的示意圖。在一些實例中,數(shù)據(jù)結(jié)構(gòu) 可以是諸如矩陣A 310之類的矩陣。例如,矩陣A 310可以是具有16個數(shù)據(jù)元素的4X4 矩陣,并可以被劃分成四個段P11 320、P12 330、P21 340和P22 350。P11 320可以表示矩陣A 310的左上段,P12 330可以表示右上段,P21 340可以表示左下段,并且P22 350可以表示右 下段。因此,每個段可以是矩陣A 310的2X2子矩陣。在一些實施方式中,段可以被稱作 "組塊"。
[0020] 然后,在將矩陣A 310劃分成這四個段之后,然后可以由矩陣A' 360表示矩陣A, 矩陣A' 360可以包括每個段320-350或子矩陣作為數(shù)據(jù)元素。然后,可以將矩陣A' 360 存儲成陣列,諸如表A 370,該陣列可以由計算機或其他處理設(shè)備識別。在一些實例中,可以 使用PostgreSQL中的UDT來定義表A 350以具體地在表A 350中將矩陣A 310存儲為其 段320-250的集合而不是其個體元素的集合。
[0021] 此外,在一些實施方式中,可以以列優(yōu)先形式將矩陣A 310存儲在存儲 器(例如,圖1中的存儲器120和/或GPU存儲器150)中。列優(yōu)先形式可以提 供用于將多維矩陣或其他數(shù)據(jù)結(jié)構(gòu)線性化成一維數(shù)據(jù)結(jié)構(gòu)或設(shè)備(諸如存儲器 120/150)的技術(shù),該一維數(shù)據(jù)結(jié)構(gòu)或設(shè)備可以串行地存儲數(shù)據(jù)。例如,考慮矩陣 以列優(yōu)先形式,可以將該矩陣存儲在一維矩陣中作為{1,4,2,5,3, 6}。此外, 以列優(yōu)先形式存儲數(shù)據(jù)可以適于促進(jìn)某些GPU計算技術(shù)。然而,其他儲存方法也是可能的, 諸如行優(yōu)先、Z-序等。
[0022] 如前所提及,還可以創(chuàng)建某些UDF或UDA來在諸如表A 370之類的UDT數(shù)據(jù)結(jié)構(gòu) 上操作。在一些實施方式中,表A 370可以將矩陣A 310概念化成兩個行和兩個列。因此, 表A 370的索引I 372可以表示矩陣A 310的行,而索引J 374可以表示矩陣A 310的列。 值376可以對應(yīng)于由索引I 372和索引J 374的每個組合表示的子矩陣320-350。例如,子 矩陣P21 340是與索引1=2且索引J=I時相對應(yīng)的值376。
[0023] 對于UD