SEAL库 例6之6_performance解析

void bfv_performance_test(shared_ptr context)

chrono::high_resolution_clock::time_point time_start, time_end;

打印参数

print_parameters(context);
cout << endl;
auto &parms = context->first_context_data()->parms();
auto &plain_modulus = parms.plain_modulus();
size_t poly_modulus_degree = parms.poly_modulus_degree();

生成公私钥 for context

cout << "Generating secret/public keys: ";
KeyGenerator keygen(context);
cout << "Done" << endl;

auto secret_key = keygen.secret_key();
auto public_key = keygen.public_key();

RelinKeys relin_keys;
GaloisKeys gal_keys;

时间

 chrono::microseconds time_diff;

if (context->using_keyswitching())
{

   // Generate relinearization keys.
cout << "Generating relinearization keys: ";
time_start = chrono::high_resolution_clock::now();
relin_keys = keygen.relin_keys();
time_end = chrono::high_resolution_clock::now();
time_diff = chrono::duration_cast<chrono::microseconds>(time_end - time_start);
cout << "Done [" << time_diff.count() << " microseconds]" << endl;

if (!context->key_context_data()->qualifiers().using_batching)
{
    cout << "Given encryption parameters do not support batching." << endl;
    return;
}
生成伽罗瓦键。在更大的示例中,Galois键可以使用大量内存,这在受限的系统中可能是一个问题。
用户应该尝试一些较  大的测试运行,并观察它们对内存池分配大小的影响。从打印结果可以看出,
密钥生成也需要很长时间
cout << "Generating Galois keys: ";
time_start = chrono::high_resolution_clock::now();
gal_keys = keygen.galois_keys();
time_end = chrono::high_resolution_clock::now();
time_diff = chrono::duration_cast<chrono::microseconds>(time_end - time_start);
cout << "Done [" << time_diff.count() << " microseconds]" << endl;

 }
Encryptor encryptor(context, public_key);
Decryptor decryptor(context, secret_key);
Evaluator evaluator(context);
BatchEncoder batch_encoder(context);
IntegerEncoder encoder(context);

这些将保存每个操作使用的总时间。

chrono::microseconds time_batch_sum(0);
chrono::microseconds time_unbatch_sum(0);
chrono::microseconds time_encrypt_sum(0);
chrono::microseconds time_decrypt_sum(0);
chrono::microseconds time_add_sum(0);
chrono::microseconds time_multiply_sum(0);
chrono::microseconds time_multiply_plain_sum(0);
chrono::microseconds time_square_sum(0);
chrono::microseconds time_relinearize_sum(0);
chrono::microseconds time_rotate_rows_one_step_sum(0);
chrono::microseconds time_rotate_rows_random_sum(0);
chrono::microseconds time_rotate_columns_sum(0);

How many times to run the test?

int count = 10;

填充要进行批处理的值向量

size_t slot_count = batch_encoder.slot_count();
vector<uint64_t> pod_vector;
random_device rd;
for (size_t i = 0; i < slot_count; i++)
{
    pod_vector.push_back(rd() % plain_modulus.value());
}

cout << "Running tests ";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值