多核計算與程序設計

多核計算與程序設計 pdf epub mobi txt 電子書 下載 2025

周偉明 著
圖書標籤:
  • 多核計算
  • 並行編程
  • 程序設計
  • 高性能計算
  • 計算機體係結構
  • OpenMP
  • MPI
  • CUDA
  • 異構計算
  • 並發編程
想要找書就要到 新城書站
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 華中科技大學齣版社
ISBN:9787560950969
版次:1
商品編碼:10036807
包裝:平裝
叢書名: 華中科技大學齣版社計算機叢書
開本:16開
齣版時間:2009-03-01
頁數:656
正文語種:中文

具體描述

編輯推薦

  《多核計算與程序設計》特色內容是並行遍曆的基本方法,常見並行算法如並行搜索、並行排序、並行數值計算等在多核係統中的實現。
  共享資源分布式計算的基本編程模式和方法,分布式隊列,它能自動給每個綫程賦予一個本地隊列,它是基於偷取的共享隊列和隊列池來實現的。
  分布式查找,包括分段鎖的哈希錶,動態負載平衡的多級查找等。
  分布式內存管理,它自動給每個綫程生成一個本地的內存管理器,並且幾乎不需要使用鎖進行內存分配和釋放(搶奪式內存管理)。
  任務圖分解與調度及實現方法,非嵌套任務調度,可用於網絡服務器軟件等地方進行任務調度。
  嵌套任務調度,是另一種更廣泛的任務調度方法,可以用它實現各種並行計算。
  各種程序和算法中的僞共享問題的處理,Lock-Free編程基礎知識。

內容簡介

  《多核計算與程序設計》主要介紹適應於多核(或多處理器)計算機係統的算法和程序,共分為五個部分進行講解。第1部分介紹多核編程的基礎知識,包括多核編程常見問題、鎖競爭、加速比、負載均衡等基本概念,多綫程退齣算法、讀寫鎖、鏇轉鎖、原子操作等多綫程編程基礎知識,基於OpenMP標準的並行程序設計基礎等;
  第2部分介紹基礎的數據結構與算法,包括數組、鏈錶、哈希錶、二叉樹、AVL樹、復閤二叉樹等基本數據結構,在鏈錶那章中還講解瞭多綫程並行遍曆的基本方法。
  第3部分介紹多核並行計算方麵的基礎知識,並行編程包括常用的編程模式如分治模式、流水綫模式、任務圖分解與調度模式、動態任務調度模式等,並行搜索包括順序搜索及終止檢測算法,並行最短路徑搜索等,並行排序包括並行快速排序、並行歸並排序、並行基數排序等,並行數值計算包括並行矩陣乘法、並行前綴和計算等方麵的內容。本部分介紹的各種並行算法和程序中,重點介紹如何解決多核係統中的計算隨CPU核數的擴展性,CPU Cache僞共享方麵的問題。
  第4部分介紹多核共享資源計算方麵的內容,也是《多核計算與程序設計》中最重要的內容,講解瞭分布式計算設計模式如綫程分組競爭模式、條件同步模式、批量私有化處理模式、數據本地化模式等。這部分中講解瞭《多核計算與程序設計》中幾個最重要的程序:分布式隊列中實現瞭自動讓每個綫程帶有一個本地隊列、分布式查找中介紹瞭分段鎖的哈希錶、動態負載平衡的分布式查找等,分布式內存管理則介紹瞭適應多核的內存管理方案,尤其是基於搶奪式的分布式內存管理算法,在分配和釋放共享內存時也幾乎不需要使用鎖,性能優異。
  第5部分介紹任務分解與調度方麵的知識,這也是《多核計算與程序設計》中最重要的內容,包括任務圖分解與調度的實現方法,動態任務分解與調度的實現方法等。其中還介紹瞭使用動態嵌套任務調度進行並行計算的方法,給齣瞭用動態嵌套任務調度實現ParallelForo、並行快速排序、並行歸並的實例。
  最後一章中還介紹瞭Lock-Free編程(使用CAS原子操作進行編程)的基礎知識,如ABA問題,內存刪除問題等,並給齣瞭一個Lock-Free的隊列的實現實例。

作者簡介

  周偉明,1994年畢業於上海交通大學,曾就職於美國加州的DASCOM Inc.公司和華為技術有限公司等企業。擔任過網絡安全軟件、網絡服務器軟件、機器翻譯軟件、工具軟件、嵌入式係統軟件等研發工作,親自編寫過的源代碼逾40萬行。著有《多任務下的數據結構與算法》(華中科技大學齣版社齣版)、《軟件測試實踐》(電子工業齣版社齣版)。

內頁插圖

目錄

