1. 程式人生 > >python高效能程式設計第一章讀書筆記

python高效能程式設計第一章讀書筆記

計算機底層元件分為三大基本部分:計算單元、儲存單元以及兩者之間的連線。

計算單元:具有將接收到的任意輸入轉換成輸出的能力以及改變當前處理狀態的能力。CPU是最常見的計算單元。它的主要屬性是其每個週期能進行的運算元量以及每秒能完成多少個週期。第一個屬性通過每週期完成的指令數(IPC)來衡量。第二個屬性通過其時鐘速度來衡量。時鐘速度的提高,可以使得每秒進行更多的計算,提高該計算單元所有程式的執行速度。IPC的提高則在向量計算能力上有相當程度的影響。向量計算指的是一次提供多個數據給一個CPU並能同時被操作。這種型別的CPU指令被稱為SIMD(單指令多資料)。

         由於時鐘速度和IPC提升陷入停滯,開始依靠超執行緒技術,亂序執行和多核架構來提高速度。超執行緒技術為主機的作業系統(OS)虛擬了第二個CPU,硬體邏輯則試圖將兩個指令執行緒交錯地插入單個CPU的執行單元。亂序執行允許編譯器檢測出一個線性程式中某部分可以不依賴於之前的工作,也就是說兩個工作能夠以各種順序執行或同時執行。使得當一些指令被阻塞(比如等待一次記憶體訪問),另一些指令得以執行。多核架構指的是給CPU增加更多的核心。但是不一定多核就會更快,阿姆達爾定律認為:如果一個可以執行在多核上的程式有某些執行路徑必須執行在單核上,那麼這些路徑就會成為瓶頸導致最終速度無法加快。

         對於python來說,python的全域性直譯器鎖(GIL),確保Python程序一次只能執行一條指令,無論當前有多少個核心。使得無法使用多核,但是我們可以使用標準庫的multiprocessing,或numexpr、Cython技術,或分散式計算模型來避免。

         儲存單元,用於儲存位元。比如主機板上的暫存器、RAM以及硬碟。所有這些不同型別的儲存單元主要區別在於讀寫資料的速度。且速度與讀寫方式有關,如順序讀取要比隨機讀取快得多。此外還有延時來表示裝置查詢資料所花費的時間。

         比如說判斷一個數是否為質數,首先將number的值儲存在RAM中。為了計算sqrt_number和number_float,將該值傳入CPU中,理想情況下只需要傳一次,它將被儲存在CPU的L1/L2快取中,然後CPU進行兩次計算並將結果傳回RAM儲存。在迴圈部分,我們更希望一次就將number——float和多個i的值傳入CPU進行檢查。

         Python虛擬機器抽象層的影響之一就是向量操作變得不是直接可用。而numpy這樣的外部庫可以通過增加向量化數學操作來幫助我們解決這個問題。

         Python抽象還影響了任何需要為下一次計算儲存L1/L2快取中相關資料的優化。首先是python物件不再是記憶體中最優化的佈局。這是因為python是一種垃圾收集語言----記憶體會被自動分配並在需要時釋放。這會導致記憶體碎片並影響CPU快取的傳輸。

         Python的優勢在於可以輕易呼叫其他系統,正確運用庫可以使python程式碼在速度上和c媲美。

相關推薦

python高效能程式設計第一讀書筆記

