国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

數(shù)據(jù)密集型應用在NVIDIA Fermi片內(nèi)存儲結(jié)構(gòu)上的適應性分析*

2014-09-29 08:32:50任秀江張清波陳芳園
計算機工程與科學 2014年4期
關(guān)鍵詞:存儲空間密集型線程

舒 兵,任秀江,張清波,陳芳園

(江南計算技術(shù)研究所,江蘇 無錫 214083)

1 引言

微處理器的發(fā)展已經(jīng)進入了眾核時代,NVIDIA的通用圖形處理器(GPGPU)是典型的GPU眾核架構(gòu),它在片上集成了大量簡單的計算核心,通過簡單運算部件的聚合提供超高計算性能。NVIDIA的Fermi[1]、Kepler[2,3]架 構(gòu) 的 處 理器等是其中的典型代表。GPGPU大量的計算核心提供了并行加速的能力,適合數(shù)據(jù)的并行處理。隨著2007年NVIDIA統(tǒng)一軟件并行編程模型CUDA[4,5]的 推 出,在NVIDIA GPU上 的 應 用 與研究越來越多,廣泛涉及生物、物理、天文、信號、醫(yī)藥、勘探等各個科學研究和工程領域。NVIDIA GPU的片上存儲結(jié)構(gòu)比較復雜,包括Register File和多級Cache結(jié)構(gòu)以及Shared Memory等,這種復雜的存儲結(jié)構(gòu)可有效提升GPU對應用的適用性。

統(tǒng)計資料表明,眾多科學領域的數(shù)據(jù)量隨時間呈指數(shù)增長,且基數(shù)較大。以科學研究為例,生物醫(yī)學、天文觀測、信號處理、互聯(lián)網(wǎng)絡等等研究領域每年都會產(chǎn)生PB甚至ZB量級的數(shù)據(jù),并且還在以指數(shù)函數(shù)的速度增長。除了數(shù)據(jù)量大的特點,這一類的數(shù)據(jù)一般還具有非結(jié)構(gòu)化、可分性好、復用率較低、實時性要求等等特點。具有上述特點的應用可稱之為數(shù)據(jù)密集型應用,對于數(shù)據(jù)密集型應用的處理大多集中在檢索、查詢、分析與挖掘這些方面,統(tǒng)稱為數(shù)據(jù)密集型計算DIC(Data Intensive Computing)。數(shù)據(jù)密集型應用的計算訪存比相對偏低,存儲器操作成為應用性能的瓶頸,處理這類應用的重點在于數(shù)據(jù)的存儲和傳輸。未來是數(shù)據(jù)的時代,數(shù)據(jù)密集型應用將占據(jù)越來越重要的比例,從處理器存儲架構(gòu)方面提升該類應用的性能具有現(xiàn)實意義。

本文主要通過分析數(shù)據(jù)密集型典型應用自身的數(shù)據(jù)特點及其在GPU上的數(shù)據(jù)映射關(guān)系,通過GPGPU-SIM所模擬的NVIDIA GT200、Fermi這兩種架構(gòu)上的應用表現(xiàn)分析GPU存儲結(jié)構(gòu)對該類應用的影響,對適應數(shù)據(jù)密集型應用的GPU眾核處理器存儲層次設計提出了建議,進而為通用眾核處理器存儲層次優(yōu)化提供參考。

2 Fermi架構(gòu)及GPGPU-SIM介紹

2.1 Fermi的整體架構(gòu)

Fermi架構(gòu)的CUDA核心數(shù)高達512個。512個CUDA核心組成16個流式多核處理器(SM),每個SM包含32個CUDA核心。芯片內(nèi)部還包含六個64位的DRAM通道,每個通道的訪存帶寬約為32GB/s。GigaThread全局調(diào)度器負責分配線程塊給SM。

2.2 Fermi的SM結(jié)構(gòu)

SM中的計算核心分為四組,其中兩組是流處理器陣列,每組包含16個CUDA Core,另外一組由16個load/store單元組成,還有一組四個特殊功能單元。另外,F(xiàn)ermi架構(gòu)添加了對完整IEEE754-2008標準的支持,多個核心協(xié)同支持雙精度浮點運算。

