-
近期项目决定集成使用华为AGC的云存储服务,用来存储用户上传的数据文件,其功能类似于用户的个人云盘,可以将用户数据或者应用内预置贴图等数据,存放在AGC云侧的数据服务器中。按需下载,可以大幅减小应用的包体,并且使用该云存储产品,使用SDK提供的接口使用即可,不用关注后台服务器的运维和部署等操作,大幅减少开发人力。在AGC界面创建分享华为的AGC的云存储服务,提供AGC控制台,可以再AGC控制台,以管理员的身份操作并且管理文件。关于AGC管理的文件分享,官方文档里,写的标题为 创建令牌。这个标题名可能比较难懂,其实就是创建分享链接。对应文档:cid:link_0操作步骤如下:1、登录AGC管理台, 点击 我的项目 ,找到你的云存储项目。在左侧导航栏选择 构建-云存储。2、选择一个文件,选择操作栏的 详情3、在弹出的选框中,可以看到有共享令牌的内容。每个文件默认匹配一个共享令牌。当文件拥有一个令牌时,就可以使用该令牌下载当前文件。 4、点击 复制 ,复制该令牌。复制出来的令牌,就是一个下载链接,可以通过这个下载链接,直接下载这个文件。在应用内创建分享华为AGC云存储服务,还提供了多个平台的SDK,可以直接在Android应用或者IOS应用内集成SDK,通过SDK提供的接口,直接进行文件的相关操作,当然也是可以直接创建文件的分享链接的。
-
服务器端示例代码:import java.io.*; import java.net.*; public class ChatServer { public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(12345); System.out.println("服务器启动,等待客户端连接..."); while (true) { Socket clientSocket = serverSocket.accept(); System.out.println("客户端连接成功:" + clientSocket); // 创建一个新的线程来处理该客户端的通信 Thread thread = new Thread(new ClientHandler(clientSocket)); thread.start(); } } catch (IOException e) { e.printStackTrace(); } } } class ClientHandler implements Runnable { private Socket clientSocket; private PrintWriter out; private BufferedReader in; public ClientHandler(Socket socket) { this.clientSocket = socket; try { out = new PrintWriter(clientSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { try { String message; while ((message = in.readLine()) != null) { System.out.println("收到消息:" + message); // 广播消息给所有客户端 broadcast(message); } } catch (IOException e) { e.printStackTrace(); } } private void broadcast(String message) { // 实现广播逻辑,将消息发送给所有客户端 } } 客户端示例代码: import java.io.*; import java.net.*; public class ChatClient { public static void main(String[] args) { try { Socket socket = new Socket("localhost", 12345); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)); String message; while ((message = userInput.readLine()) != null) { out.println(message); } } catch (IOException e) { e.printStackTrace(); } } }
-
本帖子是基于华为云鲲鹏服务器配置java开发环境全流程的教程
-
我用的阿里云的域名,为啥用华为云服务器不管用
-
注册性能模型,如下请求体注册Cpu使用率指标, 调用接口url为 https://{oc地址}:26335/rest/performance/v2/classes/CLOUD_VM{ "namespace": "SYS.ECS", "indicators": [ { "dataType": "float", "dataUnit": "%", "displayName": { "enUs": "CPU Usage", "zhCn": "CPU使用率" }, "name": "cpuUsage" } ], "system": { "systemType": "H3CloudOS-Driver", "enUs": "H3CloudOS", "zhCn": "华三CloudOS" }, "extraCondition": { "name": "originalOwnerType", "value": [ "External Driver#H3CloudOS-Driver" ] } }接口调用成功,返回200,但errorMsg为空串,没任何说明{ "errorMsg": "" }根据文档可知若返回errorMsg,则表示注册失败,页面上也没有对应的性能采集任务。求助各位大佬,帮忙看下问题原因。
-
活动介绍:为了给用户提供更好的产品体验,华为云现邀请负载均衡管理员有偿参加产品测评活动。测评时长:1.5-2小时测评方式:线上测评,电脑入会报名条件:弹性负载均衡ELB管理人员,从事负载均衡管理工作;负责ELB使用规划,日常运维,购买及使用,熟悉ELB监听配置业务等;访谈日期:2023年10月活动奖励:参与测评后可获得200元京东购物卡报名入口:需要先填写本问卷报名cid:link_0,在问卷结尾留下联系方式本活动最终解释权归华为云UED团队所有。
-
在本文中,我们初识云计算平台,学习华为云提供的弹性云服务器(ECS)。认识 Spark 与 Hadoop运行 Hadoop Word Count 样例运行 Spark Connected Components 样例华为云 ECS 属于 IaaS 还是 PaaS?华为云 ECS 除了操作系统外,提供的环境非常有限,很多环境需要自己配置,属于 IaaS。Hadoop 与 Spark 的区别应用场景Hadoop 包括分布式存储系统 HDFS 和数据分析框架 MapReduce,本身就可以完成对海量数据的存储和分析。Spark 不提供文件系统,专门用来处理分布式存储的大数据,它要借助 HDFS 或其他文件系统存储。处理速度Hadoop 的 MapReduce 分步对处理数据:先读磁盘进行 Map,将结果写到磁盘,然后再读磁盘进行 Reduce,再将结果写到磁盘,多次 I/O 影响速度。Spark 从磁盘中读取数据,接下来中间数据都存储在内存中,最后将结果写回磁盘,所以 Spark 比 Hadoop 更快。容错性Hadoop 将每次处理后的数据都写入到磁盘上,容错性好。Spark 的数据对象存储在 RDD 上,通过 checkpoint 和 Lineage 等机制实现容错。使用 Spark 执行 PageRank 算法PageRank 算法描述算法分为两个阶段。在初始化阶段,首先将图的每个顶点关联到该点的出度上,然后设置每条边的权重为出度的倒数,再初始化每个顶点的权重为 1.0 。var ranks = graph .outerJoinVertices(graph.outDegrees) {(vid, vdata, deg) => deg.getOrElse(0)} .mapTriplets(e => 1.0 / e.srcAttr, TripletFields.Src) .mapVertices{(id, attr) => 1.0}在迭代阶段,每个顶点将自身的权重平均分配到相邻的目标点上,从而更新所有点的权重。迭代数轮之后权重收敛。for (_ <- 1 to 100) { ranks.cache() val updates = ranks.aggregateMessages[Double]( ctx => ctx.sendToDst(ctx.srcAttr * ctx.attr), _ + _, TripletFields.Src ) ranks = ranks.outerJoinVertices(updates) { (id, oldRank, msgSumOpt) => resetProb + (1.0 - resetProb) * msgSumOpt.getOrElse(0.0) } }最后将权重进行降序排序,得到声望前 20 高的候选人名单。ranks.vertices.collect().sortBy(- _._2).slice(0,20)部署假定我们为 root 用户,以下操作均在 master 节点上进行。首先启动 Hadoop 和 Spark 。cd /usr/local/hadoop/ && sbin/start-all.sh cd /usr/local/spark/ && sbin/start-master.sh && sbin/start-slaves.sh假定数据集位于 ~/Wiki-Vote.txt ,将数据集上传到 HDFS。cd ~ hadoop fs -mkdir -p /user/root/data/graphx/ hadoop fs −put Wiki-Vote.txt /user/root/data/graphx/假定 PageRank 应用位于 ~/pagerank ,目录结构为. ├── simple.sbt └── src └── main └── scala └── PageRank.scala将项目编译打包成 jar 文件。cd ~/pagerank && /usr/local/sbt/sbt package运行将生成的 jar 包提交到 Spark 中运行。cd ~/pagerank /usr/local/spark/bin/spark−submit −−class "PageRank" target/scala−2.11/simple−project_2.11−1.0.jar输出得到声望前 20 高的候选人名单。候选人名单认识 Kubernetes 集群初识 minikube本实验用 minikube 代替 Kubernetes,方便在单机上模拟 Kubernetes 集群。Kubernetes 集群是什么?用途Kubernetes 是一个用于管理容器化的工作负载和服务的自动化运维平台。传统的容器化部署中,应用程序在部署、伸缩时需要大量手动操作,低效且容易出错。Kubernetes 则解决了这些痛点,实现了容器集群的自动部署、伸缩、维护等功能。架构Kubernetes 集群主要包括控制平面组件(即 Master)和多个 Node 组件,此外还可以安装插件。用户可以通过 kubectl 等接口访问集群。控制平面组件是 Kubernetes 的控制中心,为集群做出全局决策,如编排调度,检测和响应集群事件。主要包括 kube-apiserver(前端),etcd(数据库),kube-scheduler(调度器),kube-controller-manager(本地控制器管理器),cloud-controller-manager(云平台控制器管理器)。Node 组件维护运行的 Pod 并提供 Kubernetes 运行环境,主要包括 kubelet(节点代理),kube-proxy(网络代理),容器运行时(包括多个 Kubernetes 的最小可部署计算单元 Pod)。常用插件包括 CoreDNS(DNS 服务器),Dashboard(Web 控制台界面),Weave Scope(资源监控)。特性服务发现:用 DNS 名称或 IP 地址暴露服务,使服务消费者能够找到服务提供者。负载均衡:均衡分配负载和进入容器的网络流量,防止过载。存储编排:允许用户自动挂载所选存储系统。自动部署和回滚:以一定速率将状态变更到用户描述的状态,如果出现问题则自动回滚。自动装箱:将容器根据资源需求和限制调度到节点上,提高资源利用率。自我修复:重启失败的容器,替换死亡的容器,杀死不响应健康检查的容器。etcd 的功能etcd 是基于 Raft 协议的强一致性、高可用的分布式键值存储,用作 Kubernetes 的所有集群数据的后台数据库。在 Kubernetes 集群中,etcd 主要用于配置共享和服务发现。配置共享:etcd 通过 watch 机制实时发布公共配置文件的变化,微服务实时订阅更新配置。服务发现:etcd 保存服务的 IP 地址和端口以注册服务,不同的服务通过 etcd 找到对方并建立连接。在 Kubernetes 上搭建博客系统Service、PersistentVolumeClaim 与 DeploymentService(服务)类似代理,将运行在一组 Pod 上的应用程序抽象为网络接口,提供统一的 IP 地址和端口来访问底层 Pod。 外部用户和内部 Pod 都使用 Service 与其他 Pod 通信,这样使一组 Pod 无需跟踪另一组 Pod 的 IP 地址就可以使用其服务,实现了解耦。PersistentVolumeClaim(PVC,持久卷申领)即请求存储。PVC 消耗 PV(PersistentVolume,持久卷)资源,可以指定大小和访问模式,如加载一个读写实例或多个只读实例,而无须感知这些实例背后具体的存储实现。PVC 实现了 Pod 和 PV 之间的解耦。Deployment 是定义管理多副本应用的对象,用于部署无状态应用。Deployment 可以根据用户需求将 Pod 调度到目标机器上,监控容器的运行状态,实现快速扩容,解决了 Pod 的生命周期管理、调度、多副本问题。了解集群状态,创建博客部署 Kubernetes 应用与部署传统应用的不同之处部署速度:传统部署由于是在物理机上运行,速度慢;Kubernetes 部署速度更快,效率更高。资源利用:传统部署无法将剩余的资源分配给其他的应用,Kubernetes 部署灵活分配资源,提高资源利用率。资源隔离:传统部署中,如果某个程序占用大量资源,会导致其他程序性能下降;Kubernetes 部署中资源隔离性高。部署难度:传统部署需要手动配置环境;Kubernetes 部署可以通过命令行工具自动完成。跨平台一致性:传统部署对物理机环境有严格要求,Kubernetes 部署可以跨平台。持续集成/持续交付:Kubernetes 部署更加敏捷。在华为云 CCE 上搭建博客系统CCE 集群的集群信息、工作负载、服务发现创建博客华为云 CCE、华为云 ECS、Kubernetes 三者之间的区别与联系ECS 是一种可随时自助获取、可弹性伸缩的云服务器,由 CPU、内存、操作系统、云硬盘组成。Kubernetes 是一个用于管理容器化的工作负载和服务的自动化运维平台。传统的容器化部署中,应用程序在部署、伸缩时需要大量手动操作,低效且容易出错。Kubernetes 则解决了这些痛点,实现了容器集群的自动部署、伸缩、维护等功能。Kubernetes 集群主要包括控制平面组件和多个 Node 组件,实验中 Kubernetes 集群中的一个 Node 就是一个 ECS。CCE 提供高度可扩展的、高性能的企业级 Kubernetes 集群,支持运行 Docker 容器,用户可以用 CCE 轻松部署、管理和扩展容器化应用程序。因此,ECS 在 Kubernetes 集群中作为 Node 组件存在,CCE 是用于高效管理 Kubernetes 集群的工具。在华为云 CCE 上部署 Kubernetes 应用与手动部署 Kubernetes 应用的不同之处易用性手动部署复杂,用户需要自己安装、操作、扩展集群管理软件。在 CCE 上部署简单高效,用户可以一键创建和升级 Kubernetes 集群,自动化部署运维容器应用。可扩展性手动部署可扩展性差,需要根据流量和健康情况人工确定容器服务的部署。在 CCE 上部署可扩展性好,可以自由组合多种弹性策略,根据资源使用情况自动伸缩集群节点和工作负载。可靠性手动部署可靠性差。手动部署多采用单控制节点,一旦控制节点出现故障,集群和业务将不可使用。在 CCE 上部署可靠性好。可以选择高可用以创建 3 个 Master 节点,单点故障时集群仍然可用。高效性手动部署效率低,需要自行搭建镜像仓库或使用第三方镜像仓库,镜像拉取方式多采用串行传输。在 CCE 上部署效率高,配合 SWR,镜像拉取方式采用并行传输,高并发场景下能获得更快的下载速度。成本手动部署成本高,需要投入资金构建、安装、运维、扩展集群管理基础设施。在 CCE 上部署成本低,用户只需支付用于存储和运行应用程序的资源费用和容器集群控制节点费用。在华为云 CCE 上体验自动扩缩容观察自动扩缩容节点伸缩历史扩容直至节点数量稳定时的节点列表工作负载伸缩与节点伸缩的区别与联系工作负载伸缩位于调度层,负责修改负载(Pod)的调度容量变化。例如通过 HPA 调整应用的副本数,改变当前负载占用的调度容量。节点伸缩位于资源层,当集群的容量规划不能满足需求,会通过弹出资源的方式补充。工作负载伸缩和节点伸缩是 CCE 弹性伸缩的两个维度。两者可以分开使用,也可以结合在一起使用。两者之间可以通过容量状态进行解耦。华为云 AS 与 HPA + CA 之间的区别与联系AS 是根据用户的业务需求,通过设置伸缩规则来自动增减资源(ECS 实例或带宽资源)。HPA + CA 是 CCE 中的弹性伸缩,通过伸缩 Pod 和节点来实现资源的弹性利用。两者都是通过一定的方式实现资源的弹性伸缩,不同点在于 AS 面向 ECS 组,伸缩的是 ECS 实例数和带宽;而 HPA + CA 是 CCE 中的实现,面向 Kubernetes 集群,伸缩的是 Pod 数和节点数。
-
1.购买ECS并登录购买流程省略,注意选择CPU架构X86,镜像为Ubuntu 18.04,网络为默认VPC,安全组Sys-FullAccess。登录ECS创建 ECS 后,可以在控制台->弹性云服务器中看到弹性公网IP。推荐使用 Vscode+ssh 插件登录 ECSSSH:cid:link_3实验环境配置搭建Java开发环境,配置好环境变量 参考:cid:link_1分布式框架的安装与配置:Hadoop 配置:cid:link_4Spark 配置:cid:link_5Sbt(Simple Build Tool)配置:cid:link_62.运行Hadoop wordcount样例通过运行 Hadoop 提供的 wordcount 样例,我们可以直观地感受到批处理应用的一种典型模式:先分散执行,再统一收集结果。启动 Hadoop 集群后,执行 hadoop fs -mkdir /input,在 hdfs 根目录下新建文件夹执行 hadoop fs -put xxx.txt /input 将需要执行 wordcount 的文本放⼊新建的文件夹中。执行hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-x.x.x.jar wordcount/input/output 运行 Hadoop 自带的 wordcount样例(注意自己部署的hadoop 版本)。执行 hadoop fs -cat /output/part-r-00000 打印结果。运行结果如下: 3.运行Spark Connected Component样例在这一部分中,我们将初步认识 Spark 处理框架。Spark 提供了 GraphX API,可以用于处理图数据。我们将参考 wordcount 应用的打包方法,打包运行一个使用 GraphX API 编写的图处理应用。下载样例数据: cid:link_2对样例编译打包成 jar 文件:cid:link_0参考 wordcount 应用的编写方法:cid:link_7将生成的 jar 包通过 spark-submit 提交到 Spark 中运行。运行结果如下: 4.个人总结Hadoop 框架的核心是 HDFS 和 MapReduce,HDFS 为海量的数据提供了存储,则 MapReduce 为海量的数据提供了计算。HDFS 有高容错性,用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。Spark 是一种类 Hadoop MapReduce 的通用并行框架,不同点是Job中间输出结果可以保存在内存中,从而不再需要读写 HDFS。因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。且 Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。
-
Kubernetes 常被简写为 K8s,是谷歌基于 Borg 推出的开源容器编排管理系统。K8s 经常用于管理面向用户型应用,具有很高的灵活性、可扩展性和容灾性。在本贴中,我们要在华为云 ECS 上搭建一个简单的单节点 Kubernetes集群,并在这个集群上运行一个简单的 wordpress 博客系统,并在搭建的过程中学习K8s的相关概念,了解云原生时代的应用组织方式。Minikube 是 Kubernetes 的单节点版,用于学习和本地开发。使用 minikube 搭配 docker,我们可以在一台服务器上搭建一个由多个本地容器组成的微型 Kubernetes 集群。Wordpress 是一个用 PHP 语言开发的博客平台。使用 wordpress 搭配 mysql 数据库,我们可以搭建起一个简易的博客网站。通过本实验,我们可以了解到 Kubernetes 的基本组件和基本概念,并动手实操,部署一个典型的面向用户型服务应用。安装与准备购买华为云 ECS,安装 minikube、docker、kubectl,准备镜像地址,预下载 coredns 镜像。认识 Kubernetes 集群一个 kubernetes 集群的基本结构包括一个 control plane 和若干 node。每个 node 都是一个独立的服务器,上面运行 kubelet 和 k-proxy 两个管理组件。其大致结构如下: 启动 minikube 集群,执行如下两个命令,执行结果如下图所示,此时我们已经拥有了一个正常工作的 minikube 集群,并且看到了 kube-system namespace 下的 pod 以及他们的运行状态。执行minikube start –image-mirror-country=’cn’ –registry-mirror=”加速器地址” –force执行kubectl get pod –all-namespaces在 Kubernetes 上搭建博客系统在此部分中,我们在 minikube 上搭建一个由 wordpress 和 mysql 两个组件组成的博客系统,并远程访问博客网站,创建一篇博客。在 K8s 中,我们通过提供 yaml 格式配置文件的方式部署应用。K8s 会按照配置文件的内容拉取镜像,构建应用。我们准备并使用了 wordpress 和 mysql 对应的两个 yaml 文件。然后把 kustomization.yaml 提供给 minikube,就可以将博客系统自动部署。我们还需要进行一些网络配置,才能从远程访问它。我们使用 kubectl 这一工具设置端口代理,把运行 wordpress 容器的 80 端口开放给 ECS 的 8080 端口,即可远程访问。部署博客系统后,集群中运行的所有 service、deployment 和 pod 的状态如下图所示。 我所创建的第一个博客下图所示。 感想与体会搭建一个基于Kubernetes集群的博客系统是一次非常丰富而挑战性的经历。在这个过程中,我深刻认识到了Kubernetes的强大和灵活性。首先,学习和了解Kubernetes是一个深入的过程。理解其核心概念,如Pod、Deployment和Service,对我而言是一个全新的领域。通过阅读官方文档、教程和实践,我逐渐掌握了如何配置和管理Kubernetes集群的技能。搭建博客系统也是一个复杂而有趣的挑战。选择适合的博客平台并不是一蹴而就的事情,需要考虑到系统的要求、稳定性和扩展性。我选择了一个静态网站生成器,这样可以更好地利用Kubernetes的特性来部署和管理我的博客内容。在部署过程中,我遇到了一些问题,比如配置Ingress资源、处理存储和数据库设置。但通过查找文档、社区支持和一些创造性的解决方法,最终成功地将博客系统部署到了Kubernetes集群上。我的创新点在于尝试了一些新的方法来优化系统性能和安全性。例如,我探索了自动化备份策略、使用监控工具来监测系统健康状况,并尝试了一些新的部署模式来提高系统的弹性和可靠性。这个经历让我深刻领悟到技术的不断演进和学习的重要性。探索Kubernetes集群和博客系统的搭建过程不仅让我获得了实际操作经验,也培养了我解决问题和创新的能力。这个经历不仅仅是搭建一个博客系统,更是一个全新且充满挑战的技术探索之旅。
-
我们的生活无处不在改变,人工智能让AI博弈使游戏更好玩,AI的语音和图像识别技术提高了办公自动化程度。大数据的搜索引擎技术,自动推荐技术,这些技术让互联网更懂人们的需求,云计算让程序员和小公司免于搭建复杂计算机所需的资金和时间的困扰......【话题互动】人工智能、大数据、云计算技术的发展有哪些真实改变了我们的生活?感兴趣的小伙伴可以回帖讨论交流一下哦~
-
想问下 这个兼容性测试工具支持在虚拟机上运行么? 如果在虚拟机上运行,那是不是测试不了相关的功耗了?测试不了功率还能往下进行测试么? https://www.hikunpeng.com/document/detail/zh/kunpenggrf/usermanual/kunpengcomtestool_06_0001.html
-
一、问题描述实现梯形积分法的MPI编程熟悉并掌握MPI编程方法,探讨不同规模对不同实现方式(MPI,Pthread,openmp)的影响。二、算法设计实现与复杂性分析梯形积分法的计算原理:2.1 MPI实现//单步计算double Trap(double left,double right,int count,double len){ double estimate, x; int i; estimate = (fun(left) + fun(right)) / 2.0; for (i = 1; i < count - 1;i++){ x = left + i * len; estimate += fun(x); } estimate = estimate * len; return estimate;}int main(int argc,char*argv[]){ MPI_Init(&argc, &argv); int my_rank, comm_sz; double h, localA, localB; double localInt, totalInt; int source; MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); MPI_Comm_size(MPI_COMM_WORLD, &comm_sz); clock_t BeginTime = clock(); h = (b - a) / n; double localN = n / comm_sz; localA = a + (my_rank * localN * h); localB = localA + localN * h; if (my_rank == comm_sz - 1) { localN = n - (comm_sz - 1) * localN; localB = b; } localInt = Trap(localA, localB, localN, h); if (my_rank != 0) { MPI_Send(&localInt, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); } else //0号线程负责收集结果加和 { totalInt = localInt; for (source = 1; source < comm_sz; source++) { MPI_Recv(&localInt, 1, MPI_DOUBLE, source, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); totalInt += localInt; } } clock_t EndTime = clock(); if (my_rank == 0) { printf("n = %d\n", n); printf("from %f to %f = %f\n", a, b, totalInt); double costTime = (double)(EndTime - BeginTime) / CLK_TCK; printf("MPI:%fms\n", costTime); } MPI_Finalize(); return 0;}2.2 pthread实现void* Pthreadboot(void *parm){//使用pthread threadParm_t *p = (threadParm_t *) parm; double h, x, my_result ; double local_a , local_b ; int i, local_n ; int my_rank = p->threadId; // printf("rank:%d",my_rank); h = (b-a)/n; local_n = n/thread_count ; local_a = a + my_rank*local_n*h; local_b = local_a + local_n*h; my_result=Trap(local_a,local_b,local_n,h); pthread_mutex_lock(&mutex); global_result += my_result; pthread_mutex_unlock(&mutex); pthread_exit(NULL);}//...//main函数中: //pthread pthread_t thread[thread_count]; threadParm_t threadParm[thread_count]; pthread_mutex_init(&mutex,NULL); clock_t BeginTime1 = clock(); for (int i = 0; i < thread_count; i++) { threadParm[i].threadId = i; pthread_create(&thread[i], NULL, Pthreadboot, (void *)&threadParm[i]); } for (int i = 0; i < thread_count; i++) { pthread_join(thread[i], NULL); } clock_t EndTime1 = clock(); double costTime1 = (double)(EndTime1 - BeginTime1) / CLK_TCK; printf("n = %d,thread_count=%d\n", n,thread_count); printf("from %f to %f = %f\n", a, b, global_result);2.3 openmp实现void OpenMPboot(){ double h, x, my_result ; double local_a , local_b ; int i, local_n ; int my_rank = omp_get_thread_num(); int thread_count = omp_get_num_threads(); h = (b-a)/n; local_n = n/thread_count ; local_a = a + my_rank*local_n*h; local_b = local_a + local_n*h; my_result=Trap(local_a,local_b,local_n,h); # pragma omp critical global_result += my_result ;}//...//main函数中://openmp clock_t BeginTime2 = clock(); # pragma omp parallel num_threads(thread_count) OpenMPboot(); clock_t EndTime2 = clock(); double costTime2 = (double)(EndTime2 - BeginTime2) / CLK_TCK; printf("n = %d,thread_count=%d\n", n,thread_count); printf("from %f to %f = %f\n", a, b, global_result);2.4 串行实现void Serialboot(){ //串行 clock_t BeginTime = clock(); double h = (b - a) / n; double result = Trap(a, b, n, h); printf("n = %d\n", n); printf("from %f to %f = %f\n", a, b, result); clock_t EndTime = clock(); double costTime = (double)(EndTime - BeginTime) / CLK_TCK; // printf("Serial:%fms\n", costTime); printf(":%f\n", costTime);}三、实验结果分析 实验环境:操作系统linux,鲲鹏通用计算增强型 | kc1.large.2 | 2vCPUs | 4GiB实验数据:f(x)=x*x*x线程数: 6;边界:a=2, b=10;计时方法:<time.h>的clock实验设计与结果:运行结果实例: 实验结果:算法/规模100050002500012500062500031250001562500078125000MPI7.4947.517.4747.5257.73115.4320.74687.664串行0.0070.0330.1620.8094.04320.154100.56502.307Pthread0.390.2930.5451.0694.29620.474101.488503.605OpenMP0.2170.1370.3740.9134.11920.297101.455504.682结果分析:在本实验环境、实验数据条件下,可见openmp、串行、Pthread运行时间相差不大;在规模较小时,MPI时间效率比其他三种算法低,运行时间长,随着规模增大,MPI算法能稳定在7ms左右,而其他三种算法运行时间随规模增大而增加;当规模达到百万及以上数量级时,MPI编程运行时间明显比其他三种要少,随着规模增大,运行时间增大,但也明显比其他三种缓慢。单从本实验的表现来看,MPI的执行效率相对来说更高一点,可能是因为多台主机多个进程多个CPU确实会更快一些。备注:1.基础配置:2.网络配置:3.makefileEXECS=trap_mpiMPICC?=mpiccall: ${EXECS}trap_mpi: trap.c sudo ${MPICC} -o trap_mpi trap.c -pthread -fopenmpclean: sudo rm -f ${EXECS}4.configecs-hw-0001:2ecs-hw-0002:2ecs-hw-0003:2
-
标记内容:共享型负载均衡 公网 既支持公网流量请求又支持私网流量请求。 ELB绑定弹性公网IP,支持公网流量请求的,称为公网负载均衡器。 ELB绑定私网IP,支持私网流量请求的,称为私网负载均衡器。 私网 ELB绑定私网IP,支持私网流量请求的,称为私网负载均衡器。文档反馈:描述重复、冲突。 页面链接:https://support.huaweicloud.com/productdesc-elb/elb_pro_01_0004.html
-
步骤三:设置Nginx安全级别 查看应用镜像是否正常启动,正常启动后再执行步骤2。 待云耀云服务器L实例处于“运行中”状态后,单击资源卡片。 在资源管理界面“镜像信息”区域单击“管理”进入管理界面,检查应用镜像是否正常启动。 没找到 页面链接:https://support.huaweicloud.com/bestpractice-hcss/practice_wp_0002.html
-
标记内容:OU文档反馈:为啥同一篇文档 会出现OU和组织单元,建议这里修改为组织单元,保存文本一致。 页面链接:https://support.huaweicloud.com/productdesc-organizations/org_01_0015.html
上滑加载中
推荐直播
-
华为云码道-AI时代应用开发利器2026/03/18 周三 19:00-20:00
童得力,华为云开发者生态运营总监/姚圣伟,华为云HCDE开发者专家
本次直播由华为专家带你实战应用开发,看华为云码道(CodeArts)代码智能体如何在AI时代让你的创意应用快速落地。更有华为云HCDE开发者专家带你用码道玩转JiuwenClaw,让小艺成为你的AI助理。
回顾中 -
Skill 构建 × 智能创作:基于华为云码道的 AI 内容生产提效方案2026/03/25 周三 19:00-20:00
余伟,华为云软件研发工程师/万邵业(万少),华为云HCDE开发者专家
本次直播带来两大实战:华为云码道 Skill-Creator 手把手搭建专属知识库 Skill;如何用码道提效 OpenClaw 小说文本,打造从大纲到成稿的 AI 原创小说全链路。技术干货 + OPC创作思路,一次讲透!
回顾中 -
码道新技能,AI 新生产力——从自动视频生成到开源项目解析2026/04/08 周三 19:00-21:00
童得力-华为云开发者生态运营总监/何文强-无人机企业AI提效负责人
本次华为云码道 Skill 实战活动,聚焦两大 AI 开发场景:通过实战教学,带你打造 AI 编程自动生成视频 Skill,并实现对 GitHub 热门开源项目的智能知识抽取,手把手掌握 Skill 开发全流程,用 AI 提升研发效率与内容生产力。
即将直播
热门标签