C++ - MPI 学习记录
什么是 MPIMPI 全名叫 Message Passing Interface,即信息传递接口,作用是可以通过 MPI 可以在不同进程间传递消息,从而可以并行地处理任务,即进行并行计算。需要注意的是,尽管我们偶尔会说使用 MPI 编写了某某可执行程序,但是 MPI 其实只是一个库,而不是一种语言,其可以被 Fortran、C、C++、Python 调用
说到并行,为了避免在概念上混淆,那我们又不得不再提一下串行、并发、同步、异步这几个容易混淆的概念
串行:指的是在执行多个任务时,各个任务按顺序执行,完成一个后才能进行下一个
并行:指的是多个任务可以同时执行
并发:并发编程又叫多线程编程,指的是在执行多个任务时,因为资源不够所以采用一个 CPU 轮换着进行这些任务,从而提高任务效率,因为切换任务的速度很快,所以看上去是多个任务一起进行
同步:同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。例如消息发送方必须等待消息接收方接受完才能继续执行后续任务
异步:异步就是彼此独立,在等待某件事的过程中继续做自己的事。例如消息发送方再发送完一条消息后不必等待接收方的接收即可继续执行 ...
过往一年学习的感悟
一些过往半年学习的感悟敬爱的邢老师:
您好!
老师,自上次三四月份之后已经有半年没见了,上次见面时我们聊起人工智能,您说:目前我对人工智能的理解也不算很多,回头还需要多去学习了解。返校后的这半年,我看了一些国际内外很出名的人工智能教材、了解并动手实现了很多经典的人工智能模型、翻阅过两三篇有划时代意义的人工智能论文。过往半年我有机会跟广东省气象局还有我们学校的一些科研研究室有过交流,这让我对当下人工智能从理论概念走入实际应用有了更多的认识。在此有一些经历与看法想要与您分享。
首先我想向老师您按我现在的认识介绍一下人工智能,当下的人工智能其实就是一个复杂的数学运算机器,不同的人工智能模型有不同的计算方式,但有一点是完全相同的 —— 输入和输出都只能是数字。目前我们能了解到的人工智能可能会涉及到图片、音频、文字……的处理其实本质上都是对数字的处理。计算机用数字来表示像素,一张图片可以被拆分成很多的像素点,所以图片可以用数字表示;音频也可以用数字来表示波形;文字也可以用数字来做映射表示。当我们把需要处理的媒介全部转换成数字后,人工智能模型就可以对这些数字做数学计算,最后得到输出。
人工智能模型 ...
k8s - 在 CentOS7 虚拟机上部署 k8s 集群
环境准备本文服务器的公网IP:192.168.56.101本文一共使用三台 CentOS7 虚拟机
OS version: CentOS 7
CPU Architecture: x86_64/amd64
K8s version: v1.23.17
Docker version: 20.10.23
CentOS7 虚拟机配置网络
先检查是否开启了网络
12ping bilibili.comip addr show
设置网关 修改对应配置文件里的内容 ONBOOT=yes
123cd /etc/sysconfig/network-scriptsvi ipcfg-enp0s3vi ipcfg-enp0s8
配置 DNS 先修改主机名
123hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-node1hostnamectl set-hostname k8s-node2
修改 DNS 里的映射关系
12345cat >/etc/hosts <<EOF ...
Rust - Rustlings Write Up
写在前面最近学长推荐我去学一下 Rust,考虑了一下,决定从 Rust 官方的学习文档 —— 也就是 Rustlings 入手,我一共用了两天的时间来完成 Rustlings,下面是我的题解(截至 2023.9.2)
Rust 给我的感觉就是生态好,打包方便,有便捷的包管理器;但是 Rust 的语法是非常严苛,通过严格的语法规范来减少程序运行时内存错误的发生
Rustlingsintrointro1.rs1234567891011121314151617181920212223242526272829303132333435363738394041// intro1.rs//// About this `I AM NOT DONE` thing:// We sometimes encourage you to keep trying things on a given exercise, even// after you already figured it out. If you got everything working and feel// ready for the next ...
OS - 16-bit 操作系统 TKSKOS 诞生记
写在前面此时此刻,2023 年 8 月 29 日,我一个人坐在中山大学南实验楼 D502 Matrix 实验室里
在我高中还不知天高地厚的时候,我曾荒诞地认为微软开发的 Windows 系统不过如此;而自我步入大学生活以来,真正地接触过计算机技术后,才愈发感受到面前这七八十年计算机大厦的坚不可摧和绝对统治。我尝试追逐前人的步伐,用 C++ 实现一个操作系统便是其中的一步
寒假时期我便已读完了 《深入理解计算机系统》 ,又称 CSAPP ,这是一本神书!我在 CSAPP 里学到了汇编、CPU 原理等一大堆很重要的前置概念。再然后,我翻阅到我的一位学长 —— GZTime 他用 Rust 实现 GGOS 的纪念博客,我逐渐有了用编写属于自己的操作系统的企划,并且大致敲定了是用 C++ 来完成,命名为 TKSKOS 。2023 年 4 月,因为一些意外我的生活天翻地覆;某一天的高等数学课,我无聊时翻阅知乎,意外地翻到一篇中大学姐的亲手实现操作系统的记录 —— 这对我影响很深,那段时间我满脑子都是一个全新的企划。紧接着我入手了一本 《操作系统概念》 ,开始阅读里面的知识,从进程调度一直到虚拟内 ...
Pytorch - 基于循环神经网络的正弦函数预测模型训练与检测
小白劝退预告
仅简单介绍思路,没有用作教程的打算,如果读者没有机器学习基础、循环神经网络基础或Pytorch基础 —— 会很不友好的(
Pytorch实现神经网络Pytorch 准备正弦函数数据集其中超参数的含义如下:1. input_size: 输入预测的特征值数目2. output_size: 最终输出的预测数值数目3. hidden_size: 循环神经元的特征数目4. batch_size: 一次训练批量数目5. num_hidden: 循环层神经元的层数6. length_num: 数据集的数据数目
12345678910111213141516input_size = 1output_size = 1hidden_size = 16batch_size = 49num_hidden = 1length_num = 50X = torch.linspace(0, 10, length_num)Y = torch.sin(X)plt.scatter(X, Y)plt.show()data0_48 = Y[0:49].reshape(num_hidden, batch_s ...
现代深度卷积神经网络架构的代码实现
小白劝退预告
仅简单介绍思路,没有用作教程的打算,如果读者没有深度学习基础、计算机视觉基础、Pytorch基础 —— 会很不友好的(
前置准备我们先准备好对应的第三方模块包和使用函数
1234567import torchfrom torch import nn, optimimport torch.nn.functional as Ffrom torchvision import datasets, transformsfrom torch.utils.data import DataLoaderimport matplotlib.pyplot as pltfrom time import perf_counter
我们先写好一个展示神经网络结构并输出张量形状的函数showModel 通过递归调用,将所有 Sequential 类展开,并以此输出各层的张量大小showNet 通过输入模型,并指定张量的大小,实现了测试函数的封装
1234567891011121314def showModel(model, inputs): for layer in model: ...
AI-Web-APP - 基于卷积神经网络和Flask框架开发一个手写数字识别的Web应用
小白劝退预告
仅简单介绍思路,没有用作教程的打算,如果读者没有深度学习基础、计算机视觉基础、Pytorch基础、前后端基础和Flask基础 —— 会很不友好的(
项目架构一个手写数字识别的Web应用可以分为以下几个部分:
神经网络:一个输入 (28, 28) 的矩阵后得到一个输出的神经网络,用于识别矩阵对应的数字
前端页面:为用户提供可交互的界面,与用户发生交互,并将对应的手写图片发送给后端
后端处理:接收前端提供的手写图片,并对手写图片进行矩阵化处理,经过神经网络识别后将结果发送给前端
在本项目中,主要用到以下的技术栈:
Pytorch 实现并训练的神经网络,通过 CUDA 加速计算
使用 Pytorch-MNIST 数据集
用 Flask 来构建后端,通过 OpenCV-Python 来预处理图片数据
原生前端,通过 JavaScript 的 Ajax 请求来与后端交换数据
神经网络识别数字的过程交给神经网络来操作
训练神经网络一个简单的卷积神经网络模型,先进行三次卷积操作,最后通过全连接到十个输出,分别对应数字 0 - 9 的的概率比重神经网络结构如下: ...
C++ - 在windows环境下,基于面向对象、网络编程和并发编程封装一个服务器框架
小白劝退预告
仅简单介绍思路,没有用作教程的打算,如果读者没有C++编程基础、计算机网络基础、网络编程基础或并发编程基础 —— 会很不友好的(
Web服务器概述Web服务器概念服务器是一种软件应用程序,用于处理客户端发送的HTTP请求并向客户端发送对应的响应。它有时通过使用网络协议(如HTTP)来传输和交换Web资源(如HTML文档、图像、视频等)服务器是当代互联网不可分割的一部分,倘若没有服务器,便无谈上网冲浪; 每次你打开一个网页,背后的Web服务器时时刻刻都在处理你的请求,并发送给你需要的文本数据和图片; 当你打游戏时,科技公司的服务器在马不停蹄地为你计算数据
Web服务器的代码思路在C++中实现一个简单的服务器,可以按照以下思路进行:
创建服务器套接字:使用C++的网络编程库,如Linux环境下的 <sys/socket.h> 和 <netinet/in.h> 等、windows环境下载Wsa等,创建一个服务器套接字
绑定服务器地址和端口:将服务器套接字绑定到指定的IP地址和端口上,以便监听客户端请求
监听连接请求:使用li ...
Pytorch - 基于卷积神经网络的CIFAR-10数据集分类模型训练与检测
小白劝退预告
仅简单介绍思路,没有用作教程的打算,如果读者没有机器学习基础、计算机视觉基础或Pytorch基础 —— 会很不友好的(
CIFAR-10数据集介绍CIFAR-10数据集的内容
CIFAR10数据集共有60000个样本,每个样本都是一张32*32像素的RGB图像(彩色图像),每个RGB图像又必定分为3个通道(R通道、G通道、B通道)。这60000个样本被分成了50000个训练样本和10000个测试样本
CIFAR10数据集是用来监督学习训练的,那么每个样本就一定都配备了一个标签值(用来区分这个样本是什么),不同类别的物体用不同的标签值,CIFAR10中有10类物体,标签值分别按照0~9来区分,他们分别是飞机(airplane)、汽车(automobile)、鸟(bird)、猫(cat)、鹿(deer)、狗(dog)、青蛙(frog)、马(horse)、船(ship)和卡车(truck)
CIFAR10数据集的内容,如图所示
总的来说,CIFAR-10数据集有以下优势:
图片像素小,处理快,便于入门
数据量大,且下载便利
已提前做好数据标注,提供专用API, ...