SM中,連續(xù)編號的32個并行線程組成一個warp,作為線程調(diào)度單元。每個SM擁有兩個warp調(diào)度器和兩個指令調(diào)度單位,并且兩個warp可以同時執(zhí)行和處理。Fermi的雙warp調(diào)度器支持同時選擇兩個warp,并從每個warp向16個CUDA核心、16個加載/存儲單元,或四個SFU發(fā)出操作指令。因為warp是獨立執(zhí)行的,F(xiàn)ermi的調(diào)度器并不需要檢查指令流內(nèi)的依賴性。使用雙warp調(diào)度模型,F(xiàn)ermi可獲得接近峰值的硬件性能。

為與SM中計算單元的數(shù)目增多相適應,F(xiàn)ermi架構(gòu)中單SM中的寄存器文件規(guī)模也有了相應的增加,從GT200中的16 384個增加到了32 768個。由于CUDA編譯器通常為每個線程分配10~20個寄存器[6],因而更多的寄存器通常意味著SM上可同時運行更多的線程,硬件的利用率也就更加充分。G80和GT200的每個SM都有16 KB的共享存儲器SMEM(Shared MEMory)。在Fermi架構(gòu)中,每個SM擁有64KB的片上存儲空間,可以配置成48KB的SMEM和16KB的L1 Cache、或16KB的SMEM和48KB的L1Cache。L1Cache與Shared Memory的可配置關(guān)系增加了編程的靈活性和對應用的適應性,是在GT200基礎上的一項重要創(chuàng)新。Fermi的L2Cache大小為768KB,由所有的SM所共享。

2.3 GPGPU-SIM介紹

GPGPU-SIM[7]于2007年由Fung W等人研發(fā),它是一款時序精確的GPU性能模擬器。它模擬了NVIDIA統(tǒng)一架構(gòu)GPU,并且對G80、GT200、Fermi等都有很高的模擬精度,針對不同型號的GPU都有相應的配置文件,參數(shù)修改方便。軟件方面,這款模擬器配合CUDA編程模型,很好地支持了PTX(Parallel Thread eXecution)虛擬指令集和OpenGL。

與硬件結(jié)構(gòu)相對應,GPGPU-SIM的功能模塊由三個部分組成:著色器SC(Shader Core)、互連網(wǎng)絡(Interconnection Network)以及存控(Memory Controller)。著色器核心通過片上互連網(wǎng)絡連接到各個存儲模塊(存控)。

3 實驗模擬及數(shù)據(jù)分析

3.1 應用選取

結(jié)合數(shù)據(jù)密集型應用的特點,本文選取訪存指令占總指令百分比在20%以上的應用作為數(shù)據(jù)密集型應用的典型代表。為使測得的訪存指令百分比具有代表性和滿足數(shù)據(jù)密集型應用訪存密集的特點,本文對應用程序的總指令數(shù)也設置了一個標準——1M條以上。

本文選取的應用均來自于GPGPU-SIM v3.1.1的基準測試程序[8]及CUDA SDK3.1[9]的程序。根據(jù)應用領域及其計算訪存比的特點,選取如下六個應用程序作為典型算法進行分析:

(1)高級加密標準AES;(2)離散余弦變換DCT;(3)快速沃爾什變換FWT;(4)拉普拉斯變換LPS;(5)矩陣乘MatrixMul;(6)神經(jīng)網(wǎng)絡算法NN。

上面選取的六個應用程序分別涉及密碼、圖像、信號、數(shù)學等各個科學計算領域,較全面地涵蓋了數(shù)據(jù)密集型應用的范疇,根據(jù)數(shù)據(jù)密集型應用的特點,本文設定訪存總指令數(shù)大于1M、訪存百分比為20%以上的應用屬于數(shù)據(jù)密集型應用,刪選的結(jié)果即如表1所示。

Table 1 Basic parameters of programs表1 選取的應用程序基本參數(shù)

根據(jù)指令所使用的存儲部件不同,對應用程序的存儲指令進行分類統(tǒng)計,如圖1所示。圖中“Param”指的是通過GPU內(nèi)核call傳輸?shù)膮?shù),即所謂的Cache命中。

Figure 1 Sort instruction in programs圖1 應用程序存儲指令分類

3.2 數(shù)據(jù)密集型應用在可配置的L1Cache/SMEM上的適應性分析

可配置的L1Cache和Shared Memory結(jié)構(gòu)是Fermi存儲層次最大的亮點,給編程帶來了較大的靈活性,也增加了Fermi結(jié)構(gòu)對應用的適應性和通用性。通過圖1對應用程序存儲指令的分類,可以看出除NN外,另外幾種應用都與Shared Memory有密切的關(guān)系。本節(jié)選取了SMEM分別為16KB、32KB、48KB和64KB四種情況,其中SMEM為48KB是基礎情況。測試結(jié)果進行歸一化得到應用加速比,如圖2所示。

