C++多线程加速for循环

2023-05-16

  • 引用传参需要使用std::ref
  • 普通循环
#include <iostream>
#include <vector>
#include <sys/time.h>
#include <math.h>
using namespace std;

int main(int argc, char **argv) {
  struct timeval start, end;
  vector<vector<double> > a(10000, vector<double>(10000));
  gettimeofday(&start, NULL);
  for(int i = 0; i < 10000; ++i) {
    for(int j = 0; j < 10000; ++j) {
      a[i][j] = cos(1.05);
    }
  }
  gettimeofday(&end, NULL);
  float cost_time = (end.tv_usec-start.tv_usec)/1000000.0 + end.tv_sec-start.tv_sec;
  cout << cost_time << endl;
  cout << a[666][6] << endl;

  return 0;
}
// 输出 0.311707
//     0.497571
  • 多线程
#include <iostream>
#include <vector>
#include <sys/time.h>
#include <math.h>
#include <thread>
using namespace std;

void parallel(vector<vector<double> > &a, int index){
  for(int i = index; i < index+2000; ++i) {
    for(int j = 0; j < 10000; ++j) {
      a[i][j] = cos(1.05);
    }
  }
}

int main(int argc, char **argv) {
  struct timeval start, end;
  vector<vector<double> > a(10000, vector<double>(10000));
  gettimeofday(&start, NULL);
  thread t1(parallel, std::ref(a), 0);
  thread t2(parallel, std::ref(a), 2000);
  thread t3(parallel, std::ref(a), 4000);
  thread t4(parallel, std::ref(a), 6000);
  thread t5(parallel, std::ref(a), 8000);
  t1.join();
  t2.join();
  t3.join();
  t4.join();
  t5.join();
  gettimeofday(&end, NULL);
  float cost_time = (end.tv_usec-start.tv_usec)/1000000.0 + end.tv_sec-start.tv_sec;
  cout << cost_time << endl;
  cout << a[666][6] << endl;

  return 0;
}
// 输出 0.067235
//     0.497571
  • 均分成5个线程,速度提高差不多5倍
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++多线程加速for循环 的相关文章

