2010-01-11 98 views
1

我将要编写一个多线程共享内存消息传递系统,用于在进程间传输超高容量消息。这些消息将来自Web服务器的工作线程。我想利用相同CPU共享上的核心CPU高速缓存位置。所以当我在这个IPC系统的接收端唤醒一个工作线程时,我唤醒了同一个CPU上的一个线程。CPU核心线程分类功能

我需要Linux(通常是POSIX的通用版本)和窗口API调用和位掩码,我需要做的是提取信息,这将使我可以从上述线程的上下文中分类正在执行的线程ID - 使用以下结构:

struct thread_core_id 
{ 
    uint16_t cpu_Id; 
    uint16_t core_Id; 
}; 

两个平台的功能将不胜感激。我希望这可以在没有系统调用 - 即上下文切换的情况下完成。

- 编辑 -

我专注在x86的那一刻,但其它架构将是有用的。

回答

1

对于Linux,您应该能够从/proc/cpuinfo/sys/devices/system/cpu/cpu*/cache中获取所需信息,并将其用于sched_{s|g}etaffinity()调用。看看What Every Programmer Should Know About Memory,如果还没有的话,可以在5.3节左右​​。

+0

(+1)为文章和提示。我阅读了电话和文章。 – 2010-01-11 20:20:55

+0

迄今为止最好的答案:D – 2010-02-23 19:53:41