第1部分 基礎知識
1 多核計算概述
1.1 多核CPU概述
1.1.1 多核計算將成為發展趨勢
1.1.2 多核CPU硬件架構介紹
1.1.3 多核給程序員帶來的機遇和挑戰
1.2 多核編程會遇到那些問題
1.2.1 並發性問題
1.2.2 CPU飢餓問題
1.2.3 任務的分解與調度問題
1.2.4 加速比性能問題
1.2.5 節能環保問題
1.2.6 擴展性問題
1.3 多核編程與單核多綫程編程的區彆
1.3.1 鎖競爭導緻的串行化的區彆
1.3.2 綫程分解與執行的區彆
1.3.3 CPU核負載平衡的區彆
1.3.4 任務調度策略的區彆
1.3.5 CPU Cache存取的區彆(僞共享問題)
1.3.6 任務優先級搶占的區彆
1.3.7 串行計算與並行及分布式計算的區彆
1.4 多核編程與多機分布式編程的區彆
1.4.1 共享存儲與分布式存儲的區彆
1.4.2 分布式計算的區彆
1.4.3 編程環境上的區彆
1.5 加速比係數
1.5.1 阿姆達爾定律
1.5.2 Gustafson定律
1.5.3 阿姆達爾定律和Gustafson定律的等價性
1.5.4 Karp-Flatt度量
1.5.5 實際情況中影響加速比係數的因素
1.5.6 並行計算開銷情況下的加速比
1.6 鎖競爭問題及對加速比的影響
1.6.1 綫程粒度因子與鎖粒度因子
1.6.2 鎖競爭的性能情況
1.6.3 集中式鎖競爭中的加速比分析
1.6.4 隨機鎖競爭中的加速比分析
1.6.5 分布式鎖競爭的加速比分析
1.6.6 無鎖編程的加速比分析
1.7 負載平衡問題對加速比的影響
1.7.1 影響負載平衡的主要因素
1.7.2 負載平衡的評價指標
1.7.3 負載平衡情況下的加速比
1.8 參考文獻

2 多綫程編程基礎
2.1 多綫程編程基本概念
2.1.1 綫程
2.1.2 鎖
2.1.3 各種係統中常用的鎖操作及信號量操作函數
2.1.4 用C++實現鎖的自動釋放
2.1.5 原子操作
2.1.6 鎖與原子操作的區彆
2.1.7 有鎖計算、無鎖計算與本地計算的概念
2.2 各種鎖性能比較
2.2.1 各種鎖在單綫程情況下的性能
2.2.2 各種鎖在多綫程集中式鎖競爭情況下的性能
2.2.3 各種鎖在多綫程分布式鎖競爭情況下的性能
2.3 讀寫鎖算法
2.3.1 讀寫鎖概念的引齣
2.3.2 讀寫鎖算法的分析和實現
2.3.3 讀寫鎖的編碼實現
2.4 多綫程退齣算法
2.4.1 單個子綫程退齣算法
2.4.2 多個綫程訪問共享資源時的退齣
2.4.3 有鎖的多綫程資源釋放退齣算法實現
2.4.4 無鎖的退齣算法
2.4.5 多綫程退齣算法的使用
2.5 參考文獻

3 OpenMP程序設計
3.1 OpenMP基本概念
3.1.1 fork/join並行執行模式的概念
3.1.2 內存模型
3.1.3 性能例子
3.1.4 編譯器對OpenMP的支持
3.2 OpenMP編程模型
3.2.1 OpenMP編譯指導語句格式
3.2.2 OpenMP主要命令
3.2.3 OpenMP主要子句
3.2.4 OpenMP主要庫函數
3.3 綫程創建與工作分攤
3.3.1 parallel命令
3.3.2 for和parallel for命令
3.3.3 if子句(條件執行並行)
3.3.4 動態設置並行循環的綫程數量
3.3.5 循環並行化的問題
3.3.6 sections和section命令
3.3.7 single命令
3.3.8 master命令
3.4 數據處理
3.4.1 private子句
3.4.2 firstprivate子句
3.4.3 lastprivate子句
3.4.4 threadprivate子句
3.4.5 shared子句
3.4.6 default子句
3.4.7 reduction子句
3.4.8 copyin子句
3.4.9 copyprivate子句
3.5 任務調度
3.5.1 Schedule子句用法
3.5.2 靜態調度(static)
3.5.3 動態調度(dynamic)
3.5.4 guided調度(guided)
3.5.5 runtime調度(rumtime)
3.5.6 任務調度與僞共享問題
3.6 綫程間的同步
3.6.1 barrier命令
3.6.2 critical命令
3.6.3 atomic命令
3.6.4 ordered命令和子句
3.6.5 nowait子句
3.6.6 flush命令
3.7 OpenMP庫函數詳解
3.7.1 執行環境函數
3.7.2 鎖操作函數
3.7.3 時間操作函數
3.8 OpenMP環境變量
3.8.1 OMP_DYNAMIC
3.8.2 OMP_NUM_THREADS
3.8.3 OMP_NESTED
3.8.4 OMP_SCHEDULE
3.9 OpenMP內部控製變量及相關流程
3.9.1 內部控製變量
3.9.2 任務調度流程
3.9.3 綫程數量決定流程
3.10 參考文獻

第2部份 基礎數據結構與算法
4 數組
4.1 棧
4.1.1 棧的基本概念
4.1.2 棧的編碼實現
4.1.3 多綫程棧的實現
4.2 對數組進行快速排序
4.2.1 排序算法介紹
4.2.2 串行快速排序基本思想
4.2.3 串行快速排序的代碼實現
4.2.4 非遞歸的快速排序算法
4.2.5 快速排序算法的復雜度分析
4.3 對數組進行查找
4.3.1 順序查找
4.3.2 二分查找
4.4 實例:用數組管理一個HOOK功能
4.4.1 單個函數的HOOK實現
4.4.2 多個函數的HOOK實現
4.4.3 HOOK功能的應用簡介
4.4.4 HOOK使用的注意事項
4.5 參考文獻

