2017-03-07 5 views
1

저는 취미 생활을하며 개인 프로젝트에 GPU를 활용하고 싶습니다. Alea 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로 변환하려고하므로 내 PC의 모든 기능을 활용할 수 있습니다.

이 모든 것이 완벽하게 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'배열을 정의하려고했습니다.

예외가 발생 : 'System.Exception'을 Alea.dll 에 추가 정보 :

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) 

내가 지금 무엇을 얻을 비 blittable 배열 MyApp.MainWindow + InventoryItem의 []를 전송은하지 않습니다 허용 된 경우 app.config로이를 변경할 수 있습니다.

하지만 그 부분이 어떻게 생겼는지는 모르지만 app.config 파일에 추가 할 수 있습니다.이 문제를 해결하기 위해 온라인에서 아무 것도 찾지 못했습니다. 나는 Alea.Settings 유형에 대한 문서를 확인, 독서 후

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

:

두 번째 예외와 관련하여
+0

왜이 C#을 표시인가? – MickyD

+0

@MickyD vb 이후 제안 된 태그 중 하나였습니다.그물과 C#은 매우 유사하여 같은 문제를 가진 누군가가 잠재적으로 해결책을 찾을 수 있습니다. 그게 그걸로 갈 방법이 아니라면, 내가 태그를 제거해야합니까? – VampireMonkey

+0

첫 번째 오류 메시지는 'Inventory'가 멤버 변수이고 해당 컨텍스트에서 지역 변수 만 지원된다고 제안하는 것으로 보입니다. 필드라고 가정하면 로컬을 선언하고 필드 값을 할당 한 다음 람다에서 필드 값을 사용하십시오. 그러한 제한의 이유는 필드가 다른 곳에서 변경 될 수 있기 때문일 수 있습니다. – jmcilhinney

답변

0

은, 다음 페이지는 .NET 설정 파일에 Alea GPU 설정의 기본을 보여줍니다 그리고 SettingElements.MemoryElement 유형의 Memory 속성이 있다는 것을 발견했습니다.

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

유형은 BooleanAllowNonBlittableMemoryTransfer 속성을 갖는다.

시나리오에 비 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> 
+0

그래, 지금은 그 bittable 문제의 과거를 겪었어요, 대신 이걸 받고 있어요 : 'mscorlib.dll에서 'System.Exception'유형의 처리되지 않은 예외가 발생했습니다. 추가 정보 : 관리되지 않는 마샬 러가 지원되지 않습니다. MyApp.MainWindow + InventoryItem (i32)을 입력하십시오. 제가이 권리를 이해한다면 인덱스 32에 문제가 있으며 추가 정보의 의미가 무엇인지 알 수 없습니다. – VampireMonkey

+0

'i32'부분은 아마도 VB에서 32 비트 정수, 즉 'Integer'를 참조합니다. 나는 결코 Alea GPU를 사용하지 않았고 실제로이 질문을 읽기 전에 들어 본 적조차하지 못하기 때문에 나는 전문가가 아니다. 기본적으로 blittable (bittable이 아닌) 형식을 지원하지 않으며 사용자 지정 형식 마샬링을 지원하지 않는다는 새로운 오류 메시지는 단순 형식에서만 사용할 수 있다는 것을 나타냅니다. 솔루션이 무엇인지는 모르겠지만 지원 대상에 대해 좀 더 연구해야 할 필요가 있음을 알고 있습니다. – jmcilhinney