KTL 一個支持C++14編輯公式的K線技術工具平台 – 第七版,體驗GPGPU。
- 2022 年 6 月 27 日
- 筆記
- C++, computeShader, directcompute, directx11, gpgpu, OpenGL, Qt, stock
K,K線,Candle蠟燭圖。
T,技術分析,工具平台
L,公式Language語言使用c++14,Lite小巧簡易。
CoreAnimation for Windows: //github.com/bbqz007/xw
zqt5 一個超簡單的Qt5窗口語法: //github.com/bbqz007/zhelper-qt5Widgets
zqlite3 一個超簡單的流式語法,整合封裝Sqlite3 capis 與 SQL 跟 c/c++程序綁定://github.com/bbqz007/sqlite3zz
zgl 一個對OpenGL常規功能api重新抽象封裝。
KTL提供一個c++14編譯平台,用戶可以使用c++14編輯自定義技術指標等。
用戶可以使用crt常用函數,c++標準庫容器以及算法,c++14特性編程。
本期更新內容
體驗GPGPU。
1. OpenGL 3.0 FragmentShader
2. OpenGL 4.3 ComputeShader
3. Dx11 DirectCompute
OpenGL3D 添加了mesh示例。
OpenGL需要編寫glsl版本的kernel,Dx11需要編寫hlsl版本的kernel。(kernel指的是computational kernel)
vmware 16支持Dx11以及OpenGL4.1,如果使用vmware16隻能體驗1,3。
軟件實現的mesa opengl 12版本只支持到OpenGL 3.0。而OpenGL 3.0是支持浮點Texture的最低版本。
GPGPU分兩個時期。
以OpenGL 4.3為分水嶺。這個版本開始支持compute shader,對應DX11的DirectCompute。只要硬件支持,只需要編寫compute shader。
在這之前,人們需要使用fragment shader去完成計算任務。這個鏈接介紹基於OpenGL 3.x的GPGPU編程。
在早期,人們利用fragment shader運算texture上的數據。並且fragment shader只能讀取texture的數據,不能直接往texture寫入數據,只能將結果寫到framebuffer,然後再將結果從framebuffer複製到texture。終於發展出硬件支持的compute shader,可以直接將結果寫到texture。思路還是一樣,使用GPU的shader去運算texture的數據,將結果輸出到texture。
所以抽象成4個概念:
1. Arrays = textures
2. Kernels = shaders
3. Computing = drawing
4. Feedback
最後的Feedback,可以理解成如何優化多階流水,我們將任務分成加載,計算,輸出,就像cpu指令一樣,通過優化多階流水提高吞吐提升速度。
另外還有一個概念就是全局不變量 Uniform。
是否使用了GPU就可以提升速度,如果你這樣想,結果可能不會如你所願。
GPU並不能簡單地提升你所需要的運算速度。
GPU與CPU是異構兩個Host,那麼一個並不複雜也不龐大的運算任務,就必須徒勞經過CPU內存,CPU,總線,GPU內存,GPU shader運算,GPU內存,總線,CPU,CPU內存。
因此本次更新只能體驗如何使用GPU來完成運算任務。
本次展示了如何使用OpenGL編寫簡單的GPGPU程序框架,以及使用GLSL編寫運算kerenl。還有DX11的HLSL。
如何使用DX11編寫簡單的GPGPU程序框架,可以上微軟文檔官網查找如何編寫DirectCompute。
本次更新的zgl,對Texture2D封裝成一個搬運內存的對象GL3::GpuImage2D,可以alloc,copyFromCpuMemory,copyToCpuMemory。方便使用。