gpt4 book ai didi

c++ - 如何确保 std::thread 是在多核中创建的?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:47 26 4
gpt4 key购买 nike

我正在使用 visual studio 2012。我有一个模块,在通过 xml 遍历相应路径后,我必须从硬盘读取大量文件。为此我正在做

std::vector<std::thread> m_ThreadList;

在一个 while 循环中,我将一个新线程推回到这个 vector 中,比如

m_ThreadList.push_back(std::thread(&MyClass::Readfile, &MyClassObject, filepath,std::ref(polygon)));

我的 C++11 多线程知识有限。我在这里遇到的问题是,如何在特定内核上创建线程?我知道 vs2012 中的 parallel_for 和 parallel_for_each,它们充分利用了内核。但是,有没有办法使用标准 C++11 来做到这一点?

最佳答案

正如其他评论中所指出的,您不能“在特定核心上”创建线程,因为 C++ 不了解此类架构细节。此外,在大多数情况下,操作系统将能够很好地管理内核/处理器之间的线程分布。

也就是说,在某些情况下,强制在核心之间分配特定的线程可以提高性能。例如,通过强制线程在一个特定的内核上执行,可以最大限度地减少不同处理器缓存之间的数据移动(这对于某些内存受限场景中的性能至关重要)。

如果你想沿着这条路走下去,你将不得不研究特定于平台的例程。例如,对于具有 POSIX 线程的 GNU/linux,您需要 pthread_setaffinity_np(),在 FreeBSD 中为 cpuset_setaffinity(),在 Windows 中为 SetThreadAffinityMask() 等.

如果您有兴趣,我这里有一些相关的代码片段:

http://gitorious.org/piranhapp0x/mainline/blobs/master/src/thread_management.cpp

关于c++ - 如何确保 std::thread 是在多核中创建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15802208/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com