測試結(jié)果顯示,有些應用對共享存儲器(或L1 Cache)大小并不敏感,如FWT和DCT;而有的程序在共享存儲器和L1Cache處于某些配置時性能最好,其他配置下性能下降,如LPS;還有一些應用隨Shared Memory的變化呈現(xiàn)遞增或遞減的變化,如MatrixMul和AES。下面逐一分析這六個應用程序性能變化與硬件存儲架構(gòu)的關(guān)系。

(1)AES。

Figure 2 Speedup under different SMEM configurations圖2 不同SMEM配置下應用程序加速比

根據(jù)圖1中AES存儲指令的分類可以看到,AES有80%的存儲指令來自于SMEM,另外近20%的指令是訪問Constant Memory和Texture Memory,訪問Local Memory和Global Memory的諸如Load、Store等操作幾乎可以忽略,而L1 Cache、L2Cache主要服務于Load、Store等操作,因此L1Cache、L2Cache對AES的影響幾乎可以忽略。其次,UByte4所占的字節(jié)數(shù)為4+1×4=8,Shared Memory需要的存儲空間大小為256×8×6=12KB。SMEM大于12KB就可以滿足程序的要求,所以SMEM增大,AES性能變好,但當SMEM達到32KB或以上時,SMEM再增大時AES性能基本不變。

對于AES在SMEM為較小的16KB時,性能也達到了288.741 9,一方面是因為16KB的SMEM已經(jīng)基本滿足12KB的應用程序需求;另一方面,本模擬采用的是L1Cache和SMEM總和固定,L1Cache容量也能起到SMEM容量補充的作用。因此,在16KB配置下,性能還是比較高的。

(2)DCT。

該應用的性能都隨SMEM的增大有輕度的下降。DCT只需要兩個8×8Blocks的Shared Memory存儲空間,即8×8×2×4=1KB(CUDA中一個單精度浮點數(shù)據(jù)占四個字節(jié))。測試的SMEM配置中SMEM大小對該應用程序是足夠的,所以SMEM的增大對應用程序的影響幾乎可以忽略。但是,SMEM增大的同時L1Cache隨之減小,這個應用有一定量的Load/Store和Param指令(約12%),這些指令對L1Cache有一定的依賴性。因此,L1Cache的減小會導致這兩個應用程序性能的損失,但這種損失被大容量的L2 Cache所彌補,因此最后表現(xiàn)出的現(xiàn)象是性能的微幅下降。

(3)FWT。

FWT一條線程負責四個數(shù)據(jù)為一組的基-4 FWT計算(加減運算),程序中輸入數(shù)據(jù)的規(guī)模是223個浮點數(shù)據(jù),共享存儲器中以一個基-4FWT的四個輸入數(shù)據(jù)的首地址索引進行存儲,占一個單精度浮點的存儲空間。因此,共需要221×4B=8MB的存儲空間才能一次性加載所有輸入數(shù)據(jù)。但是Fermi的SMEM最大為64KB,遠遠小于8MB。因此,F(xiàn)ermi采用分塊存取。Fermi一次流水調(diào)度兩個warp(雙warp調(diào)度),一個warp有32個線程,一個線程需要存儲一個float數(shù)據(jù)(一組的四個數(shù)據(jù)的首地址),所以雙warp需要讀取64×4B=256B的數(shù)據(jù),這個大小遠小于SMEM最小情況的16KB。每次流水線從全局存儲器拷貝256B的數(shù)據(jù)塊到SMEM,并且通過預取傳送可以達到隱藏訪存延遲的目的;另外,存入共享存儲器中的原始數(shù)據(jù)經(jīng)過計算之后原位存儲,這樣達到了存儲空間的最大化利用,并且大量的Load/Store(40%)操作擁有較高的Cache命中(Param),這也對FWT的性能起到了積極的作用。上述兩個因素是FWT性能不隨SMEM明顯變化并且其IPC可以達到較高水平的根本原因。

(4)LPS。

