ollama(llama.cpp) 編譯出的 LLM runners: cpu, cpu_avx, cpu_avx2
在軟件開(kāi)發(fā)和編譯過(guò)程中,cpu, cpu_avx, cpu_avx2 這些術(shù)語(yǔ)通常指的是針對(duì)不同CPU指令集優(yōu)化的代碼版本。
這些術(shù)語(yǔ)與編譯時(shí)選擇的優(yōu)化選項(xiàng)有關(guān),特別是當(dāng)涉及到向量處理和并行計(jì)算時(shí)。
下面是它們的大致含義:
-
cpu
- 這個(gè)術(shù)語(yǔ)通常指的是沒(méi)有特別優(yōu)化的通用代碼路徑,它可能使用了標(biāo)準(zhǔn)的 x86 或 x86_64 指令集,而不依賴于任何特定的高級(jí)向量擴(kuò)展指令集如 AVX 或 AVX2。這種代碼可以在任何支持基本 x86 指令集的處理器上運(yùn)行,但可能無(wú)法利用現(xiàn)代CPU的高級(jí)特性。
-
cpu_avx
- 當(dāng)提到
cpu_avx時(shí),這通常是指代碼已經(jīng)針對(duì) AVX (Advanced Vector Extensions) 指令集進(jìn)行了優(yōu)化。AVX 是 Intel 和 AMD 在 x86 架構(gòu)中引入的一組向量處理指令,它提供了更寬的向量寄存器(256 位寬),從而能夠同時(shí)處理更多的數(shù)據(jù)元素,提高了浮點(diǎn)運(yùn)算的吞吐量。
- 當(dāng)提到
-
cpu_avx2
cpu_avx2則表示代碼進(jìn)一步針對(duì) AVX2 指令集進(jìn)行了優(yōu)化。AVX2 是 AVX 的升級(jí)版,同樣使用 256 位寬的向量寄存器,但它增加了更多類型的指令,比如整數(shù)運(yùn)算的支持,并且改進(jìn)了向量加載和存儲(chǔ)的靈活性。AVX2 指令集在 Intel 的 Haswell 架構(gòu)及后續(xù)的處理器中得到支持,以及 AMD 的 Zen 架構(gòu)及之后的處理器。
在編譯時(shí),如果知道目標(biāo)機(jī)器支持這些高級(jí)指令集,編譯器可以選擇啟用相應(yīng)的優(yōu)化標(biāo)志,例如使用 -mavx 或 -mavx2,來(lái)生成利用這些指令集的代碼。
這樣做可以顯著提高某些計(jì)算密集型任務(wù)的性能,如圖像處理、科學(xué)計(jì)算、機(jī)器學(xué)習(xí)等領(lǐng)域中的應(yīng)用。
然而,如果目標(biāo) CPU 不支持這些指令集,嘗試運(yùn)行優(yōu)化后的代碼可能會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。
因此,在實(shí)際部署時(shí),需要確保編譯的代碼與目標(biāo)硬件相匹配。
posted on 2025-02-20 12:28 ercom 閱讀(135) 評(píng)論(0) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)