1. 程式人生 > >Udacity cs344Unit 5-Introduction to Parallel Programming筆記(超詳細,CUDA,並行,GPU)

Udacity cs344Unit 5-Introduction to Parallel Programming筆記(超詳細,CUDA,並行,GPU)

1.優化的等級

2.應該有一個系統化的優化過程(類似於一個優化的週期,缺少哪一步效果都不好)

在真實資料集上跑很重要

不要“真空”優化

別忘了

思考你到底想實現啥

和在現實世界中執行收到反饋

3.具體過程

a.分析

4.強縮放和弱縮放

弱縮放:時間不變,問題數量增多

強縮放:問題不變,時間縮短

 

 

5.分析

瞭解熱點

Amdah's law

 

 

6.並行化

用GPU做矩陣轉置

分配空間呼叫

但是

計時

擴大問題規模

這有一個值不值得優化的問題

466ms是相當的慢了,但是如果這段程式只在你的整體中執行一次或者規模極小,比如第一次例子中的8*8矩陣,就犯不上優化了

優化:

剛剛是對整個矩陣只啟用一個執行緒

現在對每一行啟動一個執行緒

n是矩陣的行列數

留作業:按照每個元素啟用一個執行緒

注意

你看都是 Idx.   只是 . 後面的在改變 x或者y,什麼時候需要Idy?應該是啟動了二維執行緒塊的時候?沒有Idy吧!

k是線上程塊中,每行每列啟動了多少執行緒

N/K 是每行每列啟動了多少執行緒塊

呼叫的時候是放進了兩個dim3型別的變數,分別指定了每個grid用多少個執行緒塊,和每個執行緒塊用多少個thread

 

 

分析一下子

 

1024*1024個元素

每個元素4個位元組

讀一次寫一次,共2次

一共用了0367*10的3次秒

總量除以時間等於效率(頻寬)

7.

看讀與寫 記憶體的距離

(傳一張自己畫的圖)

確實,讀是按照方矩陣從左到右的方向讀的,那怎麼能保證執行緒跑過去讀記憶體的順序?是併發無序執行的,還是說本質其實有一定順序?

寫的時候是按照方矩陣從上到下寫的,當然與記憶體儲存的順序不一致,會很分散,但是疑問同上

還是說這個是針對CPU讀取記憶體來說的??

好像是CPU,翻一下前面的引數部分

還是對全域性記憶體來說的??

執行緒訪問全域性記憶體時候有沒有順序

 

8.

剛剛做的用時間來找到優化的點,是很原始的,現在有專門的外掛來幫你分析

工具只是用來幫助你分析,給你一些指導性意見

 

???

在關注為啥記憶體利用率變小之前,來看一個原則

Little 原則

(自己的 圖)

把記憶體比作管道

就是怎麼能把管道填滿:1)加大執行緒數,2)加大每個執行緒的資料量

以下是方法2)(但是這屬於忍者優化,在邊緣了,先不太深入探討,討論一種大眾的)

執行的程序太少造成的利用率不足的情況:

大部分執行緒等待時間長:

怎樣降低等待時間

一個SM中能包含很多個塊,但不可能無窮吧,什麼在限制??

先看另一個問題

佔用率(occupancy)

 

限制一.

限制二.

限制三.

限制四.

可檢視核心佔用率的工具

 

 

優化計算效能

第一個方法的示例就是上面那個

warp是命令執行的一個單位

在分支結構中執行緒是咋執行的

紅執行緒和藍執行緒是交錯執行的

相關推薦

Udacity cs344Unit 5-Introduction to Parallel Programming筆記詳細CUDA並行GPU

1.優化的等級 2.應該有一個系統化的優化過程(類似於一個優化的週期,缺少哪一步效果都不好) 在真實資料集上跑很重要 不要“真空”優化 別忘了 思考你到底想實現啥 和在現實世界中執行收到反饋 3.具體過程 a.分析

Udacity cs344Unit 4-Introduction to Parallel Programming筆記詳細CUDA並行GPU

1.啥是緊密(compact):這裡的壓縮指的是過濾,filter,過濾出一個子集,也就是隻留我們想要的(比如一把撲克牌裡的方片) (只計算我們關心的物件才更有意義,計算代價較小,需要更少空間) 2. 3.密集運算好一點?為啥 第一個稀疏運算要啟動52個

Udacity cs344Unit 3-Introduction to Parallel Programming筆記詳細CUDA並行GPU

1.課程目標 如何分析GPU演算法的速度和效率(speed and efficiency) 三個新的基本演算法:歸約,掃描和直方圖(reduce,scan and histogram) 2.   3.再看之前講的例子 考慮兩件事  

[Java] Introduction to Java Programming 筆記 Chapter 9. 物件和類

