Я изучаю различные варианты отображения общих конструкций кода C # в код C ++ C ++ для работы на GPU. Структура системы следующая (стрелки представляют вызовы методов):
Программа на C # -> Библиотека C # для графических процессоров -> Библиотека C ++ для реализации CUDA
Метод в библиотеке GPU может выглядеть примерно так:
public static void Map<T>(this ICollection<T> c, Func<T,T> f)
{
//Call 'f' on each element of 'c'
}
Это метод расширения для типов ICollection <>, который выполняет функцию для каждого элемента. Однако я хотел бы вызвать библиотеку C ++ и заставить ее запускать методы на графическом процессоре. Это потребовало бы, чтобы функция была каким-то образом переведена в код C ++. Возможно ли это?
Для уточнения: если пользователь моей библиотеки выполняет метод (в C #) с некоторым произвольным кодом в нем, я хотел бы перевести этот код в C ++ equivelant, чтобы я мог запустить его на CUDA. У меня такое ощущение, что не существует простого способа сделать это, но я хотел бы знать, есть ли способ сделать это или добиться какого-то такого же эффекта.
Одна вещь, которая меня интересует, - это захват функции для перевода в Expression и ее использование для сопоставления с C ++ equivelant. Кто-нибудь имеет опыт работы с этим?