當SMEM為32KB或48KB時,LPS性能最好;而SMEM為64KB(沒有L1Cache)或者SMEM為16KB時,LPS性能損失達到35%~38%。LPS使用SMEM存儲空間,共需(32+2)×(4+2)×3×4≈2.4KB共享存儲器空間。所以,SMEM不是應用性能的限制因素,SMEM為64KB時,沒有L1Cache,LPS有35%左右的Load/Store和Param指令,L1Cache的缺失勢必導致LPS性能的下降,而且下降的幅度恰好接近35%,與存儲指令的分類數(shù)據(jù)完全吻合;SMEM為16KB時,L1Cache大小為48KB,此時兩個存儲結(jié)構(gòu)大小完全滿足需求。但是,LPS性能仍然下降,這是因為L1Cache較大時,GPU需要花費較多的額外周期,以完成管理Cache等操作,而且L1 Cache越大,這種額外開銷越明顯,因此體現(xiàn)在性能上為IPC下降。

(5)MatrixMul。

該應用的表現(xiàn)與DCT比較類似,性能隨SMEM增大而微幅下降。因為MatrixMul需要兩個16×16的Blocks的存儲空間,用于存儲兩個相乘矩陣的塊數(shù)據(jù),因此需要的存儲空間為:16×16×2×4=2KB。SMEM大小足夠滿足應用程序的需求,但6%的Load/Store以及Param操作使得IPC隨L1Cache減小而下降,同時大容量L2 Cache會縮小這種變化,所以性能表現(xiàn)出微幅下降。MatrixMul與DCT不同之處在于MatrixMul的絕對IPC很低,原因在于該應用的CUDA程序是與GT200相適應的,當在Fermi上運行時,F(xiàn)ermi存儲部件結(jié)構(gòu)不同造成對齊訪問機制失效,產(chǎn)生了嚴重的Bank沖突,因此IPC非常低下。

(6)NN。

該應用比較特殊,它沒有與Shared Memory的交互操作,它的存儲指令有97%屬于Load/Store和Param操作(其中Load指令就占近80%),剩下的3%左右是Constant Memory的訪存操作,所以當把L1Cache取消時,NN的IPC性能只有原來的20%,其他情況下L1Cache都大于或等于16KB,完全滿足要求,因此性能基本不變??梢灶A見,當L1Cache低于某一臨界值時,隨著L1Cache的減小,NN的性能將會有顯著的損失,這是因為此時L1Cache成為其性能的主要限制因素。另外,NN的IPC非常低,只有35左右。與MatrixMul的性能低下原因不同,NN性能較低是因為包含大量(80%)的Load操作,此類操作與片外存儲部件交互,延遲很高,達到了400~500個cycles,因此性能非常差。

3.3 數(shù)據(jù)密集型應用在可配置的L2Cache上的適應性分析

L2Cache由所有SM所共享,通過片內(nèi)互連網(wǎng)絡與DRAM連接,主要用于緩存從Global Memory中獲取的數(shù)據(jù)。當SM需要讀取輸入數(shù)據(jù)時,首先從L1Cache中查找,若未命中,則到L2 Cache中查找,L2Cache未命中才會從Global Memory中讀取。L1Cache和L2Cache的命中率一般都可以達到80%左右,作為片內(nèi)存儲器,L2 Cache一般采用訪問速度較快的SRAM設計,訪存速度遠快于片外存儲器,且容量一般比L1 Cache大得多,彌補了L1Cache容量不足和DRAM訪問速度慢的缺點。為了測試L2Cache對數(shù)據(jù)密集型應用的影響,實驗中選取了L2容量從0到1 536KB等多個大小,其中L2Cache為768KB是基礎情況。歸一化后的結(jié)果如圖3所示。

L2Cache作為連接DRAM和L1Cache的紐帶,補充了DRAM訪問延遲高和L1Cache容量小的缺點。從測試的結(jié)果來看,各個應用都對L2 Cache有一定的性能表現(xiàn),其中DCT、FWT、LPS和NN的曲線相對比較明顯,AES和MatrixMul則對L2Cache不太敏感。具體的原因做如下分析:

(1)AES和MatrixMul。

Figure 3 Speedup under different L2configurations圖3 不同L2配置下應用程序加速比

從圖3可以看出,這兩個應用對L2Cache不太敏感。主要是因為這兩種應用的存儲指令絕大多數(shù)為Shared Memory的讀寫指令,其中AES的這類指令占到了總存儲指令的80%,而Matrix-Mul則高達近95%,這兩種應用是六個應用中Shared Memory指令所占百分比最高的兩種。這種指令分布決定了它們對L2Cache乃至L1 Cache都不敏感,但這兩類應用畢竟存在少量的Load/Store以及Param指令,所以當取消L2 Cache時,它們的性能又會有所下降,并且下降幅度隨這三類指令所占百分比呈線性遞減。

(2)DCT和NN。

