zoukankan      html  css  js  c++  java
  • 《左手坐标系坐标变换》 里 的 回复

    《左手坐标系坐标变换》       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 群 里,   我对 馥岚过野 说 ,   这几天回复的内容里,有很多知识是从你那里学来的  。  “这几天回复的内容”  就是 本文 的 内容  。

    我 又 对  馥岚过野     :|    左边  说 ,    当然,也是我们讨论了一年的成果  。

  • 相关阅读:
    iDirect IQ200 Evolution Option Config
    直播卫星接收设备参数
    QCA9531方案双通道嵌入式无线AP模块应用选型参考
    FanControl 机箱风扇控制软件
    硬盘基本知识(磁头、磁道、扇区、柱面)
    Registry keys for configuring Automatic Updates & WSUS
    CentOS6.5下简单的MySQL数据库操作
    临时搞两天VC,在VC里如何获取当前程序的名字和路径以及如何分割字符串
    COBOL中USAGE的用法
    sqlplus 帮助无法显示问题的解决
  • 原文地址:https://www.cnblogs.com/KSongKing/p/15739117.html
Copyright © 2011-2022 走看看