計算機底層元件分為三大基本部分:計算單元、儲存單元以及兩者之間的連線。計算單元:具有將接收到的任意輸入轉換成輸出的能力以及改變當前處理狀態的能力。CPU是最常見的計算單元。它的主要屬性是其每個週期能進行的運算元量以及每秒能完成多少個週期。第一個屬性通過每週期完成的指令數(IP

《利用Python進行資料分析》第一讀書筆記

一、重要的Python庫 1. NumPy(Python科學計算的基礎包) 2. pandas(本書用得最多pandas物件是DataFrame) 3. matplotlib(繪製資料圖表得Python庫) 4. IPython(目的是提

《現代前端技術解析》第一讀書筆記(未完成)

服務 異步 網絡請求 會話 開始 註冊 復雜 技術 顯示   今天是2017年6月26日,星期一,開始從第一章看起。第一章主要講的是前端技術的發展概況以及一些必須掌握的瀏覽器基礎知識與常用開發技術。   頁面內容多而復雜,為了保證開發效率,我們可以借助符合特定場景的前端框架

產品經理的那些事第一讀書筆記

工作內容 完成 個人 評審 深入 數據 直銷 分析 img 1.一個產品經理的信仰:好產品能改變世界。 2.為什麽要做產品經理:因為熱愛,改變世界的方法有很多,技術可以改變世界,好的產品也可以,當然還有其他,但我熱愛產品,一件事只有熱愛了,才能持續不斷的去做好,所以我

js設計模式第一 讀書筆記

1、簡單的驗證js function checkName(){ //驗證姓名 } function checkEmail(){ //驗證郵箱 } function checkPassword(){ //驗證密碼 } 上面的程式碼,建立了3個全域性變數,有可能被別人覆蓋

《統計學習方法》李航著 第一讀書筆記

有一個公眾號叫  “夕小瑤的賣萌屋” ,這位公眾號推薦說 李航的《統計學習方法》是一門基礎課。因此我從網上找了找資源 ,著手去看了。覺得寫得確實很棒。 首先,以前看機器學習理論總是單獨看,分著看,覺得關聯規則就是關聯規則,神經網路就是神經網路。但是這本書能讓我有著一種想法,就是將整個機

《第二行程式碼》第一讀書筆記

作者:JiangWeiHu 來源:CSDN 筆者前言 最近在讀郭霖大神的第二行程式碼,藉助第二行程式碼,在這裡我認真梳理Android知識,為了形成自己的知識體系。堅持寫一系列關於第二行程式碼的學習筆記,一是來提升自己的學習能力,堅持每天學習; 二是給自己整理

Python核心程式設計 第一--正則表示式

買了本Core Python Applications Programming。 又一本好書。 第一章正則表示式。 認真看,2天能看完的。 看了6天。 還好,看完了。 做了課後習題,不好在這兒寫,上傳到了GitHub上。 最關鍵是下面這個表

《PRML》第一 讀書筆記.2

模式選擇 回顧前面的多項式擬合,多項式的階數決定了模型的複雜度。另外,正則係數λ 的大小限制了模型的複雜度。那麼什麼樣的模型是最好的模型呢?等價於確定每一個超引數的值。 1. 交叉驗證 將資料按比例分為S(下圖中S=4)份,每次訓練使

《管理的常識》第一讀書筆記

        今天在傑總髮的朋友圈上看到陳春華教授的《管理的常識》的圖片,百度了一下,發現評價很好,於是下載了個電子版,試讀了一章。         書果然寫的很棒,邊讀邊結合自己的經歷、見聞進行思考,受益良多。         好書一定要慢慢讀,計劃本週每天一章,每天讀

《自控力》 【美】凱利·麥格尼格爾 第一讀書筆記

          題記:在CSDN潛水已經快兩年了,看了很多給力的部落格,學到了很多收穫了很多,當時就覺得寫部落格是件好事,即幫到了別人也成長了自己,所以也有寫點部落格的想法。可快兩年過去了,自己的部落格除了草啥都沒有,一直都沒能寫點啥,原因有兩點,一是自己懂得太少,怕的

謝希仁《計算機網路》第七版第一讀書筆記

計算機網路主要是由一些通用的、可程式設計的硬體 (也就是說一定含有CPU)互連而成的。 計算機網路具有通訊功能,但通訊功能並不是計算機網路最主要的功能。 分類: 按作用範圍分: 廣域網 (Wide Area Network) WAN 都會網路 (Metropol

《Ansible自動化運維:技術與佳實踐》第一讀書筆記

Ansible 架構及特點 第一章主要講的是 Ansible 架構及特點,主要包含以下內容: Ansible 軟體 Ansible 架構模式 Ansible 特性 Ansible 軟體 Ansible 的編排引擎可以完成配置管理、流程控制、資源部署等工作。 Ansible 基於 Python語言實現,由

《Linux命令列與shell指令碼程式設計大全》讀書筆記————第一 初識Linux shell

本章內容 1、什麼是Linux 2、Linux核心的組成   1、1 什麼是Linux Linux課劃分為以下四部分 a)Linux核心 b)GNU工具 c)圖形化桌面環境 d)應用軟體   1.1.1 深入探究Linux核心

【Java程式設計思想】讀書筆記(一)第一---第五

Java程式設計思想(第四版)學習筆記 第一章---第五章 第一章:物件導論 1.1抽象過程 1. 2訪問控制 第二章:一切都是物件 2. 1用引用操縱物件 2. 2基本型別 第三章:操作符

《C程式設計習慣》讀書筆記(1-6

最近在看兩本國人寫的書:C程式設計習慣、Linux C程式設計。越看越發現如獲至寶。有時真覺得,看國外的書,都能將晦澀概念深入淺出解釋通透,而國內的書,能切合國人的習慣來解釋和應用知識。以前只青睞國外的書,這兩本國內的電子書本來只想簡單瀏覽一遍鞏固基礎,現在越看越想做讀書筆記,因為實在是很多看似

《Linux命令列與shell指令碼程式設計大全》讀書筆記————第三 基本的bash shell命令

本章內容 1、使用shell 2、bash手冊 3、瀏覽檔案系統 4、檔案和目錄列表 5、管理檔案和目錄 6、檢視檔案內容   3.3 bash手冊 命令: man  xterm  作用:檢視檢視xterm使用者手冊 man命

《JavaScript Dom 程式設計藝術》讀書筆記-第9

SS-DOM,本章內容: style屬性 如何檢索樣式 如何改變樣式三頁一體的網頁 結構層:由HTML或XHTML之類的標記語言負責建立。標籤(tag)也就是尖括號裡的單詞,對網頁內容的語義含義做出了描述。 表示層:由CSS負責完成。CSS描述頁面內容應該如何呈現。定義這樣一個CSS來宣告:文字段應

java程式設計的邏輯讀書筆記——第五

類的擴充套件 介面和抽象類 interface 宣告介面 implements實現介面 介面約定的是功能,而不是具體實現 介面中方法的預設修飾符為public abstract 介面中變數的預設修飾符為public static final 介面

windows 程式設計 第三讀書筆記(上)

     孃的,今天晚上在陽臺做飯把水管一腳踢爆了,水流到下面的住戶的陽臺,讓個老孃們把我罵了一頓,本著做錯事的原則,我裝的很紳士還說了個對不起,擦,真是條純漢子,能屈能伸。