DCT和NN的性能隨著L2Cache從無到有、從小到大在宏觀上呈現(xiàn)出增長的趨勢。這與它們的Load/Store、Param指令所占百分比較高有直接關(guān)系。比如,DCT的這類指令占到了23%多,NN的這類指令占到了90%以上,所以這兩種應用是六個應用中對L2最敏感的應用。在細節(jié)方面,DCT的IPC在L2Cache低于192KB時處于低水平平緩狀態(tài),達到768KB時增幅較大,此后L2 Cache增大,其性能依然上升;而NN則隨著L2 Cache增大性能平緩上升,在L2Cache超過768KB后性能保持穩(wěn)定不變。造成這種現(xiàn)象的原因與它們的存儲指令數(shù)量有關(guān),如表2所示。

Table 2 Load/Store、Param instructions of DCT and NN表2 DCT和NN的Load/Store、Param指令

DCT的Load/Store、Param指令是NN的三倍多,并且兩者都是對單精度浮點數(shù)據(jù)進行操作。更多的存儲指令需要更大的Cache才能達到較高的命中率。所以,L2Cache較小時,對DCT的影響比較小,并且處于一個較低的水平,而對NN而言,L2Cache較小時就可以比較明顯地影響其性能;當L2Cache增大到一定程度時,L2Cache對DCT的影響開始凸顯,隨L2Cache增大其性能也明顯提升,而對于NN,L2Cache漸漸達到飽和,所以其性能趨于平緩。

(3)FWT和LPS。

這兩種應用的性能表現(xiàn)有一定相似性,當L2 Cache不存在或者L2Cache較大(大于或等于768KB)時,其性能都是最高的,而當L2Cache處于中間值時,兩者的性能都有一定的損失,如L2 Cache為24KB時,F(xiàn)WT相比于基礎情況性能損失了13.4%,LPS損失了7.3%。L2Cache為0時,L1Cache完全可以滿足Load/Store等指令的需求,并且節(jié)省了L2Cache的管理開銷,因而性能沒有降低;當L2較小時,如24KB,L1Cache與L2 Cache的大小處于同一個數(shù)量級,也就是說,L1 Cache只能部分映射到L2Cache,這樣會導致大量的MISS,直接影響應用的性能,這就是為什么L2 Cache從無到有時,性能不升反降的原因。

L2Cache的大小主要與工藝有關(guān),由于L2 Cache結(jié)構(gòu)比DRAM要復雜得多,因此成本很高,在芯片上所占的面積也很大,因此一般片上二級Cache容量不能做得很大,F(xiàn)ermi的L2Cache大小為768KB,平均每個SM可分攤約50KB的L2 Cache;最新的Kepler架構(gòu)擁有1 536KB的統(tǒng)一L2Cache,每個SM可分攤約100KB的L2Cache,相比于Fermi整整提高了一倍,但是Kepler的核心數(shù)目是Fermi核心數(shù)目的6倍。所以,GPU核心計算能力的提升和二級Cache層次的存儲容量提升是不匹配的,存儲不能匹配計算。另外,F(xiàn)ermi或Kepler每個SM分攤的L2Cache容量與片上L1Cache與SMEM總體容量相比遠沒有達到數(shù)量級的提升,其二級存儲容量對一級存儲容量的包容不是很明顯,因此本實驗數(shù)據(jù)從總體上看,L2大小從0到1 536KB,六個應用性能變化總體不是很大。

4 結(jié)束語

本文通過對六個數(shù)據(jù)密集型應用在NVIDIA的GT200、Fermi、Kepler三代GPGPU上的大量實驗,對比了不同存儲結(jié)構(gòu)設計對數(shù)據(jù)密集型應用性能的影響。通過分析,對于數(shù)據(jù)密集型應用的GPU眾核存儲層次優(yōu)化提出一些建議:

(1)對于數(shù)據(jù)密集型應用,L1Cache/SMEM、L2Cache和片上存儲器(紋理Cache、常量Cache等)的總?cè)萘渴侵陵P(guān)重要的,隨著集成電路工藝的進步,片上存儲的容量需要不斷提升。

(2)從Fermi到Kepler的體系結(jié)構(gòu)的變化來看,片內(nèi)存儲容量的擴大沒有很好地與片內(nèi)計算性能的提升相匹配,甚至有若干倍的差異,這種差異達到一定程度會對某些數(shù)據(jù)密集型應用的性能產(chǎn)生較大的影響。所以,隨著片上計算性能的提升,單位計算所得到的片上存儲容量需要得到進一步重視。

