《左手坐标系坐标变换》 里 的 回复
《左手坐标系坐标变换》 https://tieba.baidu.com/p/7668913258 。
25 楼
回复 22 楼 dons222 思维机器 ,
是的是的, 其实 我 习惯 用 Sql 而 对 GPU 一无所知, 所以 我还是 很看好 用 Sql 计算 的, 用 Sql 进行 大量数据 的 关系运算 。
但 进一步 想了想, 比如 矩阵乘法, GPU 处理 一个 矩阵 的 元素 和 另一个 矩阵 的 元素 的 对应关系 就是 一个 寻址, 而 数据库 按 表 处理 的 话, 根据 一个 表 的 字段 查找 另一个表 的 一笔记录 的 字段, 即使 用 索引, 也是 一个 复杂 的 工序(程序), 相比 寻址 的 话 。
GPU 是不是 有 Cache ? 将 内存 的 数据 批量 复制到 GPU Cache 进行计算, 完成 后 再 复制 回 内存, 这些 应该 有 驱动 执行 / 控制, 上层 程序 调用 驱动 , 上层程序 比如 图形库 GL 。
用户程序 -> 3D 库 (比如 Unity3D) -> 图形库 GL -> 驱动 -> GPU (指令集)
应该是 这么一个 架构 。
这样, 将 数据 传送给 GPU 运算 再返回, 也是 一次 轻量 IO 了 。
由上, 产生一个想法, 可以 写 一个 程序 来 计算 图形函数 和 算法, 就像 GPU 一样, 只不过 现在 是 在 CPU 里 运行 。 也就是说, 我们 写一些 程序, 让 这些 程序 在 CPU 里 运行 来 代替 GPU 。
这个想法 当然 会 引出 问题 : GPU 不就是 为了 将 图形计算 交给 专门 的 硬件芯片(GPU) 而 产生的 吗 ? 怎么 现在 又要 回到 老路, 在 CPU 里 计算了 ? CPU 执行 软代码 能有 GPU 固化 的 硬代码(复杂指令集) 快 吗 ? 而且 GPU 应该 对 浮点数 和 整数 运算 都 做过 增强, 比如 支持 更多位数 的 浮点数 和 整数 运算, 比如 128 位 , 复杂指令集 和 更多位数 的 四则运算 这些 固化 的 运算 可以 预先设计 好 需要 的 大寄存器 。 大寄存器 指 位数 多,比如 128 位, 256 位, 对 寄存器 而言, 位数大 也就是 容量大, 当然, 数量也要够 。
GPU 也可能 支持 需要 更少 的 时钟周期 的 除法, 除法 需要 的 时钟周期 越少, 需要 的 电路规模 越大, 见 《研究一下 CPU 除法》 https://tieba.baidu.com/p/7508676984 。
上面 这些 关于 GPU 硬件 结构 和 设计 的 内容 是 我 猜 的 。
接着说 为什么 现在 要 回到 CPU 计算 的 思路, 上面说了, 将 数据 传送给 GPU 运算 再返回, 也是 一次 轻量 IO 了 。 如果 由 CPU 进行 (图形)计算, 则 数据 在 内存 里, 不用 复制到 GPU Cache, 也不用 计算好后 从 GPU Cache 复制回 内存, 也不用 驱动 介入 。
当然, 并不是说 由 CPU 计算, 数据 在 内存 里 就 不用 复制数据 了, 从 内存 到 CPU Cache 也要 复制数据 的 。
一件可喜的事是, 现在 多核 很 普遍, 一个 流传很久 的 课题 是 要 怎么 利用 这些 多核 。 用 一个 或 几个 核 来 做 图形计算 不 香 吗 ?
大规模 的 矩阵运算, 可以 用 并行计算, 事实上 一般 还不至于 把 一个 矩阵 分到 几个 CPU 核 上 运算, 但是, 如果有 成百上千 个 矩阵, 一个 CPU 核 分配 100 个 矩阵, 用 10 个 核 来 并行计算 1000 个 、几千个 矩阵 运算 还是可以的吧 ?
当然, GPU 应该 也 设计了 一定 的 并行计算 能力 。
3D 、三维旋转 、高维旋转, 确实 是 “计算密集型” 应用 吧 。
我 挺有 兴趣 开发 这样 的 程序, 用 CPU 的 一个 或 几个 核 来 做 图形计算 、卷积计算 、矩阵计算 …… 各种 “计算密集” 的 计算 。
26 楼
民科吧 的 《巜草根科学探索》螺旋结构与液状的研究探索》 https://tieba.baidu.com/p/7672945207 让 我 看到了 未来 科技 的 景象 。
未来 的 科学 包括 :
1 数学 的 突破 和 繁荣
2 科学思想 和 方法 、实践 的 多样化, 以及 由此 带来 的 技术 的 蓬勃发展
从 《巜草根科学探索》螺旋结构与液状的研究探索》 可以看到 第 2 点 。
数学 可以作为 可能性证明 、边界证明 、方向指导 、理论预言 、理性探究, 当然, 还有 计算方法 。
数学 会 广泛 的 用于 工程技术 的 推理论证 。
既是 科学 的 皇后, 也是 科学 的 仆人, 让 人们 站得更高,看得更远, 让 理性提升, 让 知识 就是 力量, 这是 数学 应该 担负 起 的 职责 吧 !
另一方面, 各色能人 又 不囿于 数学, 可以充分 发挥 各自 才干 钻研 发明 创造, 以此 造就 (科学)知识 和 技术 的 繁荣 。
各色能人 虽然 不囿于 数学, 但 又 可以容易 的 随时 从 数学家 、计算机 、软件包 那里 获得 帮助 和 支持 。
以 数学 为 主导 的 科学流派 称为 数学流派 , 代表人物 : XDDongfang
工程师流派 : dons222 思维机器 , 他们 用 工程技术 的 思想 和 成果 发展 科学, 改变世界 。
物理流派 : 渝中寿人
评论家流派 : 水星之魅
左老师 的 《世界顶级数论猜想》 https://tieba.baidu.com/p/7667545281
《颠覆性电光椭圆波动理论电子版》 https://tieba.baidu.com/p/7672885825
回复 25 楼 dons222 思维机器 ,
FPGA 和 DSP 我 听说过, 但 懒得去了解, 我喜欢用 通用 的 玩出 专用 的 效果 。
我以前 提出过 “轻量操作系统” 的 概念, 我认为 未来 硬件标准化 是 趋势, 硬件标准化 可以 让 操作系统轻量 。
另一方面, 操作系统 发展了 几十年, 需求 已经 很清楚, 可以 提炼 和 精简 出来, 这也可以让 操作系统 轻量 。
轻量操作系统 可以 广泛 的 用于 各种 服务器场合, “服务器” 不一定 很大, 有大有小, 比如 智能设备 和 物联网节点 。
从 26 楼 的 回复 看来, 运行速度 上, FPGA / DSP > 实时操作系统 > 通用(分时)操作系统
如果 让 通用(分时)操作系统 轻量化, 并 只用于 完成 一项工作, 那么 , 运行速度 表现 可以 接近 实时操作系统 。
一项工作 可以 是 多个 工作 组成, 不是说 只做 一件事 。 一项工作 可以 由 多个 工作进程 组成, 不是说 只有 一个 进程 。
一项工作 比如 体操机器人 。
分时操作系统 轻量化 后, 只 用于 一项 工作, 则 只剩下 操作系统进程 和 工作进程, 当然 工作进程 可以有 多个 。
从 最原始 的 中断处理 到 进程 / 线程 的 调度 / 切换, 内存 的 GC 甚至 外存 的 GC , 管理工作 (管理成本) 还是 要的, 实时操作系统 也要 处理 各种 中断 。
现在 的 通用操作系统 的 进程/线程 切换 的 工作量 太 繁杂 了, 进程切换 要 更新 CPU 存储管理部件 的 页表, 这可以, 但 从 资料 上来看, 具体 做的 事情 太多, 线程切换 也是, 线程切换 就 计算一下 哪个 线程 之前 对 CPU 的 使用率 最高 就优先 给 哪个线程执行, 主要 是 计算这个 算法, 但 资料 上来看, 线程切换 的 工作 也 太多太杂, 本来, 如果 只是 计算 线程 对 CPU 的 使用率 并 据此 评估出 接下来由 哪个 线程执行, 如果 只是 做 这个 计算的话, 1000 纳秒 也就是 1 微秒 内 可以 做完这个计算 吧 ? 那 粗略的, 就 可以 按 1 微秒 切换 一次 线程 来算, 既然 1 微秒 可以 切换 一次线程, 那 1 秒钟 可以 切换 100 万次 线程 吧 ?
这就是 著名 的 “1 秒钟 切换 100 万 次 线程” 观念, 是 我 提出的, 我一直 在 推销 这个 观念 。
经过 在 QQ 群 里 的 实践 碰撞 修正 再认识 后, 发现 这个 观念 越发 牢靠 了 。
如此, 这样 短暂 的 线程切换, 对于 实时系统 来说, 也只 相当于 一次 快速 的 程序 启动(热身), 也就是, 分时系统 如果 可以 做到 1 秒钟 切换(创建) 100 万 个 线程 的 话, 那 一次 线程 切换(创建) 就 相当于 实时系统 的 一个 程序(任务) 启动 (加载 / 热身) 。
这 很 激动人心 。
当然, 即便 线程 切换(创建) 如此之快(廉价), 我们 也 不会 随意 的 切换(创建) 线程, 我们仍然 会 使用 现有 的 线程池 和 异步任务 技术, 来 让 程序 高效 。
异步任务 的 切换 时间 是 CPU 核 之间 mutex 的 级别, 就是 几十纳秒 的 级别, 这就 更 轻量 了 。
而 事实上, 如果 用 一个 多核 CPU 只 从事 一件工作 的 话, 比如 体操机器人, 则 应该是 若干个 进程 (线程) 运行于 若干个 核 上, 本来 也 很少 需要 切换 进程 / 线程 。
多核 的 好处 时, 操作系统 需要 进行 管理 时, 操作系统进程 只要 运行于 一个 核, 在 这个 核 上 计算好 线程 的 优先级, 然后 通知 其它 核 的 线程 切换即可 。 在 操作系统进程 计算 期间, 其它 核 上 的 线程 可以 照常工作 , 而 事实上, 操作系统进程 计算完 调度计划 后, 计划 并不一定 让 其它 核 的 线程 切换, 因为 整个 CPU 本来就在做 一项工作 嘛 , 也没有 其它 任务 来 抢占 CPU 。
当然, 线程 没事做 的 时候, 会 挂起, 有 请求 了, 比如 外设 有 输入了 (体操机器人 接到指令 或 响应外界发生的情况), 那么 线程 恢复 运行 。
因为 上面说了, “1 秒钟 切换 100 万 次 线程” , 所以 线程 挂起 和 恢复 是 很快 的 , 1 秒钟 可以 挂起 / 恢复 100 万次 。
我 做过 测试, 在 PC 上, C# 里 的 FileStream. Read () 方法 1 秒钟 可以 执行 100 万次 以上, Read() 只是 读取 "aa" 这样 很短 的 字符串,所以 读取 都是 从 缓冲区, 也就是 内存, 甚至是 CPU Cache 里 读取, 这个 时间 很短, 因此 Read() 的 时间 主要是 花在 Read() 的 时候 切换到 IO 线程, 又 从 IO 线程 切换回 用户线程 , 简而言之 就是 时间 主要 花费 在切换线程 上 。
因为 每次 Read() 要 切换到 IO 线程, 又 从 IO 线程 切换回 用户线程, 是 2 次 切换, 所以, 1 秒钟 执行 100 万次 Read() , 实际上 是 200 万次 线程切换 呢 !
当然, QQ 群 里 的 网友 指出, 这不是 线程切换, 而是 系统调用, 但 就算是 系统调用, 你 从 用户代码 切换 到 系统调用, 又 切换回来, 也要 保存 和 恢复 寄存器上下文 吧 !
让 线程切换 和 系统调用 一样 轻量, 是 可以做到的 。
这是 轻量操作系统 。 综上, 分时操作系统 的 运行速度 表现 是 可望 “无限” 接近 实时操作系统 的, 分时操作系统 也可望 成为 更广泛 的 领域, 包括 各种 专业领域 通用 的 操作系统 和 解决方案 。
另一方面, 是 编程语言, 26 楼 你们 也说了, FPGA / DSP 的 编程比较麻烦, 可以看出来, 修改 和 维护 也 麻烦 。 编程语言 和 编程模型 比较底层, 一方面 是 编程难度大, 另一方面 是 保证代码 安全 的 难度 也大 。
我 和 QQ 群 里 的 网友 正在研制 一门 新的 通用 的 编程语言 D++ 。
D++ 的 目标 是 通用 高效 安全 简洁 。 这 看起来 像 口号, 但 这是 实际所需 。
这里, 我们 尝试 展望 一种 通用架构, 这个 通用架构 包括了 硬件 、操作系统 、编程语言, 语言 的 通用 高效 安全 简洁 是 这个 架构 的 一部分 。
C / C++ 是 通用语言, 从 底层 来说 也 高效, 但 不安全, 又 因 其 太灵活 , 导致 编程范式 众多, 因此, 代码 也 不简洁 。
================================
在 QQ 群 里, 我对 馥岚过野 说 , 这几天回复的内容里,有很多知识是从你那里学来的 。 “这几天回复的内容” 就是 本文 的 内容 。
我 又 对 馥岚过野 :| 左边 说 , 当然,也是我们讨论了一年的成果 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2020-12-28 调幅 是 电子技术, 调频 是 量子技术
2020-12-28 出一道题 : 证明 超外差收音机 的 混频原理
2018-12-28 设计一个 硬件 实现的 Dictionary(字典)