SEAL庫 例6之6 performance解析

2021-10-01 13:43:25 字數 2812 閱讀 3390

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())

生成伽羅瓦鍵。在更大的示例中,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

(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++

)cout <<

"running tests "

;

qt之imx6庫編譯

qmake configuration for building with arm linux gnueabi g makefile generator unix config incremental qmake incremental style sublib 配置交叉編譯引數 imx6 cfla...

Swift學習之每日一tip 6 單例

近日,在翻看以前寫過的一些oc應用的時候,看到了oc的單例,然後暮然想要試著寫一寫swift下的單例,於是,在經過一番波折後,終於將swift下的單例寫了出來。栗子 instancetype sharednetworktools return instance oc下的單例大家都寫的滾瓜爛熟了,那麼...

單例模式之es3與es6雙版本(設計模式)

保證乙個類僅有以乙個例項,僅能被例項化 建立一次,並提供全域性的訪問點。單例模式是一種重要的設計模式,有些物件我們只需要建立乙個,比如瀏覽器的window物件,模態對話方塊。實現這種設計模式其實很簡單,最重要的是在建立例項的時候,用乙個標記變數判斷例項是否已經建立。function singleto...