随笔- 43  文章- 0  评论- 650 
2009年12月11日
     摘要: 译者注:DirectX一直是Windows上图形和游戏开发的核心技术。DirectX提供了一种在显卡上运行的程序——着色器(Shader)。在DirectX 11之前,着色器是与具体的渲染步骤绑定的,例如像素着色器,顶点着色器等等。而从DirectX11开始,DirectX增加了一种计算着色器(Compute Shader),它是专门为与图形无关的通用计算设计的。因此DirectX就变成了一个通用...  阅读全文
posted @ 2009-12-11 20:27 装配脑袋 阅读(1401) | 评论 (5)编辑
2009年12月1日
     摘要: 在上一篇博客中我提出了一个问题:如何用.NET的Reflection.Emit生成等价于下面VB代码的三个类型: Class A Implements B.IEnd ClassClass B Inherits A Interface I End InterfaceEnd Class这个问题的难点在于三个类型有循环依赖关系:A实现了接口B.I,因此A依赖于I;B是A的子类,因此B依赖于A;接口I是B...  阅读全文
posted @ 2009-12-01 09:16 装配脑袋 阅读(1837) | 评论 (28)编辑
2009年11月30日
     摘要: 众所周知,Reflection.Emit是非常强大的工具,可以在运行时动态生成各种程序集、类型和方法的IL代码,几乎无所不能。原先我也是这样认为的,但是看了某个人的博客之后我发现想要用Reflection.Emit做一些特殊的事情还是很需要技巧性的。假设你还没有看过那个人的博客(暂时先不公开……)可以尝试一下这个问题。下面的代码可以用vbc.exe正确编译(当然等价C#程序也可以经试验C#编译器无...  阅读全文
posted @ 2009-11-30 09:09 装配脑袋 阅读(2027) | 评论 (38)编辑
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 装配脑袋 阅读(1929) | 评论 (35)编辑
2009年11月24日
     摘要: 近年来PC的计算能力发生了天翻地覆的变化。CPU逐渐趋向于多核发展,同时内存带宽和缓存不断增加,如今的PC已经成为小型的统一地址空间的并行计算机。然而我们的PC中还有一个设备可以提供比CPU更加强大的并行计算设备——显卡,它在进行充分并行的任务时可以提供高达数TFLOPS的峰值运算能力,这几乎是2000-2001年间国产超级计算机的运算能力。在显卡刚出现时,显卡内的模块都是为特定的图形任务而设计的...  阅读全文
posted @ 2009-11-24 11:46 装配脑袋 阅读(3925) | 评论 (41)编辑
2009年9月8日
     摘要: 上回我们说到手工解析Expression Tree,以便获得其中的逻辑或者执行我们自定义的语义动作。这种做法扩展了C#语言的威力,让我们可以用C#的语法来做更多的事情,例如Linq to Sql。今天我们要学习一种相反的做法,手工创建表达式树,然后让.NET来解析它。这是一种强大的动态编程手段。我们可以用它来完成许多以前需要Reflection.Emit才能完成的任务。  阅读全文
posted @ 2009-09-08 11:59 装配脑袋 阅读(3072) | 评论 (27)编辑
2009年8月31日
     摘要: 上回我们说到Expression Tree是一种表示编程语言中“表达式”概念的树状数据结构,并且学习了从Lambda表达式自动生成表达式树的C#语法。那么它到底有什么用呢?其实上一回已经提到了Expression Tree的基本功能:分析表达式的逻辑、保存和传输表达式以及重新编译表达式。现在我们就分别来看这三项基本功能如何使用。  阅读全文
posted @ 2009-08-31 11:59 装配脑袋 阅读(3082) | 评论 (18)编辑
2009年8月28日
     摘要: 大家可能都知道Expression Tree是.NET 3.5引入的新增功能。不少朋友们已经听说过这一特性,但还没来得及了解。看看博客园里的老赵等诸多牛人,将Expression Tree玩得眼花缭乱,是否常常觉得有点落伍了呢?其实Expression Tree是一个一点就透的特性,只要对其基本概念有了一定的了解,就可以自己发挥出无数的用法。特别是之前对Reflection,泛型等知识有过一些了解的话,就会发现Expression Tree的加入绝对是你工作中的得力助手。如果你是Expression Tree的新手,那么从本文开始,你就可以领略这一工具,之后再看老赵的文章就从容不迫了  阅读全文
posted @ 2009-08-28 20:01 装配脑袋 阅读(4443) | 评论 (64)编辑
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 装配脑袋 阅读(2315) | 评论 (22)编辑
2008年11月22日
     摘要: 随Visual Studio 2010 CTP亮相的C#4和VB10,虽然在支持语言新特性方面走了相当不一样的两条路:C#着重增加后期绑定和与动态语言相容的若干特性,VB10着重简化语言和提高抽象能力;但是两者都增加了一项功能:泛型类型的协变(covariant)和反变(contravariant)。许多人对其了解可能仅限于增加的in/out关键字,而对其诸多特性有所不知。下面我们就对此进行一些详细的解释,帮助大家正确使用该特性。  阅读全文
posted @ 2008-11-22 17:48 装配脑袋 阅读(4147) | 评论 (39)编辑