遍历自定义类与Alea的GPU集合(Iterate over a collection of cus

2019-09-30 13:51发布

我是一个业余爱好者,想利用我的GPU为我的个人项目。 我已经得到了安装和工作Alea的GPU封装。

下面这将产生相同的输出:

    Dim y(10) As Integer
    For i = 0 To 10 - 1
        y(i) = i
    Next
    Dim y2(10) As Integer

    Array.Copy(y, y2, y.Length)

    Parallel.For(0, y.Length - 1, Sub(i) y(i) += i)
    Debug.WriteLine(y.Aggregate(Function(now, future) now + future))

    Alea.Gpu.Default.For(0, y2.Length - 1, Sub(i) y2(i) += i)
    Debug.WriteLine(y2.Aggregate(Function(now, future) now + future))

两种方法都返回90.这是最基本的,但我需要的是多了很多。

我想我的其他资源较多的parallel.foreach循环转换成GPU.Default.For,所以我可以利用我的电脑的全部功能。

请记住,这一切都工作得十分完美的parallel.foreach循环。 代码的其余部分目前注释掉,这是防止它工作的东西。

Gpu.Default.For(0, Inventory.ItemsInventory.Count - 1,
                Sub(i)
                        Dim Level_1 = Inventory.ItemsInventory.ElementAt(i) 'Exception on this line, doesn't happen if commented out.
                end sub)

“广告资源”是一个自定义类,其中“ItemsInventory”是一个字典(字符串,InventoryItem)“InventoryItem”也是一个自定义类。

我得到的例外是:

ArgumentException的抛出:在Alea.dll附加信息“的System.Exception”:无法获得域“$ VB $当地库存”。

接下来,我试图定义“InventoryItem”的数组因为这是我所感兴趣的是这个特定的循环。

Dim ItemsArray() As InventoryItem = Inventory.ItemsInventory.Select(Function(f) f.Value).ToArray
                Gpu.Default.For(0, ItemsArray.Length - 1,
                Sub(i)
                        Dim Level_1 = ItemsArray(i)
                end sub)

这就是我得到现在:

抛出异常:“System.Exception的”在Alea.dll其他信息:非blittable阵列MyApp.MainWindow + InventoryItem []传送是不允许的,则可以通过的app.config改变这一点。

但我不知道怎么的部分看起来像,说我“可以”添加到app.config文件,我还没有发现任何在线解决这个问题。

Answer 1:

至于第二个例外,下面的页面显示了.NET配置文件设置Alea的GPU的基础知识:

http://www.aleagpu.com/release/3_0_2/doc/faq.html

读取后,我检查了文件Alea.Settings类型,发现它具有Memory类型的财产SettingElements.MemoryElement

http://www.aleagpu.com/release/3_0_2/api/html/73614a0a-9c5c-cce6-7114-fc6833cb31f2.htm

这种类型有Boolean属性AllowNonBlittableMemoryTransfer

这表明,允许非Blittable型在您的情况,您的配置文件应该是这样的:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="aleaSettings" type="Alea.Settings, Alea"/>
  </configSections>
  <aleaSettings>
    <memory allowNonBlittableMemoryTransfer="true"/>
  </aleaSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
</configuration>


文章来源: Iterate over a collection of custom Classes with Alea GPU