我正在使用任务集工具为我的一个程序设置CPU亲和力.如何仅在单个CPU上设置亲和力 - 因为我不确定这一点,所以我这样做:
taskset -c 2-2 tests/prog 1 2 3
Run Code Online (Sandbox Code Playgroud)
...期待,我正在安排程序仅在CPU#2上运行,遵循与其他CPU类似的方式.即使我是对的,这是一个不好的方式来执行我想要的IMO,我能得到一些帮助吗?
萨南,谢谢你
我在C#中创建了一个窗口应用程序.现在我想为这个应用程序设置CPU亲和力.我可能有2个处理器,4个处理器,8个处理器或者可能超过8个处理器.
我想使用接口的输入设置cpu亲和性.
我怎样才能实现这一目标?如何使用Environment.ProcessorCount设置关联?
我正在尝试使用Linux上的pthread调试一些性能问题,我认为sched_getcpu()可能对我撒谎。它为每个线程报告了一个恒定的CPU,而性能分析实验似乎表明这些线程实际上在其生存期内从一个内核迁移到了另一个内核。
我想知道是否sched_cpu()仅报告线程开始运行的第一个CPU,而忽略了线程迁移?其他人是否注意到了这一点,或是否看到任何证据表明的返回值sched_getcpu()可能发生变化?如果无法实现,是否还有其他方法可以跟踪当前CPU(CPUID可能使用?)?
我有一个具有100行和10,000个功能的熊猫数据框。我想通过使用pearson相关性作为sklearn.cluster.FeatureAgglomeration中的亲和力参数来对数据进行分层聚类。
到目前为止,我已经尝试了两种方法使其工作:第一种是:
feature_agglomator = FeatureAgglomeration(n_clusters=10, affinity=np.corrcoef, linkage='average')
Run Code Online (Sandbox Code Playgroud)
第二个:
from scipy.spatial.distance import correlation
feature_agglomator = FeatureAgglomeration(n_clusters=10,affinity='correlation', linkage='average')
Run Code Online (Sandbox Code Playgroud)
运行后:
feature_agglomator.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)
两者都以相同的例外结尾:
ValueError: The condensed distance matrix must contain only finite values.
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能使其正常工作?
在Linux中有sched.h中定义的sched_setaffinity()函数,但我似乎无法在Mac OS X 10.6 pthreads实现中找到类似的东西...如果无法设置关联,那么默认策略是什么在OS X?
简而言之:
在什么情况下可以在单个核心上运行多线程应用程序破坏性能?
如何将多线程应用程序的亲和力设置为仅使用一个核心?
长期:
我正试图在它自己的线程上运行2D引擎的物理特性.它起作用,并且起初表现似乎正常,但我决定告诉游戏尝试以10K FPS运行并且物理速度为120FPS,进入任务管理器并将亲和力设置为程序只能使用一个核心.
在将亲和力设定为一个核心之前,FPS在~1700,然后达到~70FPS.我没想到那种减少.我告诉游戏尝试以300 FPS和60FPS的物理速度运行.
同样的事发生了.
我没有多想,所以我只是继续修改引擎.我在更改了一些绘图代码,300 FPS,60FPS物理后再次测试了它.允许所有核心管理300FPS就好了,单核FPS的亲和力下降到4.现在我知道在单核上运行多线程应用程序可能不是那么糟糕,或者我不知道发生什么时发生的事情您将亲和力设置为单个核心.
这是关于渲染/物理运行的方式......
循环开始
收集输入直到(1.0/FPS)过去.
致电更新.
锁定物理线程互斥体,因为游戏中的东西将使用物理数据,我不希望引擎更新任何内容,直到此更新调用中的所有内容都完成.
更新游戏中的所有内容,可以将渲染功能对象(包含绘制内容,绘制位置,如何绘制)发送到渲染队列.
解锁互斥锁.
渲染器在每个函数对象上调用operator()并将其从队列中删除.
更新屏幕.
重复循环.
物理线程循环:
ALLEGRO_TIMER* timer(al_create_timer(1.0f / 60.0f));
double prevCount(0);
al_start_timer(timer);
while(true)
{
auto_mutex lock(m_mutex);
if(m_shutdown)
break;
if (!m_allowedToStep)
continue;
// Don't run too fast. This isn't final, just simple test code.
if (!(al_get_timer_count(timer) > prevCount))
continue;
prevCount = al_get_timer_count(timer);
m_world->Step(1.0f / 60.0f, 10, 10);
m_world->ClearForces();
}
Run Code Online (Sandbox Code Playgroud)
//注意:Auto mutex只是我创建的一个非常简单的对象,用于在构造函数中锁定互斥锁并在析构函数中解锁它.我正在使用Allegro 5的线程功能.
如果我需要处理器内核100%运行十几秒,或者如果我让系统决定如何处理线程,我会获得更好的性能,这样做是否是个好主意?
我需要的是快速执行,我担心系统可能会在使用所有内核之前花费几秒钟,但我还没有找到任何方法来使用boost线程.
所以对于这类事情我是个菜鸟。
我正在努力在 macOS 上编译气候模型,我将其归结为这里发生的事情:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sched.h>
#include <errno.h>
#include <sys/resource.h>
#include <sys/syscall.h>
static pid_t gettid(void)
{
return syscall(__NR_gettid);
}
/*
* Returns this thread's CPU affinity, if bound to a single core,
* or else -1.
*/
int get_cpu_affinity(void)
{
cpu_set_t coremask; /* core affinity mask */
CPU_ZERO(&coremask);
if (sched_getaffinity(gettid(),sizeof(cpu_set_t),&coremask) != 0) {
fprintf(stderr,"Unable to get thread %d affinity.
%s\n",gettid(),strerror(errno));
}
int cpu;
int first_cpu = -1; /* first CPU …Run Code Online (Sandbox Code Playgroud) 我在StackOverflow中查看了有关
在.NET中实现线程的核心亲和力的信息。
一些答案说.NET不支持它自己的(托管)线程,
而仅支持操作系统上运行的非托管线程。
另一方面,在其他答案中,请提及以下属性:
- ProcessThread.IdealProcessor 链接
- ProcessThread.ProcessorAffinity 链接
可以看出,这两个属性不是Thread类的属性,而是ProcessThread类的属性。
因此,我想问一问:
如果有人正在创建.NET应用程序,
并且想为其应用程序的线程设置Core亲缘关系,那么
在.NET托管线程上这样做是否安全且受支持?
(如果是,那么我想知道为什么这两个属性在ProcessThread类上公开
而不在Thread类上公开?)
PS:我使用的是.NET Framework v3.5和v2.0,
而不是框架的较新版本。
我们发现我们的 Kubernetes 集群往往存在热点,其中某些节点比其他节点获得更多的应用程序实例。
在本例中,我们部署了大量 Apache Airflow 实例,并且某些节点的 Web 或调度程序组件比其他节点多 3 倍。
是否可以使用反亲和性规则来强制 Pod 在集群中更均匀地分布?
例如“更喜欢标签最少的节点component=airflow-web?”
如果反亲和力不起作用,我们是否还应该研究其他机制?
affinity ×10
.net ×2
c# ×2
linux ×2
macos ×2
pthreads ×2
scheduling ×2
allegro5 ×1
boost-thread ×1
c ×1
c++ ×1
cpu ×1
cpu-cores ×1
kubernetes ×1
mpi ×1
mutex ×1
python ×1
scikit-learn ×1
scipy ×1