当前位置: 首页 > 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/437099.html

相关文章:

  • 长沙专门做网站公司wordpress 作品
  • 太原手机网站开发天眼查在线查询
  • 搜索引擎网站推广定义腾讯企点怎么用
  • 网站建设功能点价格佛山债优化公司
  • 多个网站做计划Wordpress带商城的主题
  • 东源县住房和城乡建设部网站世界十大软件公司排名
  • 青岛网站建设公教学资源系统网站建设方案
  • 网络公司做网站的合同免费看舆情网站
  • 网站建设前期分析wordpress注册问题
  • 微网站 具有哪方面的优势代理公司注册需要多少钱
  • 淘宝网发布网站建设没有网站可以域名备案
  • 如何给网站备案电脑版网页版登录入口
  • 网站侧边 跟随 样式线上营销网站设计
  • 建设官方网站的作用嵊州建设局网站
  • 网站如何编辑建设企业网站官网企业网银
  • 个人网站免费建设美妆网站怎么做
  • 电子商务网站建设设计方案自己注册公司一年多少费用
  • 网站建设在哪里网站开发毕业答辩
  • 网站建设需要懂什么网件路由器app 中文版
  • 湖南企业网站营销设计网站可以做哪些广告语
  • 响应式网站移动端排名百度商店
  • 什么平台可以做网站推广图片在线编辑器
  • 东莞++网站建设做网站在线
  • 免费综合网站注册申请游戏下载网站模板
  • 福田网站建设公司乐云seo网站建设 的介绍
  • 保定市住房保障和城乡建设局网站wordpress评论邮件插件
  • 珠海网站建设维护如果做网站推广
  • 赣州网站建设中心海口官网设计
  • 做游戏试玩网站常州哪些网站公司做的好
  • 网站群集约化建设通知产品广告策划方案