OpenCL memory object 之 Global memory (1)

這篇日志是學習AMD OpenCL文檔時候的總結。

???? OpenCL用memory object在host和device之間傳輸數據,memory object由runtime(運行庫,driver的一部分)來管理。

??? OpenCL中的內存對象包括buffer以及image,buffer是一維數據元素的集合。image主要用來存儲一維、二維、三維圖像、紋理或者framebuffer。[對image對象,gpu會有優化,比如使用L1 cache,使用tile mode地址等等]

我們先畫一張圖,然后再來學習各種內存概念:

image

Host memory:

?????? 是指系統內存,cpu能夠以全速帶寬訪問系統內存,但是GPU不能直接訪問它。

Pinned host memory(page locked):

????? 是host內存的一部分,由操作系統確定它的駐留位置,它的物理地址是固定的,不能改變。runtime會限制opencl memory object使用的pinned memory數量。注:pinned memory如同名字所言,不能被交換出內存,是page locked。cpu能夠以全速帶寬訪問pinned內存,且需保持cpu cache一致性,GPU通過PCIE訪問pinned memory,也要保持cache一致性。

Device visible host memory:

????? 是pinned memory一部分,GPU訪問時可以不必保持cpu cache一致性,這樣可以加快GPU訪問速度,但由于沒有cache一致性,cpu讀這些memory就變慢了,由于可以combined write(就是通過一次內存訪問,鄰接的很多地址進行寫操作),cpu寫操作速度并不慢。

Device memory:

???? dGPU有自己的device memory,gpu可以以高帶寬進行訪問,但cpu不能直接訪問。

Host visible device memroy:

??? dGPU的一部分,GPU能夠以全速帶寬訪問它,該內存被映射到cpu地址空間,做為無cache內存,cpu可以通過PCIE直接訪問它,當然速度和system memory比,要慢好多,但是由于可以combined write(scatter write),所以寫速度取決于PCIE帶寬。

????

???? 對于APU而言,沒有單獨的global memory,它用device visible memory 做為global memory。

image

下面我們看下如何在system memory和device memory之間傳輸數據

當system memory中的數據要拷貝到device memory中去的時候,OpenCL runtime執行下面的操作:

1、當傳輸數據小于32K時,cpu把數據拷貝到runtime能夠訪問的pinned memory buffer中,然后DMA engine執行相應的傳輸,相反的過程也一樣,數據從device memory傳輸到pinned memory buffer,然后copy到指定的系統內存塊中。

2、傳輸數據大于32K,小于16M時,數據的物理內存頁首先被pinned(lock page),然后DMA engine執行傳輸操作,最后內存塊被unpinned。

3、當傳輸數據大于16M時,host pinned memory的staging buffer被使用,數據分批次被拷貝到staging buffer,然后傳輸到device memory。注:會使用雙緩沖,以便DMA向device拷貝數據、cpu向stage buffer拷貝數據能夠并行執行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker: dockerfile 使用介紹

Docker簡介 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Docker項目提供了構建在Linux內核功能之上,協同在一起的的高級工具。其目標是幫助開發和運維人員更容易地跨系統跨…

【Hello CSS】第六章-文檔流與排版

作者:陳大魚頭github: KRISACHAN正常流 什么是“正常流”? 其實就是我們日常所說的“文檔流”。 在W3C官方文檔里對應的是“normal flow”。 正常流的盒子屬于格式化上下文(FC),在CSS2.2中可以是表格、塊或內聯。 在CSS3中引入了f…

創建型模式---工廠模式

工廠模式 在工廠設計模式中,客戶端可以請求一個對象,而無需要知道這個對象來自哪里,也就是使用哪個類來生成這個對象。工廠背后的思想是簡化對象的創建。與客戶端自己基于類實例化直接創建對象相比,基于一個中心化函數來實現&…

OpenCL memory object 之 Global memory (2)

當我們用clCreateBuffer, clCreateImage創建OpenCL memory object時候,我們需要輸入一個flag參數,這個參數決定memory object的位置。 cl_mem clCreateBuffer (cl_context context, cl_mem_flags flags, size_t size, void *host_ptr, cl_int *errc…

數據結構進階篇-跳表

大家想必都知道,數組和鏈表的搜索操作的時間復雜度都是O(N)的,在數據量大的時候是非常耗時的。對于數組來說,我們可以先排序,然后使用二分搜索,就能夠將時間復雜度降低到O(logN),但是有序數組的插入是一個O…

查看本機ssh公鑰,生成公鑰

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 查看ssh公鑰方法: 1.通過命令窗口:打開你的git bash 窗口,進入.ssh目錄:cd ~/.ssh&…

如何實現動態水球圖 --》 echars結合echarts-liquidfill實現

1)項目中作為項目依賴,安裝到項目當中(注意必須要結合echars) npm install echarts vue-echarts --save npm install echarts-liquidfill --save 2)在需要使用水晶球的組件里引入liquidFill.js import echarts-liquidfill/src/liquidFill.js;…

