級(jí)【0】,最后層級(jí)為隊(duì)列層級(jí)A中的結(jié)構(gòu)層級(jí)【O】中的節(jié)點(diǎn)層級(jí)fl。
[0169]鏈表生成單元704根據(jù)所述各個(gè)訪存節(jié)點(diǎn)的節(jié)點(diǎn)屬性生成節(jié)點(diǎn)樹鏈表。
[0170]具體的,節(jié)點(diǎn)樹鏈表的根節(jié)點(diǎn)可以有兩種劃分方法:
[0171]一、先確定所述訪存節(jié)點(diǎn)中最上層級(jí)的結(jié)構(gòu)屬性,并以所述最上層級(jí)的結(jié)構(gòu)屬性作為所述節(jié)點(diǎn)樹鏈表的根節(jié)點(diǎn),再依次根據(jù)所述訪存節(jié)點(diǎn)的各個(gè)層級(jí)的結(jié)構(gòu)屬性確定所述訪存節(jié)點(diǎn)的鏈表路徑,生成節(jié)點(diǎn)樹鏈表。
[0172]在這種情況中,在生成節(jié)點(diǎn)樹鏈表時(shí),可以設(shè)定,屬于同一動(dòng)作屬性的根節(jié)點(diǎn)相鄰排列。
[0173]二、以所述動(dòng)作屬性作為所述節(jié)點(diǎn)樹鏈表的根節(jié)點(diǎn),再依次根據(jù)所述訪存節(jié)點(diǎn)的各個(gè)層級(jí)的結(jié)構(gòu)屬性確定所述訪存節(jié)點(diǎn)的鏈表路徑,生成節(jié)點(diǎn)樹鏈表。
[0174]在節(jié)點(diǎn)樹鏈表的節(jié)點(diǎn)中,包括以下幾種節(jié)點(diǎn)類型:
[0175]標(biāo)量節(jié)點(diǎn)(scalarnode)、隊(duì)列節(jié)點(diǎn)(array node)、結(jié)構(gòu)節(jié)點(diǎn)(structure node)和混合節(jié)點(diǎn)(complex node)。
[0176]其中,葉子節(jié)點(diǎn)看可以為標(biāo)量節(jié)點(diǎn)(scalar node)和混合節(jié)點(diǎn)(complex node)。
[0177]可選的,所述根據(jù)各個(gè)訪存節(jié)點(diǎn)的節(jié)點(diǎn)屬性生成節(jié)點(diǎn)樹鏈表之前,還可以根據(jù)訪存節(jié)點(diǎn)的標(biāo)識(shí)確定訪存節(jié)點(diǎn)的標(biāo)識(shí)序號(hào),如訪存節(jié)點(diǎn)A【O】.Π,其標(biāo)識(shí)為A【0】.Π,其標(biāo)識(shí)序號(hào)為在結(jié)構(gòu)層級(jí)為“0”,在節(jié)點(diǎn)層級(jí)為“I”。在依次根據(jù)所述訪存節(jié)點(diǎn)的各個(gè)層級(jí)的結(jié)構(gòu)屬性確定所述訪存節(jié)點(diǎn)的鏈表路徑之后,可以根據(jù)所述各個(gè)訪存節(jié)點(diǎn)的標(biāo)識(shí)序號(hào),在節(jié)點(diǎn)樹鏈表的葉子節(jié)點(diǎn)中依次排列所述各個(gè)訪存節(jié)點(diǎn),最后生成節(jié)點(diǎn)樹鏈表。
[0178]可以理解的是,在實(shí)際應(yīng)用中,在同一層級(jí)的結(jié)構(gòu)屬性下,訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置根據(jù)所述標(biāo)識(shí)序號(hào)由小至大或由小至大依次排列,更加便于對(duì)訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置進(jìn)行調(diào)整,并且,訪存指令的合并效果更好。
[0179]調(diào)整單元703根據(jù)所述節(jié)點(diǎn)樹鏈表中訪存節(jié)點(diǎn)的位置關(guān)系,對(duì)訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置進(jìn)行調(diào)整,使得節(jié)點(diǎn)屬性相同的訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置連續(xù),且同一層級(jí)的結(jié)構(gòu)屬性下,訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置根據(jù)所述標(biāo)識(shí)序號(hào)由小至大或由小至大依次排列。
[0180]其中,由于訪存節(jié)點(diǎn)的結(jié)構(gòu)屬性可以有多個(gè)層級(jí),因此,若在非節(jié)點(diǎn)層級(jí)(即在節(jié)點(diǎn)樹鏈表中為非葉子節(jié)點(diǎn))中,層級(jí)由高至低,同一層級(jí)的結(jié)構(gòu)屬性也需要根據(jù)訪存節(jié)點(diǎn)的標(biāo)識(shí)序號(hào),由小至大或由小至大依次排列。
[0181]具體的,本發(fā)明實(shí)施例中的節(jié)點(diǎn)屬性相同可以理解為至少有一種節(jié)點(diǎn)屬性相同,而在實(shí)際應(yīng)用中,由于節(jié)點(diǎn)屬性包括有動(dòng)作屬性和結(jié)構(gòu)屬性,而結(jié)構(gòu)屬性又可以進(jìn)一步劃分為多個(gè)層級(jí),因此,一種節(jié)點(diǎn)屬性可以理解為動(dòng)作屬性中的不同動(dòng)作的任意一種,或結(jié)構(gòu)屬性中的不同結(jié)構(gòu)層級(jí)的任意一種。具體可以根據(jù)實(shí)際場(chǎng)景和實(shí)際需求,將節(jié)點(diǎn)屬性的相近度較高的訪存節(jié)點(diǎn)相鄰排列,使得后續(xù)對(duì)訪存指令進(jìn)行合并的效果越好。
[0182]需要說明的是,在結(jié)構(gòu)屬性中,最高層級(jí)不同的訪存節(jié)點(diǎn)的結(jié)構(gòu)屬性是肯定不一樣的,結(jié)構(gòu)屬性的相近度是自上往下開始算的(即上一層級(jí)相同了,下一層級(jí)才有可能相同);如,訪存節(jié)點(diǎn)A【O】.Π和訪存節(jié)點(diǎn)B【O】.Π,雖然結(jié)構(gòu)層級(jí)【O】和節(jié)點(diǎn)層級(jí)Π的標(biāo)識(shí)都一樣,但是,最高層級(jí)(隊(duì)列層級(jí))不一樣,因此,訪存節(jié)點(diǎn)A [Olfl和訪存節(jié)點(diǎn)B【O】,fl在結(jié)構(gòu)屬性沒有相同點(diǎn);又如,訪存節(jié)點(diǎn)A [Olfl和訪存節(jié)點(diǎn)A【I】.Π,雖然節(jié)點(diǎn)層級(jí)fl的標(biāo)識(shí)都一樣,但節(jié)點(diǎn)層級(jí)的上一層級(jí)(結(jié)構(gòu)層級(jí))不一樣,因此,這兩個(gè)訪存節(jié)點(diǎn)只有一個(gè)結(jié)構(gòu)屬性相同。
[0183]合并單元705對(duì)訪存序列中訪問節(jié)點(diǎn)屬性相同,且存儲(chǔ)地址相鄰的訪存節(jié)點(diǎn)的訪存指令進(jìn)行合并,生成合并后的訪存指令,所述合并后的訪存指令的訪存長(zhǎng)度小于或等于所述消息式內(nèi)存的最大訪存長(zhǎng)度。如,對(duì)“加載”和“存儲(chǔ)”兩種動(dòng)作屬性的訪存指令進(jìn)行
I=I TT O
[0184]在本發(fā)明實(shí)施例中,在對(duì)訪存指令進(jìn)行組包時(shí),可以按最大訪存長(zhǎng)度對(duì)對(duì)訪存指令進(jìn)行組包,也可以根據(jù)訪問節(jié)點(diǎn)的實(shí)際情況(訪存節(jié)點(diǎn)的多少和節(jié)點(diǎn)屬性的相似度)靈活的設(shè)定訪存指令的訪存長(zhǎng)度此處具體不作限定。
[0185]在實(shí)際應(yīng)用中,消息式內(nèi)存的訪存指令相對(duì)于普通內(nèi)存的訪存指令,具有訪存長(zhǎng)度不定的特點(diǎn)(指的是,在不超過最大訪存長(zhǎng)度的情況下,訪存長(zhǎng)度不定),因此,普通內(nèi)存在對(duì)訪存指令進(jìn)行組包時(shí),多數(shù)情況下會(huì)出現(xiàn)冗余的情況;而,消息式內(nèi)存在對(duì)訪存指令進(jìn)行組包時(shí),則可以根據(jù)需要調(diào)整訪存指令的大小,在本發(fā)明實(shí)施例的應(yīng)用場(chǎng)景下,更內(nèi)容適配實(shí)際情況進(jìn)行訪存指令的組包,提高了消息資源的利用率。
[0186]請(qǐng)?jiān)賲⒁妶D8,本發(fā)明實(shí)施例還提供了一種編譯裝置,可包括:
[0187]輸入裝置810,輸出裝置820,存儲(chǔ)器830和處理器80 (編譯裝置中的處理器的數(shù)量可以為一個(gè)或多個(gè),圖8中以一個(gè)處理器為例)在本發(fā)明的一些實(shí)施例中,輸入裝置810,輸出裝置820,存儲(chǔ)器830和處理器840可通過總線或其它方式連接,其中,圖8中通過總線連接為例。
[0188]其中,所述輸入裝置810執(zhí)行如下步驟:
[0189]獲取消息式內(nèi)存的訪存序列,具體的,所述訪存序列包括:對(duì)訪存節(jié)點(diǎn)的的操作類型,訪存節(jié)點(diǎn)的標(biāo)識(shí),訪存節(jié)點(diǎn)的節(jié)點(diǎn)屬性。
[0190]其中,所述對(duì)訪存節(jié)點(diǎn)的的操作類型可以包括:加載(Load)和存儲(chǔ)(store)。
[0191]所述消息式內(nèi)存為一種具有可變粒度、異步等特點(diǎn)的內(nèi)存模型。
[0192]所述存儲(chǔ)器830存儲(chǔ)所述訪存序列。
[0193]其中,所述處理器840執(zhí)行如下步驟:
[0194]處理器840確定所述訪存序列中各個(gè)訪存節(jié)點(diǎn)的節(jié)點(diǎn)屬性,具體的,所述節(jié)點(diǎn)屬性包括:動(dòng)作屬性和結(jié)構(gòu)屬性。
[0195]其中,動(dòng)作屬性可以包括加載操作,存儲(chǔ)操作等。
[0196]其中,結(jié)構(gòu)屬性可以進(jìn)一步劃分層級(jí),訪存節(jié)點(diǎn)可以有僅一個(gè)層級(jí)的結(jié)構(gòu)屬性,也可以有或兩個(gè)以上層級(jí)的結(jié)構(gòu)屬性。如,隊(duì)列結(jié)構(gòu)(AOS, Array Of Struct)中的訪存節(jié)點(diǎn)A【O】.fl,最高層級(jí)為隊(duì)列層級(jí)A,次高層級(jí)為隊(duì)列層級(jí)A中的結(jié)構(gòu)層級(jí)【0】,最后層級(jí)為隊(duì)列層級(jí)A中的結(jié)構(gòu)層級(jí)【O】中的節(jié)點(diǎn)層級(jí)fl。
[0197]處理器840根據(jù)所述各個(gè)訪存節(jié)點(diǎn)的節(jié)點(diǎn)屬性生成節(jié)點(diǎn)樹鏈表。
[0198]具體的,節(jié)點(diǎn)樹鏈表的根節(jié)點(diǎn)可以有兩種劃分方法:
[0199]一、先確定所述訪存節(jié)點(diǎn)中最上層級(jí)的結(jié)構(gòu)屬性,并以所述最上層級(jí)的結(jié)構(gòu)屬性作為所述節(jié)點(diǎn)樹鏈表的根節(jié)點(diǎn),再依次根據(jù)所述訪存節(jié)點(diǎn)的各個(gè)層級(jí)的結(jié)構(gòu)屬性確定所述訪存節(jié)點(diǎn)的鏈表路徑,生成節(jié)點(diǎn)樹鏈表。
[0200]在這種情況中,在生成節(jié)點(diǎn)樹鏈表時(shí),可以設(shè)定,屬于同一動(dòng)作屬性的根節(jié)點(diǎn)相鄰排列。
[0201]二、以所述動(dòng)作屬性作為所述節(jié)點(diǎn)樹鏈表的根節(jié)點(diǎn),再依次根據(jù)所述訪存節(jié)點(diǎn)的各個(gè)層級(jí)的結(jié)構(gòu)屬性確定所述訪存節(jié)點(diǎn)的鏈表路徑,生成節(jié)點(diǎn)樹鏈表。
[0202]在節(jié)點(diǎn)樹鏈表的節(jié)點(diǎn)中,包括以下幾種節(jié)點(diǎn)類型:
[0203]標(biāo)量節(jié)點(diǎn)(scalarnode)、隊(duì)列節(jié)點(diǎn)(array node)、結(jié)構(gòu)節(jié)點(diǎn)(structure node)和混合節(jié)點(diǎn)(complex node)。
[0204]其中,葉子節(jié)點(diǎn)看可以為標(biāo)量節(jié)點(diǎn)(scalar node)和混合節(jié)點(diǎn)(complex node)。
[0205]可選的,所述根據(jù)各個(gè)訪存節(jié)點(diǎn)的節(jié)點(diǎn)屬性生成節(jié)點(diǎn)樹鏈表之前,還可以根據(jù)訪存節(jié)點(diǎn)的標(biāo)識(shí)確定訪存節(jié)點(diǎn)的標(biāo)識(shí)序號(hào),如訪存節(jié)點(diǎn)A【O】.Π,其標(biāo)識(shí)為A【0】.Π,其標(biāo)識(shí)序號(hào)為在結(jié)構(gòu)層級(jí)為“0”,在節(jié)點(diǎn)層級(jí)為“I”。在依次根據(jù)所述訪存節(jié)點(diǎn)的各個(gè)層級(jí)的結(jié)構(gòu)屬性確定所述訪存節(jié)點(diǎn)的鏈表路徑之后,可以根據(jù)所述各個(gè)訪存節(jié)點(diǎn)的標(biāo)識(shí)序號(hào),在節(jié)點(diǎn)樹鏈表的葉子節(jié)點(diǎn)中依次排列所述各個(gè)訪存節(jié)點(diǎn),最后生成節(jié)點(diǎn)樹鏈表。
[0206]可以理解的是,在實(shí)際應(yīng)用中,在同一層級(jí)的結(jié)構(gòu)屬性下,訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置根據(jù)所述標(biāo)識(shí)序號(hào)由小至大或由小至大依次排列,更加便于對(duì)訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置進(jìn)行調(diào)整,并且,訪存指令的合并效果更好。
[0207]處理器840根據(jù)所述節(jié)點(diǎn)樹鏈表中訪存節(jié)點(diǎn)的位置關(guān)系,對(duì)訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置進(jìn)行調(diào)整,使得節(jié)點(diǎn)屬性相同的訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置連續(xù),且同一層級(jí)的結(jié)構(gòu)屬性下,訪存節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)位置根據(jù)所述標(biāo)識(shí)序號(hào)由小至大或由小至大依次排列。
[0208]其中,由于訪存節(jié)點(diǎn)的結(jié)構(gòu)屬性可以有多個(gè)層級(jí),因此,若在非節(jié)點(diǎn)層級(jí)(即在節(jié)點(diǎn)樹鏈表中為非葉子節(jié)點(diǎn))中,層級(jí)由高至低,同一層級(jí)的結(jié)構(gòu)屬性也需要根據(jù)訪存節(jié)點(diǎn)的標(biāo)識(shí)序號(hào),由小至大或由小至大依次排列。
[0209]具體的,本發(fā)明實(shí)施例中的節(jié)點(diǎn)屬性相同可以理解為至少有一種節(jié)點(diǎn)屬性相同,而在實(shí)際應(yīng)用中,由于節(jié)點(diǎn)屬性包括有動(dòng)作屬性和結(jié)構(gòu)屬性,而結(jié)構(gòu)屬性又可以進(jìn)一步劃分為多個(gè)層級(jí),因此,一種節(jié)點(diǎn)屬性可以理解為動(dòng)作屬性中的不同動(dòng)作的任意一種,或結(jié)構(gòu)屬性中的不同結(jié)構(gòu)層級(jí)的任意一種。具體可以