Tag: 多核

强制L1缓存上的一些数据

对这个简单的问题抱歉。 仍在努力解决这里的一些记忆概念。 问题是:假设我有一个我想重复访问的预先计算的数组A. 有没有办法告诉C程序让这个数组尽可能接近CPU缓存以便最快地访问? 谢谢。

记忆围栏如何工作?

我需要了解多核机器中的内存栅栏。 说我有这个代码 核心1 mov [_x], 1; mov r1, [_y] 核心2 mov [_y], 1; mov r2, [_x] 现在没有内存栅栏的意外结果是r1和r2在执行后都可以为0。 在我看来,为了解决这个问题,我们应该在两个代码中都放置内存栅栏,因为仅将它放在一个代码中仍然无法解决问题。 如下…… 核心1 mov [_x], 1; memory_fence; mov r1, [_y] 核心2 mov [_y], 1; memory_fence; mov r2, [_x] 我的理解是正确还是我仍然缺少某些东西? 假设架构是x86。 另外,有人能告诉我如何将内存栅栏放入C ++代码中吗?

是否可以在Android中设置与sched_setaffinity的亲和力?

是否可以在使用Android NDK编译的本机C代码中设置CPU亲和力? 由于系统使用的是Linux内核,因此应该可以使用sched_setaffinity / sched_getaffinity函数,但是当我使用NDK进行编译时,我会收到错误抱怨cpu_set_t类型未知(用作函数的参数) 。 有没有其他方法可以实现这一目标? 当我使用CodeSourcerys ARM编译器(arm-none-linux-gnueabi-gcc)编译时,这似乎不是问题,因此系统显然支持所需的系统调用。

CPU TSC提取操作,尤其是在多核多处理器环境中

在Linux世界中,要获得纳秒精度定时器/时钟提示,可以使用: #include int foo() { timespec ts; clock_gettime(CLOCK_REALTIME, &ts); //–snip– } 这个答案提出了一种使用RDTSC指令直接查询cpu时钟的asm方法。 在多核,多处理器架构中,如何在多个内核/处理器之间同步此时钟滴答/定时器值? 我的理解是,在固有的围栏中完成了。 这种理解是否正确? 你能否提出一些可以详细解释这个问题的文件? 我对Intel Nehalem和Sandy Bridge微体系结构感兴趣。 编辑 将进程限制为单个核心或cpu不是一种选择,因为该进程非常庞大(就消耗的资源而言)并且希望最佳地利用包含所有核心和处理器的机器中的所有资源。 编辑 感谢您确认TSC在核心和处理器之间同步。 但我最初的问题是这种同步是如何完成的? 它是否带有某种围栏? 你知道任何公共文件吗? 结论 感谢所有输入:以下是此讨论的结论:TSC在初始化时使用在多处理器/多核系统中的核心和处理器之间发生的RESET进行同步。 之后,每个Core都是独立的。 TSC保持不变,具有锁相环,可以规范频率变化,从而规范给定内核中的时钟变化,这就是TSC在内核和处理器之间保持同步的方式。