Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Multithreading QThread::idealThreadCount()返回错误答案,如何解决?_Multithreading_Qt - Fatal编程技术网

Multithreading QThread::idealThreadCount()返回错误答案,如何解决?

Multithreading QThread::idealThreadCount()返回错误答案,如何解决?,multithreading,qt,Multithreading,Qt,我有一个带有两个E5-2679 CPU的工作站,它有88个逻辑核。但现在我发现 QThread::idealThreadCount() 仅给出32。 这个函数有什么问题?我使用qtthreadpool,不想更改代码。 有人知道如何解决这个问题吗 Qt版本是5.7,编译器是mingw32。 操作系统是Windows 10。Qt在Windows上获取处理器数量,但是对于32位进程,这主要是因为许多与进程数量相关的API(如设置关联掩码)使用32位位掩码,并且暴露更多的内核可能会导致旧程序在操作它

我有一个带有两个E5-2679 CPU的工作站,它有88个逻辑核。但现在我发现

QThread::idealThreadCount() 
仅给出
32
。 这个函数有什么问题?我使用qtthreadpool,不想更改代码。 有人知道如何解决这个问题吗

Qt版本是5.7,编译器是mingw32。 操作系统是Windows 10。

Qt在Windows上获取处理器数量,但是对于32位进程,这主要是因为许多与进程数量相关的API(如设置关联掩码)使用32位位掩码,并且暴露更多的内核可能会导致旧程序在操作它们时产生意外的结果

您必须在代码中实现链接答案中描述的解决方法,或者修补用于使用
GetNativeSystemInfo
的Qt构建,即使在非WinRT构建上也是如此(尽管我不确定它是否安全-如果他们只为WinRT构建更改它,可能其他东西会损坏?)。总而言之,一个更简单的选择可能是只为64位处理器构建应用程序-除了此修复之外,由于寄存器的数量更多,新指令的可用性更高等等,您可能会获得更好的性能


最后,请注意,如果超过64核。

这是您的进程吗?是的,处理器是Intel®Xeon®处理器E5-2679 V4。理想的线程数也可以是物理核数。逻辑处理器允许快速的上下文切换,但是在一个范围内计数素数可能会更快,例如,如果线程更少,根本不需要任何上下文切换,因为当所有内容都可以仅使用处理器寄存器计算时,它可能不必等待外部资源。@phi1010是的,您是对的。我把编译器改为MSVC2017,它返回了44,这是物理内核的数量。非常感谢,我把编译器改为MSVS2017 64位,它返回了44。@ NIK0X01:太好了,如果我的答案帮助你解决了你的问题,你可以考虑接受和接受它(谢谢!)