#NUMA
关联性
默认情况下,Windows给线程分配CPU时,使用软关联。意思是其他因素都一样下,系统使线程在上一次运行的处理器上执行;让线程始终在同个处理器上运行有助于重用处理器高速缓存的数据。
NUMA(Non-Uniform Memory Access:非统一内存访问)是一种计算机体系结构,该结构的计算机由多个板(board)组成,每个板又有多个CPU和内存块。任何线程都可以在这些CPU上执行;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A4Dk5k2h-1680491323292)(assets/image-20230401214022-x6hluau.png)]
当C P U访问的内存是它自己的插件板上的内存时, N U M A系统运行的性能最好。
Windows查看PC有多少个board: CMD->运行msinfo32,看右侧是几个处理器,1个就是单node,2个就是双node。
绑定内核:
-
进程亲缘性:限制进程在可用CPU的子集上运行的单个进程中的线程数量
-
BOOL SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMark);
第一个参数h P r o c e s s用于指明要影响的是哪个进程。第二个是位屏蔽码,用于指明线程可以在哪些 C P U上运行。例如,传递0 x 0 0 0 0 0 0 0 5表示该进程中的线程可以在CPU 0和CPU 2上运行,但是不能在CPU 1和C P U 3至3 1上运行。
//返回屏蔽码
BOOL GetProcessAffinityMask
-
线程亲缘性:
BOOL SetTreadAffinityMask(HANDLE hThread, DWORD_PTR dwProcessAffinityMark);
如不想不强制设置,可以设为首选CPU,运行线程可能移到其他CPU上运行
DWORD SetThreadIdealProcessor(HANDLE HThread, DWORD dwIdealprocessor);