5 鏈錶
5.1 單嚮鏈錶
5.1.1 存儲錶示
5.1.2 接口設計
5.1.3 添加節點到鏈錶頭部
5.1.4 基本功能編碼實現
5.2 單嚮鏈錶的排序
5.2.1 插入排序
5.2.2 歸並插入排序
5.3 雙嚮鏈錶
5.3.1 雙嚮鏈錶的基本概念
5.3.2 雙嚮鏈錶的設計
5.3.3 雙嚮鏈錶的操作接口
5.3.4 雙嚮鏈錶的編碼實現
5.4 鏈錶的逐個節點遍曆
5.4.1 逐個節點遍曆基本概念
5.4.2 逐個節點遍曆編碼實現
5.5 多綫程遍曆算法
5.5.1 多綫程鏈錶的設計和編碼實現
5.5.2 多綫程鏈錶的4種遍曆方案
5.5.3 多個綫程同時遍曆的情況
5.6 實例:使用鏈錶管理短信息係統的CACHE
5.6.1 短信息係統的CACHE管理基本概念
5.6.2 短信息係統的發送和接收分析
5.6.3 短信息係統CACHE管理的編碼實現

6 哈希錶
6.1 哈希錶
6.1.1 哈希錶的基本概念
6.1.2 哈希錶的索引方法
6.1.3 哈希錶的衝突解決方法
6.1.4 哈希錶基本操作的源代碼
6.2 哈希鏈錶
6.2.1 哈希錶和數組、鏈錶的效率比較
6.2.2 時間效率和空間效率的關係
6.2.3 哈希鏈錶的基本概念
6.2.4 哈希鏈錶的操作
6.2.5 哈希鏈錶的編碼實現
6.3 實例:WebServer的動態CACHE文件管理
6.3.1 WebServer的動態CACHE文件管理基本概念
6.3.2 CACHE文件管理功能的設計
6.3.3 CACHE文件管理功能的編碼實現
6.4 參考文獻

7 普通樹與二叉樹
7.1 普通樹
7.1.1 普通樹的描述方法
7.1.2 樹的操作接口設計
7.1.3 樹的遍曆算法
7.1.4 樹的編碼實現
7.1.5 使用樹的遍曆算法來實現Xcopy功能
7.2 二叉樹
7.2.1 二叉樹的基本概念
7.2.2 二叉樹的樹梢及二叉樹的高度
7.2.3 二叉樹的描述方法
7.3 二叉排序樹
7.3.1 二叉排序樹的基本概念
7.3.2 二叉排序樹的查找
7.3.3 二叉排序樹的插入
7.3.4 二叉排序樹的刪除
7.3.5 二叉排序樹的遍曆
7.3.6 二叉排序樹的鏇轉操作

8 AVL搜索樹
8.1 AVL搜索樹的基本概念
8.2 AVL搜索樹的插入
8.2.1 插入操作需要考慮的問題
8.2.2 不存在不平衡節點的情況分析
8.2.3 不平衡A節點的情況分析
8.2.4 存在不平衡節點的四種情況分析
8.2.5 LL型不平衡情況的調整
8.2.6 LR型不平衡情況的調整
8.2.7 插入操作的僞代碼描述
8.3 AVL搜索樹的刪除
8.3.1 A節點的確定
8.3.2 幾種不平衡情況的分析
8.3.3 L0型調整分析
8.3.4 L-1型調整分析
8.3.5 L1型調整分析
8.3.6 刪除操作的僞代碼描述
8.4 負載平衡的AVL樹
8.4.1 基本概念的引齣
8.4.2 插入操作中負載因子的調整
8.4.3 刪除操作中負載因子的調整
8.4.4 L0和L-1型調整分析
8.4.5 L1型調整分析
8.5 AVL樹的源代碼
8.5.1 數據結構定義
8.5.2 創建、釋放、查找等操作
8.5.3 鏇轉操作函數
8.5.4 插入操作函數
8.5.5 刪除操作函數
8.6 參考文獻

9 復閤二叉樹
9.1 哈希紅黑樹
9.1.1 哈希紅黑樹的基本概念
9.1.1 哈希紅黑樹的查找
9.1.3 哈希紅黑樹的插入
9.1.4 哈希紅黑樹的刪除
9.1.5 哈希紅黑樹的釋放
9.1.6 哈希紅黑樹的遍曆
9.1.7 哈希紅黑樹的編碼實現
9.1.8 哈希紅黑樹的效率分析
9.2 哈希AVL樹
9.2.1 哈希AVL樹的基本概念
9.2.2 哈希AVL樹的查找
9.2.3 哈希AVL樹的插入
9.2.4 哈希AVL樹的刪除
9.2.5 哈希AVL樹的釋放
9.2.6 哈希AVL樹的遍曆
9.2.7 哈希AVL樹的編碼實現
9.3 復閤數據結構的分類
9.4 抗DoS/DdoS攻擊的實例
9.4.1 DoS/DdoS攻擊的概念
9.4.2 常見DoS/DdoS攻擊手段及防範策略
9.4.3 抗DoS/DdoS攻擊的實現
9.4.4 抗DoS/DdoS攻擊的編碼實現
9.5 參考文獻

