原文发表地址: Scale-out computing on DevLabs
原文发表时间:26 Jan 2011 10:30 AM
今天我们在DevLabs建立新的 Technical Computing(TC)项目。这些项目作为Technical Computing 计划的一部分正在开发中,这给大家提供了学习这些技术的机会,能更早地获取代码,并提供一些对TC相关的创新项目的反馈。
去年五月, 我写过一篇关于Micorsoft的Technical Computing计划的博文,这个倡议旨在能够赋予世界上最重要的问题解决者能最优化地利用计算资源的技术。 这些领域的专家常常要不就自己开发代码,要不就依赖别的开发人员来开发软件以实现他们的工作。 TC计划给予那些开发人员和领域专家突破性的开发工具和架构来将工作做到最好。
TC计划自创立之初已经迈出非常重要的第一步。Visual Studio 2010支持开发、调试和优化多核应用程序,已经在各种不同的行业和领域获得广泛采用。11月,我们发布高性能计算服务器(HPC Server)2008 R2的Service Pack1。它融合了Windows Azure计算周期,能很简单地将大规模并行应用程序从群集扩展到云。这只是开始。所有TC计划的团队正在非常努力地开发新的出色的解决方案,以将所有现代和未来计算所拥有的全部计算能力都带去给开发人员,领域专家和IT专业人士等等。
今天的新TC项目正在准备采取下一步行动。
TPL 数据流(Dataflow)- 实现并行和并发的.NET应用程序
.NET 4中引入了任务并行库(TPL)、并行循环、并发数据结构、并行LINQ(PLINQ) 等等,所有这些都统称为.NET
Framework的并行扩展。TPL数据流是其中的新成员, 位于所有任务、并发集合与更多其他扩展之上,从而利用数据流(Dataflow)的理念构建强大而有效的.NET的并行系统。该技术依赖于基于进程中消息传送和异步流水线的技术,灵感大部分来自于Visual C++ 2010异步代理库和DevLab的Axum语言。TPL数据流为数据缓存、数据处理提供解决方案,构建高吞吐、低延迟的数据处理系统和基于代理/参与者的系统。TPL数据流还被设计用来和C#与Visual Basic中的新异步语言功能集成——我在之前的博客中写过的。
下面,你们将看到一个在C#中使用数据流块来安全、异步、有效地处理进入请求的“agent”示例。
Dryad – 支持数据密集型应用程序
作为微软研究院的先锋,Dryad,DSC和DryadLINQ是一系列在Windows HPC Server 2008 RC Service Pack 1上支持数据密集型计算应用程序的技术。 这些技术使很多应用程序能够处理大规模书架,包括数据挖掘应用程序、图像和流处理和各种不同的极大的科学计算。Dryad和DSC在群集上运行以支持数据密集型计算并管理分布在群集中的数据。而DryadLINQ则允许开发人员使用熟悉的LINQ编程模型创建数据密集型和计算密集型的.NET应用程序。
下面你能看到使用Dryad来加载文本日志数据的代码。 那些数据在一个集群中被合并和处理, 然后结果会显示回客户端:
public static IEnumerable<string> GeoIp(string logStream, string geoStream)
{
DistributedData<string> logLinesTable = DistributedData.OpenAsText(logStream);
DistributedData<string> geoIpTable = DistributedData.OpenAsText(geoStream);
// Join the two tables on the common key (IP Address)
IEnumerable<string> joined = logLinesTable.Join(geoIpTable,
l1 => l1.Split(‘ ‘).First(),
l2 => l2.Split(‘ ‘).First(),
(l1, l2) => l2).AsEnumerable();
return joined;
}
public static void Main()
{
// Load log and geo data into DSC
Console.WriteLine(“Loading data”);
File.ReadLines(“log.txt”).AsDistributed().ExecuteAsText(“hpcdsc://localhost/Samples/log”);
File.ReadLines(“geo.txt”).AsDistributed().ExecuteAsText(“hpcdsc://localhost/Samples/geo”);
// Run the query
Console.WriteLine(“Running query”);
IEnumerable<string> results =
GeoIp(“hpcdsc://localhost/Samples/log”, “hpcdsc://localhost/Samples/geo”);
// Print out the results
Console.WriteLine(“Displaying results”);
foreach (var entry in results) Console.WriteLine(entry);
}
Sho – 赋予你灵活开发原型进行数据分析的权利
也是始于微软研究院, Sho对从事技术计算工作的人提供了一个作数据分析和科学计算的交互式环境。 它让你无缝的将用IronPython编写的脚本连接到.NET库,实现快速敏捷的原型开发。 环境包括针对线性代数和数据可视化的强大而高效的库文件,二者都可以通过任何.NET 语言使用, 以及一个可以实现快速开发的功能齐全的交互式Shell。Sho自带处理大规模并行计算的程序包(通过Windows HPC Server和Windows Azure)、统计与优化、以及一些能让你易于创建和共享自己的程序包的扩展包机制。
如你在下图所见,Sho提供一个交互式的REPL(读/执行/输出)允许您输入命令/代码并以文本和图形方式呈现结果。
试试看吧
我们下一步是往DevLabs添加一些pre-beta的额外的Technical
Computing项目,从而能更早地得到你们的反馈和意见,帮忙指导这些技术往正确的方向发展。 期待能收到你们的反馈。
Namaste!

