LINUX.ORG.RU

Производительность питонячей mpmath — бенчмаркиг

 , gmpy, , mpmath,


0

2

Портирую одну свою программу с octave на python с целью использования арифметики произвольной точности — хочу статью написать :)

Использую библиотеку mpmath версии 0.19-1 поверх gmpy, которая, судя по документации, устарела и ныне заменяется на gmpy2. Последнюю проверить не могу, не превращая свою систему в слаку, посему прошу помощи ЛОРа по бенчмаркингу mpmath-0.19-1/gmpy2

Код: диагонализация матрицы коэффициентов полинома Чебышева, с.з. — корни (n+1)-ого чебышевского полинома, которые известны аналитически, а i-ое с.ф. — значения i-го полинома на этих корнях.

Вот мой говнокод:

#!/usr/bin/env python

import numpy as np
from mpmath import *

mp.dps=20

def Tpol(n):
    if n > 1:
        C = np.diag([1]*(n-1), 1) + np.diag([1]*(n-1), -1)
        C[0,1] = 2
        C = mp.matrix(C)/2
        xj, Tx = mp.eig(C)
        return (Tx, C, xj)


Tx, C, xj = Tpol(50)
#print C * Tx[:,3] - xj[3] * Tx[:,3]
print libmp.BACKEND 
#n = 5
#print [mp.cos((2*k+1)*mp.pi/2/n) for k in range(n)]
Кому не вломы, прогоните его и запостите вывод. Если укажете процессор/архитектуру будет ещё лучше, но поскольку меня интересуют порядки величины. Вот мой результат:
$ time ./tpol.py 
gmpy

real	0m50.810s
user	0m50.787s
sys	0m0.012s

Как я говорил, интересует скорость с бэкэндом gmpy2

★★★★★
$ time python2 tpol.py
gmpy

real	0m39.706s
user	0m39.557s
sys	0m0.060s
python2-gmpy2-2.0.5-1-i686
python2-mpmath-0.19-1-any   
$ lscpu 
Architecture:          i686
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
Vendor ID:             AuthenticAMD
CPU family:            15
Model:                 43
Model name:            AMD Athlon(tm)64 X2 Dual Core Processor  4200+
Stepping:              1
CPU MHz:               1000.000
CPU max MHz:           2200,0000
CPU min MHz:           1000,0000
BogoMIPS:              2009.78
L1d cache:             64K
L1i cache:             64K
L2 cache:              512K

С питоном 3

$ time python tpol3.py
gmpy

real	0m48.031s
user	0m46.457s
sys	0m0.293s

Во второй половине дня могу прогнать на i3/x86_64

greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 1)

Последнюю проверить не могу, не превращая свою систему в слаку

virtualenv

Deleted
()
Ответ на: комментарий от greenman

gmpy2-2.0.5 mpmath-0.19

$ time python2 tpol.py 
gmpy

real	0m18.440s
user	0m18.420s
sys	0m0.027s
$ lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 69
Model name:            Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
Stepping:              1
CPU MHz:               817.527
CPU max MHz:           1700,0000
CPU min MHz:           800,0000
BogoMIPS:              3392.69
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              3072K
NUMA node0 CPU(s):     0-3
$ time python tpol3.py 
gmpy

real	0m24.819s
user	0m22.263s
sys	0m0.040s
greenman ★★★★★
()
Последнее исправление: greenman (всего исправлений: 2)

Спасибо всем отписавшимся! Импрувмент есть, да, но не на порядки, к сожалению. :( А без этого весь смысл переписывания на питон пропадает, увы. Придётся на плюсах огород городить.

unanimous ★★★★★
() автор топика
Ответ на: комментарий от unanimous

это ты о производительности? лол

anonymous
()
Ответ на: комментарий от unanimous

кстати в твоём тесте под профилировщиком с большим отрывом проц жрёт сам питон, а не функции gmp

anonymous
()
28 апреля 2016 г.
Ответ на: комментарий от unanimous

Надо полагать, код не самый оптимальный.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.