原创 測試用例

歡迎使用Markdown編輯器寫博客 本Markdown編輯器ckEdit]6修改而來,用它寫博客,將會帶來全新的體驗哦: Markdown和擴展Markdown簡潔的語法 代碼塊高亮 圖片鏈接和圖片上傳 LaTex數學公式 U

原创 No.1 HelloOpenCL

概述 使用 OpenCL 實現將大寫字母轉換爲小寫字母,然後輸出。例如,輸入字符串爲Hello OpenCL, I like U,經轉換後的輸出是hello opencl, i like u。完整代碼參見 No.1_HelloOp

原创 No.7_1 OpenCL 同步——主機端同步

主機端的同步主要是對命令隊列的操作。在將一個 OpenCL 命令提交到命令隊列的時候,有個參數用來標識是以阻塞還是非阻塞的方式執行。 阻塞:該函數會等待,直到命令執行完成後才返回。當後續處理需要依賴該函數處理的結果時,可在該函數返回後放

原创 No.7_4 OpenCL 同步——工作項同步

概述 在 OpenCL 中多個工作項會並行執行,當一個工作項對某個存儲空間寫入數據後,其它的工作項從該地址讀取數據時,該如何保證後面工作項讀取的數據是前一個工作項寫入的數據。這時,就涉及到了工作項之間的同步。 工作項同步 OpenCL 中

原创 No.6_2 OpenCL 圖像採樣器——圖像旋轉(一)

簡介 該程序對圖像旋轉一定的角度,角度大小可通過調節參數來控制。其實現方式和 No.6_1_OpenCLSampler 類似,都使用了 OpenCL 內置的採樣器對象來訪問圖像數據。 要想旋轉整個圖像,我們需要對圖像中的每個像素點執行旋轉

原创 No.7_3 OpenCL 同步——事件同步

簡介 clFinish 會進入阻塞狀態,直到前面提交到命令隊列的 OpenCL 命令發送到和命令隊列關聯的設備,並且執行完成。它作爲一個同步點,會等待命令隊列中所有的 OpenCL 命令執行完成,該操作對某些時候只需兩個命令的同步或少數幾

原创 No.8 OpenCL 性能分析——內存帶寬

測量時間 時鐘和時間 在OpenCL 編程實踐前面的文章中,爲了比較 CPU 和 GPU 的性能,在統計函數的執行時間時使用了 glibc 中提供的時鐘和時間相關函數。爲了測得 func 函數的執行時間,在待測函數執行前,首先通過調用 s

原创 No.7_6 OpenCL 同步——異步拷貝

簡介 OpenCL C 編程語言內置了類似 memcpy 的函數,內核代碼通過調用該函數,可以在局部內存和全局內存區域之間拷貝數據。當設備內存獨立於主機內存時,無需主機內存參與數據週轉,就能在不同內存區域之間拷貝數據,這提高了數據拷貝效率

原创 No.6_3 OpenCL 圖像採樣器——圖像旋轉(二)

簡介 該程序基於 No.6_2_OpenCLSampler,功能保持不變,對圖像執行旋轉操作。不同的是運行環境爲 Ubuntu,GPU 是 AMD RX 460,支持 OpenCL 1.2 版本。完整源代碼參見 No.3_OpenCLSa

原创 No.6_1 OpenCL 圖像採樣器——圖像裁剪

簡介 在 OpenCL 1.1 中,已經支持對圖像的讀寫。本文描述如何通過 OpenCL API 調用,從一張較大的圖像中截取一塊矩形區域,供圖片瀏覽器顯示。該程序實現的功能和 No.1_YUV420pScissor 類似,不同的是 No

原创 No.5 YUV420 格式圖像旋轉

概述 分別在 CPU 上使用 C 語言和在 GPU 上使用 OpenCL 對一張 YUV420p 的圖像順時針旋轉 90 度,比較兩者之間的性能差異。GPU 使用了 Mali T-880 和 AMD RX 460 作對比。完整代碼參見 N

原创 No.7_5 OpenCL 同步——原子操作

概述 當多個線程在不同處理器上執行,同時訪問相同內存時會存在競態條件,使用原子操作可以避免競爭。原子操作往往會對總線做一次鎖步操作(lock-step),讓當前總線上的訪存操作能按照次序執行。同時又會刷新Cache,使得任一線程對全局變量

原创 No.2_2 FreeImage——加載/存儲圖像

簡介 FreeImage 是一款免費的開源圖形庫,它可以用於 Windows,Linux 和 Mac OS X 系統。本文基於 No.2_1_FreeImage,No.2_1_FreeImage 程序在 Android 系統下通過調用 O

原创 No.7_2 OpenCL 同步——事件回調函數

簡介 在調用 clEnqueueXXXX 一系列函數時,會傳遞一個指向 cl_event 對象的指針。該指針接收事件對象,用來標識執行的命令。可以使用該事件對象來查詢命令的執行狀態,例如命令是否已經執行完成;該事件對象也可以用來在其它命令

原创 No.7_7 OpenCL 同步——命令隊列

概述 內核代碼的執行以及內存對象的操作,需要通過將 OpenCL 命令提交到命令隊列來完成。在大多數情況下,我們只有一個命令隊列,並且命令隊列中的命令在執行時按照函數調用的順序。但是在某些場景下並非如此,例如,當平臺有多個 OpenCL