2009年11月25日
摘要: 上篇中我们用DirectX Compute Shader在显卡上编写了一个并行算法来计算好看的曼德勃罗特集迭代数图形。那么使用显卡进行通用计算到底有多少优势呢?我们本次就来比较一番。首先我们在CPU上也实现该算法。为了方便起见我们设计了一个类: class CPUCalc{private: int m_stride; int m_width; int m_height; float m_realM... 阅读全文
posted @ 2009-11-25 09:28 装配脑袋 阅读(4928) 评论(35) 推荐(7) 编辑
2009年11月24日
摘要: 近年来PC的计算能力发生了天翻地覆的变化。CPU逐渐趋向于多核发展,同时内存带宽和缓存不断增加,如今的PC已经成为小型的统一地址空间的并行计算机。然而我们的PC中还有一个设备可以提供比CPU更加强大的并行计算设备——显卡,它在进行充分并行的任务时可以提供高达数TFLOPS的峰值运算能力,这几乎是2000-2001年间国产超级计算机的运算能力。在显卡刚出现时,显卡内的模块都是为特定的图形任务而设计的... 阅读全文
posted @ 2009-11-24 11:46 装配脑袋 阅读(11650) 评论(44) 推荐(10) 编辑
2009年9月8日
摘要: 上回我们说到手工解析Expression Tree,以便获得其中的逻辑或者执行我们自定义的语义动作。这种做法扩展了C#语言的威力,让我们可以用C#的语法来做更多的事情,例如Linq to Sql。今天我们要学习一种相反的做法,手工创建表达式树,然后让.NET来解析它。这是一种强大的动态编程手段。我们可以用它来完成许多以前需要Reflection.Emit才能完成的任务。 阅读全文
posted @ 2009-09-08 11:59 装配脑袋 阅读(17960) 评论(39) 推荐(29) 编辑
2009年8月31日
摘要: 上回我们说到Expression Tree是一种表示编程语言中“表达式”概念的树状数据结构,并且学习了从Lambda表达式自动生成表达式树的C#语法。那么它到底有什么用呢?其实上一回已经提到了Expression Tree的基本功能:分析表达式的逻辑、保存和传输表达式以及重新编译表达式。现在我们就分别来看这三项基本功能如何使用。 阅读全文
posted @ 2009-08-31 11:59 装配脑袋 阅读(17146) 评论(26) 推荐(26) 编辑
2009年8月28日
摘要: 大家可能都知道Expression Tree是.NET 3.5引入的新增功能。不少朋友们已经听说过这一特性,但还没来得及了解。看看博客园里的老赵等诸多牛人,将Expression Tree玩得眼花缭乱,是否常常觉得有点落伍了呢?其实Expression Tree是一个一点就透的特性,只要对其基本概念有了一定的了解,就可以自己发挥出无数的用法。特别是之前对Reflection,泛型等知识有过一些了解的话,就会发现Expression Tree的加入绝对是你工作中的得力助手。如果你是Expression Tree的新手,那么从本文开始,你就可以领略这一工具,之后再看老赵的文章就从容不迫了 阅读全文
posted @ 2009-08-28 20:01 装配脑袋 阅读(31258) 评论(88) 推荐(66) 编辑
2009年8月27日
摘要: 大家都经常使用.NET反射,用内置的反射API就可以进行灵活而强大的操作。然而,有的时候我们需要某些反射的操作,但是却有不能加载包含所需类型的程序集。例如,我们要操作的类型是.NET Compact Framework或者Silverlight的类型,而我们的程序运行在桌面版本的.NET Framework上等等。实际上,我们有时仅仅需要非常简单的操作,例如从一个类型获得它的数组类型;将一个泛型类型的类型参数转变一下;改变一个类型的程序集版本或以上操作的逆向操作等。实际上,.NET类型的完全限定类型名称(Fully qualified type name)或称作Assembly qualified type name就包含以上操作所需的所有信息。只要解析这个字符串,就能进行以上简易的“离线反射”动作。 阅读全文
posted @ 2009-08-27 14:12 装配脑袋 阅读(6627) 评论(26) 推荐(11) 编辑
2008年11月22日
摘要: 随Visual Studio 2010 CTP亮相的C#4和VB10,虽然在支持语言新特性方面走了相当不一样的两条路:C#着重增加后期绑定和与动态语言相容的若干特性,VB10着重简化语言和提高抽象能力;但是两者都增加了一项功能:泛型类型的协变(covariant)和反变(contravariant)。许多人对其了解可能仅限于增加的in/out关键字,而对其诸多特性有所不知。下面我们就对此进行一些详细的解释,帮助大家正确使用该特性。 阅读全文
posted @ 2008-11-22 17:48 装配脑袋 阅读(24215) 评论(53) 推荐(35) 编辑
2008年11月3日
摘要: 随着VS2010早期CTP的放出,大家对下一代开发系统的期待热情又一次掀起了。除了已经开始被大家尝鲜的C#4以外,Visual Basic也进化成了10.0。不过据我观察,VB10的改变还没有C#4那么明朗,我们目前的确可以看到一些语法上的变化,然而似乎VB10并未真正接近完工的地步,还有很多特性有待继续开发。大家也许还记得VB9引入的令人眼前一亮的XML集成语法,使得VB拥有了业界最为紧密的XML集成。但VB需要编译才能使用,这一点阻碍了VB强大的XML处理能力和动态能力,如果VB变成一个完全动态的编程语言,包括脚本化运行的能力,那么VB使用方便的特点将再一次发挥出来。但是VS2010 CTP中尚未看到基于新DLR的VB编译器。我们能看到的仍然是一个静态编译的VB10。所以我这次主要介绍一下VB语法方面的改进,更多改进等到VS2010来临之际自然会知晓。 阅读全文
posted @ 2008-11-03 16:10 装配脑袋 阅读(4457) 评论(20) 推荐(0) 编辑
2007年11月26日
摘要: 上次发表了VS2008亮点:用Lambda表达式进行函数式编程这篇文章后,有些人提出希望看C#版。其实我本来想等大家多尝试下能否自己实现的,可惜没有太多人实际思考这个问题,是不是觉得函数式编程离我们的日常生活太远……不管怎么说,这次我将公布强类型语言C#实现不动点组合子Y的方法,以及类型推导的全过程。不喜欢强类型思考的朋友看本文一定要做好头晕的准备…… 阅读全文
posted @ 2007-11-26 17:14 装配脑袋 阅读(6945) 评论(21) 推荐(2) 编辑
2007年11月23日
摘要: Visual Studio 2008正式发布了,我们.NET开发者也走进了新的.NET 3.5时代。相对于.NET 3.0中的Foundations,3.5的改进更注重编码体验了。新的Linq系列语法和Linq to Sql、Linq to Xml大大改变了我们访问数据的方式。但是纵观Linq系列语法,影响最大的要数Lambda表达式。虽然从渊源来讲Lambda表达式就是匿名函数的简化表示方法,但谁也想不到这一小小的语法给我们带来了整个Linq与众不同的查询式语法。 注意本文介绍的函数式编程思想比Linq中的更难,主要目的是为了启发思考,带来灵感。希望能坚持看到底哦。 阅读全文
posted @ 2007-11-23 21:15 装配脑袋 阅读(13669) 评论(50) 推荐(3) 编辑