第3部分 並行計算
10 並行程序設計模式
10.1 基本概念
10.1.1 強並行計算與弱並行計算
10.1.2 並行程序設計模式的基本思路
10.2 模式數據分解模式
10.3 分治模式
10.3.1 子問題求解時的負載平衡問題
10.3.2 子問題的解的閤並可能引起的串行化問題
10.4 流水綫模式
10.5 任務並行模式
10.6 任務調度模式
10.6.1 任務圖調度模式
10.6.2 動態任務調度模式

11 並行搜索
11.1 並行順序搜索
11.1.1 並行搜索指定數據
11.1.2 並行搜索最大數
11.1.3 終止檢測算法
11.2 串行Dijkstra最短路徑搜索
11.2.1 Dijkstra最短路徑算法的描述
11.2.2 Dijkstra最短路徑算法的過程圖解
11.2.3 僞代碼描述
11.2.4 算法流程圖
11.2.5 C/C++代碼實現
11.3 並行最短路徑算法
11.3.1 Dijkstra算法的並行化
11.3.2 並行Dijkstra算法的代碼實現
11.3.3 其他並行最短路徑算法的介紹和分析
11.4 參考文獻

12 並行排序
12.1 並行排序概述
12.2 冒泡排序
12.2.1 串行冒泡排序
12.2.2 奇偶排序
12.3 快速排序
12.3.1 串行快速排序基本思想
12.3.2 串行快速排序的代碼實現
12.3.3 快速排序並行化方法
12.3.4 開源項目mcstl中的並行快速排序
12.3.5 基於任務竊取的快速排序
12.4 並行歸並排序
12.4.1 串行歸並算法
12.4.2 Cole並行歸並算法
12.4.3 並行快速歸並排序
12.5 基數排序
12.5.1 串行鏈式基數排序
12.5.2 串行數組基數排序
12.5.3 一步到位的分層排序
12.5.4 負載平衡的並行基數排序
12.5.5 分區的並行基數排序

13 並行數值計算
13.1 多核並行數值計算麵臨的問題
13.1.1 Cache的命中率問題
13.1.2 僞共享問題
13.2 求和及前綴求和
13.3 矩陣相加
13.4 矩陣相乘
13.4.1 基本概念
13.4.2 串行算法
13.4.3 並行算法
13.5 矩陣嚮量相乘
13.6 並行隨機數生成
13.7 參考文獻

第4部分 共享資源分布式計算
14 分布式計算設計模式
14.1 基本概念
14.1.1 共享資源的計算分解
14.1.2 共享資源計算的負載均衡問題
14.1.3 共享資源計算的算法設計思路與方法
14.2 綫程分組競爭模式
14.2.1 標準的綫程分組競爭模式
14.2.2 綫程分組競爭模式的變種
14.3 綫程隨機競爭模式
14.3.1 基本概念
14.3.2 加速比性能的保證
14.4 數據本地化模式
14.4.1 取得比單核多綫程更好的性能
14.4.2 數據本地化模式
14.4.3 優缺點分析
14.5 分布式數據結構設計
14.5.1 復閤數據結構設計方法
14.5.2 分布式數據結構設計
14.5.3 分布式數據結構主要問題
14.6 參考文獻

15 分布式隊列
15.1 串行隊列
15.1.1 簡單環形隊列
15.1.2 STL中的Deque
15.1.3 動態環形隊列
15.2 隊列池
15.2.1 共享隊列
15.2.2 消息隊列
15.2.3 隊列池
15.2.4 隊列池的幾種實現方案
15.2.5 隊列池的使用實例
15.3 帶本地計算的分布式隊列
15.3.1 基本思想
15.3.2 本地化隊列的實現
15.3.3 任務偷取隊列的實現
15.3.4 分布式隊列的實現
15.3.5 綫程池CThreadPool的實現
15.3.6 綫程池CThreadPool的代碼實現
15.3.7 CDistributedQueue源代碼
15.3.8 CDistributedQueue的使用實例

16 分布式查找
16.1 多核中查找的問題與主要思路
16.2 靜態負載平衡的二級查找結構設計
16.2.1 二級查找結構設計
16.2.2 分布式哈希AVL樹
16.2.3 分布式順序AVL樹
16.3 動態負載平衡的多級查找結構設計
16.3.1 分布式查找中的負載平衡問題
16.3.2 多級查找結構設計方法
16.3.3 多級查找錶的查找算法
16.3.4 多級查找錶的插入操作算法
16.3.5 多級查找錶的刪除操作算法
16.3.6 多級順序錶
16.3.7 多級索引AVL樹
16.3.8 分布式哈希多級AVL樹
16.3.9 分布式順序多級AVL樹
16.4 多核環境中查找算法的選用方法
16.5 動態WebCache設計實例

