C语言基于MPI并行计算矩阵的乘法

矩阵的计算是并行计算里的一个很重要的问题。矩阵是一种网格化的数据,是一组同类型数值的集合,矩阵的出现,使得代数系统更完善,对各种实际问题的求解产生了巨大的作用。但是其庞大的计算量往往令人生畏,稍微大一点的矩阵,计算就变得非常繁琐,不仅仅是人,而且串行计算的程序,也同样会变得非常缓慢。这时我们就需要并行计算来解决这些问题了。

本文使用分治思想,利用主从节点方式,实现了一个并行计算的矩阵相乘程序,并将结果跟串行程序做了对比,计算了其加速比。

继续阅读“C语言基于MPI并行计算矩阵的乘法”

几种排序算法的实现和性能比较

在各种各样的排序任务中,不同的算法有着不同的效果和性能,比如稳定性、时间开销、空间开销等。本文中实现了5种排序算法:
插入排序(Insertion Sort,IS)、
自顶向下归并排序(Top-down Mergesort,TDM)、
自底向上归并排序(Bottom-up Mergesort,BUM)、
随机快速排序(Random Quicksort,RQ)和
Dijktra 3路划分快速排序(Quicksortwith Dijkstra 3-way Partition,QD3P),
并且在同一台普通计算机上,针对不同输入规模的数据进行了测试,对比了上述排序算法的时间性能。

继续阅读“几种排序算法的实现和性能比较”

组合数学实现关于购票问题的求解以及多种算法实现的性能比较

  】程序设计中有一类问题是购票问题,在整钱找零钱时怎样的队伍排列可以使得售票处不会出现找不开零钱的局面。本文将采用五种算法分析这道题目,并对各种算法的效率加以比较。从中可以看出组合数学理论在算法优化方面起到的显著作用。

继续阅读“组合数学实现关于购票问题的求解以及多种算法实现的性能比较”

深度学习:基于keras的mnist手写数字识别

在深度学习方面,Keras提供了这样一个能够非常方便地搭建神经网络的工具,而且很容易快速上手。mnist手写数字识别是神经网络入门后的一个非常容易上手做的一个程序,尤其是在使用了深度学习框架后,不论是DNN还是CNN,都很简单。这篇文章里,我将介绍一下,使用keras实现mnist手写数字识别的程序。通过这篇文章,你应该就能够学会如何通过keras搭建自己的神经网络了。

继续阅读“深度学习:基于keras的mnist手写数字识别”

使用C语言和Python基于MPI并行计算PI的值

圆周率PI是一个很神奇的数字,自古以来,包括数学家在内的很多人都曾使用过各种各样的算法去估算PI的真实值,并且都取得了一定的成就。古巴比伦人使用3.125作为PI的近似值,约公元前1700年的古埃及人则提出PI=3.1604,中国的祖冲之(430-501)则使用355/113作为近似值,使得PI值精确到了7位数。随着计算机的问世,以及科学技术发展的需要,PI的近似值目前精确位数早已突破万亿位。PI值除了有其每一位、每两位、每三位都符合均匀分布的统计规律特性之外,还可以用来检测计算机硬件的可靠性,而且,也可以用来入门并行计算。

继续阅读“使用C语言和Python基于MPI并行计算PI的值”

深度学习:欠拟合问题的几种解决方案

我最近做深度学习在连续中文语音识别方向的应用的时候,根据一些论文和网上一些公开代码和模型结构,设计了一个神经网络的模型。但是在训练的时候,就首先遇到了很让人头疼的欠拟合问题。神经网络欠拟合的特征是,训练了很长时间,但是在训练集上,loss值仍然很大甚至与初始值没有太大区别,而且精确度也很低,几乎接近于0,在测试集上亦如此。且先不管模型结构配置的优劣,就欠拟合问题来说,需要从如下方面来着手。

继续阅读“深度学习:欠拟合问题的几种解决方案”

并行计算入门:mpich的安装与测试

在很多应用场景下,我们普遍需要进行并行计算,而不仅仅是并发。举个例子,比如机器学习中,我们常常使用GPU来并行训练神经网络;在例如Hadoop这种大数据计算平台等分布式系统中,不同的计算机之间,程序的执行也是并行的;同一台计算机中,多核处理器的不同CPU内核之间的计算也是并行的,系统可以此来均衡负载以及提高速度。那么,当我们有需要的时候,也可自己通过编写并行程序来进行计算,以实现我们所需要的功能,MPI就是这样的一个框架。

继续阅读“并行计算入门:mpich的安装与测试”

进程间通信的五种方式原理及代码实现

在计算机系统中,进程之间有时需要进行数据的通信,但是不同进程之间的数据存储是相互隔离的,每一个进程只能访问自己占有的数据,这时候,我们就需要使用用于进程间通信的机制了。不过,除了套接字外,进程间通信的前提是两进程必须是父子进程关系,没有这种关系的进程间不能直接进行通信,而是需要利用其共同的父进程进行信息的中转。文本为计算机专业学生和从业者必学的基础知识。

进程间有以下几种通信机制:

继续阅读“进程间通信的五种方式原理及代码实现”

TensorFlow学习笔记:相关API

本文为我学习著名机器学习框架TensorFlow的过程中,对我通过一些教学资料所学到知识的笔记。本文也许看起来会跟一些教程有些相似,这实为我阅读观看实践后,对其内容进行的记录。

鉴于相关内容较多,我将在接下来对本文进行持续更新,直到本文所应当涉及的内容范围全部覆盖为止。

(20180317 最后更新)

继续阅读“TensorFlow学习笔记:相关API”

谷歌免费开放机器学习课程,完美支持中文

今天早上,我一打开手机电脑,朋友圈和一些新闻中传遍了一则消息,谷歌免费开放了其开发者中心里面的机器学习和人工智能的学习课程。该课程全是干货,约15小时,25节课程,还有大量的练习。而且,该课程支持中文,这样一来,妈妈再也不用担心我因为英语不好而听不懂了。^_^

继续阅读“谷歌免费开放机器学习课程,完美支持中文”