2.1.3 如何用Go模拟CPU
如何用Go模拟CPU 蒙卓 华为 – 2012实验室 工程师 成为盘古? 让这个世界里面的人(程序)无法察觉 这个世界是创造出来的 目录 • 计算机的演化历史 – 硬件计算到冯诺伊曼架构 • 构建虚拟世界 – MOS 6502 • 控制单元(control unit) • 运算逻辑单元(arithmetic logic unit) • 6502汇编器与链接器 • 未来目标 1970年程序员 1970年程序员 CPU 80KHz 单核 内存 64KB 手编磁芯 老娘把你送上月球 2021年程序员 CPU 2,400,000KHz 4核 内存 8,000,000KB DDR3 呜呜 App内存不足 外卖下不了单 计算机的演化历史 • 一部偷懒的历史 • 硬件“计算机”时代 • 不擅长计算和记忆的人使用工具帮助计算:算盘,计算尺,手摇计算器 • 硬件计算机改进支持的算法,需要变更或重新发明整个硬件,比如让算 硬件过于复杂 • 软件基于操作系统等复杂概念 • 真的快且便宜 Go模拟CPU • 如何用Go实现冯诺伊曼架构CPU? • 简单:一个循环+一个大数组 读取当前指令 执行指令 下一条指令 模拟目标 – MOS 6502 • 诞生于1975年 • MOS 6502应用范围广 • 资料多且易获得 • 简单、容易实现的现代CPU MOS 6502简介 • 8位,变长ISA(CISC) • 中断(NMI,IRQ)0 码力 | 42 页 | 7.10 MB | 1 年前3Bridging the Gap: Writing Portable Programs for CPU and GPU
1/66Bridging the Gap: Writing Portable Programs for CPU and GPU using CUDA Thomas Mejstrik Sebastian Woblistin 2/66Content 1 Motivation Audience etc.. Cuda crash course Quiz time 2 Patterns Oldschool afterwards7/66 Motivation Patterns The dark path Cuda proposal Thank you Why write programs for CPU and GPU Difference CPU/GPU Algorithms are designed differently Latency/Throughput Memory bandwidth Number of talk7/66 Motivation Patterns The dark path Cuda proposal Thank you Why write programs for CPU and GPU Difference CPU/GPU Why it makes sense? Library/Framework developers Embarrassingly parallel algorithms0 码力 | 124 页 | 4.10 MB | 5 月前3How and When You Should Measure CPU Overhead of eBPF Programs
How and When You Should Measure CPU Overhead of eBPF Programs Bryce Kahle, Datadog October 28, 2020 Why should I profile eBPF programs? CI variance tracking Tools kernel.bpf_stats_enabled kernel0 码力 | 20 页 | 2.04 MB | 1 年前3OpenShift Container Platform 4.10 可伸缩性和性能
11. 移动路由器 1.12. 基础架构节点大小 1.13. 其他资源 第 第 2 章 章 IBM Z 和 和 LINUXONE 环 环境的推荐主机 境的推荐主机实 实践 践 2.1. 管理 CPU 过量使用 2.2. 禁用透明巨页 2.3. 使用 RECEIVE FLOW STEERING(RFS)提高网络性能 2.4. 选择您的网络设置 2.5. 确保 Z/VM 上使用 HYPERPAV 验证是否应用了 TUNED 配置集 4.5. 自定义调整规格 4.6. 自定义调整示例 4.7. 支持的 TUNED 守护进程插件 第 第 5 章 章 使用 使用 CPU MANAGER 和拓扑管理器 和拓扑管理器 5.1. 设置 CPU MANAGER 5.2. 拓扑管理器策略 5.3. 设置拓扑管理器 5.4. POD 与拓扑管理器策略的交互 第 第 6 章 章 调 调度 度 NUMA 感知工作 17.1. 关于性能配置集创建器 17.2. 其他资源 第 第 18 章 章 单节 单节点 点 OPENSHIFT 上的工作 上的工作负载 负载分区 分区 18.1. 使用工作负载分区最大化 CPU 分配 第 第 19 章 章 处 处于 于边缘 边缘网 网络 络的集群 的集群 19.1. 网络边缘的挑战 19.2. 为 ZTP 准备 HUB 集群 19.3. 使用 RHACM 和 SITECONFIG0 码力 | 315 页 | 3.19 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 08 CUDA 开启的 GPU 编程
• 这是因为 GPU 和 CPU 之间的通信,为了高效,是异 步的。也就是 CPU 调用 kernel<<<1, 1>>>() 后,并不 会立即在 GPU 上执行完毕,再返回。实际上只是把 kernel 这个任务推送到 GPU 的执行队列上,然后立即 返回,并不会等待执行完毕。 • 因此可以调用 cudaDeviceSynchronize() ,让 CPU 陷 入等待,等 GPU 完成队列的所有任务后再返回。从而 完成队列的所有任务后再返回。从而 能够在 main 退出前等到 kernel 在 GPU 上执行完。 定义在 GPU 上的设备函数 • __global__ 用于定义核函数,他在 GPU 上执行,从 CPU 端通过三重尖括号语法调 用,可以有参数,不可以有返回值。 • 而 __device__ 则用于定义设备函数,他在 GPU 上执行,但是从 GPU 上调用的,而 且不需要三重尖括号,和普通函数用起来一 符号,和性能优化意义上的内联无关。 • 优化意义上的内联指把函数体直接放到调用者那里去。 • 因此 CUDA 编译器提供了一个“私货”关键字: __inline__ 来 声明一个函数为内联。不论是 CPU 函数还是 GPU 都可以使 用,只要你用的 CUDA 编译器。 GCC 编译器相应的私货则 是 __attribute__((“inline”)) 。 • 注意声明为 __inline__ 不一定就保证内联了,如果函数太大编0 码力 | 142 页 | 13.52 MB | 1 年前3OpenShift Container Platform 4.9 节点
4.1. 了解 pod 横向自动扩展 2.4.1.1. 支持的指标 2.4.1.2. 扩展策略 2.4.2. 使用 Web 控制台创建 pod 横向自动扩展 2.4.3. 使用 CLI 根据 CPU 使用率创建 pod 横向自动扩展 2.4.4. 使用 CLI 根据内存使用率创建 pod 横向自动扩展对象 2.4.5. 使用 CLI 了解 pod 横向自动扩展状态条件 2.4.5.1. 使用 查看和列出 OPENSHIFT CONTAINER PLATFORM 集群中的节点 5.1.1. 关于列出集群中的所有节点 5.1.2. 列出集群中某一节点上的 pod 5.1.3. 查看节点上的内存和 CPU 用量统计 5.2. 操作节点 5.2.1. 了解如何撤离节点上的 pod 5.2.2. 了解如何更新节点上的标签 5.2.3. 了解如何将节点标记为不可调度或可以调度 5.2.4. 删除节点 3. 了解驱除阈值 5.10.1.4. 调度程序如何确定资源可用性 5.10.2. 自动为节点分配资源 5.10.3. 手动为节点分配资源 5.11. 为集群中的节点分配特定 CPU 5.11.1. 为节点保留 CPU 5.12. 为 KUBELET 启用 TLS 安全配置集 5.12.1. 了解 TLS 安全配置集 5.12.2. 为 kubelet 配置 TLS 安全配置集 5.130 码力 | 374 页 | 3.80 MB | 1 年前3Au Units
3Example: “CPU ticks” time units constexpr uint64_t CPU_CLOCK_HZ = 400'000'000; // API to implement: std::chrono::nanoseconds elapsed_time(uint64_t num_cpu_ticks); 1 2 3 4 8Example: “CPU ticks” time constexpr uint64_t CPU_CLOCK_HZ = 400'000'000; // API to implement: std::chrono::nanoseconds elapsed_time(uint64_t num_cpu_ticks); 1 2 3 4 std::chrono::nanoseconds elapsed_time(uint64_t num_cpu_ticks) { 0, CPU_CLOCK_HZ>; return std::chrono::nanoseconds{ num_cpu_ticks * NS_PER_TICK::num / NS_PER_TICK::den }; } 1 2 3 4 5 6 8.1Example: “CPU ticks” time units constexpr uint64_t CPU_CLOCK_HZ0 码力 | 191 页 | 22.37 MB | 5 月前3Taro: Task graph-based Asynchronous Programming Using C++ Coroutine
B! : CPU operation B" : GPU operation 9Existing TGPSs on Heterogenous Computing - Challenge A C D B! B" 5 task_b = sched.emplace([](&){ 6 // CPU code; // GPU code; 7 }); // CPU thread B! : CPU operation B" : GPU operation 10Existing TGPSs on Heterogenous Computing - Challenge A C D B! B" 5 task_b = sched.emplace([](&){ 6 // CPU code; // GPU code; 7 }); // CPU thread finishes B! : CPU operation B" : GPU operation Atomic execution per task 11Existing TGPSs on Heterogenous Computing - Challenge CPU A B! C Idle GPU D B" Runtime A C D B! B" Assume one CPU and one0 码力 | 84 页 | 8.82 MB | 5 月前3OpenShift Container Platform 4.6 节点
4.1. 了解 pod 横向自动扩展 2.4.1.1. 支持的指标 2.4.1.2. 扩展策略 2.4.2. 使用 Web 控制台创建 pod 横向自动扩展 2.4.3. 使用 CLI 根据 CPU 使用率创建 pod 横向自动扩展 2.4.4. 使用 CLI 根据内存使用率创建 pod 横向自动扩展对象 2.4.5. 使用 CLI 了解 pod 横向自动扩展状态条件 2.4.5.1. 使用 OPENSHIFT CONTAINER PLATFORM 集群中的节点 5.1.1. 关于列出集群中的所有节点 5.1.2. 列出集群中某一节点上的 pod 5.1.3. 查看节点上的内存和 CPU 用量统计 5.2. 操作节点 5.2.1. 了解如何撤离节点上的 pod 5.2.2. 了解如何更新节点上的标签 5.2.3. 了解如何将节点标记为不可调度或可以调度 5.2.4. 将 control 节点如何强制实施资源限制 5.8.1.3. 了解驱除阈值 5.8.1.4. 调度程序如何确定资源可用性 5.8.2. 为节点配置分配的资源 5.9. 为集群中的节点分配特定 CPU 5.9.1. 为节点保留 CPU 5.10. 机器配置守护进程指标 5.10.1. 机器配置守护进程指标 第 第 6 章 章 操作容器 操作容器 6.1. 了解容器 关于容器和 RHEL 内核内存 60 码力 | 404 页 | 3.60 MB | 1 年前3OpenShift Container Platform 3.11 扩展和性能指南
扩展 OPENSHIFT CONTAINER PLATFORM HAPROXY 路由器 8.1.1. 基准性能 8.1.2. 性能优化 8.1.2.1. 设置连接的最大数量 8.1.2.2. CPU 和中断关联性 4 5 5 5 6 7 7 7 9 13 14 16 16 16 16 16 17 17 18 18 18 19 19 20 20 20 20 21 21 21 LOADER 12.4.1. 配置字段 12.4.2. Cluster Loader 配置文件示例 12.5. 已知问题 第 第 13 章 章 使用 使用 CPU MANAGER 13.1. CPU MANAGER 的作用 13.2. 设置 CPU MANAGER 第 第 14 章 章 管理大 管理大页 页面 面 14.1. 巨页的作用 14.2. 先决条件 14.3. 消耗大页面 第 第 主机之间有一个不协调、低延迟 LAN 通信链接。 OpenShift Container Platform master 会积极缓存资源的反序列化版本,以简化 CPU 负载。但是,如果 较小的 pod 集群小于 1000 个 pod,这个缓存可能会浪费大量内存用于微小的 CPU 负载。默认缓存大小 为 50,000 个条目,它根据资源的大小,可以将 cupy 1 增加到 2 GB 内存。使用 /etc/origin/0 码力 | 58 页 | 732.06 KB | 1 年前3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100