Kubernetes/K8S 入门学习笔记
[Updating…] 怎么会是呢 似乎工作内容有涉及到 Kubernetes,所以先开始看一下 在网上大致了解了一下,似乎学习 Kubernetes 的最佳方式是通过实践。反正万事开头难,先简单入门一下,以后看情况具体深入学习 GeekHour - Kubernetes一小时轻松入门 Kubernetes 练习手册 1. Kubernetes 是什么 Kubernetes 是一个开源的容器编排引擎,它可以自动化地部署、扩展和操作容器化应用程序(例如 Docker 容器)。Kubernetes 是由 Google 设计并捐赠给 Cloud Native Computing Foundation(CNCF)管理的。 2. Kubernetes 组件 Kubernetes 由一组核心组件构成 node:集群中的一个节点,可以是物理机,也可以是虚拟机 pod:是 Kubernetes 的最小工作单元,是一个或多个容器的集合,创建了容易的运行环境,共享网络和存储资源 其中一个 node 上可以有多个 pod,一个 pod 里可以有多个容器(但通常只有一个,除非 pod...
高性能计算并行宇宙:OpenMP 初探
也是 CS149 的准备内容,这次是 OpenMP 的初探。 1 OpenMP Introduction OpenMP:跨平台、多语言(C、C++、Fortran) 、可扩展的并行计算 API,使得开发者可以轻松利用多核 CPU 的并行计算能力,加速程序的运行。 只需要在编译时加上 -fopenmp 选项即可开启 OpenMP 支持。 在程序中插入 #pragma omp 指令,编译器就会根据指令自动生成多线程代码,例如一个简单例子: 1printf("Hello, World!\n"); 在前面加上一句: 12#pragma omp parallelprintf("Hello, World!\n"); 程序就会根据硬件情况,在多个线程中执行 printf 语句。 OpenMP 也可以用于循环并行化,例如: 12#pragma omp parallel forfor (int i = 0; i < 10; i++) { /* do something */ } 2 OpenMP Usage OpenMP...
CS149 Programming Assignment 5 - Big Graph Processing
Stanford CS149 (Fall 2023) Parallel Computing Optional Programming Assignment 5: Big Graph Processing in OpenMP Github repo Part 1: Parallel “Top Down” Breadth-First Search (20 points) 使用 OpenMP 加速从起点开始的 BFS 看了一下给出的代码,就是维护两层队列,一层是当前层,一层是下一层,那么能够加速的就是每一次向下一层扩展的过程。 这里选择对第一层 for 循环进行并行化,由于每个点的边数不一样,所以选择动态的调度方式,并且每个线程都有自己的 buffer,最后再合并。 提示中说到了部分情况可以避免 CAS 操作,也就是提前判断一下 1234567891011121314151617181920212223242526272829void top_down_step(Graph g, vertex_set *frontier, vertex_set *new_frontier, ...
CS149 Programming Assignment 4 - Chat149 - A Flash Attention Transformer DNN
Stanford CS149 (Fall 2023) Parallel Computing Programming Assignment 4: Chat149 - A Flash Attention Transformer DNN Github repo 环境配置 妈的,外校学生又没有服务器,只能自己配环境,又不给 requirements.txt,装个 torch 因为版本问题整了半天,翻 issue 才知道要装 2.1.2 版本,至于其它 module 就一直编译靠报错找依赖( Warm-Up: Accessing Tensors (3 Points) 简单来说就是实现 4D-Tensor(类似四维数组)和一维数组之间的转换,秒 (然而其实这个实现性能上还稍微有点问题,在 Part2 才查出来) 1234567891011inline float fourDimRead(std::vector<float> &tensor, int &x, int &y, int &z, int...
高性能计算并行宇宙:CUDA 初探
写 CS149 需要用到 CUDA,所以先简单学习一下 CUDA 的基础知识。 1 CUDA Introduction CUDA(Compute Unified Device Architecture)是 NVIDIA 推出的并行计算平台和编程模型,使得开发者可以利用 GPU 的并行计算能力,加速程序的运行。 要想写好 CUDA,首先要了解 CUDA 的编程模型。在 CUDA 中通常将 CPU 及内存称为主机(Host),GPU 和显存称为设备(Device),Host 通过调用函数(Kernel)将任务分配给 Device 执行。 从体系结构上看,CPU 和 GPU 的区别在于:CPU 有少量“大核”,适合串行任务,GPU 有大量“小核”,适合并行任务,下图展示了 CPU 和 GPU 的体系结构差异: 接下来看看 GPU 的体系结构:每一次 Kernel 的调用都会启动大量的 CUDA Thread,一次 Kernel 调用中的所有 Thread 称为 Grid,Grid 中的 CUDA Thread 被划分为若干个 Block,Block 中的 CUDA Thread...
CS149 Programming Assignment 3 - A Simple Renderer in CUDA
Stanford CS149 (Fall 2023) Parallel Computing Programming Assignment 3: A Simple Renderer in CUDA Github repo 环境配置 因为这次的 PA 要用到 CUDA,所以需要电脑有 NVIDIA 显卡,并且 Compute Capability >= 7.5(20 代及以上显卡) 我是用的 WSL,显卡驱动理论上只要外部环境装好了新版的 NVIDIA 驱动 WSL 就能直接用了,可以用 nvidia-smi 命令查看是否能识别到显卡。 123456789101112131415161718192021~ » nvidia-smi mizukicry@S-TerminalMon Apr 8 09:49:30...
CS149 Programming Assignment 2 - Scheduling Task Graphs on a Multi-Core CPU
Stanford CS149 (Fall 2023) Parallel Computing Programming Assignment 2: Scheduling Task Graphs on a Multi-Core CPU Github repo Part A: Synchronous Bulk Task Launch 创建三种不同的 Task execution engine,难点在于看懂要求 Step 1: Move to a Parallel Task System 普通多线程版本,感觉动态分配任务的话有点浪费资源,不过静态分配如果任务运行时间不同就有可能效果不好 因为多线程之间有竞争,所以需要加锁或者原子操作 123456789101112131415161718192021222324252627282930313233343536373839class TaskSystemParallelSpawn : public ITaskSystem {private: int num_threads_; std::thread...
CS149 Programming Assignment 1 - Analyzing Parallel Program Performance on a Quad-Core CPU
Stanford CS149 (Fall 2023) Parallel Computing Programming Assignment 1: Analyzing Parallel Program Performance on a Quad-Core CPU Github repo 环境配置 鉴于应该都不是 Stanford 的学生,只能本地配置环境了。我使用的是 WSL 虚拟环境,Windows 大概是不能直接用的 12345678910111213141516171819202122~ » neofetch mizukicry@S-Terminal .-/+oossssoo+/-. mizukicry@S-Terminal `:+ssssssssssssssssss+:` -------------------- ...
Stanford CS149 PARALLEL COMPUTING Notes (Fall 2023) / CMU15-418
Stanford CS149 Parallel Computing: 斯坦福一门并行计算的课,最近不知道该做些什么,感觉要是继续颓下去就废了。打算学一学这门课,在这里记一下看 Slides 做的笔记 课程主页:Fall 2023 网上似乎没有 CS149 的视频,这门课前身是 CMU 的 15-418,可以看这门课的视频 Lecture 1: Why Parallelism? Why Efficiency? 2024/3/25 目标:并行处理加速程序计算 优化:减少线程之间通信 / 同步,线程过多将严重影响性能,平均分配任务 Fast != Efficient,考虑硬件消耗性价比 利用硬件中针对专门指令的处理单元 指令级并行 ILP 内存定义:一段连续的地址空间,通过地址定位其中的每一个字节,访问内存通常使得 CPU 等待影响性能 超标量 CPU:每个核心有多个逻辑单元(ALU),可以一个周期同时执行多条指令(若指令间相互独立) Cache:将部分内存缓存到 CPU 自带的高速缓存中,若缓存命中则不需要访问内存,通常已 Cache Line...
PNA Rust Project 1: The Rust toolbox
Part 1: Make the tests compile 配置好之后尝试运行 cargo test,发现编译错误: 12345error[E0433]: failed to resolve: use of undeclared crate or module `assert_cmd` --> tests\tests.rs:1:5 |1 | use assert_cmd::prelude::*; | ^^^^^^^^^^ use of undeclared crate or module `assert_cmd` 显然是缺少相应的 crate,在 cargo.toml 里面加上。 123[dev-dependencies]assert_cmd = "0.11.0"predicates = "1.0.0" dev-dependencies 和 dependencies 的区别可以看官方文档 再次运行 cargo test,发现编译错误: 12345error[E0432]: unresolved import...