.NET Standard CLOO

.NET Standard CLOO

鉴于 .NET Standard 2.0 已经支持大量的.NET api,移植CLOO已经是毫无难度的一件事情 Github

CLOO使用p/invoke方式调用opencl api,但是对于不同平台下,opencl 的名称并不一致,例如在linux下为libOpenCL.so,Windows下为OpenCL.dll,且 .NET Standard 没有提供 Mono 类似的 dllmap 模式,因此,现在来说还不能达到用一个package,在所有平台引用的目的。

OpenCL with CLOO

OpenCL with CLOO

CLOO 是一个对 OpenCL 的 .Net 封装,可以让 .Net/Mono 程序充分使用 OpenCL 的优势,易用、开源。

今天用 OpenCL 中的 “Hello World” 程序 - 矩阵乘法,来简单介绍一下 OpenCL。

OpenCL 是一个开放的工业标准,既然是开放的,那么,所有厂商就可以提供自己的实现,例如英特尔,英伟达等等。也正因为如此,也导致在同一台机器上可能存在多个支持不同版本的硬件。例如,英伟达的GPU到现在也才支持 OpenCL 1.2 版本,但是OpenCL都已经出到2.x版本了。

我们可以查看当前设备中,有哪些厂商提供了 OpenCL 的支持,以及运算平台是啥。例如,在 Surface Book (with Nvidia GPU) 上,我们调用以下代码看看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//获取所有平台
var platforms = ComputePlatform.Platforms;

foreach(var platform in platforms)
{
Console.WriteLine($"{platform.Name},{platform.Version}");

//获取该平台下的计算设备
var devices = platform.QueryDevices();
foreach(var device in devices)
{
Console.WriteLine($" Device:{device.Name}");
}
}
阅读更多