Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#方法转化为C++;方法 我正在探索各种通用的映射方法,用于将通用的C代码构造映射到C++ CUDA代码上,以便在GPU上运行。系统的结构如下(箭头表示方法调用): C++程序> C GPU LIB -C++CUDA实现LIB _C#_C++_Interop_Cuda_Gpgpu - Fatal编程技术网

将C#方法转化为C++;方法 我正在探索各种通用的映射方法,用于将通用的C代码构造映射到C++ CUDA代码上,以便在GPU上运行。系统的结构如下(箭头表示方法调用): C++程序> C GPU LIB -C++CUDA实现LIB

将C#方法转化为C++;方法 我正在探索各种通用的映射方法,用于将通用的C代码构造映射到C++ CUDA代码上,以便在GPU上运行。系统的结构如下(箭头表示方法调用): C++程序> C GPU LIB -C++CUDA实现LIB ,c#,c++,interop,cuda,gpgpu,C#,C++,Interop,Cuda,Gpgpu,GPU库中的方法可能如下所示: public static void Map<T>(this ICollection<T> c, Func<T,T> f) { //Call 'f' on each element of 'c' } publicstaticvoid映射(此ICollection c,Func f) { //对“c”的每个元素调用“f” } 这是ICollection类型的扩展方法,它在每个元素上运行一个函数。但是,我希望它是调用C++

GPU库中的方法可能如下所示:

public static void Map<T>(this ICollection<T> c, Func<T,T> f)
{
   //Call 'f' on each element of 'c'
}
publicstaticvoid映射(此ICollection c,Func f)
{
//对“c”的每个元素调用“f”
}
这是ICollection类型的扩展方法,它在每个元素上运行一个函数。但是,我希望它是调用C++库并使它运行在GPU上的方法。这将要求函数以某种方式翻译成C++代码。这可能吗

详细说明,如果我的库的用户执行一个方法(在C语言中),其中有任意代码,我想把这个代码翻译成C++等价,这样我就可以在CUDA上运行它。我觉得没有简单的方法可以做到这一点,但我想知道是否有任何方法可以做到这一点或实现一些相同的效果


我想知道的是捕获函数在表达式中进行转换,并将其映射到C++等价物。任何人都有这方面的经验吗?

如果你想了解如何在GPU上运行C#。老实说,我不确定我是否完全理解你的意思。但是,您可能对将.NET应用程序/库转换为直的C++ W/O所需的.NETFramework的项目感兴趣。p> 有趣的问题。我在C#方面不是很在行,但我认为ICollection是对象的容器。如果c的每个元素都是,比如说,一个像素,那么你必须进行大量的编组,才能将其转换为CUDA可以使用的字节或浮点缓冲区。我怀疑这会让一切都慢下来,足以抵消在gpu上执行任何操作的优势。

您可以自己编写一个,就像将LINQ查询转换为SQL一样

然而,我看到这种方法的一个问题是,LINQ查询通常是惰性地进行计算的。为了从管道中获益,这可能不是一个可行的解决方案


同样值得研究的是,如何实现谷歌的C#和CUDA,然后使用类似的方法将逻辑发送到GPU。在这种情况下,看看已经存在的问题也可能有用。

这是一个非常有趣的问题,我不知道如何做到这一点


然而,这家公司似乎做了一些非常相似的事情。您可以使用LINQ定义函数,然后将这些函数编译为GLSL着色器,以便在GPU上高效运行。看看他们的,尤其是样本。

我建议使用C#程序中的CUDA,使用以下过程来加速一些计算:

    首先,创建一个强的<非托管< /强> C++库,为您要加速的函数调用/调用。这将或多或少地限制您在CUDA中可以轻松使用的数据类型
  • 将非托管库与C#应用程序集成。如果你做的事情是正确的,你应该已经注意到某种加速。如果没有,你可能应该放弃
  • 替换库中的C++函数(不改变接口),用CUDA内核执行GPU上的计算。

我想你会发现你不能像你说的那样在GPU上运行C,而是可以从C启动CUDA内核。