當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]多核計(jì)算機(jī)的程序設(shè)計(jì)

    采用多核處理器芯片構(gòu)成計(jì)算機(jī)系統(tǒng)是一個(gè)片內(nèi)多處理器的并行計(jì)算機(jī)系統(tǒng)。這種并行計(jì)算機(jī)系統(tǒng)過(guò)去只出現(xiàn)超級(jí)計(jì)算中心和集群計(jì)算機(jī)系統(tǒng)中?,F(xiàn)在,隨著處理器芯片進(jìn)入多核時(shí)代,使得千家萬(wàn)戶的計(jì)算機(jī)系統(tǒng)都成為多處理器的并行計(jì)算機(jī)系統(tǒng)。這種并行計(jì)算機(jī)系統(tǒng)是一種并行進(jìn)程和并行線程的系統(tǒng),多個(gè)進(jìn)程和線程可以真正地并行運(yùn)行,而不是像在單處理器系統(tǒng)中那樣輪流地在CPU上運(yùn)行。但是在多核系統(tǒng)中,原有的單個(gè)程序的運(yùn)行速度并不能得到提高。要提高單個(gè)程序的運(yùn)行性能,需要重新設(shè)計(jì)原有程序,將單個(gè)計(jì)算任務(wù)分解成多個(gè)并行的子任務(wù),讓這些子任務(wù)分別在不同的處理器核上運(yùn)行。這樣,需要采用不同的程序設(shè)計(jì)手段。隨著多核時(shí)代的到來(lái),并行程序設(shè)計(jì)將成為軟件行業(yè)的必備知識(shí)和技能。



  多核與程序設(shè)計(jì)

  與單處理器系統(tǒng)不同,運(yùn)行在多處理器系統(tǒng)中的程序是多線程的程序。這種程序必須是可重入的,即程序代碼能夠被重疊地啟動(dòng)并且同時(shí)運(yùn)行在多個(gè)上下文中,這些運(yùn)行上下文構(gòu)成多個(gè)線程。代碼的可重入意味著在多次進(jìn)入同一段代碼的線程之間避免競(jìng)態(tài)(race condition)現(xiàn)象。競(jìng)態(tài)現(xiàn)象發(fā)生在對(duì)資源的共享訪問(wèn)情況下。當(dāng)兩個(gè)運(yùn)行的線程需要訪問(wèn)相同的數(shù)據(jù)結(jié)構(gòu)或硬件資源時(shí),兩個(gè)線程會(huì)因?yàn)橘Y源的共享而相互干擾。為避免競(jìng)態(tài),需要建立起線程間的通信和同步機(jī)制。

  數(shù)據(jù)競(jìng)爭(zhēng)出現(xiàn)在兩個(gè)數(shù)據(jù)相關(guān)的線程之間。這時(shí),線程的運(yùn)行結(jié)果與線程的運(yùn)行順序有關(guān)。例如,對(duì)于以下兩個(gè)線程:

  // 線程1
  t = x;
  x = t + 1;
  // 線程2
  u = x;
  x = u + 2;

  兩個(gè)線程的并行運(yùn)行情況有以下三種可能,導(dǎo)致三種不同的結(jié)果,使得x的分別為1、2和3,如表1所示。解決這個(gè)問(wèn)題需要采用同步機(jī)制和互斥機(jī)制。同步機(jī)制是并行系統(tǒng)中保持各并行程序正確運(yùn)行的必要的控制機(jī)制。它用于在并行的線程之間進(jìn)行時(shí)間上的協(xié)調(diào)。互斥機(jī)制則是實(shí)現(xiàn)同步機(jī)制的基礎(chǔ)。在單處理器系統(tǒng)中,這種機(jī)制可以建立在存儲(chǔ)器變量的基礎(chǔ)上。在單處理器系統(tǒng)中,線程的訪存操作本身就是一種互斥的機(jī)制。而在多核系統(tǒng)中,這種機(jī)制需要通過(guò)存儲(chǔ)器一致性機(jī)制和現(xiàn)成通信機(jī)制來(lái)實(shí)現(xiàn)。

  并行程序的概念

  多處理器系統(tǒng)并行程序設(shè)計(jì)中需要進(jìn)行任務(wù)劃分、數(shù)據(jù)劃分和數(shù)據(jù)流劃分。任務(wù)劃分的目的是使得各個(gè)處理器都能分配到平衡的工作負(fù)載,從而提高運(yùn)算的并行性。數(shù)據(jù)劃分是將數(shù)據(jù)對(duì)象劃分成多個(gè)并行處理的數(shù)據(jù)子集。數(shù)據(jù)流劃分是根據(jù)數(shù)據(jù)的處理過(guò)程進(jìn)行劃分,在不同的處理階段進(jìn)行不同的數(shù)據(jù)劃分。

  以下用兩個(gè)例子分別介紹在共享存儲(chǔ)器和分布存儲(chǔ)器多處理器系統(tǒng)進(jìn)行上節(jié)中對(duì)64000個(gè)數(shù)據(jù)累加的方法。在共享存儲(chǔ)器系統(tǒng)中,假定有8個(gè)處理器以單總線方式連接。在求和運(yùn)算時(shí),數(shù)據(jù)A存儲(chǔ)在集中共享的存儲(chǔ)器中,每個(gè)處理器對(duì)共享數(shù)據(jù)中的劃分成不同子集進(jìn)行訪問(wèn)和累加。設(shè)Pn為處理器數(shù),所有處理器通過(guò)分別運(yùn)行以下程序?qū)ψ蛹械臄?shù)據(jù)進(jìn)行部分和計(jì)算:

  sum[Pn]=0;
  for(i=8000*Pn;i<8000*(Pn+1);i=i+1)
 sum[Pn]=sum[Pn]+A[i];  /* sum the assigned areas  */

  這個(gè)循環(huán)將子集的數(shù)據(jù)從共享存儲(chǔ)器中取出。然后將數(shù)據(jù)與部分和相加,形成部分和之后再求得總和。每個(gè)處理器的部分和也存放在共享的存儲(chǔ)器中,用一個(gè)數(shù)組sum[]表示這些部分和。

  求總和的程序段必須在各個(gè)處理器的部分和都計(jì)算完成時(shí)才開(kāi)始進(jìn)行,因此需要一種同步機(jī)制來(lái)協(xié)調(diào)程序的執(zhí)行時(shí)間。在并行程序中,必須明確規(guī)定關(guān)鍵點(diǎn)的同步。對(duì)于本例,求總和的程序可以采用synch()函數(shù)進(jìn)行同步操作。synch()函數(shù)是一個(gè)屏障同步函數(shù),它使得所有處理器中的有關(guān)線程都執(zhí)行到這一點(diǎn)時(shí)才繼續(xù)執(zhí)行以后的指令,先到達(dá)同步點(diǎn)的線程必須等待。即當(dāng)一個(gè)或部分線程調(diào)用這個(gè)函數(shù)時(shí),函數(shù)不返回,只有當(dāng)所有的線程都調(diào)用了這個(gè)函數(shù)時(shí),這個(gè)函數(shù)才返回,使得所有的線程都可以進(jìn)行下一步的操作。

  在分布消息傳遞型多處理器系統(tǒng)中,假設(shè)有64個(gè)處理器,通過(guò)某種互連網(wǎng)絡(luò)相互連接。進(jìn)行上述求和運(yùn)算的第一步是進(jìn)行數(shù)據(jù)劃分,將數(shù)據(jù)子集分發(fā)到各局部存儲(chǔ)器中,數(shù)據(jù)子集存儲(chǔ)在各局部存儲(chǔ)器中后成為數(shù)組A1。計(jì)算步驟是先計(jì)算部分和,然后對(duì)部分和計(jì)算總和,程序?yàn)椋?/P>

  sum=0;
  for(i=0;i<1000;i=i+1)     /* loop over each array  */
    sum=sum+A1[i];      /* sum the local arrays  */
  limit=64;
  half=64;       /* 64 processors in this MIMD  */
  do {
    half=half/2;      /* send vs. receive dividing line  */
    if(Pn>=half && Pn<limit) send(Pn%half,sum);
    if(Pn<half) sum=sum+receive();
    limit=half;      /* upper limit of senders  */
  } while (half>1);      /* exit with final sum  */

  該程序同時(shí)運(yùn)行在多個(gè)進(jìn)程或處理器中,因?yàn)槎际窃诓煌牡刂房臻g訪問(wèn)數(shù)據(jù),通過(guò)消息發(fā)送操作傳遞數(shù)據(jù)。程序的前三行計(jì)算部分和,后七行對(duì)部分和進(jìn)行求和。為了匯集各個(gè)進(jìn)程的部分和,這里程序?qū)⑺械奶幚砥鞣殖砂l(fā)送方和接收方,編譯程序需要將send函數(shù)轉(zhuǎn)換成對(duì)發(fā)送消息的庫(kù)函數(shù)調(diào)用,將 receive函數(shù)轉(zhuǎn)換成對(duì)接受消息的庫(kù)函數(shù)調(diào)用。

  并行程序的實(shí)現(xiàn)

  并行程序中,任務(wù)的劃分可以由程序員完成,也可以由編譯程序完成。一般而言,實(shí)現(xiàn)并行程序設(shè)計(jì)的方法有3種:

  1. 庫(kù)函數(shù)。庫(kù)函數(shù)方法在串行程序的標(biāo)準(zhǔn)庫(kù)的基礎(chǔ)上增加新的支持并行操作的函數(shù)。如MPI的消息傳遞庫(kù)和POSIX的Pthread多線程庫(kù)。庫(kù)函數(shù)方法比較容易實(shí)現(xiàn),不需要改變編譯程序。但是程序中的并行性問(wèn)題沒(méi)有經(jīng)過(guò)編譯程序的檢查、分析、優(yōu)化。程序設(shè)計(jì)的難度較大,容易出現(xiàn)錯(cuò)誤。

  2. 新的語(yǔ)言構(gòu)造。在原有的程序設(shè)計(jì)語(yǔ)言中增加新的構(gòu)造語(yǔ)句,以表達(dá)并行的操作。在對(duì)并行構(gòu)造語(yǔ)句進(jìn)行分析的時(shí)候,編譯程序可以進(jìn)行檢查,發(fā)現(xiàn)并行運(yùn)行中存在的問(wèn)題和錯(cuò)誤。但是這種方法需要采用新的編譯程序,并且增加了編譯程序的復(fù)雜性。

  3. 編譯指導(dǎo)。在原有的語(yǔ)言中增加表達(dá)并行運(yùn)算的編譯指導(dǎo)語(yǔ)句。編譯指導(dǎo)語(yǔ)句能夠被并行編譯程序識(shí)別,串行編譯程序則忽略這些語(yǔ)句。并行編譯程序跟據(jù)這些指導(dǎo)語(yǔ)句將相關(guān)代碼轉(zhuǎn)換成在并行計(jì)算機(jī)中運(yùn)行的代碼。這種方法的例子如OpenMP。這種方法的特點(diǎn)是介于上述兩種方法之間。

  多線程的編程需要利用操作系統(tǒng)或者軟件開(kāi)發(fā)環(huán)境提供的庫(kù)函數(shù)實(shí)現(xiàn)線程操作,線程操作函數(shù)包括線程的創(chuàng)建和消除、線程的啟動(dòng)運(yùn)行和終止運(yùn)行、線程同步機(jī)制的建立和刪除、線程互斥機(jī)制的建立和刪除、臨界區(qū)機(jī)制的建立和刪除等。最常見(jiàn)的創(chuàng)建新進(jìn)程或者新線程的機(jī)制是分叉和匯集(fork-join),調(diào)用fork函數(shù)創(chuàng)建一個(gè)新的進(jìn)程或線程并制定進(jìn)程或線程的執(zhí)行入口,調(diào)用join函數(shù)則可以結(jié)束新進(jìn)程或新線程的執(zhí)行。在并行線程的程序設(shè)計(jì)中,程序員需要安排線程的創(chuàng)建、線程的同步和線程間的通信等,需要考慮到同一段代碼將在多個(gè)線程中同時(shí)運(yùn)行而不能相互影響。因此,在采用庫(kù)函數(shù)方式下,多線程程序設(shè)計(jì)是對(duì)程序員的一個(gè)挑戰(zhàn)。

  一般情況下,在消息傳遞型多處理器系統(tǒng)中,每個(gè)處理器執(zhí)行的是各不相同的程序。每個(gè)結(jié)點(diǎn)上運(yùn)行的進(jìn)程或線程的程序代碼都要由程序員分別編寫(xiě),進(jìn)程和線程之間的通信通過(guò)MPI消息傳遞函數(shù)庫(kù)實(shí)現(xiàn)。程序員需要安排好每個(gè)結(jié)點(diǎn)的程序中消息的發(fā)送和對(duì)應(yīng)的接收函數(shù)的調(diào)用,否則就會(huì)造成處理器間的等待,甚至死機(jī)。因此程序設(shè)計(jì)的工作量很大,而且程序的調(diào)試工作十分復(fù)雜。

  多線程的并行運(yùn)行可以在單個(gè)處理器上進(jìn)行,形成軟件多線程;也可以在支持多線程的處理器核、多個(gè)處理器核或者多個(gè)處理器芯片上運(yùn)行,形成硬件多線程。多線程的運(yùn)行情況可以用線程運(yùn)行狀態(tài)時(shí)空?qǐng)D來(lái)表示。圖1是較宏觀的線程時(shí)空?qǐng)D的一個(gè)例子。圖中用不同的灰度的條形圖表示線程所處的不同狀態(tài)。其中,線程通信時(shí)間包括線程等待鎖的時(shí)間、同步操作花費(fèi)的時(shí)間和消息發(fā)送與接收的時(shí)間。在軟件多線程方式下,各個(gè)線程輪流地使用處理器核資源。這一點(diǎn)在線程運(yùn)行狀態(tài)時(shí)空?qǐng)D上可以清楚地看到,同一個(gè)核上的線程運(yùn)行的狀態(tài)相互不會(huì)出現(xiàn)重疊的情況,線程之間的通信也不是通過(guò)互連網(wǎng)絡(luò)直接進(jìn)行的,而是通過(guò)緩存空間進(jìn)行。在硬件多線程中,運(yùn)行在多個(gè)邏輯處理器上的多線程具有不同的硬件資源,構(gòu)成真正的并行運(yùn)行方式。

  OpenMP與多核程序設(shè)計(jì)

  OpenMP標(biāo)準(zhǔn)在1997年形成,作為編寫(xiě)可移植的多線程應(yīng)用程序的API。OpenMP是對(duì)基本語(yǔ)言的擴(kuò)展,標(biāo)準(zhǔn)內(nèi)容可以從www.openmp.org上獲得。OpenMP適用于共享存儲(chǔ)器的多處理器系統(tǒng),線程間通過(guò)共享變量傳遞數(shù)據(jù)結(jié)果。

  OpenMP的程序設(shè)計(jì)模型提供了一種與平臺(tái)無(wú)關(guān)的編譯指導(dǎo)命令(pragma)、編譯指示符、函數(shù)調(diào)用和環(huán)境變量,顯式地告訴編譯程序在應(yīng)用程序如何使用并行性,在哪里使用并行性。它提供了一個(gè)編寫(xiě)可移植的多線程應(yīng)用程序的API,可以實(shí)現(xiàn)循環(huán)程序的多線程化。許多循環(huán)程序可通過(guò)插入一條 pragma變成多線程的,只要相關(guān)性不妨礙程序的并行執(zhí)行。OpenMP支持多線程間的同步和局部數(shù)據(jù)變量,它采用分叉和匯集(fork-join)的執(zhí)行模式建立多線程,使得編譯和運(yùn)行庫(kù)能夠有效地編譯和運(yùn)行程序,減少線程執(zhí)行的開(kāi)銷。通過(guò)將實(shí)現(xiàn)細(xì)節(jié)留給編譯程序和實(shí)時(shí)運(yùn)行庫(kù),程序員不需要對(duì)線程的創(chuàng)建和刪除進(jìn)行編程,可以將精力集中于確定哪些循環(huán)程序段需要并行化,以及如何測(cè)試并行線程的性能。程序員不需要對(duì)線程的同步操作進(jìn)行詳細(xì)編程,也不需要在程序中增加大量的代碼來(lái)創(chuàng)建、初始化、管理和終止線程以實(shí)現(xiàn)并行性。用戶對(duì)串行程序添加編譯指導(dǎo)命令的過(guò)程就類似于進(jìn)行顯式并行程序設(shè)計(jì)。

  OpenMP可以對(duì)循環(huán)程序進(jìn)行按循環(huán)迭代的任務(wù)劃分,創(chuàng)建多個(gè)線程,每個(gè)線程完成若干個(gè)循環(huán)迭代的計(jì)算子任務(wù)。例如,以下循環(huán)程序是加入了OpenMP編譯指導(dǎo)的程序:

   #pragma omp parallel for
   for (i=0; i<MAX; i++)
   A[i] = c*A[i] + B[i];

  其中,pragma表示編譯指導(dǎo)命令,表示這是一條編譯指令;omp表示它是OpenMP的編譯指令,采用OpenMP的規(guī)范; parallel表示對(duì)下面一條語(yǔ)句進(jìn)行并行化,表示多線程并行代碼區(qū)域的開(kāi)始;for表示對(duì)for循環(huán)語(yǔ)句進(jìn)行多線程分解。這樣,這段程序?qū)⒈簧啥鄠€(gè)線程的代碼。每個(gè)線程完成循環(huán)中的一個(gè)迭代。對(duì)于多重循環(huán),OpenMP只能將最外層的循環(huán)分解成并行多線程,OpenMP的循環(huán)程序分解不能嵌套進(jìn)行。

  在大的應(yīng)用程序中,關(guān)鍵的循環(huán)體中常常有遞歸操作。循環(huán)程序中最常見(jiàn)的相關(guān)性是遞歸相關(guān)性。為此,OpenMP提供了一種遞歸 (reduction)子句,它有效地結(jié)合一些變量的算術(shù)遞歸運(yùn)算對(duì)循環(huán)中的變量進(jìn)行計(jì)算。對(duì)于存在遞歸相關(guān)性的情況,可以采用遞歸的編譯指令 reduction。例如,對(duì)于以下求和的遞歸循環(huán)程序:

  sum = 0;
  for (i=0; i < 100; i++)
  {
  sum += array[i];
  }
  如果分解成多個(gè)線程的話,sum變量就是線程之間的共享變量。可以加入遞歸的OpenMP編譯指令,變成:
  sum = 0;
  #pragma omp parallel for reduction(+;sum)
  for (i=0; i < 100; i++)
  {
  sum += array[i];
  }
  這時(shí),OpenMP能夠處理各個(gè)線程對(duì)共享變量的訪問(wèn)互斥性,不需要應(yīng)用程序員操心。

  在編寫(xiě)多線程程序時(shí),理解哪些數(shù)據(jù)是共享的、哪些數(shù)據(jù)是私有的成為一個(gè)極其重要的問(wèn)題。OpenMP將這種區(qū)別通過(guò)一套子句呈現(xiàn)給程序員,例如 shared、private和default。OpenMP還可以有條件地進(jìn)行并行執(zhí)行,方法是使用if子句,該子句可以被加到任何并行結(jié)構(gòu)上。如下面的例子中,在循環(huán)次數(shù)大于16時(shí)才啟動(dòng)并行線程,以避免多線程帶來(lái)的開(kāi)銷:

  #pragma omp parallel for if(n>=16)
  for ( k = 0; k < n; k++ ) fn2(k);

  一個(gè)循環(huán)程序可以分解成大量的線程,將這些線程分配給處理器時(shí)需要考慮各處理器的負(fù)載平衡,使得所有的處理器差不多同時(shí)完成各自的線程,良好的負(fù)載平衡可以獲得最佳的并行處理性能,程序中必須進(jìn)行有效的循環(huán)程序的線程調(diào)度和劃分。OpenMP能夠自動(dòng)根據(jù)運(yùn)行的環(huán)境確定最佳線程的數(shù)量,以實(shí)現(xiàn)使用任意個(gè)數(shù)線程都能具有良好性能的程序。因此,OpenMP是一個(gè)容易入門(mén)的多線程程序設(shè)計(jì)手段。

  并行程序軟件工具

  并行程序設(shè)計(jì)環(huán)境包括并行程序調(diào)試器。并行程序調(diào)試器應(yīng)當(dāng)能夠通過(guò)對(duì)程序代碼的分析發(fā)現(xiàn)程序中問(wèn)題,應(yīng)當(dāng)能夠快速準(zhǔn)確地定為這些問(wèn)題。對(duì)并行程序的分析包括數(shù)據(jù)相關(guān)性分析、鎖的分析等,分析出并行程序中的數(shù)據(jù)競(jìng)爭(zhēng)現(xiàn)象和死鎖現(xiàn)象等程序員難以看出的問(wèn)題。集群系統(tǒng)的調(diào)試器是一種能夠在跨平臺(tái)、異構(gòu)開(kāi)發(fā)環(huán)境中的使用的并行程序開(kāi)發(fā)工具。

  并行程序的優(yōu)化包括分析程序中各個(gè)函數(shù)之間的調(diào)用關(guān)系,從而分析程序中的關(guān)鍵調(diào)用路徑;分析程序中的熱點(diǎn),即執(zhí)行時(shí)間最長(zhǎng)地函數(shù);分析線程的負(fù)載平衡情況等。多線程的程序中包含多個(gè)執(zhí)行流,這些執(zhí)行流在同步點(diǎn)上是相互相關(guān)的。關(guān)鍵路徑是其中執(zhí)行時(shí)間最長(zhǎng)的執(zhí)行路徑。例如,對(duì)于圖2(a)所示的線程執(zhí)行流,在時(shí)間軸上的關(guān)鍵路徑的例子如圖2(b)所示,其中關(guān)鍵路徑用特粗線表示,中粗線表示非關(guān)鍵路徑上執(zhí)行的線程,細(xì)線表示空閑的線程。良好的并行程序設(shè)計(jì)環(huán)境應(yīng)當(dāng)能夠分析出這種關(guān)鍵路徑,從而為程序減少程序的總體執(zhí)行時(shí)間提供幫助。在圖3示的線程流程圖上,線程1是貫穿整個(gè)執(zhí)行流程的線程,成為主線程。其余線程是在需要并行執(zhí)行的期間建立的線程,成為子線程。

  分析線程的運(yùn)行狀態(tài)對(duì)于優(yōu)化多線程程序設(shè)計(jì)十分重要,這種分析有助于程序員了解哪些程序段是影響整個(gè)程序運(yùn)行時(shí)間的關(guān)鍵。從線程之間關(guān)系的角度,可以將線程的運(yùn)行狀態(tài)分成以下4種:

  ·巡航狀態(tài)。這時(shí)線程處于獨(dú)立的執(zhí)行狀態(tài),保持高速運(yùn)行,線程的運(yùn)行不受其他線程的影響,也不影響其他線程的運(yùn)行。

  ·開(kāi)銷狀態(tài)。這是線程操作的開(kāi)銷,如線程的創(chuàng)建、關(guān)閉等。

  ·阻塞狀態(tài)。這時(shí)線程正在等待外部事件,如同步和通信的等待。

  ·影響狀態(tài)。這時(shí)線程處于執(zhí)行狀態(tài),它阻礙了其他線程的執(zhí)行,其他線程正在等待該線程。

  線程的并行化狀況反映系統(tǒng)中創(chuàng)建的線程數(shù)量,可以分成空閑(idel)、串行(serial)、偏少(under-subscribed)、并行(parallel)和偏多(oversubscribed)幾種情況。程序員在調(diào)試程序中去分析這種線程數(shù)量狀況是一件煩瑣的事情,通常借助于并行程序調(diào)試工具。

  支持這種線程調(diào)試和優(yōu)化軟件工具如Intel的Vtune。Vtune是一個(gè)性能測(cè)試工具軟件,能夠從程序的試運(yùn)行中收集系統(tǒng)性能數(shù)據(jù),顯示出性能數(shù)據(jù)的時(shí)空?qǐng)D,包括顯示函數(shù)調(diào)用關(guān)系圖和程序中的熱點(diǎn)。通過(guò)這個(gè)軟件工具,可以對(duì)各種計(jì)算機(jī)系統(tǒng)的軟件性能進(jìn)行分析測(cè)試,包括各種采用Intel系統(tǒng)結(jié)構(gòu)的嵌入式系統(tǒng)和多核的桌上型計(jì)算機(jī)系統(tǒng),從而對(duì)并行程序進(jìn)行調(diào)試和優(yōu)化。該軟件具有Windows版本和Red Hat Linux版本。

  Vtune使用高級(jí)性能分析技術(shù)查找性能瓶頸,能夠提供程序流程的圖形化視圖,以幫開(kāi)發(fā)人員快速確定關(guān)鍵函數(shù)和調(diào)用順序并獲得程序執(zhí)行情況的高級(jí)別算法視圖。Vtune能夠?qū)Τ绦虻倪\(yùn)行中進(jìn)行實(shí)時(shí)采樣,經(jīng)過(guò)分析后顯示出線程的關(guān)鍵路徑(critical path view),可以在線程時(shí)空?qǐng)D上標(biāo)出線程的運(yùn)行狀態(tài)(timeline view),可以統(tǒng)計(jì)出線程在各種狀態(tài)下所經(jīng)歷的時(shí)間比例(profile view),還可以分析出線程并行的狀況以及時(shí)間比例(thread view)。調(diào)用關(guān)系圖中清晰地顯示出程序的流程,包括子程序調(diào)用關(guān)系以及程序的關(guān)鍵路徑。

  Vtune的分析功能包括熱點(diǎn)分析。所謂熱點(diǎn)是指系統(tǒng)中發(fā)生大量活動(dòng)的位置,如cache失效、分支預(yù)測(cè)失效、流水線停頓等。在Vtune中使用“計(jì)數(shù)器監(jiān)視器”可以在運(yùn)行時(shí)跟蹤系統(tǒng)活動(dòng)與資源消耗情況,幫助快速確定系統(tǒng)層面的性能問(wèn)題。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