17 分布式內存管理
17.1 多核內存管理的基本思想
17.1.1 內存管理方麵的需求
17.1.2 多核係統中的內存管理思路
17.2 等尺寸內存管理
17.2.1 Freelist內存管理基本概念
17.2.2 Freelist編碼實現
17.2.3 FreeLists內存管理
17.3 Intel 開源項目TBB中的內存管理
17.3.1 僞共享問題
17.3.2 Cache對齊的內存管理
17.3.3 數據結構
17.3.4 將內存管理器映射到綫程
17.3.5 分配和釋放算法
17.3.6 綫程退齣時的內存迴收
17.4 搶奪式內存管理算法
17.4.1 算法基本思想
17.4.2 碎片重組迴收利用技術
17.4.3 搶奪式算法的詳細算法流程
17.4.4 代碼實現
17.5 僞共享問題的深入分析
17.5.1 內存釋放時的僞共享問題
17.5.2 僞共享問題的概率分析
17.5.3 用戶程序使用內存過程中的僞共享問題
17.5.4 分布式內存管理的進一步改進措施
17.6 參考文獻

第5部分 任務分解與調度
18 任務圖分解與調度
18.1 任務分解與調度的問題
18.1.1 使用OpenMP調度的問題
18.1.2 任務圖調度模型
18.1.3 任務圖調度算法簡介
18.2 任務組調度算法
18.2.1 基本思路
18.2.2 任務組調度算法
18.2.3 算法流程圖
18.2.4 數據結構與接口設計
18.2.5 代碼實現
18.2.6 任務組調度的應用分析
18.2.7 誤差下降調度算法
18.3 任務圖調度算法
18.3.1 任務圖的分層算法
18.3.2 分層算法過程圖解
18.3.3 數據結構和接口設計
18.3.4 分層算法的代碼實現
18.3.5 任務調度器的代碼實現
18.3.6 實例:任務圖調度器的使用
18.4 手工任務分解的原則和方法
18.4.1 任務間負載均衡的影響因素
18.4.2 任務分解原則和方法
18.5 參考文獻

19 動態任務分解與調度
19.1 動態任務分解的兩種類型
19.2 非嵌套型動態任務調度
19.2.1 網絡服務器軟件中的任務調度
19.2.2 使用分布式隊列的調度方法
19.2.3 CTaskScheduler的設計
19.2.4 CTaskScheduler的代碼實現
19.3 嵌套型動態任務調度
19.3.1 基本思想
19.3.2 CNestTaskScheduler的設計
19.3.3 CNestTaskScheduler的代碼實現
19.3.4 CNestTaskScheduler使用方法
19.4 實例:用任務調度器實現parallel_for
19.4.1 parallel_for的實現
19.4.2 用parallel_for進行並行快速排序
19.4.3 用parallel_for進行並行歸並
19.5 參考文獻

20 Lock-Free編程基礎
20.1 Lock-Free編程基本概念和問題
20.1.1 CAS原子操作
20.1.2 ABA問題
20.1.3 ABA問題的解決方法
20.1.4 內存刪除問題
20.1.5 數據競爭問題
20.2 Lock-Free的隊列
20.2.1 無鎖隊列的鏈式實現方法
20.2.2 串行實現方法
20.2.3 齣隊操作的Lock-Free實現
20.2.4 進隊操作的Lock-Free實現
20.2.5 CLockFreeQueue的實現代碼
20.3 Lock-Free程序的問題分析
20.4 參考文獻
附錄1 本書代碼和CAPI開源項目源文件對照錶
附錄2 多核編程的四層境界

精彩書摘

  第1部分 基礎知識
  1 多核計算概述
  1.1 多核CPU概述
  1.1.1 多核計算將成為發展趨勢
  1.單核CPU的發展限製
  在過去的幾十年裏,個人PC的CPU速度的發展一直按照摩爾定律進行——半導體廠商能夠集成在芯片中的晶體管數量每l8~24個月翻一番,反映到實際使用中就是處理器的時鍾頻率每18~24個月增加一倍。因此,長期以來提高處理器的主頻成為提高CPU速度的不二法則。目前,單核CPU的速度已超過3 GHz。提高主頻會增加處理器的功耗和設計的復雜度,其中最大的睏難就是提高主頻所帶來的高發熱問題;如果繼續提高主頻,高發熱問題將成為不可剋服的障礙,它會導緻芯片運行不穩定,因此目前主頻的提升空間已經不大。
  在單核時代,提高性能的另一手段是用superscalar(超標量)處理器的方式,讓處理器在一個時鍾周期內執行多條指令。超標量處理器通常有兩個或多個處理單元,利用這些硬件資源,需要對軟件進行精心設計;要適應多流水綫,需要對軟件進行大量的修改,這些都會影響軟件的可移植性。

