眾核上的資料倉儲並行優化

2022-04-08 11:12:00 字數 3230 閱讀 1442

近幾年眾核硬體逐漸被應用到資料倉儲產品當中。目前主要的眾核硬體包括以intel scc為代表的眾核cpu、以intel志強融核系列為代表的眾核協處理器、以nvidia和amd為代表的眾核gpu。本文第一章介紹目前的主要的眾核硬體及其特性,並從價效比和通用性方面對眾核硬體進行比較;第二章介紹目前資料倉儲中典型操作符在眾核硬體上的優化技術。

多核的cpu雖然不是嚴格意義上的眾核,但是在目前的很多研究中都將多核cpu視為和眾核具相似的硬體而進行比較研究。多核cpu目前通常認為是8核及以下的通用cpu,每個核都有獨立的l2和l1 cache,多個核之間需要通過共享的記憶體或者l3 cache才能交換資料。但核心數量並不是多核與眾核的嚴格分界線,intel目前核數最多cpu可以達到10個核。多核與眾核的主要區別在於通用性和體系結構方面。眾核的cpu目前並不常見,在市場上沒有銷售。以intel scc為代表的眾核cpu只提供給合作的高校和科研院所作為研究用途。在近幾年的**中常可以看見scc的身影。

intel scc中整合了48個對等的核,即每個核的功能和效能都是一樣的,且每個核都有專屬的l2 cache。每兩個核整合在乙個tile中,共24個tile組成乙個4*6的矩陣,之間通過cpu內部的告訴匯流排連線。每個tile中的兩個核共享一部分(16kb)l1 cache,這部分共享的l1 cache成為mpb(massage passing buffer)。所有tile中的mpb又可以被任意乙個核訪問,從而構成了乙個384kb l1 cache。

scc中的每個核具有1ghz的主頻和較強的邏輯計算能力,支援的指令集和普通的cpu類似。從而在增加核數的同時保證了通用性。此外,特殊的cache設計使得可以針對具體的計算任務做出優化。協處理器通過高速匯流排和cpu連線或者pci-e藉口連線到北橋上,是輔助cpu完成特定計算任務的計算器件。arm架構的微處理器可以支援多大數十個協處理器,在嵌入式終端和智慧型裝置中應用非常廣泛。在通用計算平台上,intel也推出了志強融核系列的協處理產品。

至強融核協處理器其實是一款搭載眾核處理器、視訊記憶體(gddr5)、pci-e16x介面的外設,通過pci-e插槽接入主機板,通過北橋和cpu、主存連線。

目前的志強融合協處理器最多繼承61個核,其中乙個核是處理pci-e資料傳輸的,其他60個核是對等的計算單元。支援的板載記憶體的型別為ddr5,具有300+gb/s的訪存頻寬,最大可以支援16gb的板載記憶體。較gpu而言,協處理器支援的板載訪存頻寬相近,但支援的最大記憶體大出1-2倍,同時協處理器的核數相對較少、但邏輯計算能力更強、通用性更好。眾核gpu是目前最為常見的眾核硬體。主要的gpu廠商nvida和amd都提供了眾核的gpu產品。其中nvida實現的cuda技術應用已經非常廣泛。在架構上gpu和協處理器有相似之處。但眾核gpu中的核心計算能力較強、邏輯能力很差,因此gpu的專用性更強,通用性更差。此外,gpu中的核心通常被分為若干個組,每個組中有幾十個核心,這些核心可以同時執行同一條指令、處理不同的資料,即simp。在通用性方面

1、多核cpu:通用,直接通過資料匯流排訪問系統記憶體,頻寬20-30gb/s;

2、眾核 cpu:通用性稍差,架構類似gpu和協處理器,但可以直接訪問系統主存,目前還沒推廣

3、眾核協處理器:和gpu類似,單核的計算能力和邏輯運算能力更強,通用性更好一些。

4、眾核gpu: 浮點計算能力強,邏輯運算能力差,視訊記憶體幾gb,頻寬200gb/s,但需要通過pci-e匯流排從主訪問資料(pci-e 16x :4gb/s),通用性差

能耗、價效比的比較

gpgpu的價效比最高、能耗最低,但軟體開發成本高,在部分演算法中效能並不突出 many-core cpu總體好於multi-core cpu multi-core cpu在某些複雜計算中表現突出。

總結下來,除了通用的多核cpu以外,many-core並不是共享所有的主存和cache的,無論cpu還是gpu都是numa(non uniform memory access architecture,非統一記憶體訪問架構)的架構。 演算法要訪問資料。要提高並行度,就要提高資料訪問的區域性性 gpu和協處理器訪問系統記憶體的頻寬會比訪問本地記憶體地頻寬低50倍以上。

