代码之家  ›  专栏  ›  技术社区  ›  Morten Christiansen

将C++方法转化为C++方法

  •  3
  • Morten Christiansen  · 技术社区  · 17 年前

    我正在探索各种各样的方法来将常见的C代码构造映射到C++ CUDA代码上,以便在GPU上运行。系统的结构如下(箭头表示方法调用):

    C#计划->C#GPU库->C++ CUDA实现库

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

    public static void Map<T>(this ICollection<T> c, Func<T,T> f)
    {
       //Call 'f' on each element of 'c'
    }
    

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

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

    6 回复  |  直到 17 年前
        1
  •  7
  •   Pop Catalin    17 年前

    CUDA.Net 如果你想知道如何在GPU上运行C#。

        2
  •  2
  •   torial    17 年前

    老实说,我不确定我是否完全理解你的意思。但是,您可能会对将.NET应用程序/库转换为直的C++ W/O所需的.NETFramework的项目感兴趣。 http://www.codeplex.com/crossnet

        3
  •  1
  •   Eric    16 年前

    • 首先,创建一个 非受管的 为你要加速的函数调用/调用的C++库。这将或多或少地限制您在CUDA中可以轻松使用的数据类型。
    • 将非托管库与C#应用程序集成。如果你做的事情是正确的,你应该已经注意到某种加速。如果没有,你可能应该放弃。
        4
  •  0
  •   Die in Sente    17 年前

    有趣的问题。我在C#方面不是很在行,但我认为ICollection是一个容器 . 如果c的每个元素都是,比如说,一个像素,那么你必须进行大量的编组,才能将其转换为CUDA可以使用的字节或浮点缓冲区。我怀疑这会让一切都慢到足以否定在gpu上做任何事情的优势。

        5
  •  0
  •   Konrad Rudolph    17 年前

    你能做的就是写一本自己的书 IQueryable LINQ provider LINQ to SQL 将LINQ查询转换为SQL。

    MapReduce API PyCuda 将逻辑发送到GPU。在这方面,看看已经存在的问题也可能是有益的 MapReduce implementation in CUDA

        6
  •  0
  •   cr333    16 年前

    这是一个非常有趣的问题,我不知道怎么做。

    Brahma library 似乎做了一些非常相似的事情。您可以使用LINQ定义函数,然后将这些函数编译为GLSL着色器,以便在GPU上高效运行。看看他们的 code 特别是 Game of Life