KTL 一個支持C++14編輯公式的K線技術工具平台 – 第七版,體驗GPGPU。

K,K線,Candle蠟燭圖。

T,技術分析,工具平台

L,公式Language語言使用c++14,Lite小巧簡易。

項目倉庫://github.com/bbqz007/KTL

國內倉庫://gitee.com/bbqz007/KTL 

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。方便使用。