随机推荐

  • RTK与网络RTK技术的工作原理和区别对比

    一 RTK RTK是一种利用GPS载波相位观测值进行实时动态相对定位的技术 进行RTK测量时 xff0c 至少需配备2台GPS接收机 xff0c 一台安装在基准站上 xff0c 另一台在基准站附近进行实时相对定位 xff0c 进而根据基准站
  • 【GNSS高精度定位应用】

    GNSS定位技术具有全天候 高精度 覆盖全球 自动化程度高 实时服务能力强等优点 xff0c 已经广泛应用于交通 军事 农业等领域 xff0c 例如车辆自主导航 自然灾害监测 紧急事故安全救援 精确制导武器 精准农业 建筑物结构安全监测等
  • 高精度定位成就智能物联|高精度定位的“智能化”进化史

    智能化发展日益成熟 xff0c AI当道 xff0c 互联网基建2 0时代 AIoT时代来临 AIoT是AI IoT 空间三个要素的结合 AI是大脑 xff0c 是不断进阶的算法能力 xff0c IoT是躯壳和骨干 xff0c 是更多智能化
  • svn 分支(branch)和标签(tag)管理

    版本控制的一大功能是可以隔离变化在某个开发线上 xff0c 这个开发线就是分支 xff08 branch xff09 分支通常用于开发新功能 xff0c 而不会影响主干的开发 也就是说分支上的代码的编译错误 bug不会对主干 xff08 t
  • 【HTTP协议】---HTTP协议详解

    HTTP协议详解 一 HTTP简介 1 HTTP协议 xff0c 即超文本传输协议 Hypertext transfer protocol 是一种详细规定了浏览器和万维网 WWW 61 World Wide Web 服务器 之间互相通信的规
  • 智驾发展的前世今生|自动驾驶完好性解决方案,只在千寻FindAUTO

    7月6日消息称 xff0c 深圳经济特区智能网联汽车管理条例 将于8月1日起实施 这部国内首部关于智能网联汽车管理的法规 xff0c 对智能网联汽车自动驾驶的定义 市场准入规则 路权 权责认定等多方面进行了具体规定 该条例意味着深圳或成为国
  • 智驾发展的前世今生|为高阶自动驾驶而生的千寻FindAUTO NSSR解决方案

    众所周知 xff0c 定位技术作为智能驾驶的关键核心 xff0c 解决了 我在哪 的问题 xff0c 与感知 决策 执行一起 xff0c 构成了智能驾驶四大主体功能 在L3自动驾驶发展落地如火如荼之际 xff0c 对于定位服务的需求愈发细致
  • 记一次 php curl 访问 https站点遇到的问题

    问题描述 今天大壮的PHP项目上 xff0c 在后端要去从微信那边取用户手机端上传的图片文件 微信提供的获取文件资源地址是 xff1a https api weixin qq com cgi bin media get access tok
  • 从入门到入土:基于C语言采用UDP协议实现通信功能的程序

    此博客仅用于记录个人学习进度 xff0c 学识浅薄 xff0c 若有错误观点欢迎评论区指出 欢迎各位前来交流 xff08 部分材料来源网络 xff0c 若有侵权 xff0c 立即删除 xff09 本人博客所有文章纯属学习之用 xff0c 不
  • 【Linux】【Ubuntu 】Ubuntu下安装Chrome

    本文记录 Ubuntu 下安装 Chrome 的方法 文章目录 1 安装 Chrome 的两种方式1 1 通过下载 deb 包安装 推荐 1 2 通过 apt install 安装 2 使用 Chrome 1 安装 Chrome 的两种方式
  • Arduino实现压力传感器(使用HX711模块)

    span class token comment 以下为函数声明 span span class token keyword extern span span class token keyword unsigned span span c
  • Arduino操作MPU6050模块

    MPU6050是集成三轴陀螺仪 xff0c 三轴加速度计 xff0c 温度传感器于一体的模块 本文档基于Adafruit MPU6050实现MPU6050模块基本操作 Adafruit MPU6050库 xff1a https github
  • ROS小车研究笔记2/25/2023自动导航

    使用说明 xff1a 1 将小车手动放在地图起点或者通过rviz设置起点 2 运行导航launch文件 roslaunch turn on wheeltec robot navigation launch rviz 运行rviz终端 要在r
  • 倾斜摄影测量无人机炸机的八大原因及“炸机”预防措施

    引言 采用无人机航测的方式代替人工完成相应的测绘工作不仅效率高 xff0c 其精度也有保证 但飞行事故却是一个不容忽视的重要潜在危险源 航测设备的价格往往不低 xff0c 每一个事故的发生都会给客户造成巨大损失 有鉴于此 xff0c 睿铂根
  • 向量积的二维物理意义,二维向量叉乘几何意义

    1 自然语言 二维向量叉乘 xff1a x1 y1 x2 y2 61 x1y2 x2y1值的绝对值是两向量同起点 xff0c 构成平行四边形的面积值为正 xff0c x2 y2 在 x1 y1 逆时针方向值为负 xff0c x2 y2 在
  • Boost.Asio C++ 网络编程之十:基于TCP的异步服务端

    这个流程图是相当复杂的 xff1a 从Boost Asio出来你可以看到4个箭头指向on accept xff0c on read xff0c on write和on check ping 这也就意味着你永远不知道哪个异步调用是下一个完成的
  • 使用usrmod时报错user does not exist

    笔者在sudo usermod a G users whoami 时遇到这个问题使用vigr编辑 etc groups xff1a sudo vigr etc groups内容依次是 xff1a 组名 xff1a 密码 xff1a 组号 x
  • invalid conversion from ‘const char*’ to ‘char*’解决方法

    string类的c str函数返回的是const char类型 xff0c 如果将它用作实参传递给char的形参就会报这个错误解决方法 xff1a 在调用是加 char 转换一下 xff0c 比如 char cfgfile c str
  • undefined symbol的解决记录

    一 看这里说 xff0c 是链接顺序的问题 xff0c 于是在CMakeLists里加了这个 xff1a Wl start group PROJECT SOURCE DIR lib libngraph so PROJECT SOURCE D
  • C++多线程加速for循环

    引用传参需要使用std ref普通循环 span class token macro property span class token directive hash span span class token directive keyw