大佬教程收集整理的这篇文章主要介绍了C独立数据的多线程性能,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class Container { public: std::vector<Element> elements; Container(int elemCount); };
现在创建N个线程,执行一个非常简单的任务:
>创建具有特定矢量大小的本地Container
>遍历向量并简单地递增每个元素的val
>重复步骤2 10.000次(以秒为单位获取时间而不是ms)
根据CoreInfo我的cpu(英特尔酷睿i5 2400)有4个内核,每个内核都有自己的L1 / L2缓存:
Logical to Physical Processor Map: *--- Physical Processor 0 -*-- Physical Processor 1 --*- Physical Processor 2 Logical Processor to Cache Map: *--- Data Cache 0,Level 1,32 KB,Assoc 8,Linesize 64 *--- instruction Cache 0,Linesize 64 *--- Unified Cache 0,Level 2,256 KB,Linesize 64 -*-- Data Cache 1,Linesize 64 -*-- instruction Cache 1,Linesize 64 -*-- Unified Cache 1,Linesize 64 --*- Data Cache 2,Linesize 64 --*- instruction Cache 2,Linesize 64 --*- Unified Cache 2,Linesize 64 ---* Data Cache 3,Linesize 64 ---* instruction Cache 3,Linesize 64 ---* Unified Cache 3,Linesize 64 **** Unified Cache 4,Level 3,6 MB,Assoc 12,Linesize 64 ---* Physical Processor 3
对于最大为100.000个元素的矢量大小,时序与预期完全相同:
Elements count: 100.000 Threads: 1 loops: 10000 ms: 650 Threads: 4 loops: 2500 ms: 168 loops: 2500 ms: 169 loops: 2500 ms: 169 loops: 2500 ms: 171
但是,对于更大的矢量大小,多核的性能是:
Elements count: 300.000 Threads: 1 loops: 10000 ms: 1968 Threads: 4 loops: 2500 ms: 3817 loops: 2500 ms: 3864 loops: 2500 ms: 3927 loops: 2500 ms: 4008
我的问题:
>有人可以向我解释这个原因吗?这是假共享吗?如果是这样,如果线程不共享任何数据并且所有内核都有自己的L1 / L2缓存和缓存行,那么这怎么可能?
>在多线程中处理独立数据时,是否有可能实现(或接近)线性加速效率?
编辑:感谢所有答案,到目前为止.关于你的问题:
@ user2079303:元素只包含一个双数据成员.的sizeof(元件)= 8.有关完整的源代码,请参阅Pastebin.
@bku_drytt:resize()是正确的.我的目的是在每个线程中创建一个包含elemCount元素的向量(无论它们的初始值如何).
@JorgeGonzálezLorenzo:你对共享的L3缓存绝对正确.我执行了另一组测试,仅限单线程:
Elements count: 50.000 Threads: 1 loops: 50000 ms: 1615 Elements count: 200.000 (4 times bigger) Threads: 1 loops: 50000 ms: 1615 (slightly more than 4 time bigger) Elements count: 800.000 (even 4 times bigger) Threads: 1 loops: 50000 ms: 42181 (MUCH more than 4 time bigger)
以上是大佬教程为你收集整理的C独立数据的多线程性能全部内容,希望文章能够帮你解决C独立数据的多线程性能所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。