运行 在几个核心上
Run on several cores
最初,我有一个程序,我把它分成几个部分,每个部分由一个特定的核心执行。所以,在我的 C++ 项目中,我有几个 "main files"。我想知道是否可以从 Visual Studio 2017 年说 "Such core executes such.cpp".
使用计数器和显示器的简单示例:计数器打开核心 1 并将其数据发送到核心 2 上的显示器。这可能 运行 在 Visual Studio 2017 年吗?
不,这是不可能的,事实上这毫无意义。
在你的简单想法中,core2 无事可做,直到 core1 向它发送一些数据,此时 core1 将等待 core2。所以在任何时候,两个核心中最多只有一个处于活动状态。为此使用一个核心会更有效率。
要在 C++ 中使用多核,您需要 <thread>
。使用 <thread>
不是自动的。然而,一旦你有了线程,使用多核是自动的。
Windows 中有一个调用可以将您的进程限制在特定核心:
https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-setprocessaffinitymask
在这种情况下,您必须启动多个进程,设置它们的关联并在每个进程中执行不同的任务。
还有一个线程:
https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-setthreadaffinitymask
在简单的情况下,您将为每个任务启动新线程,设置它们的关联,运行 线程中的任务,然后等待线程与您的主线程连接。
最初,我有一个程序,我把它分成几个部分,每个部分由一个特定的核心执行。所以,在我的 C++ 项目中,我有几个 "main files"。我想知道是否可以从 Visual Studio 2017 年说 "Such core executes such.cpp".
使用计数器和显示器的简单示例:计数器打开核心 1 并将其数据发送到核心 2 上的显示器。这可能 运行 在 Visual Studio 2017 年吗?
不,这是不可能的,事实上这毫无意义。
在你的简单想法中,core2 无事可做,直到 core1 向它发送一些数据,此时 core1 将等待 core2。所以在任何时候,两个核心中最多只有一个处于活动状态。为此使用一个核心会更有效率。
要在 C++ 中使用多核,您需要 <thread>
。使用 <thread>
不是自动的。然而,一旦你有了线程,使用多核是自动的。
Windows 中有一个调用可以将您的进程限制在特定核心:
https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-setprocessaffinitymask
在这种情况下,您必须启动多个进程,设置它们的关联并在每个进程中执行不同的任务。
还有一个线程:
https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-setthreadaffinitymask
在简单的情况下,您将为每个任务启动新线程,设置它们的关联,运行 线程中的任务,然后等待线程与您的主线程连接。