并行计算
結城
渴望着美好结局,却没能成为自己。
展开
-
并行计算mpi实现矩阵转置,mpi分布式编程简介,点对点通信方法
昨天遇到了一件很不愉快的事情,啧,让我深深意识到mainstream的强大。说白了,还是自己不够强,没能力在别人制定的规则里做出一些什么,一味的遵守规则是否真的正确呢?话是这么说,真的有能力在别人的规则下反抗吗。总之,变强才是真理。好了这次叫我们来看看什么是mpi。那好了,让我们来以一张图来看看它到底是个什么东西吧。这里其实我们不难发现,对于串行而言,内存与CPU处理器之间是相连的,但是,对于mpi而言,对每一个处理器,都是有各自的内存,不过它们之间可以通过网络的方式连接起来,构成共享。再来原创 2020-05-30 11:16:24 · 3103 阅读 · 9 评论 -
并行计算多线程实现矩阵转置,直角划分法
书接上上文串行算法的矩阵转置以及上文块棋盘法多线程的矩阵转置我们来介绍介绍多线程实现矩阵转置的另一种方法,直角划分法。那么我们就一起来看看如何做到的吧。首先,我们要知道什么是直角。Q:什么是直角呢?A:??不是吧阿sir,直角你都不知道,不是吧不是吧。没错,就是我们想象中的那个直角,这道题大家都在第一层,没有第二层,更没有第五层。那么就显而易见了。#include <pthread.h>#include <stdlib.h>#include <stdio.h原创 2020-05-16 17:01:46 · 2705 阅读 · 2 评论 -
并行计算多线程块棋盘划分法实现矩阵转置
书接上文,我们提到了串行算法的矩阵转置接下来我们来看一看如何用并行程序来对矩阵进行转置,想法有两个,这里先介绍第一种,块棋盘划分法。Q:那么什么是块棋盘划分法呢?A:yo~ yo~你看这个矩阵他又长又宽,就像这个棋盘他又大又方(吴亦凡先生因言语激烈被踢出聊天室)说实话这个yoyo让我想起了藤原书记。。。没错,我们想想,这n*n的矩阵,确实是像个棋盘,那我们想到了,可以把他拆分成一个一个子块,然后子块之间先转换,然后子块内部自己再转置,这岂不是妙哉?!那么我们一起来看看程序吧!#includ原创 2020-05-16 16:28:12 · 2785 阅读 · 1 评论 -
串行算法实现矩阵转置
来聊一聊,串行算法逆置矩阵是如何办到的。首先我们要建立一个矩阵了,不然谈何转置。OK我们来一起看一看,如何建立一个矩阵,其实有很多种方法啦,这里我们来看一个自由度比较高的吧,动态创建并释放一个二维数组。int **matrix;//声明一个二维数组void init(int n){ //首先,matrix类型为int **,我们想建立一个n*n的数组,自然要为它分配n个int*的大小空间 matrix = (int **)malloc(n * sizeof(int *)); fo原创 2020-05-16 15:57:37 · 1311 阅读 · 1 评论 -
并行计算多线程幂级数计算pi
使用多线程,幂级数方法来计算pi,方法如下。这样就很简单了,只要把握好线程函数的计算范围即可了。完整程序如下//// main.cpp// pi//// Created by Yuuki on 2020/4/29.// Copyright © 2020 Yuuki. All rights reserved.//#include <iostream>#include <pthread.h>#include <iomanip>#inclu原创 2020-05-12 14:02:50 · 2058 阅读 · 0 评论 -
并行计算多线程概率法蒙特卡洛法求pi
这次我们来介绍一下求pi值的第二种方法,概率法,也叫蒙特卡洛方法。这个程序的原理十分简单,如下图。然后我们可以发现,其实我们想要的答案已经显而易见了。如果是串行的程序,似乎也没什么好说的。随机生成n个x坐标y坐标均小于1的点。然后统计具体有多少个点落在圆弧范围内即可。但聪明如我发现了事情不会这么简单经大佬提醒,我发现这样子实现并行程序的速度极慢,甚至是不像一个并行程序,因此我们来探究一下事情可能发生在哪里。没错,思来想去,也就只有rand函数可能出了一些问题,那么让我们来看看rand()函数的原创 2020-05-12 12:10:27 · 6833 阅读 · 4 评论 -
并行计算多线程积分法求pi
@TOC并行计算多线程积分法求pi第一次写博客,有点小紧张。程序通过多线程积分方法求pi值//线程入口函数void *thread_function(void *arg){ int id = *(int *)arg;//arg是传入线程的参数 int piece = N/T; int start = id*piece; int end = start + piece; double local_pi = 0.0; for(int i=start;i&l原创 2020-05-11 15:44:31 · 4762 阅读 · 7 评论