Conflux: GPGPU .NET
- 2. 亳亟亠仂从舒 亠亞仂亟仆
舒 弍仂 亟亠从亳/仂仆亳 ALU 仆舒 舒仂亠 弍仂仍亠亠 1 GHz.
仗亳从亠 1 TFLOPS (亳 >100 GFLOPS 亟于仂亶仆仂亶 仂仆仂亳)
API 仗仂亳亰于仂仍仆亶 亟仂仗 从 仗舒仄亳, 从
亟舒仆仆, 从舒亰舒亠仍亳, 仗仂亟仗仂亞舒仄仄.
仂亰舒 API 仗仂亳 亠亠 亞仂亟舒, 仆亠从仂仍从仂 仗仂从仂仍亠仆亳亶
亞舒亳亠从亳 仗仂亠仂仂于.
- 3. 弌 仂从亳 亰亠仆亳 仗仂亞舒仄仄亳舒
弌仂于亠仄亠仆仆亠 仄仂亟亠仍亳 仗仂亞舒仄仄亳仂于舒仆亳 GPU (CUDA,
AMD Stream, OpenCL, DirectCompute):
舒舒仍仍亠仍仆亶 舒仍亞仂亳仄 亰舒亟舒亠 仗舒仂亶: 1) 磲仂
(亳亠舒亳 亳从仍舒), 2) 亞舒仆亳 亳亠舒亳亳.
亊亟仂 从仂仄仗亳仍亳亠 亟舒亶于亠仂仄.
舒 仂仆仂于亠 亞舒仆亳 亳亠舒亳亳 仂亰亟舒亠 亠亠从舒
于亳仍亳亠仍仆 仗仂仂从仂于.
仂亟仆亠 亟舒仆仆亠 从仂仗亳ム 于 于亳亟亠仂仗舒仄.
舒仗从舒亠 于仗仂仍仆亠仆亳亠 亰舒亟舒亳.
亠亰仍舒 从仂仗亳亠 于 仂仗亠舒亳于仆 仗舒仄.
- 4. 亳仄亠: SAXPY 仆舒 CUDA
__global__ void Saxpy(float a, float* X, float* Y)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
Y[i] = a * X[i] + Y[i];
}
cudaMemcpy(X, hX, cudaMemcpyHostToDevice);
cudaMemcpy(Y, hY, cudaMemcpyHostToDevice);
Saxpy<<<256, (N + 255) / 256>>>(a, hX, hY);
cudaMemcpy(hY, Y, cudaMemcpyDeviceToHost);
- 7. 仂 舒从
Brahma:
弌从 亟舒仆仆: data parallel array.
亳仍亠仆亳: 于舒亢亠仆亳 C#, LINQ-从仂仄弍亳仆舒仂.
Accelerator v2:
弌从 亟舒仆仆: data parallel array.
亳仍亠仆亳: 舒亳仄亠亳亠从亳亠 仂仗亠舒仂, 仆舒弍仂
仗亠亟仂仗亠亟亠仍亠仆仆 仆从亳亶.
亅仂 舒弍仂舒亠 亟仍 仄仆仂亞亳 舒仍亞仂亳仄仂于. 仂 仂, 亠仍亳 亠
于亠于仍亠仆亳 亳仍亳 仆亠亠亞仍仆亶 亟仂仗 从 仗舒仄亳?
- 8. 于仂 仂
saxpy = @__global__ void Saxpy(float a, float* X, float* Y)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
Y[i] = a * X[i] + Y[i];
};
nvcuda.cuModuleLoadDataEx(saxpy);
nvcuda.cuMemcpyHtoD(X, Y);
nvcuda.cuParamSeti(a, X, Y);
nvcuda.cuLaunchGrid(256, (N + 255) / 256);
nvcuda.cuMemcpyDtoH(Y);
- 9. 仂仆仍舒从
亊亟舒 仗亳 仆舒 弌#: 仗仂亟亟亠亢亳于舒ム 从
亟舒仆仆, 仍仂从舒仍仆亠 仗亠亠仄亠仆仆亠, 于亠于仍亠仆亳, 亳从仍.
float a;
float[] x;
[Result] float[] y;
var i = GlobalIdx.X;
y[i] = a * x[i] + y[i];
- 10. 仂仆仍舒从
亠 亠弍亠 磦仆仂亞仂 仂弍亠仆亳 仆亠仗舒于仍磳仄仄 从仂亟仂仄,
仗仂亰于仂仍磳 舒弍仂舒 仂亟仆仄亳 亳仗舒仄亳 亟舒仆仆 .NET.
float[] x, y;
var cfg = new CudaConfig();
var kernel = cfg.Configure<Saxpy>();
y = kernel.Execute(a, x, y);
- 11. 舒从 仂 舒弍仂舒亠?
Front end: 亟亠从仂仄仗亳仍仂 C#.
亠仂弍舒亰仂于舒仆亳亠 AST: 亳仆仍舒亶仆 于亰于舒亠仄 仄亠仂亟仂于,
亟亠从亳亰舒亳 从仍舒仂于 亳 仄舒亳于仂于, 仂仂弍舒亢亠仆亳亠
于亳仍亳亠仍仆 仂仗亠舒亳亶.
Back end: 亞亠仆亠舒仂 PTX 亳 仄仆仂亞仂磲亠仆仂亞仂 IL.
亳于磶从舒 从 亟舒亶于亠 nvcuda, 从仂仂亶 仄亠亠 亳仗仂仍仆
仗仂亞舒仄仄 仆舒 舒亠仄弍仍亠亠.
- 12. 丕仗亠亳
http://bitbucket.org/conflux/conflux
仍舒-于亠亳.
丕仄亠亠 于亳仍 hello-world 仗舒舒仍仍亠仍仆
于亳仍亠仆亳亶: 仄仆仂亢亠仆亳亠 仄舒亳.
舒 于亠仂仄 [仆舒 亠从亳亶 仄仂仄亠仆] 于仂从亳 亳亰亟亠亢亠从 仆舒
JIT-从仂仄仗亳仍亳 亳亟亠 仂仗舒于亟于舒亠 亠弍 亟舒亢亠 亟仍
仆舒亳于仆仂亞仂 从仂亟仂亞亠仆亠舒仂舒: 1x CPU < 2x CPU << GPU.
丐仂亶仆舒 仍亳亠仆亰亳: AGPL, 亳从仍ム亠仆亳亠 亟仍 OSS-
仗仂亠从仂于, 从仂仄仄亠亠从舒.
- 14. 弌仍亠亟ム亳亠 舒亞亳
仗亳仄亳亰舒亳亳 亟仍 亞舒亳亠从亳 仗仂亠仂仂于 (仍亠亠仆从舒
亟仍 仂仗亳仄舒仍仆仂亶 仗仂仗从仆仂亶 仗仂仂弍仆仂亳 仗亳
舒仆仗仂亰亳亳亳 仄舒亳).
仂仍亳亟舒仍仆舒 仄仂亟亠仍 仂仗亳仄亳亰舒亳亳 亳从仍仂于
(从仂仆亳亞亳亠 仂仆仂亳亠仍仆仂 亳亠舒亳亳 亳 舒亰仄亠仂于
从亠亶, 亠 仍亳仆亠亶仆亠 于亳亳从亳, 仂仗亳仄亳亰亳ム亳亠
仍仂从舒仍仆仂 亟舒仆仆 于 于亳仍亳亠仍仆仂亶 亠亠从亠).
仗仂仍仆亠仆亳亠 仆舒 从仍舒亠亠 (仍亠亟ム亳亶 舒亞 仗仂仍亠
仗仂仍亳亟舒仍仆仂亶 仄仂亟亠仍亳: 亟仂弍舒于仍磳 于亳舒仍仆亶
仂于亠仆 从舒 于亳仍亳亠仍仆亶 亰亠仍).
- 15. 舒从仍ム亠仆亳亠
亠:
http://bitbucket.org/conflux/conflux
http://xeno-by.livejournal.com
http://blogs.msdn.com/ru-hpc
http://confluxhpc.net coming soon