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

陕西营销型手机网站建设推广普通话宣传海报

陕西营销型手机网站建设,推广普通话宣传海报,幼儿园网站怎样建设,视频直播系统 高清🧠 什么是 OpenMP? OpenMP(Open Multi-Processing) 是一种基于 共享内存多线程并行编程 的标准接口,主要用于 C/C 和 Fortran。 它通过编译器指令(#pragma)和少量函数调用,实现程序…


🧠 什么是 OpenMP?

OpenMP(Open Multi-Processing) 是一种基于 共享内存多线程并行编程 的标准接口,主要用于 C/C++ 和 Fortran
它通过编译器指令(#pragma)和少量函数调用,实现程序的多线程并行执行,广泛用于多核 CPU 的并行加速。

✅ 关键词:简单、快速接入、共享内存模型、线程级并行


📚 基本原理

  • OpenMP 利用多线程模型,多个线程访问同一块共享内存。

  • 主线程启动并分配工作到多个子线程。

  • 子线程完成任务后回收,继续主线程的流程。


🚀 使用步骤(C++ 示例)

1. 头文件引入

#include <omp.h>

2. 编译器支持

使用 -fopenmp(GCC/Clang) 或 /openmp(MSVC):

g++ -fopenmp main.cpp -o my_app

🔧 常用指令详解

1. 并行执行块

#pragma omp parallel
{// 这里的代码由多个线程并行执行
}

2. 并行 for 循环

#pragma omp parallel for
for (int i = 0; i < N; ++i) {// 多线程并行执行每一次迭代
}

3. 指定共享与私有变量

#pragma omp parallel for shared(shared_var) private(i)
  • shared(x):所有线程共享变量

  • private(x):每个线程有自己的副本

4. critical(临界区)

保证某段代码只被一个线程执行:

#pragma omp critical
{// 通常用于修改共享变量(如 push_back、计数等)
}

5. reduction(规约)

并行执行中对变量进行“聚合”:

int sum = 0;
#pragma omp parallel for reduction(+:sum)
for (int i = 0; i < N; ++i)sum += i; // 各线程加和后统一聚合

6. atomic(原子操作)

原子性地更新变量,比 critical 粒度更小:

#pragma omp atomic
sum += i;

7. schedule(任务划分策略)

控制任务在线程间如何分配:

#pragma omp parallel for schedule(static)   // 固定分配
#pragma omp parallel for schedule(dynamic)  // 动态分配

🧮 运行时函数

int omp_get_num_threads();    // 获取当前线程数
int omp_get_thread_num();     // 获取当前线程 ID(从 0 开始)
int omp_get_max_threads();    // 系统支持的最大线程数

🧪 示例:并行求数组和

#include <omp.h>
#include <iostream>
int main() {const int N = 1000;int a[N];for (int i = 0; i < N; ++i) a[i] = i;long long sum = 0;#pragma omp parallel for reduction(+:sum)for (int i = 0; i < N; ++i) {sum += a[i];}std::cout << "Sum = " << sum << std::endl;return 0;
}

⚠️ 使用注意事项

问题描述
❌ 数据竞争多线程读写同一变量未加锁或同步,可能崩溃
❌ 非线程安全容器std::vectordeque 等 STL 容器需手动保护
❌ 非结构化编程不当的 #pragma 结构容易导致 bug
❌ 嵌套并行默认为关闭,需手动打开 omp_set_nested(1)

✅ 适合的使用场景

场景说明
CPU 密集型计算大量循环计算、矩阵乘法、图像处理
数据并行处理同一类型的大量数据
图像 Patch 并行处理图像分块 + #pragma omp parallel for
替代多线程简洁替代 pthread/C++ std::thread 等

🧰 优缺点总结

优点缺点
✅ 易上手❌ 仅支持共享内存系统
✅ 与现有代码融合简单❌ 控制粒度较粗,不适合复杂任务分配
✅ 开销小(无需线程池)❌ 对线程安全性要求高,容易出错

📦 补充工具

  • GOMP(GNU OpenMP Runtime):你遇到的 libgomp.so 就是它,OpenMP 的运行时。

  • Intel TBB / C++20 并行算法:适合更复杂的并行场景。

  • OpenCL / CUDA:适合跨设备(GPU)并行。


执行例子


#include <iostream>
#include <omp.h>int main() {#pragma omp parallel{int tid = omp_get_thread_num();std::cout << "Thread %d says hello\n" << tid << std::endl;int num_threads = omp_get_num_threads();std::cout << "Number of threads: " << num_threads << std::endl;}std::cout << " ------------------------- " << std::endl;#pragma omp parallel forfor (int i = 0; i < 8; ++i) {printf("Thread %d handles i = %d\n", omp_get_thread_num(), i);int tid = omp_get_thread_num();std::cout << "the threads is: " << tid << std::endl;std::cout << std::endl;}std::cout << " ------------------------- " << std::endl;int public_val = 0;for(int i=0; i<10; i++){public_val += 1;}std::cout << "the public_val is: " << public_val << std::endl;public_val = 0;#pragma omp parallel forfor(int i=0; i<10; i++){   #pragma omp criticalpublic_val += 1;}std::cout << "the public_val is: " << public_val << std::endl;public_val = 0;#pragma omp parallel forfor(int i=0; i<10; i++){   public_val += 1;}std::cout << "the public_val is: " << public_val << std::endl;return 0;
}// g++ main.cpp -fopenmp -o hello

http://www.tj-hxxt.cn/news/76055.html

相关文章:

  • 个人做医疗类网站违法?百度热搜榜单
  • 织梦摄影网站源码成品短视频app下载有哪些
  • 网站和h5网站排名快速提升工具
  • 泰安公司网站建设价格查询关键词优化策略
  • 网站可以在手机上做吗万网域名注册官网
  • 曰本真人性做爰 酥酥网站企业管理培训机构
  • 替朋友做网站今日新闻最新消息
  • 网站开发调研报告农村电商平台
  • 郑州近期重大新闻在哪里可以免费自学seo课程
  • 乐清做网站公司哪家好免费b站推广网站链接
  • 做普通网站价格网站开发报价方案
  • wp如何做双语网站微信公众号的推广
  • 营销网站设计实验邵阳做网站的公司
  • 中小学生做试卷的网站6网站seo去哪个网站找好
  • 东平网站建设信息流优化师招聘
  • 专业定制房地产网站建设百度识图在线使用
  • 绵阳网站seo手机百度高级搜索入口在哪里
  • jsp网站开发存在的问题浏览器网站进入口
  • 网站建设 课程 说明推广软文
  • 2022中文无字幕入口网站线下推广方法及策略
  • wordpress emoji禁用seo排名优化联系13火星软件
  • 做网站在哪买域名搜索引擎优化怎么做
  • wordpress 主题推荐seo为什么要进行外部优化
  • 制作网站不给源代码爱站关键词挖掘软件
  • 淄博网站网站建设网站手机版排名seo
  • 企业网站开发报价表网店运营培训哪里好
  • 桂林做网站多少钱seo网站推广招聘
  • 供应链金融网站开发公众号推广接单平台
  • 湖南网站建设公司 在线磐石网络学校教育培训机构
  • 深圳全国网站制作哪个好黑帽seo培训