Как создать новый объект в коде C# Hybridizer CUDA - PullRequest
0 голосов
/ 05 апреля 2020

Как упоминалось в документации Hybridizer, вы не можете использовать новый метод x () для создания объекта в коде Hybridizer CUDA.

Я пытался использовать этот метод , но это выдает ошибку, связанную с использованием typeof (x)

[ERROR] : 0X6079 : EnrichMethodDependencyGraph failed for method System.Type -- Exception: System.NullReferenceException: Object reference not set to an instance of an object.

Я также попытался использовать это так:

Activator.CreateInstance<x>()

Но это просто выдает другую ошибку, которую я не могу найти в интернете.

[ERROR] : 0X6079 : EnrichMethodDependencyGraph failed for method System.Activator -- Exception: System.ArgumentException: A BadImageFormatException has been thrown while parsing the signature. This is likely due to lack of a generic context. Ensure genericTypeArguments and genericMethodArguments are provided and contain enough context. ---> System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)

Создание объекта должно быть очень простой вещью, но я не могу найти способ сделать это онлайн ... Кто-нибудь знает как?

1 Ответ

1 голос
/ 06 апреля 2020

Использование typeof(x) требует информации о типе объекта, которая недоступна на стороне графического процессора. Activator.CreateInstance<x> - это, по сути, одно и то же.

Ограничение не исходит из ключевого слова new, а из-за того, что сборка мусора не реализована на стороне графического процессора.

Возможные обходные пути для вашей проблемы:

  1. Ваш тип может быть заменен примитивами: вы можете выделить массив типов примитивов на GPU.

  2. Вы можете определить свой собственный распределитель на основе предварительно распределенного массива экземпляров и индекса atomi c.

...