OpenCL memory object 之選擇傳輸path

對應用程序來說,選擇合適的memory object傳輸path可以有效提高程序性能。 下面先看一寫buffer bandwidth的例子: 1. clEnqueueWriteBuffer()以及clEnqueueReadBuffer() 如果應用程序已經通過malloc 或者mmap分配內存,CL_MEM_USE_HOST_PTR是個…

struts入門超詳細

https://blog.csdn.net/yerenyuan_pku/article/details/52652262轉載于:https://www.cnblogs.com/liuna369-4369/p/10870873.html

RabbitMQ 從入門到精通 (一)

目錄 1. 初識RabbitMQ2. AMQP3.RabbitMQ的極速入門4. Exchange(交換機)詳解4.1 Direct Exchange4.2 Topic Exchange4.3 Fanout Exchange5. Message 消息1. 初識RabbitMQ RabbitMQ 是一個開源的消息代理和隊列服務器,用來通過普通協議在完全不同的應用之間共享數據&a…

接收并解析消息體傳參、解析 json 參數

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1.場景:postman 發送了一個 post 請求,如下: 2. 解析方式為用一個 vo 對象來接收 json。把 json 中的…

OpenCL memory object 之 傳輸優化

首先我們了解一些優化時候的術語及其定義: 1、deferred allocation(延遲分配), 在第一次使用memory object傳輸數據時,runtime才對memory object真正分配空間。 這樣減少了資源浪費,但第一次使用時要慢一些…

VBS使文本框的光標位于所有字符后

有時候在文本框里會顯示一部分提示信息,用戶在這些提示信息后面輸入文本,但是將焦點設置于文本框后,光標總是在文本框的最前面, 用戶輸入的時候需要按"-->"鍵將光標移到最后才能輸入,這樣的操作很不爽。我…

記錄ionic 最小化應用時所遇的問題

ionic3與ionic4最小化插件安裝不一樣: ionic3安裝方法: $ ionic cordova plugin add cordova-plugin-appminimize $ npm install --save ionic-native/app-minimize4 并在app.module.ts中 注入依賴: import { AppMinimize } from ionic-nativ…

解決 --- Docker 啟動時報錯:iptables:No chain/target/match by the name

問題:jenkins的docker containner啟動失敗,報錯:failed programming external connectivity … iptables: No chain/target/match by that name” docker 服務啟動的時候,docker服務會向iptables注冊一個鏈,以便讓dock…

AMD OpenCL 大學課程

AMD OpenCL大學課程是非常好的入門級OpenCL教程,通過看教程中的PPT,我們能夠很快的了解OpenCL機制以及編程方法。下載地址:http://developer.amd.com/zones/OpenCLZone/universities/Pages/default.aspx 教程中的英文很簡單,我相信…

第一篇 計算機基礎

1.什么是編程語言 python和中文、英語一樣、都是一門語言,只要是語言,其實就庫看成是一種事物與另一種事物溝通的介質。python屬于編程語言,編程語言是程序員與計算機之間溝通的介質;中文和英文則是人與人之間溝通的介質。 2.什么…

47.QT-QChart之曲線圖,餅狀圖,條形圖使用

1.使用準備 在pro中, 添加QT charts 然后在界面頭文件中添加頭文件并聲明命名空間,添加: #include <QtCharts> QT_CHARTS_USE_NAMESPACE 2.QChart之曲線圖 繪制曲線圖需要用到3個類 QSplineSeries: 用于創建有由一系列數據組成的曲線.類似的還有QPieSeries(餅圖數據). Q…

Docker 部署應用、jar 工程 docker 方式部署

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 把要部署的工程打成一個jar包。&#xff08;我的工程叫 gentle &#xff09; 打 jar 的方法&#xff1a;超簡單方法&#xff1a; Int…

流浪不是我的初衷 ... ...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 或許&#xff0c;我從來就是一個習慣沉默的人 ... 或許&#xff0c;我從來就不善于傾述 ... 會有難過的時候&#xff0c;會有覺得累的…