一種實(shí)現(xiàn)多線程互斥操作的方法、裝置和芯片的制作方法
【專利摘要】本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)多線程互斥操作的方法、裝置和芯片,通過(guò)在芯片上分布多個(gè)鎖部件,分別管理不同小核申請(qǐng)鎖的申請(qǐng)鎖消息和釋放鎖的釋放鎖消息,進(jìn)而能夠解決線程數(shù)目增多時(shí)產(chǎn)生的擁塞問(wèn)題,提高線程協(xié)同執(zhí)行的速度。該方法包括:接收小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址,其中,所述鎖消息為申請(qǐng)鎖消息或釋放鎖消息;利用所述請(qǐng)求的鎖的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào);向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處理。本發(fā)明適用于計(jì)算機(jī)領(lǐng)域。
【專利說(shuō)明】一種實(shí)現(xiàn)多線程互斥操作的方法、裝置和芯片
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種實(shí)現(xiàn)多線程互斥操作的方法、裝置和芯片。
【背景技術(shù)】
[0002] 隨著半導(dǎo)體工藝的發(fā)展,芯片上可集成的晶體管數(shù)目日益增多,體系結(jié)構(gòu)設(shè)計(jì)者 為了在性能提升的同時(shí)降低功耗和散熱,提出線程級(jí)粗粒度并行的片上多核/眾核處理 器,所述片上多核/眾核處理器指集成在同一芯片上的多核/眾核處理器,與傳統(tǒng)的多處理 器相比,該片上多核/眾核處理器具有片上帶寬高、通信距離短、傳輸速度快的優(yōu)點(diǎn),進(jìn)而 使得多個(gè)線程間數(shù)據(jù)通信效率較高。
[0003] 但是,在多個(gè)線程并行執(zhí)行時(shí),經(jīng)常會(huì)出現(xiàn)共享變量的情況,為了保證程序執(zhí)行語(yǔ) 義的正確性,需要采用互斥操作方法,該方法可以保證多個(gè)線程對(duì)共享內(nèi)存進(jìn)行讀寫操作 時(shí),在同一時(shí)刻,只有一個(gè)線程獨(dú)占共享內(nèi)存。互斥操作的性能對(duì)片上多核/眾核處理器而 言非常重要,直接影響了多個(gè)線程協(xié)同執(zhí)行的速度。
[0004] 現(xiàn)有技術(shù)的一種互斥操作的實(shí)現(xiàn)方式包括:在芯片外部的內(nèi)存中設(shè)置一個(gè)標(biāo)志 位,所述標(biāo)志位為0標(biāo)識(shí)鎖當(dāng)前處于空閑狀態(tài),所述標(biāo)志位為1標(biāo)識(shí)鎖當(dāng)前處于占用狀態(tài), 其中,鎖是多線程中用來(lái)保護(hù)同一時(shí)刻只有一個(gè)線程操作被保護(hù)的機(jī)制。在有互斥操作時(shí), 所述多核/眾核處理器上多個(gè)小核都去輪詢?cè)搩?nèi)存中的同一個(gè)標(biāo)志位,只有標(biāo)志位為0,即 鎖處于空閑狀態(tài),線程才能獲取該鎖,進(jìn)而占用該內(nèi)存進(jìn)行讀寫操作,同時(shí)將標(biāo)志位置1。如 果發(fā)現(xiàn)標(biāo)志位為1,就隔一段時(shí)間再來(lái)查詢這個(gè)標(biāo)志位。該方法雖然可以實(shí)現(xiàn)互斥操作,但 是芯片上的小核訪問(wèn)芯片外部的標(biāo)志位會(huì)產(chǎn)生系統(tǒng)開銷比較大的問(wèn)題,并且對(duì)于標(biāo)志位的 不斷輪詢,也會(huì)對(duì)片上網(wǎng)絡(luò)造成很大壓力。
[0005] 現(xiàn)有技術(shù)的另一種互斥操作的實(shí)現(xiàn)方式包括,利用如圖1所示的與多個(gè)小核連接 的同步管理裝置,集成處理所述多核/眾核處理器上所有小核的互斥請(qǐng)求,即通過(guò)該同步 管理裝置管理各個(gè)小核申請(qǐng)鎖的申請(qǐng)鎖消息和釋放鎖的釋放鎖消息,并根據(jù)所述同步管理 裝置中的鎖的狀態(tài)判斷是獲得鎖還是等待鎖。該方法雖然可以避免訪問(wèn)芯片外部的標(biāo)志位 產(chǎn)生的系統(tǒng)開銷比較大的問(wèn)題,并避免了標(biāo)志位的輪詢,但是因?yàn)樗械木€程都要通過(guò)一 個(gè)同步管理裝置進(jìn)行管理,當(dāng)線程數(shù)目增多時(shí),會(huì)產(chǎn)生擁塞現(xiàn)象,也會(huì)使線程的等待時(shí)間變 長(zhǎng),降低線程協(xié)同執(zhí)行的速度。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明的實(shí)施例提供一種實(shí)現(xiàn)多線程互斥操作的方法、裝置和芯片,以解決線程 數(shù)目增多時(shí)產(chǎn)生的擁塞現(xiàn)象,提高線程協(xié)同執(zhí)行的速度。
[0007] 為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0008] 第一方面,提供了一種實(shí)現(xiàn)多線程互斥操作的方法,該方法包括:
[0009] 接收小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi) 存地址,其中,所述鎖消息為申請(qǐng)鎖消息或釋放鎖消息;
[0010] 利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào); [0011] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處 理。
[0012] 在第一種可能的實(shí)現(xiàn)方式中,根據(jù)第一方面,所述利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存 地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)包括:
[0013] 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù) 作為所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0014] 在第二種可能的實(shí)現(xiàn)方式中,根據(jù)第一方面或第一種可能的實(shí)現(xiàn)方式,所述請(qǐng)求 的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址、鎖的狀態(tài)、等待該鎖的線程的個(gè)數(shù)及編號(hào)、正使用該 鎖的線程的編號(hào)、下一個(gè)獲取該鎖的線程的指示信息,其中,所述鎖的狀態(tài)為空閑狀態(tài)或占 用狀態(tài);
[0015] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處 理具體包括:
[0016] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0017] 在第三種可能的實(shí)現(xiàn)方式中,根據(jù)第一方面或第一種可能的實(shí)現(xiàn)方式,所述請(qǐng)求 的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè)數(shù)、正使用該鎖的線 程的編號(hào)、指示芯片上所有線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程的指示信息,其中, 所述線程的狀態(tài)包括所述線程在是否在等待該鎖;
[0018] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處 理具體包括:
[0019] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0020] 第二方面,提供了一種實(shí)現(xiàn)多線程互斥操作的裝置,所述裝置包括接收單元、計(jì)算 單元、發(fā)送單元;
[0021] 所述接收單元,用于接收小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線 程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址,其中,所述鎖消息為申請(qǐng)鎖消息或釋放鎖消息;
[0022] 所述計(jì)算單元,用于利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的 鎖部件的編號(hào);
[0023] 所述發(fā)送單元,用于向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件 對(duì)所述鎖消息進(jìn)行處理。
[0024] 在第一種可能的實(shí)現(xiàn)方式中,根據(jù)第二方面,所述計(jì)算單元利用所述請(qǐng)求的鎖對(duì) 應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)包括:
[0025] 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù) 作為所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0026] 在第二種可能的實(shí)現(xiàn)方式中,根據(jù)第二方面或第一種可能的實(shí)現(xiàn)方式,所述請(qǐng)求 的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址、鎖的狀態(tài)、等待該鎖的線程的個(gè)數(shù)及編號(hào)、正使用該 鎖的線程的編號(hào)、下一個(gè)獲取該鎖的線程的指示信息,其中,所述鎖的狀態(tài)為空閑狀態(tài)或占 用狀態(tài);
[0027] 所述發(fā)送單元向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述 鎖消息進(jìn)行處理具體包括:
[0028] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0029] 在第三種可能的實(shí)現(xiàn)方式中,根據(jù)第二方面或第一種可能的實(shí)現(xiàn)方式,所述請(qǐng)求 的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè)數(shù)、正使用該鎖的線 程的編號(hào)、指示芯片上所有線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程的指示信息,其中, 所述線程的狀態(tài)包括所述線程在是否在等待該鎖;
[0030] 所述發(fā)送單元向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述 鎖消息進(jìn)行處理具體包括:
[0031] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0032] 第三方面,提供了一種實(shí)現(xiàn)多線程互斥操作的芯片,所述芯片包括:小核、路由部 件和鎖部件;
[0033] 所述路由部件,用于接收所述小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第 一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址,其中,所述鎖消息為申請(qǐng)鎖消息或釋放鎖消息;
[0034] 所述路由部件,還用于利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬 的鎖部件的編號(hào);
[0035] 所述路由部件,還用于向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部 件對(duì)所述鎖消息進(jìn)行處理;
[0036] 所述鎖部件,用于接收所述路由部件發(fā)送的所述鎖消息;
[0037] 所述鎖部件,還用于對(duì)所述鎖消息進(jìn)行處理。
[0038] 在第一種可能的實(shí)現(xiàn)方式中,根據(jù)第三方面,所述路由部件利用所述請(qǐng)求的鎖對(duì) 應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)包括:
[0039] 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù) 作為所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0040] 在第二種可能的實(shí)現(xiàn)方式中,根據(jù)第三方面或第一種可能的實(shí)現(xiàn)方式,所述請(qǐng)求 的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址、鎖的狀態(tài)、等待該鎖的線程的個(gè)數(shù)及編號(hào)、正使用該 鎖的線程的編號(hào)、下一個(gè)獲取該鎖的線程的指示信息,其中,所述鎖的狀態(tài)為空閑狀態(tài)或占 用狀態(tài);
[0041] 所述路由部件向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述 鎖消息進(jìn)行處理具體包括:
[0042] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0043] 在第三種可能的實(shí)現(xiàn)方式中,根據(jù)第二種可能的實(shí)現(xiàn)方式,若所述鎖消息為申請(qǐng) 鎖消息,則所述鎖消息還攜帶所述第一線程的編號(hào);
[0044] 所述鎖部件還用于對(duì)所述鎖消息進(jìn)行處理具體包括:
[0045] 根據(jù)所述請(qǐng)求的鎖消息攜帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找所述請(qǐng)求的鎖 的信息;
[0046] 檢查所述請(qǐng)求的鎖的信息中包含的鎖的狀態(tài);
[0047] 若所述請(qǐng)求的鎖的狀態(tài)為占用狀態(tài),判斷等待所述請(qǐng)求的鎖的線程的個(gè)數(shù)是否小 于芯片所支持的最大線程的個(gè)數(shù);
[0048] 若所述等待所述請(qǐng)求的鎖的線程的個(gè)數(shù)小于所述芯片所支持的最大線程的個(gè)數(shù), 將所述第一線程的編號(hào)寫入等待所述請(qǐng)求的鎖的線程的編號(hào)字段,同時(shí)更新所述等待該鎖 的線程的個(gè)數(shù);
[0049] 若所述在等待所述請(qǐng)求的鎖的線程的個(gè)數(shù)不小于所述芯片所支持的最大線程的 個(gè)數(shù),將所述第一線程編號(hào)寫入所述請(qǐng)求的鎖的內(nèi)存。
[0050] 在第四種可能的實(shí)現(xiàn)方式中,根據(jù)第三方面或第一種可能的實(shí)現(xiàn)方式,所述請(qǐng)求 的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè)數(shù)、正使用該鎖的線 程的編號(hào)、指示芯片上所有線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程的指示信息,其中, 所述線程的狀態(tài)包括所述線程在是否在等待該鎖;
[0051] 所述路由部件向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述 鎖消息進(jìn)行處理具體包括:
[0052] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0053] 第四方面,提供了一種計(jì)算機(jī)節(jié)點(diǎn),所述計(jì)算機(jī)節(jié)點(diǎn)包括第三方面任一項(xiàng)所述的 實(shí)現(xiàn)多線程互斥操作的芯片。
[0054] 第五方面,提供了一種計(jì)算機(jī)系統(tǒng),所述計(jì)算機(jī)系統(tǒng)包括內(nèi)存和第四方面所述的 計(jì)算機(jī)節(jié)點(diǎn)。
[0055] 本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)多線程互斥操作的方法、裝置和芯片,所述方法包 括:接收小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地 址;利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào);向所述編 號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處理。
[0056] 基于上述描述,通過(guò)在芯片上分布多個(gè)鎖部件,分別管理不同小核申請(qǐng)鎖的申請(qǐng) 鎖消息和釋放鎖的釋放鎖消息,進(jìn)而解決了線程數(shù)目增多時(shí)產(chǎn)生的擁塞現(xiàn)象,降低了線程 的等待時(shí)間,提高了線程協(xié)同執(zhí)行的速度。
【專利附圖】
【附圖說(shuō)明】
[0057] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0058] 圖1為現(xiàn)有技術(shù)中實(shí)現(xiàn)多線程互斥操作的芯片結(jié)構(gòu)示意圖;
[0059] 圖2為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)多線程互斥操作的方法;
[0060] 圖3為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)多線程互斥操作的芯片結(jié)構(gòu)示意圖;
[0061] 圖4為本發(fā)明實(shí)施例提供的另一種實(shí)現(xiàn)多線程互斥操作的方法;
[0062] 圖5為本發(fā)明實(shí)施例提供的又一種實(shí)現(xiàn)多線程互斥操作的方法;
[0063] 圖6為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)多線程互斥操作的裝置;
[0064] 圖7為本發(fā)明實(shí)施例提供的一種實(shí)現(xiàn)多線程互斥操作的芯片;
[0065]圖8為本發(fā)明實(shí)施例提供的一種計(jì)算機(jī)節(jié)點(diǎn);
[0066] 圖9為本發(fā)明實(shí)施例提供的一種計(jì)算機(jī)系統(tǒng)。
【具體實(shí)施方式】
[0067] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0068] 實(shí)施例一、
[0069] 本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)多線程互斥操作的方法,該方法的執(zhí)行主體為芯片 上的路由部件,具體如圖2所示,該方法包括:
[0070] 201、接收小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng) 的內(nèi)存地址。
[0071 ] 其中,所述鎖消息包括申請(qǐng)鎖消息和釋放鎖消息。
[0072] 具體的,隨著半導(dǎo)體工藝的發(fā)展,芯片上可集成的晶體管數(shù)目日益增多,體系結(jié)構(gòu) 設(shè)計(jì)者為了在性能提升的同時(shí)降低功耗和散熱,提出線程級(jí)粗粒度并行的片上多核/眾核 處理器,所述片上多核處理器指集成在同一芯片上的多核/眾核處理器,其中,眾核處理器 比多核處理器在芯片上集成了更多的處理器核,通常認(rèn)為芯片上集成8個(gè)小核以下的處理 器被稱為多核處理器,集成8個(gè)小核以上的處理器被稱為眾核處理器。
[0073] 在所述多核/眾核處理器的小核中,當(dāng)多個(gè)線程并行執(zhí)行時(shí),很容易出現(xiàn)共享變 量的情況,但是在同一時(shí)刻,只允許有一個(gè)線程獨(dú)占共享內(nèi)存,否則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)亂的情 況?,F(xiàn)有技術(shù)中,為了解決該問(wèn)題,引入鎖的概念,所述鎖是多線程中用來(lái)保護(hù)同一時(shí)刻只 有一個(gè)線程操作被保護(hù)的機(jī)制,鎖包含的信息標(biāo)識(shí)了線程要訪問(wèn)的共享內(nèi)存的狀態(tài),通過(guò) 要訪問(wèn)的共享內(nèi)存的狀態(tài)確定當(dāng)前是否有權(quán)限訪問(wèn)共享內(nèi)存,從而讓每個(gè)線程都有順序的 訪問(wèn)共享內(nèi)存。
[0074] 在本發(fā)明實(shí)施例中,路由部件接收小核發(fā)送的申請(qǐng)鎖消息,所述申請(qǐng)鎖消息攜帶 了所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址,通過(guò)所述內(nèi)存地址查找到該鎖,最終確 定所述請(qǐng)求的鎖的狀態(tài)。
[0075] 在訪問(wèn)共享內(nèi)存結(jié)束后,所述路由部件接收小核發(fā)送的釋放鎖消息,所述釋放鎖 消息也攜帶所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址,通過(guò)執(zhí)行釋放鎖消息,釋放共 享內(nèi)存空間,以便讓其它線程進(jìn)入該共享內(nèi)存訪問(wèn)。
[0076] 202、利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0077] 具體的,本發(fā)明實(shí)施例在芯片上分布多個(gè)鎖部件,每個(gè)鎖部件包含一定數(shù)量的鎖, 這樣可以將多個(gè)鎖分散在多個(gè)鎖部件中,當(dāng)線程數(shù)目增多時(shí),由不同的鎖部件管理各個(gè)小 核申請(qǐng)鎖的申請(qǐng)鎖消息和釋放鎖的釋放鎖消息,這樣可以解決現(xiàn)有技術(shù)中出現(xiàn)的擁塞現(xiàn) 象,同時(shí)降低了線程的等待時(shí)間,提高了線程協(xié)同執(zhí)行的速度。
[0078] 相應(yīng)的,因?yàn)榇嬖诙鄠€(gè)鎖部件,所以路由部件在接收小核發(fā)送的鎖消息后,首先要 利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0079] 當(dāng)然,所述利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的 編號(hào)的方法要依據(jù)鎖與鎖部件的對(duì)應(yīng)存儲(chǔ)形式而定。
[0080] 所述利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào) 具體可以包括:
[0081] 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù) 作為所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0082] 例如,有4個(gè)鎖部件,編號(hào)分別為0、1、2、3,其中,
[0083] 編號(hào)0的鎖部件中5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0000、0004、0008、000C、0010 ;
[0084] 編號(hào)1的鎖部件中有5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0001、0005、0009、000D、 0011 ;
[0085] 編號(hào)2的鎖部件中有5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0002、0006、000A、000E、 0012 ;
[0086] 編號(hào)3的鎖部件中有5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0003、0007、000B、000F、0013。
[0087] 即,對(duì)應(yīng)存儲(chǔ)形式為:鎖部件的編號(hào)和該鎖部件包含的鎖對(duì)應(yīng)的內(nèi)存地址與所有 鎖部件的個(gè)數(shù)的商的余數(shù)相同,則若所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址為0009,可以通過(guò)以下 方法計(jì)算所述請(qǐng)求的鎖所屬的鎖部件:
[0088] 第一,計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù)。
[0089] 此時(shí),鎖部件的個(gè)數(shù)為4,鎖對(duì)應(yīng)的內(nèi)存地址為0009,則 [0090] 余數(shù)=取余(內(nèi)存地址/鎖部件的個(gè)數(shù))
[0091] =取余(9/4) = 1
[0092] 第二,將所述余數(shù)作為所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0093] 此時(shí),余數(shù)為1,故所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)為1。
[0094] 當(dāng)然,也可能是路由部件中預(yù)先存儲(chǔ)了鎖部件的編號(hào)與所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存 地址對(duì)應(yīng)關(guān)系。
[0095] 例如,如果有3個(gè)鎖部件1、2、3,預(yù)存儲(chǔ)的對(duì)應(yīng)關(guān)系為:
[0096] 鎖部件1,鎖標(biāo)識(shí)的內(nèi)存地址段為0000-003F ;
[0097] 鎖部件2,鎖標(biāo)識(shí)的內(nèi)存地址段為0040-007F ;
[0098] 鎖部件3,鎖標(biāo)識(shí)的內(nèi)存地址段為0080-00BF。
[0099] 則若所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址為0009,可以通過(guò)以下方法計(jì)算所述請(qǐng)求的鎖 所屬的鎖部件的編號(hào):
[0100] 查詢對(duì)應(yīng)關(guān)系表格,發(fā)現(xiàn)0009屬于地址段0000-003F,對(duì)應(yīng)鎖部件1,則所述請(qǐng)求 的鎖所屬的鎖部件的編號(hào)為1。
[0101] 本發(fā)明實(shí)施例旨在說(shuō)明利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所 屬的鎖部件的編號(hào),對(duì)如何計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)不作具體限定。
[0102] 203、向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn) 行處理。
[0103] 具體的,在利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的 編號(hào)后,向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處理具 體可以包括:
[0104] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0105] 其中,所述請(qǐng)求的鎖的信息可以包括:鎖對(duì)應(yīng)的內(nèi)存地址、鎖的狀態(tài)、等待該鎖的 線程的個(gè)數(shù)及編號(hào)、正使用該鎖的線程的編號(hào)、下一個(gè)獲取該鎖的線程的指示信息,其中, 所述鎖的狀態(tài)為空閑狀態(tài)或占用狀態(tài)。
[0106] 或
[0107] 所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè) 數(shù)、正使用該鎖的線程的編號(hào)、指示芯片上所有線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程 的指示信息,其中,所述線程的狀態(tài)包括所述線程在是否在等待該鎖。
[0108] 本發(fā)明實(shí)施例對(duì)所述請(qǐng)求的鎖的信息不作具體限定。
[0109] 本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)多線程互斥操作的方法,所述方法包括:接收小核 發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址;利用所述 請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào);向所述編號(hào)對(duì)應(yīng)的鎖部 件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處理。
[0110] 基于上述實(shí)施例的描述,通過(guò)在芯片上分布多個(gè)鎖部件,分別管理不同小核申請(qǐng) 鎖的申請(qǐng)鎖消息和釋放鎖的釋放鎖消息,進(jìn)而解決了線程數(shù)目增多時(shí)產(chǎn)生的擁塞現(xiàn)象,降 低了線程的等待時(shí)間,提高了線程協(xié)同執(zhí)行的速度。
[0111] 實(shí)施例二、
[0112] 本發(fā)明實(shí)施例提供了一種實(shí)現(xiàn)多線程互斥操作的方法,該方法以圖3所示的芯片 結(jié)構(gòu)示意圖為例進(jìn)行說(shuō)明,所述芯片包括小核、路由部件、鎖部件。其中,每個(gè)小核都與一個(gè) 路由部件相連,而路由部件與路由部件又相互連通,從而構(gòu)成一個(gè)片上網(wǎng)絡(luò)。
[0113] 在小核的周圍分布多個(gè)鎖部件,所述鎖部件中存儲(chǔ)了多個(gè)鎖包含的信息,與鎖部 件直連的則是路由部件,這樣,小核就可以通過(guò)與其相連的路由部件與所述鎖部件進(jìn)行交 互。
[0114] 具體的,以所述小核發(fā)送申請(qǐng)鎖消息為例進(jìn)行描述,如圖4所示,該方法包括:
[0115] 401、路由部件接收小核發(fā)送的申請(qǐng)鎖消息,所述申請(qǐng)鎖消息攜帶所述小核中第一 線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址。
[0116] 具體的,隨著半導(dǎo)體工藝的發(fā)展,芯片上可集成的晶體管數(shù)目日益增多,體系結(jié)構(gòu) 設(shè)計(jì)者為了在性能提升的同時(shí)降低功耗和散熱,提出線程級(jí)粗粒度并行的片上多核/眾核 處理器,所述片上多核處理器指集成在同一芯片上的多核/眾核處理器,其中,眾核處理器 比多核處理器在芯片上集成了更多的處理器核,通常認(rèn)為芯片上集成8個(gè)小核以下的處理 器被稱為多核處理器,集成8個(gè)小核以上的處理器被稱為眾核處理器。
[0117] 在所述多核/眾核處理器的小核中,當(dāng)多個(gè)線程并行執(zhí)行時(shí),很容易出現(xiàn)共享變 量的情況,但是在同一時(shí)刻,只允許有一個(gè)線程獨(dú)占共享內(nèi)存,否則會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)亂的情 況?,F(xiàn)有技術(shù)中,為了解決該問(wèn)題,引入鎖的概念,所述鎖是多線程中用來(lái)保護(hù)同一時(shí)刻只 有一個(gè)線程操作被保護(hù)的機(jī)制,鎖包含的信息標(biāo)識(shí)了線程要訪問(wèn)的共享內(nèi)存的狀態(tài),通過(guò) 要訪問(wèn)的共享內(nèi)存的狀態(tài)確定當(dāng)前是否有權(quán)限訪問(wèn)共享內(nèi)存,從而讓每個(gè)線程都有順序的 訪問(wèn)共享內(nèi)存。
[0118] 其中,所述請(qǐng)求的鎖的信息可以包括:鎖對(duì)應(yīng)的內(nèi)存地址、鎖的狀態(tài)、等待該鎖的 線程的個(gè)數(shù)及編號(hào)、正使用該鎖的線程的編號(hào)、下一個(gè)獲取該鎖的線程的指示信息,其中, 所述鎖的狀態(tài)為空閑狀態(tài)或占用狀態(tài)。
[0119] 或
[0120] 所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè) 數(shù)、正使用該鎖的線程的編號(hào)、指示芯片上所有線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程 的指示信息,其中,所述線程的狀態(tài)包括所述線程在是否在等待該鎖。
[0121] 本發(fā)明實(shí)施例對(duì)所述請(qǐng)求的鎖的信息不作具體限定。
[0122] 在本發(fā)明實(shí)施例中,路由部件接收小核發(fā)送的申請(qǐng)鎖消息,所述申請(qǐng)鎖消息攜帶 了所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址,通過(guò)所述內(nèi)存地址查找到該鎖的信息, 最終確定所述請(qǐng)求的鎖的狀態(tài)。
[0123] 402、所述路由部件利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的 鎖部件的編號(hào)。
[0124] 具體的,本發(fā)明實(shí)施例在芯片上分布多個(gè)鎖部件,每個(gè)鎖部件包含一定數(shù)量的鎖, 這樣可以將多個(gè)鎖分散在多個(gè)鎖部件中,當(dāng)線程數(shù)目增多時(shí),由不同的鎖部件管理各個(gè)小 核申請(qǐng)鎖的申請(qǐng)鎖消息和釋放鎖的釋放鎖消息,這樣可以解決現(xiàn)有技術(shù)中出現(xiàn)的擁塞現(xiàn) 象,同時(shí)降低了線程的等待時(shí)間,提高了線程協(xié)同執(zhí)行的速度。
[0125] 相應(yīng)的,因?yàn)榇嬖诙鄠€(gè)鎖部件,所以路由部件在接收小核發(fā)送的鎖消息后,首先要 利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0126] 當(dāng)然,所述利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的 編號(hào)的方法要依據(jù)鎖與鎖部件的對(duì)應(yīng)存儲(chǔ)形式而定。
[0127] 所述利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào) 具體可以包括:
[0128] 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù) 作為所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
[0129] 例如,有4個(gè)鎖部件,編號(hào)分別為0、1、2、3,其中,
[0130] 編號(hào)0的鎖部件中5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0000、0004、0008、000C、0010 ;
[0131] 編號(hào)1的鎖部件中有5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0001、0005、0009、000D、 0011 ;
[0132] 編號(hào)2的鎖部件中有5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0002、0006、000A、000E、 0012 ;
[0133] 編號(hào)3的鎖部件中有5個(gè)鎖,對(duì)應(yīng)的內(nèi)存地址分別為0003、0007、000B、000F、0013。
[0134] S卩,對(duì)應(yīng)存儲(chǔ)形式為:鎖部件的編號(hào)和該鎖部件包含的鎖對(duì)應(yīng)的內(nèi)存地址與所有 鎖部件的個(gè)數(shù)的商的余數(shù)相同,則若所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址為0009,可以通過(guò)以下 方法計(jì)算所述請(qǐng)求的鎖所屬的鎖部件:
[0135] 第一,計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù)。
[0136] 此時(shí),鎖部件的個(gè)數(shù)為4,鎖對(duì)應(yīng)的內(nèi)存地址為0009,則
[0137] 余數(shù)=取余(內(nèi)存地址/鎖部件的個(gè)數(shù))
[0138] =取余(9/4) = 1
[0139] 第二,將所述余數(shù)作為所述請(qǐng)求的鎖所屬的所部件的編號(hào)。
[0140] 此時(shí),余數(shù)為1,故所述請(qǐng)求的鎖所屬的鎖部件編號(hào)為1。
[0141] 當(dāng)然,也可能是路由部件中預(yù)先存儲(chǔ)了鎖部件的編號(hào)與所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存 地址對(duì)應(yīng)關(guān)系。
[0142] 例如,如果有3個(gè)鎖部件1、2、3,預(yù)存儲(chǔ)的第一對(duì)應(yīng)關(guān)系為:
[0143] 鎖部件1,鎖標(biāo)識(shí)的內(nèi)存地址段為0000-003F ;
[0144] 鎖部件2,鎖標(biāo)識(shí)的內(nèi)存地址段為0040-007F ;
[0145] 鎖部件3,鎖標(biāo)識(shí)的內(nèi)存地址段為0080-00BF。
[0146] 則若所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址為0009,可以通過(guò)以下方法計(jì)算所述請(qǐng)求的鎖 所屬的鎖部件的編號(hào):
[0147] 查詢對(duì)應(yīng)關(guān)系表格,發(fā)現(xiàn)0009屬于地址段0000-003F,對(duì)應(yīng)鎖部件1,則所述請(qǐng)求 的鎖所屬的鎖部件的編號(hào)為1。
[0148] 本發(fā)明實(shí)施例旨在說(shuō)明利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所 屬的鎖部件的編號(hào),對(duì)如何計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)不作具體限定。
[0149] 403、所述路由部件向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述申請(qǐng)鎖消息,請(qǐng)求所述鎖部 件對(duì)所述申請(qǐng)鎖消息進(jìn)行處理。
[0150] 具體的,在利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的 編號(hào)后,向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送申請(qǐng)鎖消息,請(qǐng)求所述鎖部件對(duì)所述申請(qǐng)鎖消息進(jìn) 行處理具體可以包括:
[0151] 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜 帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息 中包含的鎖的狀態(tài)對(duì)所述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
[0152] 其中,所述請(qǐng)求的鎖的信息可以包括:鎖對(duì)應(yīng)的內(nèi)存地址、鎖的狀態(tài)、等待該鎖的 線程的個(gè)數(shù)及編號(hào)、正使用該鎖的線程的編號(hào)、下一個(gè)獲取該鎖的線程的指示信息,其中, 所述鎖的狀態(tài)為空閑狀態(tài)或占用狀態(tài)。
[0153] 或
[0154] 所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng)的內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè) 數(shù)、正使用該鎖的線程的編號(hào)、指示芯片上所有線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程 的指示信息,其中,所述線程的狀態(tài)包括所述線程在是否在等待該鎖。
[0155] 本發(fā)明實(shí)施例對(duì)所述請(qǐng)求的鎖的信息不作具體限定。
[0156] 404、所述鎖部件接收所述路由部件發(fā)送的所述申請(qǐng)鎖消息。
[0157] 在所述鎖部件接收所述路由部件發(fā)送的所述申請(qǐng)鎖消息后,所述鎖部件開始執(zhí)行 對(duì)所述申請(qǐng)鎖消息進(jìn)行處理的操作,即步驟405-408。
[0158] 405、所述鎖部件根據(jù)所述申請(qǐng)鎖消息攜帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找 所述請(qǐng)求的鎖的信息。
[0159] 406、所述鎖部件根據(jù)所述請(qǐng)求的鎖的信息中包含的鎖的狀態(tài),確定所述請(qǐng)求的鎖 是否被第二線程占用。
[0160] 具體的,鎖的內(nèi)部結(jié)構(gòu)可以如表一所示,包括:
[0161] Address :-把鎖的唯一標(biāo)識(shí),即內(nèi)存地址;
[0162] State :鎖的狀態(tài),包括空閑狀態(tài)和占用狀態(tài);
[0163] Counter :等待該鎖的線程的個(gè)數(shù);
[0164] User :正使用該鎖的線程的編號(hào);
[0165] Waiterl,2, ...N:等待該鎖的線程的編號(hào),其中,N是芯片所支持的最大線程的數(shù) 目;
[0166] Pointer :下一個(gè)獲取該鎖的線程的指示信息。
[0167] 表一 [01681
【權(quán)利要求】
1. 一種實(shí)現(xiàn)多線程互斥操作的方法,其特征在于,所述方法包括: 接收小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地 址,其中,所述鎖消息為申請(qǐng)鎖消息或釋放鎖消息; 利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào); 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處理。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址 計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)包括: 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù)作為 所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
3. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng)的 內(nèi)存地址、鎖的狀態(tài)、等待該鎖的線程的個(gè)數(shù)及編號(hào)、正使用該鎖的線程的編號(hào)、下一個(gè)獲 取該鎖的線程的指示信息,其中,所述鎖的狀態(tài)為空閑狀態(tài)或占用狀態(tài); 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處理具 體包括: 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜帶的 所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息對(duì)所 述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
4. 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng)的 內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè)數(shù)、正使用該鎖的線程的編號(hào)、指示芯片上所有 線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程的指示信息,其中,所述線程的狀態(tài)包括所述線 程在是否在等待該鎖; 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消息進(jìn)行處理具 體包括: 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜帶的 所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息對(duì)所 述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
5. -種實(shí)現(xiàn)多線程互斥操作的裝置,其特征在于,所述裝置包括接收單元、計(jì)算單元、 發(fā)送單元; 所述接收單元,用于接收小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線程請(qǐng) 求的鎖對(duì)應(yīng)的內(nèi)存地址,其中,所述鎖消息為申請(qǐng)鎖消息或釋放鎖消息; 所述計(jì)算單元,用于利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部 件的編號(hào); 所述發(fā)送單元,用于向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所 述鎖消息進(jìn)行處理。
6. 根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述計(jì)算單元利用所述請(qǐng)求的鎖對(duì)應(yīng)的 內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)包括: 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù)作為 所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
7. 根據(jù)權(quán)利要求5或6所述的裝置,其特征在于,所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng)的 內(nèi)存地址、鎖的狀態(tài)、等待該鎖的線程的個(gè)數(shù)及編號(hào)、正使用該鎖的線程的編號(hào)、下一個(gè)獲 取該鎖的線程的指示信息,其中,所述鎖的狀態(tài)為空閑狀態(tài)或占用狀態(tài); 所述發(fā)送單元向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消 息進(jìn)行處理具體包括: 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜帶的 所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息對(duì)所 述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
8. 根據(jù)權(quán)利要求5或6所述的裝置,其特征在于,所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng)的 內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè)數(shù)、正使用該鎖的線程的編號(hào)、指示芯片上所有 線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程的指示信息,其中,所述線程的狀態(tài)包括所述線 程在是否在等待該鎖; 所述發(fā)送單元向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消 息進(jìn)行處理具體包括: 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜帶的 所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息對(duì)所 述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
9. 一種實(shí)現(xiàn)多線程互斥操作的芯片,其特征在于,所述芯片包括:小核、路由部件和鎖 部件; 所述路由部件,用于接收所述小核發(fā)送的鎖消息,所述鎖消息攜帶所述小核中第一線 程請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址,其中,所述鎖消息為申請(qǐng)鎖消息或釋放鎖消息; 所述路由部件,還用于利用所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖 部件的編號(hào); 所述路由部件,還用于向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì) 所述鎖消息進(jìn)行處理; 所述鎖部件,用于接收所述路由部件發(fā)送的所述鎖消息; 所述鎖部件,還用于對(duì)所述鎖消息進(jìn)行處理。
10. 根據(jù)權(quán)利要求9所述的芯片,其特征在于,所述路由部件利用所述請(qǐng)求的鎖對(duì)應(yīng)的 內(nèi)存地址計(jì)算所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)包括: 計(jì)算所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址除以所有鎖部件的個(gè)數(shù)后的余數(shù),將所述余數(shù)作為 所述請(qǐng)求的鎖所屬的鎖部件的編號(hào)。
11. 根據(jù)權(quán)利要求9或10所述的芯片,其特征在于,所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng) 的內(nèi)存地址、鎖的狀態(tài)、等待該鎖的線程的個(gè)數(shù)及編號(hào)、正使用該鎖的線程的編號(hào)、下一個(gè) 獲取該鎖的線程的指示信息,其中,所述鎖的狀態(tài)為空閑狀態(tài)或占用狀態(tài); 所述路由部件向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消 息進(jìn)行處理具體包括: 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜帶的 所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息對(duì)所 述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
12. 根據(jù)權(quán)利要求11所述的芯片,其特征在于,若所述鎖消息為申請(qǐng)鎖消息,則所述鎖 消息還攜帶所述第一線程的編號(hào); 所述鎖部件還用于對(duì)所述鎖消息進(jìn)行處理具體包括: 根據(jù)所述請(qǐng)求的鎖消息攜帶的所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找所述請(qǐng)求的鎖的信 息; 檢查所述請(qǐng)求的鎖的信息中包含的鎖的狀態(tài); 若所述請(qǐng)求的鎖的狀態(tài)為占用狀態(tài),判斷等待所述請(qǐng)求的鎖的線程的個(gè)數(shù)是否小于芯 片所支持的最大線程的個(gè)數(shù); 若所述等待所述請(qǐng)求的鎖的線程的個(gè)數(shù)小于所述芯片所支持的最大線程的個(gè)數(shù),將所 述第一線程的編號(hào)寫入等待所述請(qǐng)求的鎖的線程的編號(hào)字段,同時(shí)更新所述等待該鎖的線 程的個(gè)數(shù); 若所述在等待所述請(qǐng)求的鎖的線程的個(gè)數(shù)不小于所述芯片所支持的最大線程的個(gè)數(shù), 將所述第一線程編號(hào)寫入所述請(qǐng)求的鎖的內(nèi)存。
13. 根據(jù)權(quán)利要求9或10所述的芯片,其特征在于,所述請(qǐng)求的鎖的信息包括:鎖對(duì)應(yīng) 的內(nèi)存地址,鎖的狀態(tài),等待該鎖的線程的個(gè)數(shù)、正使用該鎖的線程的編號(hào)、指示芯片上所 有線程的狀態(tài)的向量、下一個(gè)獲取該鎖的線程的指示信息,其中,所述線程的狀態(tài)包括所述 線程在是否在等待該鎖; 所述路由部件向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件對(duì)所述鎖消 息進(jìn)行處理具體包括: 向所述編號(hào)對(duì)應(yīng)的鎖部件發(fā)送所述鎖消息,請(qǐng)求所述鎖部件在根據(jù)所述鎖消息攜帶的 所述請(qǐng)求的鎖對(duì)應(yīng)的內(nèi)存地址查找到所述請(qǐng)求的鎖的信息后,根據(jù)所述請(qǐng)求鎖的信息對(duì)所 述鎖消息進(jìn)行處理,同時(shí)更新所述請(qǐng)求的鎖的信息。
14. 一種計(jì)算機(jī)節(jié)點(diǎn),其特征在于,包括權(quán)利要求9-13任一項(xiàng)所述的實(shí)現(xiàn)多線程互斥 操作的芯片。
15. -種計(jì)算機(jī)系統(tǒng),其特征在于,包括內(nèi)存和權(quán)利要求14所述的計(jì)算機(jī)節(jié)點(diǎn)。
【文檔編號(hào)】G06F9/52GK104102549SQ201310112333
【公開日】2014年10月15日 申請(qǐng)日期:2013年4月1日 優(yōu)先權(quán)日:2013年4月1日
【發(fā)明者】徐衛(wèi)志, 唐志敏, 張志敏, 宋風(fēng)龍 申請(qǐng)人:華為技術(shù)有限公司, 中國(guó)科學(xué)院計(jì)算技術(shù)研究所