久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

如何在Core i5 上實現 20 倍的 Python 運行速度?

摘要:Intel Distribution for Python 在今年二月進行了更新——英特爾發布了 Update 2 版本。以“加速”為核心的它,相比原生 Python 環境有多大提升呢?并行計算專家、前英特爾高級工程師 James Reinders 對老東家的產品進行了測試。他對外宣布:在配備四核 i5 的 iMAC 上實現了 20 倍的性能加速!

至于他是怎么做到的,請繼續往下看(含代碼)。

如何在Core i5 上實現 20 倍的 Python 運行速度?

James Reinders

James Reinders:利用 Intel Distribution for Python,我實現了?Python 的 20 倍加速,并且可用單個命令關閉/啟用。這還不是在最優情況下,而在虛擬環境——在 VirtualBox(下文簡稱 VBox) 上運行的 openSUSE?Linux?Tumbleweed(即“滾動版本”,請參考 openSUSE?官網),使用的機器是四核 iMac。

這在?Windows, Linux 或 OS X 都能實現。英特爾并沒有把?openSUSE 加入經他們測試過的 Linux 配置列表中(SUSE Enterprise 在表中),但我在運行中并沒有遇到任何問題。

這就是我怎么做的:

下載?Anaconda 命令行安裝程序,地址為?https://www.continuum.io/downloads?。

安裝:?% bash Anaconda2-4.3.0-Linux-x86_64.sh

安裝英特爾加速器,作為一個單獨的、可開啟關閉的“環境”:% conda config --add channels intel % conda create --name intelpy intelPython2_full Python=2

運行示例程序,看到在我的 openSUSE VBox 設置上有 15 到 20 倍的速度提升。

% source deactivate intelpy

% Python < myprog.py

np.sin

102400 10000 36.1987440586

np.cos

102400 10000 36.1938228607

np.tan

102400 10000 51.487637043

% source activate intelpy

% Python < myprog.py

np.sin

102400 10000 1.76131296158

np.cos

102400 10000 1.83870100975

np.tan

102400 10000 3.38778400421

That s all!? The speed-ups are 20.6X, 19.7X, and 15.2X in this quick test running on a virtual machine.

Here s my little Python program:

% cat myprog.py

import numpy as np

import time

N = 102400

x = np.linspace(0.0123, 4567.89, N)

def mine(x,Z,func,name):

print name;

start = time.time()

for z in range ( 0, Z ) :

y = func(x);

end = time.time()

print N, Z, end - start

return

mine(x,10000,np.sin,'np.sin')

mine(x,10000,np.cos,'np.cos')

mine(x,10000,np.tan,'np.tan')

我花很短時間搞起來這個程序,用來驗證英特爾對加速?NumPy 中??transcendental expression 的承諾。?Cosine, sine 和 tangent 是我還能記得的、搞 TI calculator 時候用的??transcendental,所以我用它們來試。我決定對每一個進行十億級測試——運行超過十萬個數字的函數,重復超過一萬次。

雖然未必是一個很有意思的程序,但對于加速而言是個不錯的測試。

隨時加速?Python

我此前寫過一篇文章,討論“Python 加速”(?“accelerated Python”?)使其更適用于大數據和 HPC 應用。?在速度更快之外,我還展示了,使用 Conda 來開啟/關閉加速是多么得容易。這非常贊,讓安裝它的決定變得更加安全、沒有顧慮——因為該功能是一個可選項。(對新手的提醒:?Anaconda 是針對 Python 算法包的集合,Conda 則是 package manager,即算法包管理器。我兩個都用并且都很喜歡。)

我使用?“conda create”來創造被我稱之為?intelpy 的環境。然后,我能夠使用?“source activate intelpy”、“source deactivate intelpy”來激活、關閉它。

Intel Distribution for Python 帶來的大幅加速能力,讓?“accelerated Python”?變得更實用更讓人信服。

值得注意的是,?“accelerated Python” 只是使用更快的??Python 算法庫,不需要對代碼做任何改動。當然,我們的 Python 代碼必須使用了某些加速的東西,才能從中獲益。

英特爾通過三大方面實現 Python 加速:

利用多核;

利用矢量指令(SIMD),比如 SSE, AVX, AVX2 和 AVX-512;

