-2

致所有他的专家:

我想用非常大的矩阵(600000 x 55)实现矩阵向量乘法。目前,我能够以少量输入执行加法、乘法、内积等运算。当我尝试将这些操作应用于较大的输入时,我会遇到错误,Invalid next size (normal)或者我的主内存用完了,直到操作系统终止进程(退出代码 9)。

您是否有任何建议/示例如何归档实现矩阵向量乘法或类似方法的有效方法?(使用 BFV 和 CKKS)。

PS:我正在使用 PALISADE 库,但如果您有更好的建议,例如 SEAL 或 Helib,我也很乐意使用它们。

4

1 回答 1

2

CKKS 也可在 PALISADE 中使用,因为它支持近似(类似浮点)算术并且不需要高精度(大明文模数),因此对于您的场景来说将是一个更好的选择。BFV 准确地执行所有操作(mod 明文模数)。您必须使用非常大的明文模数来确保您的结果不会环绕明文模数。当您增加深度时,情况会变得更糟,例如,两个链式乘法。

对于矩阵向量乘法,您可以使用https://eprint.iacr.org/2019/223https://eprint.iacr.org/2018/254中描述的技术以及https://的补充信息eprint.iacr.org/2020/563。主要思想是选择正确的编码并利用 SIMD 打包。您将使用二次方向量大小,并且可以将矩阵打包为每个密文 64xY(多行)或每个密文每行的一部分,具体取决于哪个更有效。

于 2020-08-04T14:13:36.530 回答