国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      內(nèi)核功能性檢查器的制造方法

      文檔序號:9308572閱讀:359來源:國知局
      內(nèi)核功能性檢查器的制造方法
      【技術(shù)領(lǐng)域】
      [0001] 本文所述的實施例一般涉及計算機(jī)軟件和用于測試計算機(jī)軟件的方法及系統(tǒng)。
      【背景技術(shù)】
      [0002] 包括CPU(中央處理單元)、GPU(圖形處理單元)和其它處理器的組合的計算機(jī)系 統(tǒng)已經(jīng)成為平臺的重要類別。工業(yè)標(biāo)準(zhǔn)框架已經(jīng)被開發(fā)用于對這些所謂的異構(gòu)系統(tǒng)進(jìn)行編 程。一個這樣的框架是OpenCL(開放計算語言)。用于這樣的系統(tǒng)的軟件的開發(fā)涉及檢查 作為調(diào)試(debug)過程的部分的代碼的部分的功能性。然而,用于這樣的系統(tǒng)的程序的逐 行調(diào)試的解決方案已經(jīng)被限制,通常涉及硬件特定的實現(xiàn)方式。
      【附圖說明】
      [0003] 圖1圖示了用于實現(xiàn)內(nèi)核功能性檢查器的示例系統(tǒng)。
      [0004]圖2是示例內(nèi)核功能性檢查器中的軟件組件之間的接口。
      [0005] 圖3圖示在一個實施例中的內(nèi)核功能性檢查器的解析器和驅(qū)動應(yīng)用的基本操作。
      [0006]圖4示出由內(nèi)核功能性檢查器所執(zhí)行的方法的示例。
      [0007] 圖5是圖示根據(jù)示例實施例的示例機(jī)器的框圖,在所述示例機(jī)器上本文所討論的 技術(shù)(例如,方法)中的任何一個或多個可以執(zhí)行。
      【具體實施方式】
      [0008] 本文所述的是稱為內(nèi)核功能性檢查器的調(diào)試系統(tǒng),用于使得能夠?qū)崿F(xiàn)用于在不同 硬件上運(yùn)行的OpenCL內(nèi)核的高級調(diào)試能力而無需在軟件驅(qū)動器或硬件中的改變或支持。 內(nèi)核功能性檢查器可以包括用于OpenCL內(nèi)核的逐行調(diào)試、運(yùn)行時斷點、私有、局部和全局 存儲器查看和編輯、運(yùn)行時斷言/條件斷點、工作項(線程)切換和步進(jìn)、局部和全局工作組 步進(jìn)以及編輯并繼續(xù)調(diào)試。下述特定示例實施例是用于OpenCL的,但所公開的方法也可以 用于使得能夠?qū)崿F(xiàn)用于諸如DirectX?和OpenGL?(開放圖形庫)之類的其它設(shè)備特定的API (應(yīng)用程序接口)的高級調(diào)試能力。
      [0009] 內(nèi)核功能性檢查器的一個實施例利用基于軟件和基于硬件的OpenCL執(zhí)行的混合 方法。在軟件中,確定用來以正確的次序正確地運(yùn)行給定的OpenCL內(nèi)核內(nèi)的單獨的語句 (statement)的必要信息,并且那些語句然后被分派給OpenCL設(shè)備以用于執(zhí)行。作為結(jié) 果,OpenCL執(zhí)行被控制,如同它是軟件應(yīng)用一樣,并且語句可以在硬件上運(yùn)行以實現(xiàn)與當(dāng)在 OpenCL設(shè)備上整個地運(yùn)行內(nèi)核時將會獲得的相同的輸出。內(nèi)核功能性檢查器可以支持內(nèi)核 執(zhí)行的完全控制,并允許用戶在內(nèi)核執(zhí)行的每個階段檢查所有存儲器對象。
      [0010] 在一個實施例中,內(nèi)核功能性檢查器可以被描述為由三個基本組件構(gòu)成。解析器 組件(也稱為CL解析器)負(fù)責(zé)在有效的OpenCL內(nèi)核中讀取并然后輸出有效的微內(nèi)核和必 要的元數(shù)據(jù)。驅(qū)動應(yīng)用組件(也稱為調(diào)試引擎)從解析器接收輸出并然后負(fù)責(zé)正確地運(yùn)行 內(nèi)核,處置所有存儲器和內(nèi)核執(zhí)行任務(wù)。第三組件是用戶接口,其向用戶提供接口,通過 所述接口向驅(qū)動應(yīng)用發(fā)出命令以及顯示輸出。在操作中,有效的OpenCL內(nèi)核首先被傳遞 到解析器組件,其執(zhí)行內(nèi)核的語義分析以生成一系列微內(nèi)核,所述微內(nèi)核中的每一個表示 來自原始內(nèi)核的指令集。在典型的使用中,該指令集將是由原始OpenCL內(nèi)核中的單行源 代碼表示的指令,但也可以是由單獨的源行所表示的指令的子集,以允許調(diào)試源行的單獨 部分。除了生成這些微內(nèi)核之外,CL解析器還從內(nèi)核中提取元數(shù)據(jù)用于流控制、內(nèi)核變元 (argument)、私有和局部變量以及索引,以正確地映射變量以用于驅(qū)動應(yīng)用。驅(qū)動應(yīng)用組件 使用該輸出來提供一種系統(tǒng)以用于用戶以各種方式步進(jìn)通過內(nèi)核的執(zhí)行,包括(但不限于) 逐行步進(jìn)和執(zhí)行直到指定的斷點。
      [0011] 示例系統(tǒng)描述 圖1圖示了用于實現(xiàn)內(nèi)核功能性檢查器的示例系統(tǒng)。具有CPU(中央處理單元)105 和主機(jī)存儲器110的主機(jī)100與用戶接口 115 (例如,具有鍵盤的顯示監(jiān)視器)通信并 對接到一個或多個計算設(shè)備150,所述一個或多個計算設(shè)備中的每一個可以是例如GPU(圖 形處理單元)。主機(jī)100運(yùn)行標(biāo)準(zhǔn)操作系統(tǒng),所述標(biāo)準(zhǔn)操作系統(tǒng)經(jīng)由設(shè)備特定的驅(qū)動器與計 算設(shè)備150通信。計算設(shè)備150可以被稱為OpenCL設(shè)備,當(dāng)主機(jī)經(jīng)由OpenCL驅(qū)動器與其 通信時。計算設(shè)備150由全局存儲器155和多個計算元件(有時也稱為核或處理元件)構(gòu) 成,所述多個計算元件被群組成多個計算單元160。圖1示出兩個這樣的計算單元160a和 160b,其分別具有局部存儲器165a和165b。計算單元160a合并分別具有私有存儲器167a 和169a的計算元件166a和168a,并且計算單元160b合并分別具有私有存儲器167b和 169b的計算元件166b和168b。所有計算元件和主機(jī)可以訪問全局存儲器155。計算單元 的局部存儲器僅由屬于該計算單元的計算元件可訪問,并且計算元件的私有存儲器僅由該 計算元件可訪問。
      [0012] OpenCL應(yīng)用由主機(jī)程序和一個或多個內(nèi)核構(gòu)成。內(nèi)核是OpenCL中的可執(zhí)行代碼 的基本單元。主機(jī)程序在主機(jī)上運(yùn)行,而每個內(nèi)核由單個計算元件執(zhí)行。內(nèi)核或線程可以 由計算元件并發(fā)地執(zhí)行以提供數(shù)據(jù)的并行處理。主機(jī)程序經(jīng)由OpenCLAPI而部署內(nèi)核以 供在OpenCL設(shè)備上執(zhí)行,所述OpenCLAPI經(jīng)由OpenCL設(shè)備驅(qū)動器編譯內(nèi)核源代碼并運(yùn)行 內(nèi)核。整數(shù)索引空間被創(chuàng)建,其中由計算元件執(zhí)行的內(nèi)核的每個實例被指派索引空間中的 點。正執(zhí)行的內(nèi)核的每個實例被稱為工作項,所述工作項由其在索引空間中的坐標(biāo)所標(biāo)識, 所述坐標(biāo)被稱為工作項的全局ID。每個并發(fā)執(zhí)行的工作項使用如由單個內(nèi)核定義的指令的 相同序列。然而,工作項的行為可以變化,由于由使用不同全局ID的代碼選擇的不同數(shù)據(jù) 以及由于可以被不同數(shù)據(jù)影響的代碼內(nèi)的條件分支語句。每個工作項由計算元件執(zhí)行,并 且工作項進(jìn)一步被組織成工作組,其中每個工作組由計算單元執(zhí)行。屬于相同工作組的工 作項因而能夠訪問與工作組關(guān)聯(lián)的計算單元的局部存儲器。
      [0013] 內(nèi)核功能性檢查器 圖2圖示了示例內(nèi)核功能性檢查器中的軟件組件之間的接口。內(nèi)核功能性檢查器201 與用戶接口 115通信并與OpenCLAPI203對接。OpenCLAPI203經(jīng)由OpenCL驅(qū)動器205 在計算設(shè)備150上編譯并運(yùn)行從內(nèi)核功能性檢查器部署的微內(nèi)核。
      [0014] 圖3圖示了在一個實施例中的內(nèi)核功能性檢查器的解析器301和驅(qū)動應(yīng)用303的 基本操作。解析器將OpenCL內(nèi)核取為輸入,并輸出用于1)微內(nèi)核和符號及2)流控制的信 息。微內(nèi)核和符號包含用于將被步進(jìn)通過的輸入內(nèi)核的單獨的可執(zhí)行語句的信息,以及用 以提取在那些語句中使用的變量的值的信息。流控制數(shù)據(jù)包含與微內(nèi)核將被執(zhí)行所按的次 序有關(guān)的信息以及用于在步進(jìn)通過輸入內(nèi)核的語句中使用的信息。驅(qū)動應(yīng)用消耗解析器輸 出并提供用于逐行調(diào)試的編程接口。這樣的調(diào)試活動可以包括例如,步進(jìn)進(jìn)入OpenCL內(nèi)核 代碼的行,獨立地執(zhí)行每一行以及獲得在整個內(nèi)核中定義的所有變量的結(jié)果。以下為根據(jù) 一個實施例的用于調(diào)試OpenCL內(nèi)核的內(nèi)核功能性檢查器的更詳細(xì)的描述。
      [0015]由解析器輸出的微內(nèi)核和符號信息可以被劃分成三個類別:微內(nèi)核(可執(zhí)行OpenCL內(nèi)核)、微內(nèi)核變元(全局存儲器空間中)和微內(nèi)核變量(私有/局部存儲器空間中)。 微內(nèi)核是OpenCL內(nèi)核,其將全局存儲器加載到私有和局部存儲器中,運(yùn)行單個OpenCL語句 并將結(jié)果拷貝回全局存儲器。這些微內(nèi)核中的每一個可以被獨立地運(yùn)行,因而允許用戶跨 過(stepover)并在單獨的OpenCL語句之前和之后查看結(jié)果。OpenCL內(nèi)核的簡單示例如 下:
      表示該代碼的字符串輸入到解析器,解析器將從其中生成以下微內(nèi)核:
      所得到的微內(nèi)核能夠執(zhí)行原始內(nèi)核的所有功能語句,但每個語句在獨立的內(nèi)核中。微 內(nèi)核變元包括來自原始內(nèi)核的變元以及用來將變量的中間值包含在私有和局部存儲器空 間中的附加變元。微內(nèi)核變量被包含在微內(nèi)核自身內(nèi),但其值被拷貝到全局存儲器和從全 局存儲器被拷貝,并且提供映射以便訪問和修改其值。
      [0016]如較早討論的,私有和局部存儲器變量通常從主機(jī)應(yīng)用不可訪問,但通過使用微 內(nèi)核既可以將所述變量的值拷貝到全局存儲器也可以從全局存儲器拷貝所述變量的值。所 得到的全局存儲器值然
      當(dāng)前第1頁1 2 3 4 5 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1