如果一個檔案含有兩個類,只有一個類可以為public,public 類和檔名同名,但此檔案編譯後,將生成兩個.class 檔案,一個類對應一個class檔案。 匿名物件:建立一個物件,但是並不將其引用賦給變數 new Circle(); // or Sy

MySql 5.6.21安裝及配置詳細

cal 開始 流程 重復 配置 路徑 進行 驗證 高級 一、安裝    ----->點擊接受協議 ----->下一步    這裏選擇我只需要安裝服務器,因此選擇 Server only -------->下一步    -------->點擊execu

STM32學習筆記詳細整理144個問題

1、AHB系統匯流排分為APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速裝置; 2、Stm32f10x.h相當於reg52.h(裡面有基本的位操作定義),另一個為stm32f10x_conf.h專門控制外圍器件的配置,也就

ElasticSearch學習筆記詳細

  文章目錄 初識ElasticSearch 什麼是ElasticSearch ElasticSearch特點 ElasticSearch用途 ElasticSearch底層實現 ElasticSearch和Solr的區別 Solr是什麼 不同場景時兩個的對比 總結 Elastic

Introduction to Java Programming程式設計題5.29

/* You rolled 2 + 1 = 3 You lose You rolled 1 + 4 = 5 Point is 5 You rolled 5 + 1 = 6 You rolled 5

Introduction to Java Programming程式設計題5.32

/* You rolled 5 + 5 = 10 Point is 10 You rolled 6 + 2 = 8 Point is 8 You rolled 5 + 2 = 7 You lose 1******************** You rolled

2018.09.22 上海大學技術分享 - An Introduction To Go Programming Language

針對 Language 社區 相對 基礎語法 ref 同學 master tree 老實說筆者學習 Go 的時間並不長,積澱也不深厚,這次因緣巧合,同組的同事以前是上海大學的開源社區推動者之一,同時我們也抱著部分宣傳公司和技術分享的意圖,更進一步的,也是對所學做一個總結,所

CSCI 1300 Introduction to Computer Programming

CSCI 1300作業代做、代寫TA/CA留學生作業、代做C/C++程式作業、C/C++課程設計作業代寫CSCI 1300 Introduction to Computer ProgrammingInstructor: FlemingHomework 9: Choose Project, Meet with

Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs學習筆記

介紹-什麼是RNN 1.RNN的主要思想是利用序列資訊。 The idea behind RNNs is to make use of sequential information. In a traditional neural network we assu

《Spring Data官方文件》5.3. Connecting to Cassandra with Spring至5.5. Introduction to CassandraTemplate

package org.spring.cassandra.example.config; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annota

Introduction to Java Programming程式設計題8.13

/* Enter the number of rows and columns of the array: 3 4 Enter the array: 11 33.5 88.1 4 0 -2.2 -10

Introduction to Sound Programming with ALSA

原文出處:http://www.linuxjournal.com/article/6735?page=0,0 ALSA stands for the Advanced Linux Sound Architecture. It consists of a set of ker

MTH5001: Introduction to Computer Programming

normal labels pri available triangle however div creat rms projectMarch 14, 20191 MTH5001: Introduction to Computer Programming 2018/191.

《C++Primer》第 5 版第 2 章筆記未完整版

第 2 章 變數和基本型別 1. 基本內建型別分為 算術型別和空型別 2. 算術型別分為 整型 和 浮點型 3. 整型分為 int、字元、布林型別 4. char 1位元組   short 2位元組  int和long 4位元組  long long 8位元組  fl

《Pro SQL Server Internals, 2nd edition》pdf已傳至群檔案的CHAPTER 3 Statistics中的Introduction to SQL Server StatisticsP55~P58、Statistics and Execution Plans

每次你改變聚簇索引鍵的值時,都會發生兩件事。 首先,SQL Server將行移動到聚簇索引頁鏈和資料檔案中的不同位置。 其次,它更新聚集索引鍵,行編號。 行編號被儲存起來而且要在所有非聚簇索引中更新。 對於I / O而言,這花銷可能很昂貴,尤其是在批處理更新的情況下。此外,它可以增加聚簇索引的碎片,並且在行編

Coursera 程式設計實習 / Practice on Programming 筆記第一週

001-函式指標 格式:型別名(*指標變數名)(引數型別,引數型別……) 定義例項:int (*pf) (int, char); 使用例項:pf = PrintMin; /* 此處切記,函式僅有名稱,沒有引數列表】*/                   pf(x, y)

學習筆記-5步安裝 Github中文漢化外掛詳細

今天看視訊的時候聽老師說以後面試面試官會問你你在github有上傳開源專案嗎,訪問量是多少。然後我看完視訊後馬上去弄一個github帳號,然後發現github基本是英文。。。。。在百度上查了一下後發現有一個好用基於chrome的外掛,然後安裝,途中碰到了一些問題,於是寫下這篇