(3)GPU的訪存事務(合并訪問機制)就是通過多個線程同時訪問存儲空間的同一個Bank達到隱藏訪存延遲的目的,對于數(shù)據(jù)量較大,SMEM不夠滿足一次性加載所有輸入數(shù)據(jù)的數(shù)據(jù)密集型應用(例如FWT),分塊存取和預取技術(shù)可以很好地隱藏訪存延遲并且實現(xiàn)SMEM的最大化利用。

(4)應用開發(fā)以及性能優(yōu)化與硬件結(jié)構(gòu)是密不可分的,應用程序需要契合存儲層次進行合理的代碼設計。對于數(shù)據(jù)密集但規(guī)則訪問的一些應用,采用片上存儲器模式(SMEM)而不是Cache模式,可以使應用開發(fā)者更容易進行性能優(yōu)化。

(5)考慮到眾核或GPU的可編程性,對于一些數(shù)據(jù)密集但不規(guī)則的應用,創(chuàng)新存儲層次與Cache設計,可以提高其適應性。Fermi提出的可配置L1Cache/SMEM是一個偉大的創(chuàng)新,同時在Kepler架構(gòu)上進一步提高了二級Cache的容量,這些都對擴展GPU的適應性、開放性和可編程性十分有益。

[1] NVIDIA Corporation.NVIDIA’s next generation CUDA compute architecture:Fermi[Z].Version 1.1.2009.

[2] NVIDIA Corporation.GeForce GTX 680:The fastest,most efficient GPU ever built[Z].Version 1.0.2012.

[3] NVIDIA Corporation.NVIDIA’s next generation CUDA compute architecture:Kepler GK110—The fastest,most efficient GPU ever built[Z].Version 1.0.2012.

[4] NVIDIA Corporation.NVIDIA CUDA reference manual[Z].Version 3.2Beta.2010.

[5] NVIDIA Corporation.NVIDIA CUDA API reference manual[Z].Version 4.2.2012.

[6] Cai Jing.GPGPU architecture key technology demonstration and simulator research and extension[D].Changsha:National University of Defense Technology,2009.(in Chinese)

[7] Aammodt M,Bakhoda A,F(xiàn)ung W.Tutorial on GPGPU-Sim:A performance simulator for massively multithreaded processor research[C]∥Proc of the 42nd Annual IEEE/ACM International Symposium on Microarchitecture,2009:1.

[8] Che Shuai,Boyer M,Meng Jia-yuan,et al.A benchmark suite for heterogeneous computing[C]∥Proc of IEEE International Symposium on in Workload Characterization,2009:1.

[9] NVIDIA Corporation.NVIDIA CUDA SDK3.1code samples[EB/OL].[2011-05-16].http://docs.nvidia.com/cuda/cuda-samples/index.html.

附中文參考文獻:

[6] 蔡晶.GPGPU體系結(jié)構(gòu)關(guān)鍵技術(shù)論證及模擬器研究與擴展[D].長沙:國防科學技術(shù)大學,2009.

猜你喜歡
存儲空間密集型線程
基于多種群協(xié)同進化算法的數(shù)據(jù)并行聚類算法
壓痛點密集型銀質(zhì)針溫針灸治療肱骨外上髁炎的臨床觀察
蘋果訂閱捆綁服務Apple One正式上線
綜藝報(2020年21期)2020-11-30 08:36:49
用好Windows 10保留的存儲空間
密集型快速冷卻技術(shù)在熱軋帶鋼生產(chǎn)線的應用
山東冶金(2019年3期)2019-07-10 00:53:56
密集型自動化立體倉庫解析
淺談linux多線程協(xié)作
知識密集型組織的商業(yè)模式創(chuàng)新策略——以網(wǎng)絡教育組織為例
Linux線程實現(xiàn)技術(shù)研究
么移動中間件線程池并發(fā)機制優(yōu)化改進
鸡东县| 县级市| 涿州市| 佛教| 徐水县| 石林| 合水县| 宣武区| 西贡区| 隆德县| 柘荣县| 临漳县| 黑河市| 河池市| 武山县| 阿坝| 文安县| 濉溪县| 双柏县| 桃园县| 惠水县| 化州市| 驻马店市| 江北区| 连平县| 大邑县| 老河口市| 通榆县| 措美县| 霞浦县| 比如县| 桐乡市| 灵山县| 乐东| 德化县| 景洪市| 涿鹿县| 新昌县| 平和县| 临邑县| 襄樊市|