Skip to content

Latest commit

 

History

History
87 lines (51 loc) · 3.88 KB

File metadata and controls

87 lines (51 loc) · 3.88 KB

*** thread -> warp -> block(>=32 thread) -> grid***

这是一个非常好的具体化问题。理解这个过程的关键在于明白:硬件的输出不再是这四个小数,而是一个具体的“选择结果”(One-Hot 索引或二进制编码)。

假设您的 Softmax 概率分布是 [0.7, 0.2, 0.1, 0.0](为了方便解释,我把最后一个假设为0,凑成总和 1.0;代表类别 A, B, C, D)。

1. 最后的输出是多少?

最后的输出是一个确定的状态,通常是二进制编码的索引。 对于这个例子,输出结果会是以下四种情况之一:

  • A (二进制 00) —— 出现的几率极大(70%)。
  • B (二进制 01) —— 出现的几率较小(20%)。
  • C (二进制 10) —— 出现的几率很小(10%)。
  • D (二进制 11) —— 几乎不出现(0%)。

您每次“读”这个电路,它就吐出 000110 中的一个。 就像您扔了一个灌铅的四面骰子,最后告诉您的只是“朝上的是哪一面”。


2. 这个过程是怎么样的?(详细步骤)

硬件不能直接处理 [0.7, 0.2, ...] 这一串数字,它需要把这个多选问题(4选1)拆解成多个二选一问题(也就是构建 PPT 中提到的 贝叶斯网络 )。

第一步:FPGA 进行“概率拆解”(贝叶斯分解)

FPGA 内部的逻辑会把您的目标分布分解成类似“决策树”的结构。我们需要两个 MTJ 器件(记为 MTJ_1MTJ_2)来输出两个比特位。

  • MTJ_1(高位,决定是前半部分 A/B 还是后半部分 C/D)

  • 前半部分概率总和 =

  • 后半部分概率总和 =

  • 决策:FPGA 计算出,MTJ_1 需要有 90% 的概率输出 0 (代表选择 A/B 组),10% 概率输出 1 (代表 C/D 组)。

  • MTJ_2(低位,决定具体是哪一个)

  • 这里存在条件依赖(PPT Slide 6 图 e/c 所示的层级结构):

  • 情况 1(如果 MTJ_1 选了前半部分): 在 A(0.7) 和 B(0.2) 里选。A 的相对概率是 。

  • 情况 2(如果 MTJ_1 选了后半部分): 在 C(0.1) 和 D(0.0) 里选。C 的相对概率是 。

第二步:映射到“脉冲宽度”(Mapping)

FPGA 查表或计算得出:

对于 MTJ_1:要实现 90% 的概率,需要 8.5ns 的写脉冲宽度 。

  • 对于 MTJ_2
  • 如果逻辑判断当前走的是“前半部分”分支,给它 6.2ns 脉冲(对应 78% 概率)。
  • 如果走的是“后半部分”分支,给它 10ns 脉冲(对应 100% 概率)。 (注:这里可以分时步操作,也可以通过并行逻辑实现)

第三步:物理执行(The Execution)

  1. 写入:FPGA 向电路发送控制信号,MTJ_1 收到 8.5ns 的电流,MTJ_2 收到相应的电流。
  2. 翻转:MTJ_1 内部的电子自旋发生随机隧穿。
  • 大部分时候(90%机会),MTJ_1 变成了低电阻态(代表 0)。
  • 偶尔(10%机会),它变成了高电阻态(代表 1)。
  1. 读取:电路读取 MTJ 的电阻状态。

第四步:最终输出

假设这次运气比较常规:

  • MTJ_1 翻转为 0(选中了 A/B 组)。
  • MTJ_2 在 78% 的设定下,翻转为 0(选中了 A)。
  • 系统输出:二进制 00(对应类别 A)。

总结

这就是 PPT 中提到的**“贝叶斯网络反推”** 的含义。

  • 输入[0.7, 0.2, 0.1, 0.0] (软件告诉硬件想要的分布)。
  • 中间转换:FPGA 算出 MTJ_1 需要 90% 偏置,MTJ_2 需要 78% 偏置(条件概率)。

硬件控制:FPGA 发出不同宽度的脉冲 。

  • 输出:直接读出一个二进制数(如 00),这个数就是根据概率采样出来的结果

这个过程完全取代了传统计算机中“先算 Softmax 值,再用随机函数生成随机数,再比对大小”的繁琐步骤。