标签: affinity

将逻辑处理器映射到物理处理器

在双四核GetProcessAffinityMask(或taskman.exe中"Set affinity"对话框)中将报告八个逻辑处理器.如何找出哪个逻辑处理器在哪个物理处理器上?特别是:哪些逻辑处理器在同一物理处理器上?

编辑:如果无法以编程方式执行此操作,是否有人只知道正常映射是什么?第一个处理器上的前四个是第二个处理器上的前四个,或者第一个处理器上的第四个是奇数还是第二个上的偶数?

winapi multicore affinity

3
推荐指数
1
解决办法
2703
查看次数

在多核x86处理器中设置亲和性

(我问,因为它是在我学习操作系统的严重SMP和多核之前.我喜欢对代码的执行方式有所了解.)

如果我有一个多核x86 CPU直接启动到我的程序中.有人可以推荐一个网站来描述我必须控制亲和力的汇编程序命令吗?

assembly multicore smp affinity

3
推荐指数
1
解决办法
1214
查看次数

如何以编程方式设置 WIndows 7 中所有正在运行的进程的关联性?

有没有办法为Windows 7中所有正在运行的进程设置亲和力?

我想运行一些超线程基准测试,并且我想确保它们在某个核心上单独运行。我用包装器运行它们,我想做这样的事情(以伪代码):

foreach process in <list of all processes>
    set affinity to all cores but core x

set affinity of the current process to core x

run benchmark 0 on core x thread 0
run benchmark 1 on core x thread 1 
Run Code Online (Sandbox Code Playgroud)

现在,我认为我知道如何设置当前进程及其子进程的亲和力,但是我怎样才能:

  1. 迭代所有流程?
  2. 设置其他进程的亲和力?

affinity windows-7

3
推荐指数
1
解决办法
4447
查看次数

设置与将在Linux上运行的C++的处理器关联

可能重复:
CPU亲和力

我正在Linux上运行,我想编写一个C++程序,它将设置2个特定处理器,这两个处理器将并行运行(即设置每个进程在不同的核心/ CPU上运行).我想在C++中使用处理器关联工具.请任何人都可以帮助C++代码.

c++ processor process affinity

3
推荐指数
1
解决办法
9883
查看次数

为什么将多线程应用程序限制为一个核心使其运行得更快?

我有一个用C++编写的本机多线程Win32应用程序,它有大约3个相对繁忙的线程和4到6个线程,但没有那么多.当它以正常模式运行时,在8核计算机上总CPU使用率增加约15%,应用程序在大约30秒内完成.当我通过设置亲和力掩码将应用程序限制为仅一个核心时,0x01它在23秒内完成得更快.

我猜它与限制一个物理核心和/或某些并发内存访问问题时同步更便宜有关.

我正在运行Windows 7 x64,应用程序是32位.CPU是Xeon X5570,具有4个内核并启用了HT.

任何人都可以详细解释这种行为吗?为什么会发生这种情况以及如何提前预测这种行为?

更新:我想我的问题不是很清楚.我想知道为什么它在一个物理内核上变得更快,而不是为什么它在多个内核上没有超过15%.

windows cpu multithreading scheduler affinity

3
推荐指数
1
解决办法
1613
查看次数

在PHP中设置CPU亲和力?

非常直截了当的问题 - 有没有办法通过PHP设置CPU亲和力?以下任何一项都可以:

  • 通过PHP调用设置当前进程的亲缘关系.
  • 通过PHP调用设置特定PID的亲和性.
  • 作为最后的手段,通过命令行工具设置特定PID的亲和力.

我到目前为止找到的唯一选项是最后一个,使用名为schedutils的工具,它似乎只能在更新的内核上支持.

Schedutils

php linux process affinity

3
推荐指数
1
解决办法
731
查看次数

Python 3.6.0:“ os”模块没有“ sched_getaffinity”方法

我正在尝试按照'os.sched_getaffinity'方法检查我的脚本正在使用的内核数,如导入numpy后为什么多处理仅使用单个内核一样?。但是当我跑步时

import os
os.sched_getaffinity(0)
Run Code Online (Sandbox Code Playgroud)

我懂了

AttributeError                            
Traceback (most recent call last) <ipython-input-1-895d9c252fd1> in <module>()
1 import os
----> 2 os.sched_getaffinity(0)
AttributeError: module 'os' has no attribute 'sched_getaffinity'
Run Code Online (Sandbox Code Playgroud)

这是怎么了?来自“ os”模块的其他标准方法似乎可行。我正在使用Python 3.6.0运行Anaconda 4.3.0。我在Mac和Linux上都尝试过。还有其他检查和更改任务关联性的方法吗?

python affinity python-3.x

3
推荐指数
1
解决办法
2574
查看次数

Java:循环 Thread.sleep() 是否总是在同一个物理内核上运行?

我试图了解 Java 内部关于它们的调度和线程关联性。

问题是:

