一種集群系統(tǒng)中的通信方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種集群系統(tǒng)中的通信方法和裝置。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,高性能集群的優(yōu)勢(shì)越來(lái)越明顯,而GPU集群的作用也越來(lái)越突出。與CPU集群相比,GPU集群能夠在使用較少操作系統(tǒng)鏡像的情況下正常工作,降低管理復(fù)雜性,因而在高性能計(jì)算應(yīng)用中非常有吸引力。
[0003]現(xiàn)有技術(shù)中,集群系統(tǒng)的通信流程包括:在設(shè)備上分配內(nèi)存,從主機(jī)向設(shè)備復(fù)制數(shù)據(jù);在設(shè)備上執(zhí)行計(jì)算,得到計(jì)算結(jié)果;將計(jì)算結(jié)果從設(shè)備復(fù)制到主機(jī);釋放在設(shè)備上分配的內(nèi)存。其中,從主機(jī)向設(shè)備復(fù)制數(shù)據(jù),以及將計(jì)算結(jié)果從設(shè)備復(fù)制到主機(jī)是必需的步驟,也是傳輸數(shù)據(jù)最慢的部分,使得集群系統(tǒng)的計(jì)算時(shí)間較長(zhǎng),導(dǎo)致集群系統(tǒng)的整體計(jì)算性能較差。
【發(fā)明內(nèi)容】
[0004]本發(fā)明提供了一種集群系統(tǒng)中的通信方法和裝置,以解決集群系統(tǒng)的整體計(jì)算性能較差的缺陷。
[0005]本發(fā)明提供了一種集群系統(tǒng)中的通信方法,應(yīng)用于包括主機(jī)和設(shè)備的系統(tǒng)中,所述方法包括以下步驟:
[0006]在所述主機(jī)的內(nèi)存中為所述設(shè)備分配固定內(nèi)存;
[0007]通過(guò)所述固定內(nèi)存實(shí)現(xiàn)所述主機(jī)與所述設(shè)備之間的通信。
[0008]可選地,在所述主機(jī)的內(nèi)存中為所述設(shè)備分配固定內(nèi)存,具體為:
[0009]從所述主機(jī)的內(nèi)存中選擇固定內(nèi)存,將所述固定內(nèi)存直接映射到所述設(shè)備的內(nèi)存空間。
[0010]可選地,通過(guò)所述固定內(nèi)存實(shí)現(xiàn)所述主機(jī)與所述設(shè)備之間的通信,具體為:
[0011]所述設(shè)備通過(guò)對(duì)所述固定內(nèi)存進(jìn)行寫操作,向所述主機(jī)發(fā)送數(shù)據(jù);
[0012]和/ 或,
[0013]所述設(shè)備通過(guò)對(duì)所述固定內(nèi)存進(jìn)行讀操作,獲取來(lái)自所述主機(jī)的數(shù)據(jù)。
[0014]可選地,通過(guò)所述固定內(nèi)存實(shí)現(xiàn)所述主機(jī)與所述設(shè)備之間的通信,具體為:
[0015]使用所述固定內(nèi)存,在操作隊(duì)列中進(jìn)行異步內(nèi)存復(fù)制。
[0016]可選地,在所述主機(jī)的內(nèi)存中為所述設(shè)備分配固定內(nèi)存之后,還包括:
[0017]釋放所述固定內(nèi)存。
[0018]本發(fā)明還提供了一種集群系統(tǒng)中的通信裝置,應(yīng)用于包括主機(jī)和設(shè)備的系統(tǒng)中,所述裝置包括:
[0019]分配模塊,用于在所述主機(jī)的內(nèi)存中為所述設(shè)備分配固定內(nèi)存;
[0020]通信模塊,用于通過(guò)所述分配模塊分配的所述固定內(nèi)存實(shí)現(xiàn)所述主機(jī)與所述設(shè)備之間的通信。
[0021]可選地,所述分配模塊,具體用于從所述主機(jī)的內(nèi)存中選擇固定內(nèi)存,將所述固定內(nèi)存直接映射到所述設(shè)備的內(nèi)存空間。
[0022]可選地,所述通信模塊,具體用于通過(guò)對(duì)所述固定內(nèi)存進(jìn)行讀和/或?qū)懖僮?,?shí)現(xiàn)所述主機(jī)與所述設(shè)備之間的數(shù)據(jù)收發(fā)。
[0023]可選地,所述通信模塊,具體用于使用所述固定內(nèi)存,在操作隊(duì)列中進(jìn)行異步內(nèi)存復(fù)制。
[0024]可選地,所述的裝置,還包括:
[0025]釋放模塊,用于釋放所述分配模塊分配的所述固定內(nèi)存。
[0026]本發(fā)明通過(guò)使用固定內(nèi)存?zhèn)鬏斂刂浦鳈C(jī)與設(shè)備之間的數(shù)據(jù)傳輸,固定內(nèi)存始終存在于物理內(nèi)存中,能夠通過(guò)DMA加速與設(shè)備端進(jìn)行通信,不會(huì)被分配到低速的虛擬內(nèi)存中,從而省掉了主機(jī)和設(shè)備之間進(jìn)行數(shù)據(jù)拷貝的工作,實(shí)現(xiàn)主機(jī)和設(shè)備之間的最高帶寬,消除了硬件傳輸對(duì)集群系統(tǒng)的瓶頸影響,減少集群系統(tǒng)的計(jì)算時(shí)間,提升集群系統(tǒng)的整體計(jì)算性能。
【附圖說(shuō)明】
[0027]圖1為本發(fā)明實(shí)施例中的一種集群系統(tǒng)中的通信方法流程圖;
[0028]圖2為本發(fā)明實(shí)施例中的一種集群系統(tǒng)中的通信裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0029]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0030]需要說(shuō)明的是,如果不沖突,本發(fā)明實(shí)施例以及實(shí)施例中的各個(gè)特征可以相互結(jié)合,均在本發(fā)明的保護(hù)范圍之內(nèi)。另外,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
[0031]本發(fā)明實(shí)施例提供了一種集群系統(tǒng)中的通信方法,應(yīng)用于包括主機(jī)和設(shè)備的系統(tǒng)中,其中,主機(jī)可以是CPU及系統(tǒng)的內(nèi)存,設(shè)備可以是GPU及GPU本身的顯示內(nèi)存。上述通信方法如圖1所示,包括以下步驟:
[0032]步驟101,在主機(jī)的內(nèi)存中為設(shè)備分配固定內(nèi)存。
[0033]具體地,從主機(jī)的內(nèi)存中選擇固定內(nèi)存,將固定內(nèi)存直接映射到設(shè)備的內(nèi)存空間。
[0034]其中,固定內(nèi)存會(huì)始終駐留在物理內(nèi)存中,不會(huì)被主機(jī)的操作系統(tǒng)分頁(yè),也不會(huì)被主機(jī)的操作系統(tǒng)交換到磁盤上,也不會(huì)被破壞或重新定位。
[0035]本實(shí)施例中,通過(guò)cudaHostAllocO函數(shù)來(lái)分配固定內(nèi)存,該固定內(nèi)存作為cudaMemcpyO函數(shù)調(diào)用中的源內(nèi)存或者目標(biāo)內(nèi)存使用,且僅能被分配該固定內(nèi)存的CPU線程訪問(wèn)。
[0036]步驟102,通過(guò)固定內(nèi)存實(shí)現(xiàn)主機(jī)與設(shè)備之間的通信。
[0037]具體地,設(shè)備可以通過(guò)對(duì)固定內(nèi)存進(jìn)行寫操作,向主機(jī)發(fā)送數(shù)據(jù);也可以通過(guò)對(duì)固定內(nèi)存進(jìn)行讀操作,獲取來(lái)自主機(jī)的數(shù)據(jù)。
[0038]本實(shí)施例中,設(shè)備可以在無(wú)需主機(jī)介入的條件下,根據(jù)固定內(nèi)存的物理地址,通過(guò)DMA (Direct Memory Access,直接內(nèi)存訪問(wèn))技術(shù)在主機(jī)與設(shè)備之間復(fù)制數(shù)據(jù)。
[0039]此外,還可以使用固定內(nèi)存,在操作隊(duì)列中進(jìn)行異步內(nèi)存復(fù)制。
[0040]本實(shí)施例中,可以調(diào)用cudaMemcpyAsync O函數(shù),在操作隊(duì)列中放置內(nèi)存復(fù)制請(qǐng)求,以實(shí)現(xiàn)異步內(nèi)存復(fù)制。其中,cudaMemcpyAsync O函數(shù)是一個(gè)非阻斷的cudaMemcpyO標(biāo)準(zhǔn),傳遞給cudaMemcpyAsync O函數(shù)的主機(jī)內(nèi)存指針為固定內(nèi)存。當(dāng)通過(guò)cudaMemcpyAsync O執(zhí)行內(nèi)存復(fù)制請(qǐng)求,則立即返回到主控制線程。
[0041]為調(diào)用cudaMemcpyAsync O函數(shù),還需要為內(nèi)核和內(nèi)存復(fù)制分別編寫多個(gè)數(shù)據(jù)流:
[0042]cudaStreamCreate(&mystreaml);
[0043]cudaStre