Linux

我有 PCLMUL 指令集支持嗎?

  • October 29, 2018

以下是flags來自/proc/cpuinfo

fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm
constant_tsc arch_perfmon pebs bts nopl xtopology nonstop_tsc aperfmperf
pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid
sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx lahf_lm ida
arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid

我顯然有一個pclmulqdq標誌,但我不確定這是否意味著 PCLMUL 指令集支持。我怎樣才能找到標誌的含義,或者 PCLMUL 對應的標誌是什麼?

根據WikipediaIntel提供的資訊,我認為是的。

從維基百科條目:

PCLMULQDQ   Performs a carry-less multiplication of two 64-bit integers 

與您擁有的標誌相匹配。

在 Intel 64 IA-32 指令集參考中,沒有列出 PCLMUL 指令。但是,英特爾確實列出瞭如下描述的 PCLMULQDQ 指令:

描述

根據立即字節的值從第一個源操作數和第二個源操作數中選擇兩個四字,執行無進位乘法。第 4 位和第 0 位用於根據表 4-13 選擇使用每個操作數的哪一半 64 位,立即字節的其他位被忽略(英特爾 64 IA-32 指令集參考,第 II 卷)。

因此,當您看到 PCLMUL 支持時,假設它只是 PCLMULQDQ 的縮寫形式。不是使用兩個 64 位寄存器來儲存兩個 64 位寄存器相乘的結果,而是將結果儲存在一個 128 位寄存器中。因此,名稱為無進位乘法。其他指令將使用兩個不同的寄存器來儲存結果,彙程式序員將不得不執行額外的步驟來計算出最終結果以供其程序使用。但是對於無進位乘法,結果儲存在一個更大的寄存器中。在該指令(PCLMULQDQ)中,兩個 64 位數字相乘的結果儲存在一個 128 位寄存器中。該指令使用 128 位 XMM 寄存器和具有此類寄存器要使用的 CPU。

引用自:https://unix.stackexchange.com/questions/41437