![e8f8cbb82cd07fb8e5de8ed347cc29d6.png](https://i-blog.csdnimg.cn/blog_migrate/5e9063f36acec77f70244f437740831e.jpeg)
在.net框架下进行gpu加速计算。只能采用.net平台的第三方库
首先在visual studio中新建一个控制台应用
![3ab7fa52df08bd4fefc1f3c992a7f4b5.png](https://i-blog.csdnimg.cn/blog_migrate/178404627cda37747a688ebc7b03b26e.jpeg)
然后添加引用,在nuget中添加Alea和FSharp
![d4c0ac6d2754006e0e9328ad5e3504f2.png](https://i-blog.csdnimg.cn/blog_migrate/e1a78b486625d0fca55bc48833984ff4.jpeg)
然后打开工程所在目录下的packagesAlea.3.0.4toolse文件夹以及packagesAlea.3.0.4libnet45文件夹
![91ee88821e9c09c62ada368c5f5edf97.png](https://i-blog.csdnimg.cn/blog_migrate/cba5b3b702ededddaff41fc9f3d3f647.jpeg)
![61845e32c53ab54e35335eb2e4a6c380.png](https://i-blog.csdnimg.cn/blog_migrate/f9cf27d2eb1acb36b00bdc2df0f98d4d.jpeg)
复制下图的4个dll到你的Rhino安装路径下的system目录下
![a65f9504c06ea09ed9984aa4d90f4e11.png](https://i-blog.csdnimg.cn/blog_migrate/39f77af2e7f9df37693c0c121e4c5b7d.jpeg)
下面两个dll的最后一个需要根据你的电脑型号决定(86位还是64位,mac还是windows等等。我是64位 windows)
![8b35e44af48a30d6e8a9ebe9c64295b7.png](https://i-blog.csdnimg.cn/blog_migrate/0fadf01ed7b289a40309a3ff5a3002e8.jpeg)
然后以管理员身份启动Rhino(第一次必须以管理员身份运行)
![53fea5b37f08ada377e7df2d69da4809.png](https://i-blog.csdnimg.cn/blog_migrate/61997524802214fc10a200b0f748f779.jpeg)
打开grasshopper,拖一个c#电池,右键,添加如图的程序集
![56e8783733c4dcd5213809022085f4ea.png](https://i-blog.csdnimg.cn/blog_migrate/0ca18fb29859947dcbe782515357c1a5.jpeg)
然后引用如图的命名空间(using FSharp这句不用写,我是添加了FSharp.dll这个程序集,这个程序集可以不要,没有添加这个dll时写了会报错):
![06d6cf0f2cea06ae38b0b59f20e8a26e.png](https://i-blog.csdnimg.cn/blog_migrate/b5a43b7f5cfadec0e2acef5c1873cd8c.jpeg)
然后我们就可以调用gpu运算了。
首先我们先测试一下:
![b06aac3f1f62ab71ebab0e2257d76ba4.png](https://i-blog.csdnimg.cn/blog_migrate/4190e077280de7a699eea62a27487c4d.jpeg)
这两行代码会返回你的GPU信息。
然后运行一下,你会发现报错。没关系。第一次运行会在你的Rhino目录下生成两个文件夹,
![8e0432688ea6756d8e6fe80b90bfc3b1.png](https://i-blog.csdnimg.cn/blog_migrate/e42d08c88e38e94259a745ac01781136.jpeg)
这时保存一下gh文件退出来,重新打开就行了(第一次以管理员身份运行是因为要在Rhino目录下生成这两个文件,第二次及以后打开时不需要以管理员身份运行)
![0a1c7ba82bfb4fc7b3b8b7da43547c58.png](https://i-blog.csdnimg.cn/blog_migrate/e1eca9ac21eaec3982e7bc5c57b90bd5.jpeg)
此时就返回了你的GPU信息。
一个小例子:
![82da67dd1cef88615cffec67b5ced3d8.png](https://i-blog.csdnimg.cn/blog_migrate/eec6d1ad5a0df15c36c357164ab3c332.jpeg)
var gpu = Gpu.Default;
var array1 = Enumerable.Range(0, Length).ToArray();
var array2 = Enumerable.Range(0, Length).ToArray();
var result = new double[Length];
gpu.For(0, result.Length, i => result[i] = array1[i] * (array2[i] + Math.PI));
A = result;
gpu.For()一句,调用了gpu进行计算,并返回结果。