给定一个无限循环,在多核环境(例如 8)中的线程上运行:

while(true) Thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)
  1. 这个操作是否总是在同一个物理线程上运行?

  2. 有什么缘分吗?

  3. 如果它并不总是在同一个 CPU 上运行,JVM 如何决定实际将执行切换到新的 CPU?

  4. 有什么方法可以验证这种行为?

java cpu multithreading affinity

3
推荐指数
1
解决办法
71
查看次数

如果我在进程中执行 sched_setaffinity,它生成的线程是否会受到影响

如果我这样做:CreateThreads,setsched_affinity到CPU 0,那么所有线程是否也与CPU 0具有亲和力如果相反,我颠倒操作顺序,即先set_schedaffinity,然后创建线程,那么线程是否具有亲和力

我正在使用 pthreads 库创建线程。感谢您的任何答复

pthreads affinity

2
推荐指数
1
解决办法
3649
查看次数

创建线程之前的Pthread亲和性

我需要在创建线程之前设置亲缘关系(线程到核心,例如:第一个线程到第一个核心).喜欢的东西KMP_AFFINITYOpenMP.可能吗?

编辑:我试试这种方式,但不要工作:/

void* DoWork(void* args)
{
    int nr = (int)args;
    printf("W?tek: %d, ID: %d, CPU: %d\n", nr,pthread_self(), sched_getcpu());  
}


int main()
{   
    int count = 8;
    pthread_t threads[count];

    pthread_attr_t attr;
    cpu_set_t mask;
    CPU_ZERO(&mask);
    pthread_attr_init(&attr);

    for (int i = 0; i < count ; i++)
         CPU_SET(i, &mask);

    pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &mask);

    for(int i=0; i<count ; i++)
    {

        pthread_create(&threads[i], &attr, DoWork, (void*)i);
    }

    for(int i=0; i<count ; i++)
    {
        pthread_join(threads[i], NULL);
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ pthreads affinity

2
推荐指数
1
解决办法
9349
查看次数

在 TensorFlow 中使用多个 CPU 内核

我已经广泛研究了 TensorFlow 上的其他答案,但我似乎无法让它在我的 CPU 上使用多个内核。

根据 htop,以下程序仅使用单个 CPU 内核:

import tensorflow as tf

n_cpus = 20

sess = tf.Session(config=tf.ConfigProto(
    device_count={ "CPU": n_cpus },
    inter_op_parallelism_threads=n_cpus,
    intra_op_parallelism_threads=1,
))

size = 100000

A = tf.ones([size, size], name="A")
B = tf.ones([size, size], name="B")
C = tf.ones([size, size], name="C")

with tf.device("/cpu:0"):
    x = tf.matmul(A, B)
with tf.device("/cpu:1"):
    y = tf.matmul(A, C)

sess.run([x, y])

# run_options = tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE)
# run_metadata = tf.RunMetadata()
# sess.run([x, y], options=run_options, run_metadata=run_metadata)

# for device in run_metadata.step_stats.dev_stats:
#     device_name = device.device …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing multithreading affinity tensorflow

2
推荐指数
1
解决办法
6226
查看次数

SethreadAffinityMask()正确用法?

我有1500个线程..我希望它们在12个处理器上运行...为此我打电话 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors)); 其中numprocessors = 12.这是正确使用面具吗?它需要是可扩展的,即如果我希望它只在11个处理器上运行,那么 SetThreadAffinityMask(GetCurrentThread(),1<<(threadnum%numprocessors));numprocessors = 11.

c++ multithreading affinity setthreadaffinitymask

1
推荐指数
1
解决办法
469
查看次数

如何在C++程序中以拓扑考虑实现多核HT的亲和性?

我正在开发一些具有可变数量线程的C++多核程序,我想知道如何设置一个合适的(实际上是"最好的")亲和力.我使用Boost-threads,所以我可以调用get_hardware_concurrency()来了解有多少逻辑内核.到目前为止,我写了一个映射"第n个线程到第n个逻辑核心",但由于多插槽处理器和超线程,它并不是最聪明的事情.我的程序总是像SIMD一样,所以线程之间没有任何共享,如果是HT计算机,我想以我能想象的最聪明的方式将线程绑定到逻辑核心:第一个物理上的第一个逻辑核心,第2个物理上的第1个逻辑,...,第1个物理上的第1个逻辑,第1个物理上的第2个逻辑,依此类推.

我发现了很多内容,讨论了如何发现HT是否启用(CPUID)以及如何确定逻辑和物理内核PER包.我知道我必须处理一些汇编代码,它并没有吓到我,但我真的找不到如何知道有关逻辑内核,物理内核和软件包的完整信息以及操作系统如何处理所有这些信息.

作为最简洁的我可以:我怎么知道OS(Windows和Linux)引用的线程的确切位置(物理核心和包)为N-th?

c++ multicore affinity hyperthreading

1
推荐指数
1
解决办法
1681
查看次数