之前看到openmp入門教程比較多,但是核繫結這部分比較少。把核繫結的語句先寫在這裡。
/*omp的三種核繫結方式*/
#pragma omp parallel proc_bind(master)
#pragma omp parallel proc_bind(close)
#pragma omp parallel proc_bind(spread)
/*有些伺服器只支援以下這種語句*/
#pragma omp proc_bind(master)
#pragma omp proc_bind(close)
#pragma omp proc_bind(spread
具體理解請移步:oracle® solaris studio 12.4:openmp api 使用者指南
下面個人補充一些對於核繫結的理解
假設有乙個處理器有4個核,共有兩個處理器,核分別記為p0,p1,p2…p7
這是一種比較稀疏、均勻的繫結方式。如果有m個執行緒,n個處理器,那麼在並行執行緒開始時首先會從序列執行緒執行的那個核開始分布,每個核上執行m/n個執行緒。
如果序列執行緒在p1上執行,而並行執行緒有4個執行緒,則分別分布在
p1、p3、p5、p7。
如果如果序列執行緒在p0上執行,而並行執行緒有16個執行緒,則會分別分布在p0上有執行緒0和執行緒1,p1上執行執行緒2和執行緒3,p3上執行執行緒4和執行緒5,p4上執行執行緒6和執行緒7,…,p7上執行執行緒14和執行緒15。
這是一種緊密的繫結方式。這種方式優先分配與序列執行緒相臨近的核。當並行執行緒數超過核數時,分配方式與spread相近。
如果序列執行緒在p1上執行,進入並行執行緒時有4個執行緒,則分別分布在p1,p2,p3,p4。
master的意思是繼承序列執行緒部分的核繫結,即全部由執行序列執行緒的那個核來執行所有的執行緒。
Flex的三種繫結
flex實際上在編譯的時候會產生一些watcher 去監視繫結標籤所指定的表示式。在執行的時候,當繫結源的屬性得到修改,那麼這個watcher監視類就會觸發change事件去執行繫結更新的工作。在flex中有三種繫結資料方式 1 2 tag in mxml 3 bindingutils method...
Linux中線程與CPU核的繫結
最近在對專案進行效能優化,由於在多核平台上,所以了解了些程序 執行緒繫結cpu核的問題,在這裡將所學記錄一下。不管是執行緒還是程序,都是通過設定親和性 affinity 來達到目的。對於程序的情況,一般是使用sched setaffinity這個函式來實現,網上講的也比較多,這裡主要講一下執行緒的情...
Linux中線程與CPU核的繫結
最近在對專案進行效能優化,由於在多核平台上,所以了解了些程序 執行緒繫結cpu核的問題,在這裡將所學記錄一下。不管是執行緒還是程序,都是通過設定親和性 affinity 來達到目的。對於程序的情況,一般是使用sched setaffinity這個函式來實現,網上講的也比較多,這裡主要講一下執行緒的情...