XRDP 和 NVIDIA 显卡兼容性问题

背景 最近在尝试配置 XRDP,发现它在有 NVIDIA 的机器上启动远程桌面后会黑屏,查看错误信息可以看到: xf86OpenConsole: Cannot open virtual console 1 (Permission denied) 解决方法 XRDP 作者在 issue #2010 中提到了解决方法: 修改 /etc/xrdp/sesman.ini,在 [Xorg] 部分里加上下面的配置: param=-configdir param=/ 实际上就是不让 Xorg 加载 nvidia xorg 驱动,这样就绕过了问题。

Read More

NVIDIA 驱动和 CUDA 版本信息速查

背景 之前和 NVIDIA 驱动和 CUDA 搏斗比较多,因此记录一下一些常用信息,方便查询。 常用地址 CUDA Toolkit Downloads NVIDIA Driver Installation Quickstart Guide NVIDIA Driver Downloads NVIDIA Docker Installation Guide CUDA 版本与 NVIDIA 驱动兼容性 可以通过 apt show cuda-runtime-x-x 找到: cuda 11.5 >= 495 cuda 11.4 >= 470 cuda 11.3 >= 465 cuda 11.2 >= 460 cuda 11.1 >= 455 cuda 11.0 >= 450 cuda 10.2 >= 440 cuda 10.1 >= 418 cuda 10.0 >= 410 cuda 9.

Read More

缓存一致性协议分析

参考文档 Cache coherence MSI protocol Write-once (cache coherence) MESI protocol MOESI protocol Dragon protocol A Strategy to Verify an AXI/ACE Compliant Interconnect (2 of 4) Directory-based cache coherence Write-invalidate 和 Write-update 最基础的缓存一致性思想有两种: Write-invalidate:写入数据的时候,将其他 Cache 中这条 Cache Line 设为 Invalid Write-update:写入数据的时候,把新的结果写入到有这条 Cache Line 的其他 Cache Write-once 协议 Write-once 协议定义了四个状态: Invalid:表示这个块不合法 Valid:表示这个块合法,并可能是共享的,同时数据没有修改 Reserved:表示这个块合法,不是共享的,同时数据没有更改 Dirty:表示这个块合法,不是共享的,数据做了修改,和内存不同。 可见,当一个缓存状态在 R 或者 D,其他缓存只能是 I;而缓存状态是 V 的时候,可以有多个缓存在 V 状态。 Write-once 协议的特点是,第一次写的时候,会写入到内存(类似 Write-through),连续写入则只写到缓存中,类似 Write-back。

Read More

DRAM 在 Kintex 7 FPGA 上内部 Vref 的性能问题

背景 最近我们设计的 Kintex 7 FPGA 开发板在测试 DDR SDRAM 的时候遇到了一个问题,因为采用了 Internel VREF,MIG 在配置的时候限制了频率只能是 400 MHz,对应 800 MT/s,这样无法达到 DDR 的最好性能。 原理 首先,VREF 在 DDR 中是用来区分低电平和高电平的。在 JESD79-4B 标准中,可以看到,对于直流信号,电压不小于 VREF+0.075V 时表示高电平,而电压不高于 VREF-0.075V 时表示低电平。VREF 本身应该介于 VDD 的 0.49 倍到 0.51 倍之间。 在连接 FPGA 的时候,有两种选择: Internal VREF: 从 FPGA 输出 VREF 信号到 DRAM External VREF:接入 FPGA 以外的 VREF 对于 7 Series 的 FPGA,Xilinx 要求如下: For DDR3 SDRAM interfaces running at or below 800 Mb/s (400 MHz), users have the option of selecting Internal VREF to save two I/O pins or using external VREF.

Read More

DRAM 分析

