【发布时间】:2012-10-02 21:46:42
【问题描述】:
我不确定。我可以在四个核心上编写一个大的 memset(例如 10 MB)来获得加速吗?
这种 ram-chip 并行化是否可行,以及触发其他线程的时间成本有多大 - 是超过一毫秒还是更少?
【问题讨论】:
-
这样的操作如果你并行化它可能只会变得更慢 - 你会有多个核心/cpu争夺对内存总线的访问。
-
也许使用特定指令一次移动更多字节会对您有所帮助。只有当数据分布在不同的内存部分时,使用并行化才有优势。
-
并行
memset可能更快的唯一情况是在 NUMA 架构上具有非常非常大的内存块,其中每个内核都在连接到其处理器的内存上工作。 -
@MarcB 并且您需要“加入”线程,如果 CPU 之间的调度不是很统一,可能会浪费额外的时间。
-
如果
memset可以从您的架构中的这种设计中受益,您不是已经拥有了吗?如果您不信任编写您的memset的人来提供优化的实现,那么您不应该相信他们会做很多事情,因为这是图书馆作者确保做对的第一件事。跨度>
标签: c windows multithreading winapi memory