Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 超线程和线程优先级_C++_Windows_Multithreading_Hyperthreading - Fatal编程技术网

C++ 超线程和线程优先级

C++ 超线程和线程优先级,c++,windows,multithreading,hyperthreading,C++,Windows,Multithreading,Hyperthreading,除了使用SetThreadAffinityMask()禁用一半内核之外,还有什么方法可以使超线程CPU完全遵守线程优先级 好吧,CPU本身不知道优先级,因此运行在core 1上的低优先级线程将获得与运行在core 0上的高优先级线程大致相同的执行时间。换句话说,低优先级线程会导致高优先级线程稍后完成其工作(可能会更长) 我在这里的假设是,核心0和1是两个逻辑CPU,位于同一个物理CPU上 根据Hans的评论,这归结为Intel HT CPU是否支持硬件中的线程优先级。是吗?应该有一个选项来禁用B

除了使用SetThreadAffinityMask()禁用一半内核之外,还有什么方法可以使超线程CPU完全遵守线程优先级

好吧,CPU本身不知道优先级,因此运行在core 1上的低优先级线程将获得与运行在core 0上的高优先级线程大致相同的执行时间。换句话说,低优先级线程会导致高优先级线程稍后完成其工作(可能会更长)

我在这里的假设是,核心0和1是两个逻辑CPU,位于同一个物理CPU上


根据Hans的评论,这归结为Intel HT CPU是否支持硬件中的线程优先级。是吗?

应该有一个选项来禁用BIOS中的超线程。是的,这与使用SetThreadAffinityMask禁用一半的内核差不多。您是否有任何特殊原因不愿意相信操作系统会适当地对线程进行优先级排序?您已指示操作系统将特定线程设置为低优先级。操作系统能够识别超线程CPU。当然,要由操作系统根据优先级规则在可用内核之间划分时间并分配线程,这是由操作系统决定的吗?(注意:操作系统必须管理来自所有进程的所有线程的分布。)在我看来,试图对操作系统进行二次猜测只会导致平台特定的下滑。这与信任无关,而是我观察到低优先级线程的存在会减慢高优先级线程的速度。高优先级线程在103秒后结束,低优先级线程在107秒后结束。如果我删除低优先级线程,高优先级线程将在66秒后结束。在询问我们是否信任操作系统之前,一个更基本的问题是:CPU是否支持此功能?通常情况下,操作系统的任务是对线程进行优先级排序,但如果在超线程CPU上运行不同优先级的线程,CPU需要能够在它们之间设置优先级-因此“HyperRead 0”应该以某种方式抢占“HyperRead 1”。类似地,如果两个核心共享一个缓存,我们可能希望为该缓存赋予一个核心优先级。我不知道现在的英特尔CPU是否能做到这一点。因此,我将使用SetThreadAffinityMask