GPU運算

  • Carter Ho
  • 3 Minutes
  • 2024年7月31日

CPU

CPU是PC的核心運算單元的硬體元件,主要處理作業系統跟應用程式所需的運算任務。

GPU

GPU是類似的硬體元件圖形處理單元,初期主要處理遊戲和動畫中的圖形轉譯任務,現在因能夠更有效地處理平行執行簡單數學運算(太複雜的運算不一定比CPU來的快)而廣泛利用

CUDA

Compute Unified Device Architecture簡稱,由NVIDIA開發,讓開發人員能使用C/C++ 與GPU進行溝通執行平行運算能力

ComputeSharp

基於.Net8(3.0.1)開發的.NET函式庫,協助處理RAM跟GPU之間互動,並提供HLSL運算辦法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 // 建立ComputeShader定義GPU負責運算部分
[ThreadGroupSize(DefaultThreadGroupSizes.X)]
[GeneratedComputeShaderDescriptor]
internal readonly partial struct PowComputeShader(ReadWriteBuffer<float> buffer) : IComputeShader
{
public void Execute()
{
buffer[ThreadIds.X] = Hlsl.Pow(buffer[ThreadIds.X], 2);
}
}

var gd = GraphicsDevice.GetDefault();
var records = Enumerable.Range(1, 100).Select(index => 1.1F * index).ToArray();
// 將RAM的資訊重新指派準備給GPU運算用
var buffer = gd.AllocateReadWriteBuffer(records);
// GPU平行處理
gd.For(buffer.Length, new CircleComputeShader(buffer));
// 運算結果寫回RAM
buffer.CopyTo(records);

注意事項