使用英特爾 Math Kernel Library?(Intel MKL) 的更先進算法。

對于運行于矢量或矩陣上的程序,上述這些都會生效。對于偶爾的單獨?cosine,我們不應該期待大幅速度提升。同樣的,對于單核 CPU,我們也不應該有性能提升的幻想。當然,英特爾 72 核協處理器?Xeon Phi 會在大量多核應用的跑分中領先。在我的例子中,我的虛擬機只利用 iMac i5 的四個核心。

FFT 在 4 核虛擬機上有八倍性能提升

我也試了下??Fast Fourier Transforms (FFT)。使用與原始程序相同的設置,我只是按照如下方式運行?FFT 程序:

% source deactivate intelpy

% Python < myfftprog.py

fft

5000 2.22796392441

fft

7000 8.74916005135

% source activate intelpy

% Python < myfftprog.py

fft

5000 0.277629137039

fft

7000 1.11230897903

速度提升為 8 和 7.9 倍。當然,還是運行于四核 iMac 上的 openSUSE 和 VBox。

這是我的快速?FFT 程序:

% cat myfftprog.py

import numpy as np

import numpy.random as rn

import time

def trythis(Z):

mat = rn.rand(Z,Z) + 1j * rn.randn(Z,Z)

print 'fft'

start = time.time()

# 2D transform on a complex-valued matrix:

result = np.fft.fft2(mat)

end = time.time()

print Z, end - start

return

trythis(5000);

trythis(7000);

新 Python 加速

以下是 Intel Distribution for Python 全新 Update 2 版本中,得到了新的速度提升的方面:

優化 NumPy 的算術和?transcendental 表達

Transcendental expressions 包含我在快速示例程序里用的 cosine, sine 和 tangen。這些優化的核心是對 NumPy 的改變,使得 primitives (在 ndarray 數據上進行運算)能選擇性地使用英特爾 MKL Short Vector Math Library (SVML)?和 MKL Vector Math Library (VML) 的能力。這使得 Python 利用處理器的最新矢量能力,包括多核優化和 AVX/AVX2/AVX-512。英特爾團隊表示,他們利用 Xeon Phi,實現過?NumPy 算術和 transcendental 運算在 vector-vector 和 vector-scalar 上最高 400 倍的速度提升。

優化?NumPy 和 SciPy 的 FFT

這些優化的核心是英特爾 MKL,一系列 NumPy、SciPy 函數都能用到它對 FFT 的原生優化。這些優化包含真實、復雜的數據類型,單精度和雙精度都包含 (?single and double precision),從一維到多維的數據,in place 或者?out of place。英特爾團隊見到過這項更新帶來 60 倍的性能提升。這使得?Python 的性能可與原生?C/C++ 程序相媲美。

優化內存管理

Python 是一門動態語言,為用戶管理內存。Python 應用的性能,在很大程度上取決于內存運行的性能,這包括內存分配、再分配(de-allocation)、復制和移動。英特爾提供的加速版本 Python,能在 NumPy?分配數組時保證最佳的??alignment,所以 NumPy、SciPy 的運算函數,能從相應排列的 SIMD 內存訪問指令獲益。英特爾表示最大的提升來自于對內存復制和移動運算的優化。

更快——能用?Conda 方便地關閉/啟用

Anaconda 英特爾渠道的最新加速版本 Python,為 Python 程序帶來顯著性能優化,而無需改變代碼。下載、安裝也很方便。

我真的特喜歡用?Conda 把它開啟/關閉這一功能。這方便了性能對比,并且讓我感到安心——沒有這個功能的話,我會對切換到超快的數學函數感到猶豫。

via?infoworld

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 齐齐哈尔市| 兴安县| 兴城市| 晋城| 义马市| 太仓市| 信丰县| 来宾市| 基隆市| 韩城市| 游戏| 西安市| 大理市| 丰顺县| 武城县| 奈曼旗| 临安市| 富宁县| 普陀区| 乌审旗| 新野县| 成都市| 庆阳市| 鄂伦春自治旗| 延津县| 东方市| 开江县| 锦屏县| 舟曲县| 桑日县| 九寨沟县| 太白县| 获嘉县| 武强县| 马龙县| 清水河县| 应城市| 岑巩县| 宁强县| 托克逊县| 塔河县|