在线客服

联系电话

0755-83258725

返回顶部

存内计算(iNc,in-Nand computing)API使用指南

发表时间:2025-12-27 发表人:领存实验室 评论数:0
存内计算(iNc,in-Nand computing)API使用指南,提供与 SSPU 的通信连接功能以及 Sloppy Sigmoid/Tanh/SiLU 运算处理功能

1. 概要

本 DLL 提供与 SSPU 的通信连接功能以及 Sloppy Sigmoid/Tanh/SiLU 运算处理功能。


2. 运行环境

支持的 OS Windows 64bit
支持的架构 x64
框架 .NET 8.0
所需权限 管理员权限
依赖库 System.Management.dll

3. 导入方法

3.1. 前提条件


  • 集成目标项目的目标框架为.NET 8.0
  • 集成目标项目的生成配置为 x64
  • 集成目标项目已添加 System.Management 的引用
  • 集成目标项目需以管理员权限运行


3.1.1. 引用添加步骤

  1. 右键单击项目→[管理 NuGet 程序包]
  2. 在 [浏览] 选项卡中搜索 System.Management 并安装

3.2. 集成到项目的步骤

  1. 在解决方案资源管理器中右键单击嵌入目标项目
  2. 选择 [添加]→[项目引用],选中 SSPU.dll 并添加
  3. 单击 “依赖项 - 程序集 - SSPU”,在属性中将 “复制到本地” 设置为 “是”
  4. 在嵌入目标项目中,创建 SSPU.SSPU 的实例并使用 API


4. API 规格

4.1. Connect

函数名

Connect

功能 SSPU 的搜索与通信连接
声明 int Connect()
参数
返回值 类型: int
说明:0: 存在目标,-1: 无目标
注意事项

・如果从非管理员权限启动的项目调用执行,将发生异常,因此请务必在管理员权限下运行

・如果从未添加 System.Management 引用的项目调用执行,将发生异常,请务必确认已添加 System.Management 的引用。


4.2. SloppySigmoid

函数名

SloppySigmoid

功能 执行 SloppySigmoid 运算处理
声明 int SloppySigmoid(byte[] inBuffer, byte[] outBuffer, byte param_n, byte param_r, byte param_p)
参数 类型 参数名 说明
byte[] inBuffer 输入数据数组
byte[] outBuffer 输出数据数组
byte param_n N 参数
byte param_r R 参数
byte param_p P 参数
返回值 类型 说明 说明
int 0: 成功;-1: 失败 0: 成功;-1: 失败
注意事项 ・关于 inBuffer 的数据,请参考 5.1 输入数据。
・关于 outBuffer 的数据,请参考 5.2 输出数据。
预计通过 await Task.Run (…) 进行异步执行。
(实现示例)
var Ret = await Task.Run(() => sspu.SloppySigmoid(inData, outData, param_n, param_r, param_p)).ConfigureAwait(false);


4.3. SloppyTanh

函数名

SloppyTanh

功能 执行 SloppyTanh 运算处理
声明 int SloppyTanh(byte[] inBuffer, byte[] outBuffer, byte param_n, byte param_r, byte param_p)
参数 类型 参数名 说明
byte[] inBuffer 输入数据数组
byte[] outBuffer 输出数据数组
byte param_n N 参数
byte param_r R 参数
byte param_p P 参数
返回值 类型 说明 说明
int 0: 成功;-1: 失败 0: 成功;-1: 失败
注意事项 ・关于 inBuffer 的数据,请参考 5.1 输入数据。
・关于 outBuffer 的数据,请参考 5.2输出数据。
预计通过 await Task.Run (…) 进行异步执行。
(实现示例)
var Ret = await Task.Run(() => sspu.SloppyTanh(inData, outData, param_n, param_r, param_p)).ConfigureAwait(false);


4.4. SloppySiLU

函数名

SloppySiLU

