鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

如何使用加速库

加速库说明

本加速库共包含算术类算子、隐私求交PSI算子及隐匿查询PIR算子三大类,只支持两个参与方的运算。

  • 算术类算子包括密态乘法算子、密态比较算子、密态除法算子、密态排序算子、密态求和算子及密态求均值算子,需要配合分片和还原功能使用。其中密态乘法算子、密态比较算子、密态除法算子为双向量算子,需要输入两方的数据分片进行相应的运算;而密态排序算子、密态求和算子及密态求均值算子为单向量算子,需要单向量形式的分片数据进行运算。
  • 隐私求交PSI算子不需要配合分片和还原功能使用,返回类型包括交集字符串数据或交集字符串数据在原数据中的下标。
  • 隐匿查询PIR算子不需要配合分片和还原功能使用,分为服务端(0计算节点)和客户端(1计算节点),服务端为客户端提供查询功能。服务端首先执行线下计算阶段,随后与客户端共同执行线上阶段,返回查询结果。

使用加速

使用时,请在GCC编译选项中添加动态库所在路径,链接到需要使用的动态库文件。例如编译时添加:“-I /usr/local/include -L /usr/local/lib”

调用算术类算子:

算术类算子目前为两方计算,两个计算节点分别设置为0计算节点和1计算节点。

  1. 通过DataGuard接口构造KCAL的配置信息,如通信接口和节点信息。
  2. 初始化算术类算子的函数组,算术类算子对外接口都在此函数组中。
  3. 初始化需要将配置信息配置到KCAL中。
  4. 设置所有节点信息。
  5. 交换种子信息。
  6. 选择对应的计算节点调用相应的接口。
    • 0计算节点:
      1. 调用两次分片接口,一次为接收1节点数据,另一次为分片自身数据并将分片数据的size发送给1计算节点。
      2. 拼接两次分片的结果作为计算接口的入参,要注意拼接顺序。
      3. 调用calculate接口,根据输入算子类型的不同进行不同的计算。
      4. 调用还原接口,获取最终的计算结果。
    • 1计算节点
      1. 调用两次分片接口,一次为分片自身数据并发送分片数据到0计算节点,另一次为接收0分片数据的size。
      2. 将分片的结果作为计算接口的入参。
      3. 调用calculate接口,根据输入算子类型的不同进行不同的计算。
      4. 调用还原接口,获取最终的计算结果。

调用隐私求交(PSI)算子:

  1. 通过DataGuard接口构造密态计算KCAL的配置信息,如通信接口和节点编号。
  2. 初始化PSI算子函数组,PSI算子对外接口都在此函数组中。
  3. 初始化需要将配置信息配置到KCAL中。
  4. 设置所有节点信息。
  5. 调用calculate函数接口计算PSI,获取最终的结果。

调用隐匿查询(PIR)算子:

  1. 通过DataGuard接口构造密态计算KCAL的配置信息,如通信接口和节点编号(0为服务端,1为客户端)。
  2. 初始化PIR算子函数组,PIR算子对外接口都在此函数组中。
  3. 将配置信息配置到KCAL示例中。
  4. 设置所有节点信息。
  5. 选择对应的计算节点调用相应的接口。
    • 0计算节点(服务端)
      1. 调用offlineCalculate函数接口构造分桶数据,便于客户端线上阶段查询。
      2. 调用serverCalculate函数接口,响应客户端查询,返回查询的value值。
    • 1计算节点(客户端)
      1. 等到服务端线下计算阶段完成后,调用clientCalculate函数接口,输入key进行查询。
      2. 根据key取到对应的value值。

在两个节点(0计算节点和1计算节点)中调用接口时,若一方接口返回非成功错误码,需要调用方通过任务调度通知对端结束业务流程。例如,调用makeShare时1计算节点返回错误码,0计算节点在等待接收,此时需要调用方通知0计算节点停止接收,sdk内部不做该处理。

加速库集成方式

类UNIX平台以链接库方式集成。