小编Jay*_*y D的帖子

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

在Linux世界中,要获得纳秒精度定时器/时钟提示,可以使用:

#include <sys/time.h>

int foo()
{
   timespec ts;

   clock_gettime(CLOCK_REALTIME, &ts); 
   //--snip--      
}
Run Code Online (Sandbox Code Playgroud)

这个答案提出了asm一种用RDTSC指令直接查询cpu时钟的方法.

在多核,多处理器架构中,这个时钟滴答/定时器值如何在多个内核/处理器之间同步?我的理解是,在固有的围栏中完成了.这种理解是否正确?

你能否提出一些可以详细解释这个问题的文件?我对Intel Nehalem和Sandy Bridge微体系结构感兴趣.

编辑

将进程限制为单个核心或cpu不是一种选择,因为该进程非常庞大(就消耗的资源而言)并且希望最佳地利用包含所有核心和处理器的机器中的所有资源.

编辑

感谢您确认TSC在核心和处理器之间同步.但我最初的问题是这种同步是如何完成的?它是否带有某种围栏?你知道任何公共文件吗?

结论

感谢所有输入:以下是此讨论的结论:TSC在初始化时使用在多处理器/多核系统中的核心和处理器之间发生的RESET进行同步.之后,每个Core都是独立的.TSC与锁相环保持不变,这将使频率变化正常化,从而使给定Core内的时钟变化正常化,这就是TSC在核心和处理器之间保持同步的方式.

c assembly multicore cpu-registers microprocessors

14
推荐指数
4
解决办法
7895
查看次数

是否存在互斥量有助于摆脱易变的关键词?

我有一个多R/W锁类,它保持读,写和待处理读,待处理写计数器.互斥锁可以防御多个线程.

我的问题是我们是否仍然需要将计数器声明为volatile,以便编译器在进行优化时不会搞砸它.

或者编译器是否考虑到计数器由互斥锁保护.

我理解互斥锁是用于同步的运行时机制,"volatile"关键字是编译器在编译时执行正确操作的编译时指示.

问候,-Jay.

c++ compiler-construction multithreading mutex volatile

9
推荐指数
3
解决办法
2693
查看次数

启用高级功能的系统上的CPU编号

我试图找出一个操作系统(Windows,Linux)如何在启用超线程的环境中为逻辑cpus分配数字.?

两个操作系统是否首先将数字串行分配给物理CPU,然后开始对逻辑cpu进行编号,或者是否遵循其他规则?例如,在具有超线程的2个物理cpu系统中,OS是否将编号0,2分配给第一个物理cpu,然后将1,3分配给第二个物理cpu ..?

任何参考将非常感谢.

提前致谢.

问候,-Jay.

编辑:回应Alan的问题:我需要知道这一点因为,在我的工作中,我需要将各种线程绑定到特定的CPU以避免上下文切换,并且我想确保某些任务(THreads)绑定到单独的物理cpu .谢谢

windows cpu-architecture hyperthreading linux-kernel

8
推荐指数
2
解决办法
2740
查看次数

使用xchg时我们需要mfence吗?

我有一套xchg基于测试的装配锁.我的问题是:

使用指令时是否需要使用内存防护(mfence,sfencelfence)xchg

编辑:

64位平台:采用Intel nehalem

c c++ x86 assembly memory-fences

8
推荐指数
3
解决办法
3158
查看次数

是sprintf线程安全吗?

sprintf线程安全的?

//Global log buffer 
char logBuffer[20];

logStatus (char * status, int length)
{
  snprintf(logBuffer, 19, status);
  printf ("%s\n", logBuffer);
}
Run Code Online (Sandbox Code Playgroud)

该功能的线程安全性完全取决于snprintf/ 的线程安全性sprintf.

更新: 谢谢你的答案.我不介意,如果实际内容gts搞砸了.但是,当多个线程试图写入时,想要确认sprintf不会导致内存损坏/缓冲区溢出超过20个字节logBuffer

c linux multithreading

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

"热"和"内联"组合对函数定义的性能影响

我有一个功能,它只进行一些操作,如增量.我已宣布inline与之相关__attribute__((hot)).

Gcc Doc建议关注以下hot属性:

hot属性用于通知编译器函数是已编译程序的热点.该功能进行了更积极的优化,并且在许多目标上,它被放置在文本部分的特殊子部分中,因此所有热门功能都紧密地联系在一起,从而改善了局部性.

可以解释为非inline热函数,它们将被放置在进程地址映射的低地址区域中.但inline函数调用应该被它们的代码逐字取代.所以问题是如何组合inlinehot真正有效?

c linux gcc compiler-optimization

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

将mmap内核启动参数保留的内存映射到用户空间

正如在这个问题中所讨论的,我在引导时使用内核引导参数保留了一个内存块memmap=8G$64G

我编写了一个字符驱动程序内核模块,在初始化期间会执行此保留内存块的ioremap. 正如这里所解释的,在我的驱动程序中,mmap我需要做的就是remap_pfn_range为此返回的内存块指针ioremap.

我在3.0 linux内核上运行它.我的用户空间应用程序打开此内存块作为驱动程序安装的设备.当我 mmap从使用空间应用程序,我看到系统挂起.dmesg不提供太多信息.

有什么投入?

static int __init myDev_module_init(void)
{
   int retval;

   myDev_major = register_chrdev(0, DEVICE_NAME, &myDevfops);
   if (myDev_major < 0) 
   {
       err("failed to register device: error %d\n", myDev_major);
       retval = myDev_major;
       goto FAILED_CHRDEVREG;
   }

   myDev_class = class_create(THIS_MODULE, CLASS_NAME);
   if (IS_ERR(myDev_class)) 
   {   
       err("failed to register device class '%s'\n", CLASS_NAME);
       retval = PTR_ERR(myDev_class);
       goto FAILED_CLASSREG;
   }


   myDev_device = …
Run Code Online (Sandbox Code Playgroud)

kernel kernel-module linux-device-driver linux-kernel embedded-linux

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

将指针从C传递到程序集

我想在我的C/C++程序中使用"_test_and_set lock"汇编语言实现和原子交换汇编指令.

class LockImpl 
{
  public:
  static void lockResource(DWORD resourceLock )
  {
    __asm 
    {
      InUseLoop:  mov     eax, 0;0=In Use
                  xchg    eax, resourceLock
                  cmp     eax, 0
                  je      InUseLoop
    }

  }

  static void unLockResource(DWORD resourceLock )
  {
    __asm 
    {
      mov resourceLock , 1 
    }   

  }
};
Run Code Online (Sandbox Code Playgroud)

这有效,但这里有一个错误.

问题是我想传递DWORD*resourceLock而不是DWORD resourceLock.

所以问题是如何将指针从C/C++传递到程序集并将其取回.?

提前致谢.

问候,-Jay.

PS这样做是为了避免用户空间和内核空间之间的上下文切换.

c c++ assembly pointers visual-studio-2008

5
推荐指数
2
解决办法
4200
查看次数

Android上的DTN(延迟容忍网络)

是否已在Android上使用蓝牙融合层实现DTN堆栈?

我已经看过像Bytewalla这样的现有实现,但它们现在只支持TCP.据我所知,Bytewalla的实现可以扩展到支持蓝牙,但是如果其他人已经完成它,就不想重新发明轮子......

networking android bluetooth dtn

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

Python到C转换器/解释器

什么是将Python脚本转换为C的各种工具.我主要关注这些工具/转换器/解释器的速度.

谢谢,-J

c python converter

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