问题标签 [affinity]

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 回答
12474 浏览

c# - 如何在特定核心上启动线程?

我有一个四核 CPU,可以说我总是想Thread在第二个核心上启动一个。

这在 C# 中可能吗?

0 投票
2 回答
9547 浏览

affinity - 使用任务集设置 CPU 亲和性

我正在使用任务集工具为我的一个程序设置 CPU 亲和性。如何仅在单个 CPU 上设置关联 - 因为我不确定这一点,所以我这样做了:

...期望,我将程序安排为仅在 CPU #2 上运行,遵循其他 CPU 的类似方式。即使我是对的,这是执行我想要的 IMO 的不好方法,我可以得到一些帮助吗?

谢谢你,
萨扬

0 投票
5 回答
581 浏览

multithreading - 这些天来,设置线程关联性而不是将其留给操作系统的充分理由是什么?

在此处搜索“线程亲和性”的答案时,我看到很多人对此很感兴趣,但几乎没有理由这样做,因为它可能会获得稳定的 QueryPerformanceTimer 结果。

假设现代操作系统和具有现代 4-6 核 CPU 的现代 2-4 插槽工作站/服务器类机器,有什么好的理由认为他们比操作系统的调度程序更了解?在现实世界中是否存在更多地控制广告亲和力是正确的做法?可以展示什么样的性能优势?

上次我看到一个在某处设置线程关联的非常好的案例(例如,它得到了显示系统性能真正显着改进的具体结果的支持),这与 Win2K 设备驱动程序有关。但是我多年来没有见过这样的事情,所以当有人告诉我他们需要控制线程亲和力(但不是为什么)时,这些天我非常怀疑......但很好奇以其他方式展示。

0 投票
1 回答
447 浏览

java - 设置 Java 多线程关联

我将 IntelliJ 与 ForkJoin 框架一起使用,并尝试对我的代码的两个版本进行基准测试。一种是使用forkjoin,一种是顺序的。不幸的是,JDK/Windows 似乎在一定程度上自动将顺序分配给了 4 个内核。有没有办法让编译器指令强制对顺序版本只有一个核心的亲和性?

0 投票
1 回答
954 浏览

linux - 除了使用关联掩码之外,如何在 Linux 中找到线程关联?

我们有一个运行 SMP Linux (2.6.18) 的嵌入式 MIPS 2 核处理器。

我们计划将主 GUI 线程的亲和性分配给两个内核之一,另一个内核用于驱动程序/数据路径处理。

但是,有人问过您如何判断哪些线程在哪个内核上?

我可以很好地获得关联掩码,但是还有其他方法可以告诉(例如 /proc 系统)哪些线程在哪个核心上?

谢谢。

0 投票
6 回答
20067 浏览

linux - Linux找出超线程核心ID

我今天早上试图找出如何确定哪个处理器 id 是超线程核心,但没有运气。

我希望找出这些信息并用于set_affinity()将进程绑定到超线程线程或非超线程线程以分析其性能。

0 投票
2 回答
7004 浏览

linux - 为linux内核设置cpu亲和力,而不是进程

我很难找到有关如何为 linux 内核(及其所有加载的模块)设置 cpu 亲和性的信息,而不是针对特定进程的信息。

这是因为我希望内核一直在 CPU 0 上运行以处理 I/O 内容,而不是在其他 3 个 CPU 上运行任何开关,因为它可能会污染 L1 和 L2 缓存。

提前致谢。

努利克

0 投票
2 回答
3523 浏览

multithreading - 通过设置亲和力在单核上运行多线程程序的性能?

简而言之:

在单核上运行多线程应用程序在什么情况下会破坏性能?

将多线程应用程序的亲和性设置为仅使用一个内核怎么样?

长篇:

我正在尝试在其自己的线程上运行 2D 引擎的物理特性。它工作正常,起初性能似乎正常,但我决定让游戏尝试以 10K FPS 和 120FPS 的物理速度运行,进入任务管理器并将亲和力设置为程序只能使用一个内核的位置。

在将亲和力设置为一个核心之前,FPS 大约为 1700,之后它达到了大约 70FPS。我没想到会出现这种下降。我告诉游戏尝试以 300 FPS 和 60 FPS 运行物理。

同样的事情发生了。

我没有多想,所以我只是继续修改引擎。后来我在更改了一些绘图代码后再次对其进行了测试,300 FPS,60FPS 用于物理。在允许所有内核的情况下,它可以很好地管理 300FPS,与单核 FPS 的亲和力下降到 4。现在我知道在单核上运行多线程应用程序不可能那么糟糕,或者我不知道发生了什么您将亲和力设置为单个核心。

这是关于渲染/物理如何运行的......

循环开始

收集输入直到 (1.0 / FPS) 通过。

来电更新。

锁定物理线程互斥体,因为游戏中的事物将使用物理数据,并且我不希望引擎更新任何内容,直到此更新调用中的所有内容完成。

更新游戏中可能发送 Draw 函数对象(保存要绘制的内容、绘制的位置、如何绘制)到渲染队列的所有内容。

解锁互斥锁。

渲染器在每个函数对象上调用 operator() 并将它们从队列中删除。

更新画面。

重复循环。

物理线程循环:

// 注意:自动互斥锁只是我创建的一个非常简单的对象,用于在构造函数中锁定互斥锁并在析构函数中解锁它。我正在使用 Allegro 5 的线程功能。

0 投票
2 回答
448 浏览

c++ - What could cause my program to not use all cores after a while?

I have written a program that captures and displays video from three video cards. For every frame I spawn a thread that compresses the frame to Jpeg and then puts it in queue for writing to disk. I also have other threads that read from these files and decodes them in their own threads. Usually this works fine, it's a pretty CPU intensive program using about 70-80 percent of all six CPU cores. But after a while the encoding suddenly slows down and the program can't handle the video fast enough and starts dropping frames. If I check the CPU utilization I can see that one core (usually core 5) is not doing much anymore.

When this happens, it doesn't matter if I quit and restart my program. CPU 5 will still have a low utilization and the program starts dropping frames immediately. Deleting all saved video doesn't have any effect either. Restarting the computer is the only thing that helps. Oh, and if I set the affinity of my program to use all but the semi-idling core, it works until the same happens to another core. Here is my setup:

  • AMD X6 1055T (Cool & Quiet OFF)
  • GA-790FX-UD5 motherboard
  • 4Gig RAM unganged 1333Mhz'
  • Blackmagic Decklink DUO capture cards (x2)
  • Linux - Ubuntu x64 10.10 with kernel 2.6.32.29

My app uses:

  • libjpeg-turbo
  • posix threads
  • decklink api
  • Qt
  • Written in C/C++
  • All libraries linked dynamically

It seems to me like it would be some kind of problem with the way Linux schedules threads on the cores. Or is there some way my program can mess up so bad that it doesn't help to restart the program?

Thank you for reading, any and all input is welcome. I'm stuck :)

0 投票
2 回答
2144 浏览

multithreading - 如何强制执行 CPU Socket 关联?

我知道有一些方法可以强制执行线程/进程关联,以将特定线程/进程绑定到各种操作系统中的 CPU/内核。我只是想知道是否有一种方法可以强制执行 CPU 套接字关联。即强制线程/进程绑定到可以容纳多处理器芯片的CPU Socket。

问题的出现是由于每个芯片的多处理器日益增加。