OpenMP学习笔记

本文通过一个简单的OpenMP并行计算示例展示了如何使用OpenMP进行多线程编程,解释了线程与进程的区别,并讨论了在ARM和x86平台上使用OpenMP的性能差异。提供的Makefile展示了编译设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        OpenMP是一种用于共享内存并行系统的多线程程序设计方案,支持的编程语言包括C、C++。OpenMP提供对并行算法的高层抽象描述,特别适合在多核CPU机器上的并行程序设计。进程是CPU资源分配的最小单位,线程是CPU调度的最小单位。线程是建立在进程的基础上的一次程序运行单位,进程是应用程序的执行实例。

一、测试

#include <iostream>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>        
#include "time.h" 
#include <sys/time.h>
#include "omp.h"    //----------


void omp_test(void);

int main(void)
{
    omp_test();

	return 1;
}

void omp_test(void)
{
    int sum = 0;
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
#pragma omp parallel for reduction(+:sum)
    for (int i=0;i<10;i++)
        sum = sum + a[i];
        
#pragma omp parallel
    {
        //std::cout << omp_get_thread_num();
        printf("thread %d \n", omp_get_thread_num());
    }
        
    printf("%d \n", sum);
}

makefile


objects = test.o 
CFLAGS = -O3 -mfpu=neon -mthumb -march=armv7-a -funsafe-math-optimizations -mfloat-abi=softfp 
TOPDIR=.
CFLAGS += -I$(TOPDIR)/include
.PHONY:all

all:demo

demo: $(objects)
	@echo ------------linking...
	arm-himix200-linux-g++ $(CFLAGS) -o  $@ $^ -lc -lgomp -lpthread -ldl
	@echo ------------over !!!
#	cp demo ./bin; mv *.o ./bin

.c.o:
	@echo ------------gcc .c 
	arm-himix200-linux-gcc $(CFLAGS) -c  $^  

.cpp.o:
	@echo ------------g++ .cpp
	arm-himix200-linux-g++ $(CFLAGS) -c  $^


clean:
	rm -f demo *.o; pwd; 

二、

【openMP并行计算】计算π

参考博文:

OpenMP教程——从0开始一小时写出并行程序!

OpenMP的配置及简单使用

openmp学习篇章

相同代码在ARM平台使用openMP多线程比单线程慢,但是在x86平台多线程明显快于单线程

### WRF 数值模拟学习资源汇总 对于希望深入理解 Weather Research and Forecasting (WRF) 模型及其应用的研究人员来说,存在多种途径获取高质量的学习材料。这些资源不仅涵盖了理论基础,还包括实际操作指南。 #### 官方文档与教程 官方提供的文档是最权威的信息源之一。UCAR(University Corporation for Atmospheric Research)维护着详细的在线手册和教程,适合不同层次的使用者查阅[^2]。这类资料通常会随着版本更新而持续改进,确保用户能够获得最新的配置方法和技术细节说明。 #### 实战案例分析 通过具体的应用场景来掌握软件工具是非常有效的学习方式。例如,在研究台风菲特(Fitow)期间,有学者分享了完整的实验过程记录,包括但不限于数据准备、参数设定以及结果验证等多个环节的具体实现步骤。此类实战经验有助于加深对整个工作流的理解,并能帮助解决实践中遇到的实际问题。 #### 技术博客与社区讨论 互联网上有许多个人或团队撰写的关于WRF的技术文章,它们往往包含了作者独特的见解和个人积累的小技巧。特别是当涉及到特定环境下的部署或是优化性能等方面的话题时,来自一线开发者的建议尤为珍贵[^4]。此外,积极参与相关论坛交流也是快速提升技能的好办法;在这里可以找到志同道合的朋友共同探讨难题,互相启发思路。 #### 并行计算平台支持 鉴于气象预报任务常常涉及大规模的数据集处理及复杂物理过程仿真,因此熟悉高性能计算机(HPC)上的作业提交机制至关重要。针对这一点,某些机构提供了专门面向初学者编写的入门级指导材料,介绍了必要的Linux命令行操作知识以及MPI/OpenMP编程接口等内容[^3]。这使得即使是没有太多超级计算背景的人也能顺利开展基于集群系统的科研活动。 ```bash # 示例:登录远程服务器并执行简单命令 ssh username@remote_host cd /path/to/project_directory ls -l ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月光下的麦克

您的犒赏是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值