参考文档 Memory systems: Cache, DRAM & Disk 译文: DDR4 SDRAM - Understanding the Basics(上) 译文: DDR4 SDRAM - Understanding the Basics(下) JEDEC STANDARD DDR5 SDRAM JESD79-5 JEDEC STANDARD DDR4 SDRAM JESD79-4B JEDEC STANDARD DDR3 SDRAM JESD79-3E DRAM 是如何组织的 DRAM 分成很多层次:Bank Group,Bank,Row,Column,从大到小,容量也是各级别的乘积。 举例子: 4 Bank Group 4 Bank per Bank Group 32,768 Row per Bank 1024 Column per Row 4 Bits per Column 那么总大小就是 4*4*32768*1024*4=2 Gb。 访问模式 DRAM 的访问模式决定了访问内存的实际带宽。对于每次访问,需要这样的操作:

Read More

RISC-V Debug 分析

参考文档 RISC-V Debug Spec 0.13 IEEE Standard for JTAG 1149.1-2013 OpenOCD 相关代码 背景 之前用过一些 RISC-V 核心,但是遇到调试相关的内容的时候就两眼一抹黑,不知道原理,出了问题也不知道如何排查,趁此机会研究一下工作原理。 架构 为了调试 RISC-V 核心,需要很多部件一起工作。按 RISC-V Debug Spec 所述,有这么几部分: Debugger: GDB,连接到 OpenOCD 启动的 GDB Server Debug Translator: OpenOCD,向 GDB 提供 Server 实现,同时会通过 FTDI 等芯片控制 JTAG Debug Transport Hardware: 比如 FTDI 的芯片,可以提供 USB 接口,让 OpenOCD 控制 JTAG 信号 TMS/TDI/TCK 的变化,并读取 TDO Debug Transport Module: 在芯片内部的 JTAG 控制器(TAP),符合 JTAG 标准 Debug Module Interface:RISC-V 自定义的一系列寄存器,通过这些寄存器来控制 Debug Module 的行为 Debug Module:调试器,控制 RISC-V 核心,同时也支持直接访问总线,也有内部的 Program Buffer 可以看到,DMI 是实际的调试接口,而 JTAG 可以认为是一个传输协议。

Read More

教学随想

背景 最近关于课程改革的讨论比较多,我也来谈谈我的看法。 动机 一位高中毕业的同学,选择计算机系的动机是什么?我想了想,可能有下面几种: 计算机行业就业好,我选了计算机系,毕业以后可以赚到很多钱 喜欢计算机,希望从事计算机方面的工作 计算机系分高,大家都说好,那我就选择去这里吧 我是竞赛保送的,所以来到了这里 学校希望计算机系培养出来的学生: 有很好的能力 有很好的毕业去向(保研/工作/留校等等) 学校为希望计算机系: 有更多重大科研成果 能够培养多且精的计算机人才 计算机系为了实现上面的目标: 教学的专业课程要全面,并且能够支撑后续的科研 吸引更多学生进入实验室科研 同时还要与其他院系(软件学院,交叉信息学院,集成电路学院等)有区分(分工)。 路径 可以看到,上面的这一系列诉求是有矛盾的,可以假想这么几条路径: 想赚钱->读研毕业薪资更高->读研需要高 GPA->每门课都要 4.0->每个课程的可选部分都要做->工作量太大 想科研->找好老师->需要高 GPA 和或论文->每门课都要 4.0 同时还要在实验室科研->工作量特别大 不想科研直接工作->工作不需要高的 GPA->放弃一些课程的可选部分->空余时间学习实用技术->面试轻松过关 对未来没有想法->从众心理卷 GPA->每个课程都做可选部分->花费很多时间->没有时间做自己喜欢的事情 这对于七字班(2017)或者更早同学来说,这可能是难以理解的。当时,保研不需要很高的 GPA,老师会看重科研潜力,想科研的同学可能选择在实验室科研的同时,放弃一些课程。 但是从八字班(2018)开始,多重因素下,问题就凸显了。一是总人数更多,保研难度本身就更大,竞争激烈;二是保研名额严格按照 GPA 排序,导致保研的同学必须科研学习两手抓;三是 GPA 改革以后,4.0 难度变低,以前会想 A B C 课程比较难,大部分人都拿不到 4.0,我 A 课程 3.7,B 课程 3.3 和你 A 课程 3.3,B 课程 3.7 是一样的,精力有限,只做三个里面最简单的一个,但现在会发现,比 GPA 实际上就是比谁 4.0 更多,虽然 A B C 课程也比较难,但是此时只能把三个都做了,不然就会排名下降明显。

