指定執行緒在特定核心

2021-07-23 04:29:26 字數 1137 閱讀 7046

1原博部分:

**  

今天遇到這麼乙個問題,有乙個任務分上下行,都是計算複雜型的,如何保證用執行緒可以讓他們執行在雙核機器上的不同核心上充分利用cpu?

我當時想了一下,認為執行緒的分配是作業系統處理的,如果足夠精明的話,可以將執行緒合理分配。不過我回去查了查資料,竟然還真能指定cpu,就是用setthreadaffinitymask,當然我也看到對此函式的批評,但實際執行效果確實還可以。

c**  

#include 

#include 

#define threadcount 2

dword winapi func(lpvoid pvoid)  

int main()  

}  getchar();  

return 0;  

}  

根據自己機器不同核心數調整一下常量,就可以觀察cpu們依次到達100%了。

有興趣的話還可以看setthreadaffinitymask的返回值,其意義是該執行緒原先的親緣性,我機器上返回是15,也就是00001111,大致也可以猜出意思是可以在四核上任意分配。

增加部分:

具體函式為:

1

dword_ptr setthreadaffinitymask(handle hthread, dword_ptr dwthreadaffinitymask);

其中,第乙個引數為執行緒控制代碼,第二個引數為乙個mask。

如果要知道當前執行緒的控制代碼,可以通過函式:getcurrentthread()得到。否則,在建立多執行緒的時候,也同樣可以得到建立的執行緒的控制代碼。

第二個引數為mask,可取值為0~2^31(32位)和0~2^63(64位),每一位代表每乙個cpu是否使用。

比如,你要指定程序到第0個cpu上,則mask=0×01

第1個cpu:mask=0×02

第2個cpu:mask=0×04 (注意不是0×03)

第3個cpu:mask=0×08

以此類推。

如果要指定多個cpu:

比如第0、1個:mask=0×03

第1、2個:mask=0×06

以此類推。

如果cpu個數不足,則會進行取模操作。比如一共4個cpu,則mask=0×0010則和0×01一樣。

指定CPU核心執行指定執行緒

cpu親和性 affinity 用於繫結到固定的cpu上。主要有以下函式。int sched setaffinity pid t pid,size t cpusetsize,cpu set t mask 程序繫結函式 int pthread setaffinity np pthread t thre...

在指定的anaconda環境中安裝特定的包

1.切換到指定anaconda環境 conda activate tensorflow2 可能會出現your shell has not been properly configured to use conda activate 這時使用 conda deactivate 退出虛擬環境,然後重新進...

jupyter 指定特定的環境

安裝ipykernel 命令 conda install ipykernel 啟用對應的conda環境 對於linux source activate 環境名稱,如source activate nltk 對於windows activate 環境名稱,如activate nltk 將環境寫入not...