前言/序言

  我的工作要求我跟蹤、瞭解軟件技術各領域的重要進展。為此,除瞭頻繁閱讀最新的技術新聞,請教於各路高人,我還必須經常留心市麵上的技術圖書。
  大約是在2006年5月,我在中關村圖書大廈看到一本《多任務下的數據結構與算法》,作者周偉明,這本書當即引起瞭我的興趣。
  自從2005年初Herb Sutter發錶名為《免費午餐已經結束》的著名文章以來,多核計算就一直是整個技術社群關注的熱點問題之一。不過,大傢的注意力更多地集中在諸如Java.concurrent、MPI、OpenMP、Intel TBB等程序庫和Pipelining、MapReduce等編程模式上,希望能夠藉助一些工具來規避並發程序設計所帶來的智力挑戰。毫無疑問,由於並發程序所具有的復雜性和各種“詭異”問題,在軟件項目實施中,應盡可能利用現成的模式和工具,而要對“土法煉鋼”式的“創新”保持審慎。然而,這並不意味著開發者可以輕輕地“站在巨人肩膀上”;恰恰相反,如果沒有自下而上地對並發多任務程序設計下一番苦功進行研究的話,這些模式和工具在我們手中反而可能成為無知和錯誤的放大器,貽害無窮。《多任務下的數據結構與算法》這本書的齣發點,即是以並發和多任務的角度重新審視算法與數據結構這樣最基本、最重要的知識,從根本上幫助讀者建立對多任務程序本質的正確觀念、知識體係和關鍵技能,對此我是非常認可的。
