【问题标题】:Run on several cores在多个内核上运行
【发布时间】:2018-07-02 12:25:05
【问题描述】:

最初,我有一个程序,我将其分成几个部分,以便每个部分由特定的核心执行。所以,在我的 C++ 项目中,我有几个“主文件”。我想知道是否可以从 Visual Studio 2017 中说“这样的核心执行 such.cpp”。

使用计数器和显示器的简单示例:计数器打开核心 1 并将其数据发送到核心 2 上的显示器。这可以在 Visual Studio 2017 上运行吗?

【问题讨论】:

  • 您无法决定使用哪个内核。操作系统可以。
  • 我认为您需要更多的帮助,而不是您可以在 SO 上获得的帮助。你应该记录更多关于并行执行的内容
  • 你没有 4 个独立的int main() { ... } 吗?
  • @Ron:不在可移植 C++ 中,但因为它对高性能计算至关重要,所以每个现代操作系统都支持这一点。它被称为线程关联。话虽如此,据了解,为此类环境进行编程需要高于平均水平的技能,而问题表明并非如此。
  • @MSalters 我的印象是 Thread Affinity 不保证实际代码将在特定内核上执行。并且是要避免的。

标签: c++ visual-studio multicore


【解决方案1】:

不,这是不可能的,事实上这毫无意义。

在您的简单想法中,core2 在 core1 向其发送一些数据之前无事可做,此时 core1 将等待 core2。因此,在任何时候最多两个核心中的一个处于活动状态。为此使用一个内核会更有效。

要在 C++ 中使用多核,您需要<thread>。使用<thread> 绝不是自动的。然而,一旦你有了线程,使用多个核心自动的。

【讨论】:

    【解决方案2】:

    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

    在一个简单的情况下,您将为每个任务启动新线程,设置它们的关联性,在线程中运行任务,然后等待线程加入您的主线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多