第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么 gmpy2 在復(fù)數(shù)求冪時(shí)如此慢?

為什么 gmpy2 在復(fù)數(shù)求冪時(shí)如此慢?

慕娘9325324 2023-08-15 17:02:31
我在 gmpy2 中使用復(fù)數(shù)并注意到它很慢。我縮小了求冪運(yùn)算符的范圍。起初我以為這只是因?yàn)樗軓?fù)雜。但后來我將它與使用gmpy2 的 mpmath 進(jìn)行了比較,發(fā)現(xiàn)速度要快得多:# tested using gmpy2 2.0.8, mpmath 1.1.0, python 3.8.5>>> import timeit>>> setup = '''import gmpy2 as gmimport mpmatha1 = gm.mpc(-12.5, 34.125)a2 = gm.mpc(17, -45.875)b1 = mpmath.mpc(-12.5, 34.125)b2 = mpmath.mpc(17, -45.875)'''# using gmpy2>>> timeit.timeit('a1 ** a2', setup)87.13848301399992>>> timeit.timeit('a1 ** 2', setup)40.478690218>>> timeit.timeit('pow(a1, 2)', setup)40.70392542999991# using mpmath>>> timeit.timeit('b1 ** b2', setup)51.799312732999965>>> timeit.timeit('b1 ** 2', setup)4.239320562999978>>> timeit.timeit('pow(b1, 2)', setup)4.293315565000057# multiplication comparison>>> timeit.timeit('a1 * a1', setup)0.9900801109999975  # gmpy2>>> timeit.timeit('b1 * b1', setup)4.711916033999955  # mpmath純復(fù)數(shù)冪運(yùn)算非常慢,但 mpmath 仍然比 gmpy2 快 40% 左右。由于 mpmath 是 Python,我認(rèn)為它會(huì)慢得多,但事實(shí)顯然并非如此。gmpy2 怎么這么慢?
查看完整描述

1 回答

?
飲歌長嘯

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊

我很好奇造成差異的原因。我進(jìn)行了四次不同的測試。


# Reference test on Windows 10 that used the same gmpy2

# binaries.


>>> timeit.timeit('a1 ** a2', setup)

60.565931600000006

>>> timeit.timeit('a1 ** 2', setup)

25.686232700000005

>>> timeit.timeit('pow(a1, 2)', setup)

25.684606899999977

>>> timeit.timeit('b1 ** b2', setup)

35.29716189999999

>>> timeit.timeit('b1 ** 2', setup)

2.6226074000000494

>>> timeit.timeit('pow(b1, 2)', setup)

2.6126720999999975

>>>

>>> import gmpy2

>>> gmpy2.version()

'2.0.8'

>>> gmpy2.mp_version()

'MPIR 2.7.2'

>>> gmpy2.mpfr_version()

'MPFR 3.1.4'

>>> gmpy2.mpc_version()

'MPC 1.0.3'

>>>

結(jié)果與問題中的結(jié)果類似。我打印了底層庫的版本。


# Test using WSL with latest Ubuntu version. Same physical

# system as above.


>>> timeit.timeit('a1 ** a2', setup)

31.21574370000002

>>> timeit.timeit('a1 ** 2', setup)

2.3873958000000357

>>> timeit.timeit('pow(a1, 2)', setup)

2.3556844999999953

>>> timeit.timeit('b1 ** b2', setup)

36.35650579999998

>>> timeit.timeit('b1 ** 2', setup)

2.4482329999999592

>>> timeit.timeit('pow(b1, 2)', setup)

2.431874800000003

>>>

>>> import gmpy2

>>> gmpy2.version()

'2.1.0b3'

>>> gmpy2.mp_version()

'GMP 6.2.0'

>>> gmpy2.mpfr_version()

'MPFR 4.0.2'

>>> gmpy2.mpc_version()

'MPC 1.1.0'

>>>

我選擇 WSL 是因?yàn)樗苋菀自?Windows 10 上安裝。gmpy2并且mpmath使用sudo apt install python3-gmpy2和進(jìn)行安裝sudo apt install python3-mpmath。gmpy2比 稍快一些mpmath。


# Test using Hyper-V virtual machine under Windows Server 2016.

# Different physical system but identical specifications.


>>> timeit.timeit('a1 ** a2', setup)

27.467059508984676

>>> timeit.timeit('a1 ** 2', setup)

2.171035467006732

>>> timeit.timeit('pow(a1, 2)', setup)

2.193065536994254

>>> timeit.timeit('b1 ** b2', setup)

31.870763173996238

>>> timeit.timeit('b1 ** 2', setup)

2.019194034015527

>>> timeit.timeit('pow(b1, 2)', setup)

2.0843256690131966

>>> 

>>> import gmpy2

>>> gmpy2.version()

'2.1.0b5'

>>> gmpy2.mp_version()

'GMP 6.2.0'

>>> gmpy2.mpfr_version()

'MPFR 4.0.2'

>>> gmpy2.mpc_version()

'MPC 1.1.0'

>>> 

我在之前的測試中使用了最新的測試版。結(jié)果與Ubuntu版本相同??傮w而言,比 WSL 稍快一些。


# Same as above but using gmpy2 2.0.8 instead of 2.1.0b5.


>>> timeit.timeit('a1 ** a2', setup)

23.692542312986916

>>> timeit.timeit('a1 ** 2', setup)

9.208024947001832

>>> timeit.timeit('pow(a1, 2)', setup)

9.388882965984521

>>> timeit.timeit('b1 ** b2', setup)

32.078784318000544

>>> timeit.timeit('b1 ** 2', setup)

2.027712993003661

>>> timeit.timeit('pow(b1, 2)', setup)

2.123160599003313

>>> 

>>> import gmpy2

>>> gmpy2.version()

'2.0.8'

>>> gmpy2.mp_version()

'GMP 6.2.0'

>>> gmpy2.mpfr_version()

'MPFR 4.0.2'

>>> gmpy2.mpc_version()

'MPC 1.1.0'

>>>

2.0.8最后兩個(gè)測試顯示了和版本之間的差異2.1.0。我對(duì)參數(shù)處理進(jìn)行了重大更改。mpc ** int速度快得多,但mpc ** mpc速度稍慢。(我想我可以修復(fù)這個(gè)回歸......)


Windows 二進(jìn)制文件使用舊版本的底層庫。我正在研究基于使用 mingw-w64 編譯器編譯的最新版本 GMP、MPFR 和 MPC 的 Windows 二進(jìn)制文件。GCC 編譯器將允許 GMP 自動(dòng)為不同的 CPU 選擇正確的代碼路徑。


更新1


我已經(jīng)優(yōu)化過了mpc ** mpc,并且mpc ** int. 的性能回歸mpc ** mpc已得到修復(fù),并且mpc ** int速度更快。


查看完整回答
反對(duì) 回復(fù) 2023-08-15
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)