現代科技發展中的數字藝術:從像素到沉浸式體驗 摘要 本書旨在探索數字藝術領域,從其最初的像素化錶達形式,逐步深入到當前蓬勃發展的沉浸式互動體驗。我們將追溯數字藝術的演進軌跡,審視不同媒介與技術對藝術創作的影響,並深入剖析藝術傢如何運用數字工具突破傳統界限,創造齣前所未有的視覺、聽覺乃至觸覺的感知體驗。全書將以豐富的案例、深入的理論分析以及對未來趨勢的展望,為讀者勾勒一幅全麵而生動的數字藝術全景圖。 第一章:像素的誕生與早期探索——數字藝術的基石 本章將帶領讀者迴到數字藝術的起源。我們將考察早期的計算機圖形學發展,瞭解像素作為構成數字圖像最基本單位的意義。從那些粗糙但充滿實驗精神的屏幕畫麵,到早期計算機遊戲的美術設計,再到數字動畫的萌芽,我們將分析這些作品在技術限製下的創意錶達。 1.1 早期計算機圖形學的發展 文本模式的藝術:ASCII Art的趣味與局限。 矢量圖形的齣現:綫條的精確與動態的可能性。 像素畫的時代:低分辨率下的色彩構圖與風格形成。 1.2 計算機在藝術創作中的初步應用 數字繪畫的先驅:早期數字繪畫軟件與技術。 計算機輔助設計(CAD)在視覺藝術中的影響。 計算機生成的音樂與視覺的結閤。 1.3 早期數字藝術傢的探索與實驗 案例分析: 關注幾位在數字藝術早期階段具有開創性貢獻的藝術傢,分析他們的創作理念、使用的技術以及作品的意義。例如,探討 Manfred Mohr、Vera Molnár 等藝術傢如何將數學、算法與視覺藝術相結閤。 技術迴顧: 介紹當時主流的計算機硬件和軟件,以及它們如何成為藝術傢手中新的錶達工具。 第二章:數字媒介的多元化——從二維到三維的飛躍 隨著計算機技術的飛速發展,數字媒介不再局限於二維屏幕。本章將聚焦於數字藝術在三維空間中的拓展,以及新興媒介如數字雕塑、虛擬現實(VR)和增強現實(AR)的崛起。我們將探討藝術傢如何利用這些新的工具和平颱,構建更具深度和沉浸感的藝術作品。 2.1 三維建模與數字雕塑 從綫框模型到實體模型:三維建模技術的演進。 數字雕塑軟件的應用:ZBrush, Maya, Blender等工具在藝術創作中的地位。 3D打印技術與數字雕塑的結閤:實體化藝術品的可能性。 2.2 互動藝術與動態影像 實時渲染與交互式裝置:觀眾參與如何改變藝術體驗。 數據可視化作為藝術錶達:將抽象數據轉化為生動的視覺語言。 動態影像的敘事力量:數字動畫、視頻藝術的創新。 2.3 虛擬現實(VR)與增強現實(AR)的藝術邊界 VR藝術: 構建完全沉浸式的虛擬空間,讓觀眾“走進”藝術作品。 案例分析: 探討一些成功的VR藝術項目,分析它們如何在虛擬環境中營造情感共鳴和敘事體驗。例如,介紹一些沉浸式敘事體驗或虛擬博物館。 AR藝術: 將數字信息疊加於現實世界,模糊虛擬與現實的界限。 案例分析: 分析AR技術如何在公共空間、展覽中為觀眾帶來新的互動方式。例如,介紹通過AR手機應用與雕塑互動,或者在特定地點觸發數字動畫。 2.4 媒介融閤與跨界藝術 音樂、影像、錶演與數字技術的融閤。 生物藝術、科學藝術與數字技術的結閤。 第三章:算法與生成藝術——智能的創造力 算法在現代藝術創作中的作用日益凸顯。本章將深入探討生成藝術(Generative Art)的概念,以及藝術傢如何運用數學、代碼和人工智能(AI)生成獨特的藝術作品。我們將考察算法在創作過程中的角色,以及它如何挑戰我們對“作者”和“原創性”的理解。 3.1 生成藝術的原理與實踐 從隨機性到確定性:算法在藝術創作中的應用。 分形藝術、細胞自動機藝術的數學美學。 使用Processing, p5.js等工具進行生成藝術創作。 3.2 人工智能(AI)與藝術創作 AI圖像生成: DALL-E, Midjourney等工具在藝術領域的應用與爭議。 案例分析: 探討AI生成的藝術作品如何挑戰傳統的創作模式,以及AI在輔助藝術傢創作中的潛力。分析AI生成的圖像如何被藝術傢二次創作,或作為靈感來源。 AI音樂生成與文學創作。 AI在交互藝術中的應用: 例如,AI驅動的互動敘事或動態變化的藝術裝置。 3.3 算法的哲學思考 “作者”的界定:當算法成為創作主體時。 “原創性”的再定義:在可復製的數字時代。 藝術與科學的邊界模糊。 第四章:沉浸式體驗與互動敘事——觀眾的參與和感知 數字藝術的最終目標之一是創造引人入勝的沉浸式體驗,讓觀眾不再是旁觀者,而是積極的參與者。本章將深入研究互動敘事、遊戲化藝術、以及如何利用多感官刺激來增強藝術作品的感染力。 4.1 互動敘事的構建 非綫性敘事結構在數字藝術中的應用。 遊戲機製如何被融入藝術作品。 用戶行為驅動的藝術體驗。 案例分析: 介紹一些具有代錶性的互動敘事項目,分析它們如何通過技術手段引導觀眾的情感和理解。例如,一些探索性遊戲或交互式電影。 4.2 多感官藝術體驗 聲音設計與視覺的協同作用。 觸覺反饋與空間體驗的結閤。 氣味、溫度等元素的引入。 案例分析: 探討一些利用多種感官來增強沉浸感的藝術裝置或體驗。例如,利用聲音景觀營造氛圍,或通過觸覺反饋增加互動深度。 4.3 沉浸式裝置與環境藝術 全息投影、 Mapping 等技術在空間創作中的應用。 環境藝術如何與數字技術結閤,創造獨特的美學空間。 案例分析: 關注一些大型沉浸式藝術展或裝置,分析它們如何通過空間設計和技術融閤,為觀眾帶來震撼的體驗。例如,TeamLab等藝術團隊的作品。 第五章:數字藝術的未來趨勢與社會影響 數字藝術的發展日新月異,其邊界也在不斷拓展。本章將展望數字藝術的未來發展方嚮,探討新興技術如元宇宙(Metaverse)、區塊鏈(Blockchain)在藝術領域的潛在影響,並反思數字藝術對社會文化、身份認同以及人類感知方式的深刻變革。 5.1 元宇宙與數字藝術的新大陸 虛擬世界中的藝術展覽、創作與交易。 NFTs(非同質化代幣)與數字藝術品的所有權。 案例分析: 討論NFTs如何改變數字藝術品的價值評估和流通方式,以及由此引發的藝術市場變革。 數字身份與虛擬藝術的關聯。 5.2 區塊鏈技術與數字藝術的未來 版權保護與透明化交易。 去中心化藝術平颱的發展。 5.3 數字藝術的社會文化意義 對傳統藝術形式的挑戰與融閤。 數字藝術在教育、傳播與社會批判中的作用。 科技發展對人類感知方式的影響。 圓桌討論(虛構): 模擬幾位不同領域專傢(藝術傢、技術專傢、評論傢、哲學傢)對數字藝術未來發展方嚮的對話,探討其機遇與挑戰。 5.4 藝術傢、技術與觀眾的共生關係 技術如何賦能藝術傢,藝術傢如何引導技術發展。 觀眾在數字藝術生態係統中的角色演變。 結語: 數字藝術,作為科技與人文交織的璀璨産物,正以前所未有的力量重塑我們的視覺文化和感知體驗。本書的旅程,是從像素的微小單元齣發,到跨越時空的沉浸式空間,再到智能算法的無限可能。我們期待通過對數字藝術的深入剖析,能夠激發讀者對未來藝術形式的想象,並理解技術如何為人類的創造力打開新的維度。這本書不僅僅是一次關於數字藝術的導覽,更是一場關於科技、藝術與人類未來的深度對話。

用戶評價

評分

從我翻閱的幾頁來看,這本書的敘事風格非常流暢,沒有那種陳舊的教科書式的枯燥感,讀起來頗有啓發性。我尤其關注程序的可維護性和可移植性問題,因為現代軟件生命周期中,代碼的可讀性與未來迭代的成本息息相關。我希望能看到關於如何編寫“清晰”的並行代碼的指導方針。比如,何時使用顯式的綫程管理,何時傾嚮於使用高級的並發庫函數,以及如何通過恰當的注釋和模塊化設計來降低並行代碼的認知負荷。更重要的是,我期望書中能提供一套嚴格的測試和驗證方法論,來確保並發程序的正確性和健壯性,比如如何利用模型檢驗(Model Checking)或模糊測試(Fuzzing)來暴露難以重現的並發Bug。如果它能教會我如何寫齣既高效又易於維護的並行代碼,那它就超越瞭一本純粹的技術手冊的範疇,而成為瞭一本架構師的案頭必備。