眾核處理器通常在快取方面都有著和通用的多核cpu不同的設計,比如scc就支援l1 cache的跨核訪問。在資料倉儲演算法中,表掃面演算法由於資料區域性性不好,資料如果經過多級快取進入核中處理勢必會影響效率,因此優化時可以針對表掃瞄演算法,將資料直接載入到mpb中,進而進入核中做謂詞過濾。資料倉儲中常用的連線演算法包括sort-merge連線和hash連線。

sort-merge連線由於排序和歸併的過程中,多個執行緒(核)並不需要共享資料,因此很適合在眾核硬體上實現。但是sort-merge本身有很多的侷限性,比如資料倉儲中的連線通常在維表和事實表之間進行,而事實表是非常大的,sort-merge要求事實表實現在連線屬性上排序,排序的代價是非常大的。

更為通用的hash連線由於在hash劃分資料和連線時,多個執行緒(核)需要訪問共享的雜湊表和雜湊桶,如果不做優化,在眾核上是不可能有明顯的效能提公升的。因此出現了一些優化的技術。

常見的優化技術是基於bucket的,即先將資料劃分為不相關的bucket再做鏈結。那麼演算法就分為分桶和連線兩個部分。

在分桶階段,為了利用多核達到效能的提公升,也要保證多個核心不能有共享的資料,常用的演算法有兩種:

1、類似quicksort的分桶演算法

step1: 將array中hash值末位為0和為1的元素分開

step2: 對分開的兩個子array分別按照hash值末兩位的值分開,依次遞迴,直到子array中元素個數小於某個閾值

2、兩階段分桶演算法

hash桶的個數是固定的,第一階段,各個core將資料表的一段hash到自己的桶裡。 第二階段,各個core將某一列上的桶合併。如圖2.1所示。

圖2.1. 兩階段分桶演算法示意圖

第一種演算法的複雜度較高一些(n*log n),後一種演算法雖然是線性的時間複雜度,但是要求分桶的個數預先固定,在資料傾斜的情況下就會導致分桶的不均衡。

分桶之後的連線演算法可以採用基於點陣圖的連線演算法。如圖2.2所示,第一階段是分桶,第二階段是在左表的乙個分桶上計算出乙個位圖,其實就是乙個布隆過濾器,第三階段基於左表的位圖來過濾右表的分桶,避免了不必要的連線操作,也就避免的大量的記憶體訪問。

圖2.2. 基於分桶的連線演算法

此外,連線演算法的優化方面,由於資料倉儲中維表很小,可以在維表上做完謂詞過濾、得到乙個布林向量,將布林向量讀入到各個核的緩衝區中,和事實表做連線。

還有一種稱為invisible join 的連線優化技術,是一種查詢重寫技術。由於維表比較小,當維表和事實表連線時,將連線條件轉換成事實表上的謂詞。 如:事實表的乙個外來鍵連線到維表的乙個主鍵上。如果維表的主鍵上的值在乙個連續範圍內,可以將其重寫成事實表外來鍵上的乙個between謂詞,從而避免了反覆對維表的隨機訪問。

資料倉儲和ODS 的並行

1.業務資料 ods 資料倉儲 優點 這樣做的好處是ods的資料與資料倉儲的資料高度統一 開發成本低,至少開發一次並應用到ods即可 可見ods是發揮承上啟下的作用,調研阿里巴巴的資料部門也是這麼實現的。缺點 資料倉儲需要的所有資料都需要走ods,那麼ods的靈活性必然受到影響,甚至不利於擴充套件 ...

教你用資料倉儲優化資料分析(上)

其實在資料分析工作中,資料處理所用的時間佔據資料分析工作所用時間的七成以上,看到這個比例相信大家會大吃一驚。由此我們可以看出,資料處理是乙個十分重要的工作,其目的就是為了提高分析效率和質量,所以說使用資料倉儲進行資料分析是乙個很好的選擇,那麼到底怎麼用資料倉儲優化資料分析呢?下面我們就給大家介紹一下...

Hive和並行資料倉儲的比較

另補充我的一些觀點 hive本意是在hadoop的mapreduce程式設計模型上進行包裝,使其支援宣告式的sql查詢,其各種opr都是使用mapreduce模型模擬實現。這樣的好處就是與hadoop無縫融合,但是,mapreduce模型最適用的場景是聚集類的操作,即資料庫中的group by,其模...