【发布时间】:2011-12-28 18:08:49
【问题描述】:
使用Parallel Linq 等系统,可以将匿名函数、查询等的执行拆分到单个机器内的多个内核和线程上。我希望能够使用标准语言结构(如 for 循环(如 Parallel.For())、值类型(如 ints、structs 等)等)将其扩展为跨多台机器运行,并保留应用程序源修改到最低限度。理想情况下,这将允许我打开一个项目,向方法添加一个属性,然后重新编译以访问增强的功能。
看来我需要一些类似的东西:
能够捕获已编译的代码块(例如 lambda)并将其连同所需的任何数据一起传递给在另一个节点上运行的工作进程,或者
提供一个预处理器来捕获有问题的代码,在一种模板项目中编译它,该模板项目将替换变量引用等,引用一个可以处理网络通信、缓存和访问任何其他代码的类所需的资产,并将生成的 DLL 发送到在其他机器上运行的任何可用工作节点。
Roslyn 似乎提供了一些在这里有用的工具。有没有办法挂钩到当前的编译管道以允许这样做?
编辑
好的,我知道这是可能的,because these guys did it。问题是,如何?
【问题讨论】:
-
好的,关闭器 - 这到底是如何过于本地化的?
-
因为你必须是这里唯一想要实现 C# 语言扩展来创建 OpenCL 内核的人。
-
好吧,忘记 OpenCL 部分。您将如何进入编译阶段以自定义代码生成以跨异构平台分布执行?这对我来说似乎更清楚。我们从什么时候开始解决有关特定应用程序的问题?!
-
我不认为这是本地化的。 OP 真正要求的只是编写 LINQ 查询提供程序以将 C# 转换为 OpenCL 的指导,这是一项艰巨的任务,但前期并不十分复杂。见here
-
@JohnSaunders 然后“没有办法做到这一点”是一个有效的回答,因为我在问是否可能,如果可以,如何。我不明白这如何使问题“过于本地化”。
标签: c# language-extension