问题标签 [multiprocessor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - 对于 Mac 和 BSD,我如何找到当前线程正在运行的 cpu?
我正在寻找一个在 Mac OS 和 BSD 上等效于 Linuxsched_getcpu()
和 Windows 的功能GetCurrentProcessorNumberEx()
,以便实现一个用于 cpu-local 存储的库。显然可以使用 cpuid 或 rdtscp 指令来模拟这一点,但可以通过内核合作做得更好:https ://lkml.org/lkml/2007/1/6/190 。
我已经知道线程的当前 CPU 可能会在我使用这些信息时发生变化。
linux-kernel - 为什么内核向所有其他处理器发送 tlb 无效中断,当修改的页表对于正在运行的进程而言是个人的
当一个进程的页表条目时,内核线程向所有其他处理器发出 tlb 击落中断以使其他处理器上的 tlb 无效?但是,不是这样吗,页表是特定于这个进程的,我们为什么要进行 tlb 击落呢?
x86-64 - AMD 的 MP 规范,如何使用代码来启动与 AMD 相关的多处理器
我正在尝试编写一个支持多处理器的操作系统,但是我不知道如何为 AMD 引导多处理器,我已经搜索了 AMD 主页以找到 MP 规范,但没有找到,谁能告诉我链接地址?
cuda - 如何测量 CUDA 中的流式多处理器使用/空闲时间?
一个简单的问题,真的:我有一个内核,它以每个流式多处理器 (SM) 可能的最大块数运行,并且想知道理论上我可以从中提取多少性能。理想情况下,我想知道空闲的 SM 周期的百分比,即所有扭曲都在内存访问时被阻塞。
我真的只是对找到那个号码感兴趣。我不想要的是
- 关于增加入住率的一般提示。我正在使用我能获得的所有入住率,即使我设法获得更多性能,它也不会告诉我理论上还有多少可能。
- 如何计算理论峰值 GFlops。我的计算不是以 FP 为中心的,还有很多整数算术和逻辑也在进行。
cuda - Nvidia 的 Fermi GPU 如何向流式多处理器发出线程块
假设我有 8 个线程块,我的 GPU 有 8 个 SM。那么 GPU 是如何向 SM 发出这个线程块的呢?
我发现一些程序或文章提出了一种广度优先的方式,即在这个例子中每个 SM 运行一个线程块。然而,根据一些文件,如果 GPU 内核受到延迟限制,那么增加占用率可能是一个好主意。如果可以的话,可以推断出 8 个线程块将在 4 个或更少的 SM 上运行。
我想知道哪一个是真实的。提前致谢。
caching - 缓存一致性:基于目录的监听
据我了解:基于目录的系统更加以服务器为中心设计,而窥探更加以点对点为中心。
这就是为什么基于目录的任何未读消息需要更少的消息,因为它可以在检查目录后到达拥有有效数据的处理器。
窥探只是询问所有其他处理器,这是 n-1 条消息。
因此基于目录的系统可以扩展更多。
现在我的问题是:如果只有一个中央目录,那么当有太多处理器在读取未命中后询问时,它不会面临瓶颈吗?
file - 如何关闭文件以供其他处理器使用?
我正在尝试使用命令 os.remove('text.pckl') 删除文件 text.pckl。我已经由其他处理器创建了文件,但出现错误:
WindowsError:[错误 32] 进程无法访问该文件,因为它正被另一个进程使用:'text.pckl'
如何关闭文件以使处理器不再使用它?到目前为止,我已经使用了 file.close() 命令。
cuda - 使用其 SM 内核的 gpu 卡的块处理模式
我有一个关于计算能力 1.3 和 2.0 gpu 卡的调度过程的问题。在这两种情况下,每次在流式多处理器上调度的最大块数都是 8,至少这是我从占用计算器中注意到的。
在 1.3 卡中,每个 SM 有 8 个内核,而在 2.0 卡中,每个 SM 有 32 个内核。块进程的核心是如何分布的?
对于 1.3,每个核心进程 1 块吗?如果是这样,如果每个 SM 的块少于 8 个,那么分配的核心多于一个来处理一个块?
对于 2.0,如果在 SM 中调度了 8 个块,那么是否分配了 4 个核心来处理一个块?如果 SM 中的块较少,那么会安排更多的内核进行块计算?
谢谢你。
cuda - 线程块网格和多处理器
CUDA 编程指南指出:
CUDA 架构围绕可扩展的多线程流式多处理器 (SM) 阵列构建。当主机 CPU 上的 CUDA 程序调用内核网格时,网格的块被枚举并分发到具有可用执行能力的多处理器。一个线程块的线程在一个多处理器上并发执行,多个线程块可以在一个多处理器上并发执行。当线程块终止时,新块在空出的多处理器上启动。
这是否意味着如果我有 2 个多处理器 x n-cuda 内核的视频卡,并且如果启动像
一个多处理器将处于空闲状态,因为我正在启动单个 N 线程块?
c++ - 在 Windows 中移动或指定线程堆栈空间
我正在 NUMA 计算机上进行并行编程(我还没有计算机,它计划很快到货™)。
我在每个 NUMA 节点上都有一个工作线程池(带有处理器关联集)和一个平衡器,可以在池/节点之间均匀分布工作。这是为了确保所有内存分配都在本地内存上。这一切都很好,花花公子。
在启动期间,池工作线程是从主线程创建的,它们必须先进行一些初始设置,然后才能设置自己的关联性(第三方库要求,我对此无能为力)。
我担心由于工作线程的堆栈帧被分配在错误的节点上,会导致隐藏的性能损失,从而导致外部内存访问。
这是一个真正的问题吗?不知怎的,我相信它已经解决了......
无论如何,我正在寻找一种确保每个线程的堆栈在正确的 NUMA 节点上分配的方法。
我敬业的谷歌男孩想出了这个:在特定的 NUMA 内存上分配线程堆栈,这是我想做的,但它是 pthreads,我需要一个 Windows 解决方案。