評分

這本書的封麵設計簡潔而現代,封麵上那顆閃爍著藍光的芯片圖案,立刻抓住瞭我的眼球,讓人不禁聯想到高性能計算的未來。我是一名軟件工程師,平時接觸的主要是單綫程應用,但隨著項目對實時性和數據吞吐量的要求越來越高,我深知自己必須跨入並行計算的門檻。我期待這本書能提供一個從底層原理到實際應用的係統性指南,而不是泛泛而談的理論堆砌。特彆是對於初學者而言,如何理解綫程同步、內存一緻性模型這些晦澀的概念,需要作者用深入淺齣、富有洞察力的語言進行闡述。我希望看到的是清晰的架構圖、詳盡的代碼示例,能夠幫助我真正地“看到”多個核心是如何協同工作的,而不是僅僅停留在“並行化”這個抽象的動作上。如果它能在我閱讀的過程中,不斷地用生動的類比或實際案例來鞏固知識點,那無疑是一本極佳的入門與進階參考書。我關注的重點在於,它是否能提供一套實用的調試和性能分析工具鏈的介紹,因為在多核環境下,調試並發問題往往比解決邏輯錯誤更令人頭疼。

評分

作為一個計算機科學專業的學生,我選修瞭高性能計算相關的課程,但課本上的內容總是顯得過於學術化,缺乏與當前主流硬件架構的緊密結閤。我迫切需要一本能夠連接理論與實踐的教材,特彆是針對現代CPU設計,如亂序執行、分支預測和緩存層級結構對並行程序性能的影響。這本書如果能深入剖析不同編程模型,比如OpenMP、MPI,乃至CUDA或OpenCL的異同點和適用場景,那就太棒瞭。我特彆看重它對“僞共享”(False Sharing)這類隱藏性能殺手的討論深度,以及如何利用原子操作和鎖來精細控製資源競爭。我希望作者能像一位經驗豐富的導師一樣,不僅告訴我“是什麼”,更要告訴我“為什麼是這樣”,以及在麵對特定瓶頸時,“如何係統性地優化”。如果書中能包含一些真實世界中大型科學計算或數據處理的優化案例,哪怕是簡化版的,也會極大地增強這本書的實戰價值,讓我能帶著更明確的目標去學習和實踐。

評分

這本書的裝幀和排版給我留下瞭非常好的第一印象,紙張的質感很適閤長時間閱讀,圖錶的清晰度也足以應對復雜的流程圖。我是一位資深的係統架構師,我的興趣點在於宏觀層麵的設計決策,而非具體的代碼實現細節,因此我更關注軟件架構如何適應多核硬件的演進。我希望這本書能夠提供關於微服務架構下的並行數據流處理、分布式鎖的實現機製,以及如何在雲原生環境中設計可伸縮、高容錯的並發係統。特彆是在麵對大規模並發請求時,如何避免“忙等”和不必要的上下文切換,是值得深入探討的議題。如果它能探討更高層次的抽象框架,比如Actor模型或CSP模型(Communicating Sequential Processes)在現代並發編程中的應用與局限,並能提供一些設計模式來指導團隊構建健壯的多綫程/多進程應用,那麼這本書對我的價值將是巨大的。

評分

我平時的工作涉及到嵌入式係統的開發,對功耗和實時性有著極其嚴苛的要求。對於我來說,多核計算不僅僅是為瞭追求極限速度,更是為瞭在有限的能源預算內實現復雜任務的有效分配。我希望能在這本書中找到關於異構計算,特彆是CPU與特定加速器(如GPU或FPGA)協同工作的設計哲學。我的疑問是,如何有效地劃分任務負載,使得通信開銷最小化,同時保持負載的均衡?如果書中能夠提供一些關於實時操作係統(RTOS)在多核環境下的調度策略的討論,並對比不同架構下的內存模型如何影響中斷響應時間,那將是對我工作極有價值的補充。我對那些隻會停留在x86架構的通用介紹不感興趣,我更期待看到針對資源受限環境下的設計權衡(Trade-offs)的深刻見解和實踐指導。

評分

連快餐書都算不上。書中技術爛但是卻懷著老子很牛的自信。

評分

多核計算與程序設計多核計算與程序設計

評分

4.彆指望可以把杯子裝滿水放包裏

評分

覺得比較適閤對多綫程編程有比較深基礎的人閱讀

評分

不錯的書籍,值得購買

評分

周偉明者,熙熙攘攘中一過客也。

評分

這個寒假認真讀完瞭該書,難度有點,因為第一次學習多核。整體內容布局不錯,書中有好多處錯誤!書中代碼過多,覺得很不好!當時拿到手覺得很後悔買瞭!書中還有很多剩下內容的代碼說在某個網站上,根本沒有,沒有盡到責任!

評分

很好吃的 以後繼續買

評分

非常好,書又便宜,配送的速度又快

相關圖書

本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度google,bing,sogou

© 2025 book.cndgn.com All Rights Reserved. 新城书站 版權所有