功能 执行 SloppySiLU 运算处理
声明 int SloppySiLU(byte[] inBuffer, byte[] outBuffer, byte param_n, byte param_b)
参数 类型 参数名 说明
byte[] inBuffer 输入数据数组
byte[] outBuffer 输出数据数组
byte param_n N 参数
byte param_b B 参数
返回值 类型 说明 说明
int 0: 成功;-1: 失败 0: 成功;-1: 失败
注意事项 ・关于 inBuffer 的数据,请参考 5.1 输入数据。
・关于 outBuffer 的数据,请参考 5.2 输出数据。
预计通过 await Task.Run (…) 进行异步执行。
(实现示例)
var Ret = await Task.Run(() => sspu.SloppySiLU(inData, outData, param_n, param_b)).ConfigureAwait(false);


5. 输入输出数据规格

5.1. 术语

术语 说明
n Sigmoid/Tanh 发送时单个数据的位宽(例:22bit),SiLU 发送接收时单个数据的位宽
p Sigmoid/Tanh 接收时单个数据的位宽(例:10bit)
单个数据 param_n 位宽的有符号整数,(例:n=10→-512511
bytesPerData 每个数据的字节数,发送时(例:22bit):(n+7)/8→3 字节,接收时(例:10bit):(p+7)/8→2 字节
LSB 优先 从 bit0(最低有效位)开始依次存储


5.2. 输入数据

5.2.1. 输入数据生成


5.2.1.1. 处理概述

  1. 将值掩码为 n 位(例:仅使用低 22 位)
  2. 符号扩展(如果 bit21 为 1,则作为负数,高位用 1 填充)
  3. 按 LSB 优先进行位打包
  4. 每个数据存储为 3 字节(最后一个字节的高 2 位未使用)


5.2.1.2. 比特配置

示例:n=22

MSB ←                        → LSB

Byte0

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit0

Byte1

bit 15

bit 14

bit 13

bit 12

bit 11

bit 10

bit 9

bit 8

Byte2

bit 21

 bit 20

bit 19

bit 18

bit 17

bit 16

– 表示未使用位(固定)


5.2.1.3. 发送数据示例

{45, -73}(n=22 的情况)

  • 45(十进制)的 22 位表示:0000000000000000101101

MSB ←               →LSB

字节值

Byte0

0

0

1

0

1

1

0

1

0x2D

Byte1

0

0

0

0

0

0

0

0

0x00

Byte2

0

0

0

0

0

0

0

0

0x00


  • -73(十进制)的 22 位表示(补码):1111111111111110110111

MSB ←               →LSB

字节值

Byte3

1

0

1

1

0

1

1

1

0xB7

Byte4

1

1

1

1

1

1

1

1

0xFF

Byte5

0

0

1

1

1

1

1

1

0x3F


发送字节列:2D 00 00 B7 FF 3F


5.3. 输出数据

5.3.1. 函数调用时

Sigmoid/Tanh:分配 byte [16384 (16KB) * p] 的缓冲区,并作为参数 outBuffer 传入。
SiLU:分配 byte [16384 (16KB) * n] 的缓冲区,并作为参数 outBuffer 传入。


5.3.2. 输出数据还原

5.3.2.1. 处理概述

  1. 还原 p(Sigmoid/Tanh)或 n(SiLU)位的数据
  2. 按 LSB 优先展开
  3. Tanh 模式时,以 p 位为基准进行符号扩展(例:bit9 为符号位)
  4. SiLU 模式时,以 n 位为基准进行符号扩展


5.3.2.2. 比特配置

示例:p=10

MSB ←                        → LSB

Byte0

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2

bit1

bit0

Byte1

bit 9

bit 8

– 表示未使用位(固定)


5.3.2.3. 接收数据示例

{0x0D, 0x00, 0xDB, 0x03}(p=10 的情况)
  • 0000001101(10 位表示):13(十进制)

MSB ←               → LSB

zi'jie

Byte0

0

0

0

0

1

1

0

1

0x0D

Byte1

0

0

0

0

0

0

0

0

0x00


  • 1111101101(10 位表示):-19(十进制)

MSB ←               → LSB

字节值

Byte2

1

1

1

0

1

1

0

1

0xDB

Byte3

0

0

0

0

0

0

1

1

0x03


接收数据列:13, -19



评论
发表评论
icon