当前位置: 首页 > news >正文

让别人做网站图片侵权网站简易后台

让别人做网站图片侵权,网站简易后台,门户网站底部,备案的网站可以攻击吗伪共享问题的主要来源有两件事每次cache读入一个数据时实际上读入整个数据行多个线程可能会读入相同的数据行由于cache写回内存时也是按照数据行进行写入的,导致了写回内存时并不能做到真正的共享,而是需要等待。解决方案有两种将需要并行计算的数据使用…

伪共享问题的主要来源有两件事

  1. 每次cache读入一个数据时实际上读入整个数据行
  2. 多个线程可能会读入相同的数据行

由于cache写回内存时也是按照数据行进行写入的,导致了写回内存时并不能做到真正的共享,而是需要等待。

解决方案有两种

  1. 将需要并行计算的数据使用alignas等方法隔离在不同的cacheline
  2. 使用thread_local进行数据隔离

Perf

由上述分析可知,伪共享主要导致的是Cache Miss,故使用相关事件

perf stat -e cache-misses ./benchmark

用例代码

原代码
#include <iostream>
#include <thread>
#include <vector>struct SharedData {int x;int y;
};
const int epoch = 1000000000;
void incrementX(SharedData &data) {for (int i = 0; i < epoch; ++i) {data.x++;}
}void incrementY(SharedData &data) {for (int i = 0; i < epoch; ++i) {data.y++;}
}int main() {SharedData data{0, 0};std::thread t1(incrementX, std::ref(data));std::thread t2(incrementY, std::ref(data));t1.join();t2.join();std::cout << "x: " << data.x << ", y: " << data.y << std::endl;return 0;
}
threadlocal
#include <iostream>
#include <thread>
#include <vector>struct ThreadData {int x;int y;
};thread_local ThreadData threadData = {0, 0};const int epoch = 1000000000;void incrementX() {for (int i = 0; i < epoch; ++i) {threadData.x++;}
}void incrementY() {for (int i = 0; i < epoch; ++i) {threadData.y++;}
}int main() {int totalX = 0, totalY = 0;std::thread t1([&totalX]() {incrementX();totalX = threadData.x; // 将线程1的结果保存到主线程变量});std::thread t2([&totalY]() {incrementY();totalY = threadData.y; // 将线程2的结果保存到主线程变量});t1.join();t2.join();std::cout << "x: " << totalX << ", y: " << totalY << std::endl;return 0;
}
padding 
#include <iostream>
#include <thread>
#include <vector>struct SharedData {int x;char padding[60];int y;
};
const int epoch = 1000000000;
void incrementX(SharedData &data) {for (int i = 0; i < epoch; ++i) {data.x++;}
}void incrementY(SharedData &data) {for (int i = 0; i < epoch; ++i) {data.y++;}
}int main() {SharedData data{0, 0};std::thread t1(incrementX, std::ref(data));std::thread t2(incrementY, std::ref(data));t1.join();t2.join();std::cout << "x: " << data.x << ", y: " << data.y << std::endl;return 0;
}

执行结果

-O0 -gbenchmarkthreadlocalpadding
cahce-misses111727010422532208243
time(s)2.531533641.5173043140.63421379

可以发现 threadlocal方案得到的cache-misses数量几乎是padding方案的两倍,通过perf查询cpu的prefecth数据可以证明是由CPU的预取机制导致的

若使用O3,则三者性能几乎无差异

http://www.dtcms.com/a/521026.html

相关文章:

  • seo针对网站做策划大型网站开发合同
  • Macao资料生成程序,全新的UI 三端自适应PHP空间
  • 1Panel 安装与使用全指南:从部署到实战运维
  • Katalon Studio自愈测试功能
  • 非java、python、c/c++、perl、php、sql等的文章
  • 企业网站的建设与应用开题报告自己搭建app
  • 实验三:3-8线译码器设计
  • 深入浅出:马尔科夫链完全指南
  • 国外域名抢注网站seo顾问什么职位
  • 怎么做网站dns加速销售订单管理系统软件
  • DevOps工具链选型,Atlassian or TikLab哪一款更好用?
  • 网站实现搜索功能网站开发 平面设计
  • 河北建设厅官网站首页手机兼职有哪些
  • 【经典书籍】C++ Primer 第16章模板与泛型编程精华讲解
  • 做体育的网站网络推广优化是干啥的
  • 自己人网站建设网站推广策划方案大数据精准获客
  • Linux yum安装(安装docker)
  • AI未来--AI在制造业的最佳落地实践
  • 安徽省建设信息网站企业网站管理系统使用教程
  • 家具行业网站建设外链建设都需要带网站网址
  • UVC真空共晶炉哪个公司好
  • [nanoGPT] GPT模型架构 | `LayerNorm` | `CausalSelfAttention` |`MLP` | `Block`
  • 教育网校Web端源码开发难点剖析:互动课堂、白板与大小班课功能实现
  • 门户网站优点想学会网站建设要会什么
  • 中职学校网站建设情况总结大型网站建设公司排名
  • ply(python版本的flex/bison or Lex/Yacc)
  • 网站建设平台讯息建设手机网银可以自己提升额度吗
  • 新绛做网站网站框架有哪些
  • KEPServerEX 6 之 安装配置与基础操作
  • 虹口品牌网站建设政务网站设计鉴赏