Read More

Manycore 处理器架构分析

参考文档 Intel® Many Integrated Core Architecture (Intel® MIC Architecture) - Advanced Intel® Xeon Phi coprocessor (codename Knights Corner) https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7453080 Knights Landing (KNL): 2nd Generation Intel® Xeon Phi™ Processor Fujitsu A64FX Fujitsu Presents Post-K CPU Specifications Fujitsu High Performance CPU for the Post-K Computer SUPERCOMPUTER FUGAKU - SUPERCOMPUTER FUGAKU, A64FX 48C 2.2GHZ, TOFU INTERCONNECT D Preliminary Performance Evaluation of the Fujitsu A64FX Using HPC Applications FUJITSU Processor A64FX NVIDIA A100 Tensor Core GPU Architecture NVIDIA TESLA V100 GPU ARCHITECTURE NVIDIA A100 TENSOR CORE GPU Xeon Phi - Intel MIC MIC: Many Integrated Core Architecture

Read More

Sunway 处理器架构分析

参考文档 高性能众核处理器申威26010 稀疏矩阵向量乘法在申威众核架构上的性能优化 Sunway SW26010 The Sunway TaihuLight supercomputer: system and applications Report on the Sunway TaihuLight System Closing the “Quantum Supremacy” Gap: Achieving Real-Time Simulation of a Random Quantum Circuit Using a New Sunway Supercomputer SW_Qsim: A Minimize-Memory Quantum Simulator with High-Performance on a New Sunway Supercomputer 18.9-Pflops Nonlinear Earthquake Simulation on Sunway TaihuLight: Enabling Depiction of 18-Hz and 8-Meter Scenarios A FIRST PEEK AT CHINA’S SUNWAY EXASCALE SUPERCOMPUTER THE NITTY GRITTY OF THE SUNWAY EXASCALE SYSTEM NETWORK AND STORAGE Sunway supercomputer architecture towards exascale computing: analysis and practice SW26010 Sunway TaihuLight 的层次:

Read More

移植系统到 Rocket Chip on VCU128

背景 最近需要在 VCU128 上搭建一个 SOC,然后想到可以把 OpenSBI、U-Boot 和 Linux 移植到这个平台上方便测试,于是又开始折腾这些东西。代码仓库都已经开源: rocket-chip-vcu128 opensbi u-boot linux Rocket Chip on VCU128 第一部分是基于之前 rocket2thinpad 在 Thinpad 上移植 Rocket Chip 的经验,做了一些更新,主要是因为 VCU128 的外设不大一样,同时我也要运行更复杂的程序,主要做了这些事情: 添加了 VCU128 的内存和外设:HBM、SPI、I2C、UART、ETH 打开了更多核心选项:S-mode 和 U-mode 主要踩过的坑: BSCAN 不工作,估计是因为一些参数不对,@jsteward 之前在 zcu 平台上做了一些测试,估计要用类似的办法进行修改;我最后直接去掉了这部分逻辑 这个板子的 PHY RESET 信号要通过 I2C 接口访问 TI 的 Port Expander,所以没法直接连,要通过 gpio 输出来手动 reset SPI Startup Flash 的时序配置,见我之前的博客 Xilinx PCS/PMA IP 也会自己挂一个设备到 MDIO bus上,应该有自己的 PHY 地址,而不要和物理的 PHY 冲突 U-Boot 在 U-Boot 上花了比较多的时间,用它的目的主要是:

Read More