问题标签 [multicore]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2416 浏览

c++ - 如何在 x86(奔腾及更高版本)上执行原子 64b 读取?

我想在 x86 平台(保证奔腾或更高版本)上执行和原子读取 64b 对齐的 64b 数据。

有没有办法做到这一点?(不,我不想为此使用关键部分或互斥锁,我希望它是无锁的)。

0 投票
1 回答
2527 浏览

assembly - 查找多核系统中启用了多少线程的汇编指令

我正在开发一个准系统,我需要在启动后的某个时间确定启用了多少内核和线程,以便我可以向它们发送 SIPI 事件。我还希望每个线程都知道它是哪个线程。

例如,在启用了 HT 的单核配置中,我们有(例如,Intel Atom):

在没有 HT 的双核配置中(例如,Core 2 Duo):

确定这一点的最佳方法是什么?

编辑: 我发现每个线程如何找到它是哪个线程。我还没有找到如何确定有多少核心。

0 投票
1 回答
239 浏览

msbuild - 通过 API 在 Msbuild 中启用 multiproc

使用 Msbuild v3.5,我可以包含“/m”开关以启用多处理器支持。但是,我找不到与Microsoft.Build.BuildEngine中的任何内容相关的等效属性。如何通过 API 启用此设置?

我试图通过反思 Msbuild.exe 自己发现这一点(感谢 Lutz!),但它不使用 BuildEngine 而是直接使用 System.Threading.Thread 。

0 投票
20 回答
8868 浏览

multithreading - “尴尬平行”的反义词是什么?

根据 Wikipedia 的说法,“令人尴尬的并行”问题是将问题分成多个并行任务只需很少或根本不需要努力的问题。光线追踪通常被用作示例,因为原则上每条光线都可以并行处理。

显然,有些问题更难并行化。有些甚至可能是不可能的。我想知道这些更难的情况使用了哪些术语以及标准示例是什么。

我可以提出“令人讨厌的顺序”作为可能的名称吗?

0 投票
3 回答
906 浏览

.net - 使用多线程加速 .NET 反射

我的 PC 有一个双核 CPU,我想知道 - 如果我开始在两个线程中处理,是否可以将 .NET 反射时间减少两倍。

我所说的“处理”是指以下内容:

1.加载程序集 2.从中取出所有类型 (.GetTypes()) 3.处理这些类型 4.查询这些类型的方法等。

如果是 - 最好的(性能方面)策略是什么:

  1. 在一个线程中加载所有程序集,然后在两个并发线程中处理元信息
  2. 在自己的线程中加载和处理每个程序集
0 投票
4 回答
2349 浏览

multicore - 同步与异步编程

在设计服务器时,我们正在考虑两种方法:

  1. 一种异步(基于选择)方法,因此后端 rpc 可以在单个线程中并行化。

  2. 一种同步方法,其中每个后端 rpc 在线程池中的另一个线程中处理。

需要权衡取舍:1 具有更好的性能,2 具有更少的代码复杂度。1 现在对于多核和 64 位的机器真的很重要吗?

0 投票
4 回答
230 浏览

hardware - 这里有什么多核优势吗?

让我这样构图。。

“假设我有一个在单核 Intel 处理器上运行的应用程序服务器并为 200 个并发用户提供服务。将硬件移动到双核系统是否可以让我的应用程序服务器现在为 350 个并发用户提供服务”?

我希望解决的基本问题是——“添加额外的处理器内核是否有助于提高服务器的 I/O 能力”。因为有时这正是硬件供应商在吹捧他们的多核服务器时所暗示的。

0 投票
2 回答
3049 浏览

visual-studio-2008 - Multiproc 在 VS2008 中构建

我记得在某处读过关于 VS2008 中的 multiproc 构建的文章,只是我现在找不到这篇文章。有谁知道如何打开它,或者即使它是可能的?

0 投票
5 回答
720 浏览

java - 用非函数式语言编写函数式程序

假设我使用 Java 中的不可变数据结构编写了一个程序。即使它不是函数式语言,它也应该能够并行执行。如何确保我的程序正在使用我的处理器的所有内核执行?计算机如何决定哪些代码可以并行运行?

PS我问这个问题的目的不是找出如何并行化Java程序。但要知道 - 计算机如何并行化代码。它可以在用非功能语言编写的功能程序中完成吗?

0 投票
4 回答
5881 浏览

benchmarking - 为什么一个 CPU 内核会比其他内核运行得慢?

我正在对一个大型科学应用程序进行基准测试,发现在相同的输入下它有时会慢 10%。经过大量搜索,我发现只有当它在我的四核 CPU 的核心 #2 上运行时才会出现减速(特别是运行在 2.4 GHz 的 Intel Q6600)。该应用程序是单线程的,大部分时间都花在 CPU 密集型矩阵数学例程中。

现在我知道一个内核比其他内核慢,我可以通过将处理器亲和性设置为所有运行的同一内核来获得准确的基准测试结果。但是,我仍然想知道为什么一个核心更慢。

我尝试了几个简单的测试用例来确定 CPU 的慢速部分,但测试用例的运行时间相同,即使在慢速核心 #2 上也是如此。只有复杂的应用程序表现出放缓。以下是我尝试过的测试用例:

  • 浮点乘法和加法:

    /li>
  • 三角函数:

    /li>
  • 整数加法:

    /li>
  • 尝试使 L2 缓存未命中时的内存复制:

    /li>

问题:为什么一个 CPU 内核会比其他内核慢,以及 CPU 的哪一部分导致了速度变慢?

编辑:更多测试显示了一些Heisenbug行为。当我明确设置处理器关联时,我的应用程序不会在核心 #2 上减慢速度。但是,如果它选择在没有明确设置处理器亲和性的情况下在核心 #2 上运行,则应用程序的运行速度会慢约 10%。这就解释了为什么我的简单测试用例没有表现出同样的减速,因为它们都明确地设置了处理器亲和性。因此,看起来有一些进程喜欢在核心#2 上运行,但如果设置了处理器亲和性,它就会不受干扰。

底线:如果您需要在多核机器上对单线程程序进行准确的基准测试,请确保设置处理器亲和性。