岁月流转,往昔空明

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 3 Stories :: 413 Comments :: 0 Trackbacks

#

程序员,都是习惯从0开始计数的。如果不是陈梓瀚撰写了《10年编程》,我不会想起对一个如此漫长的瞬间,做出一个可能并不是恰如其分的总结。某种意义上来讲,这也算是他“改变了我的人生轨迹”的一种方式吧。

2000年,终于考上了当地最好的中学,分数不高不低。那会儿对计算机或者是程序,是完全没有什么念想的。在这之前,如果说启蒙,呃,搜肠刮肚一下,也是有的。

初中时买的学习机上,有一个QBasic的解释程序。啊,真好,程序。虽然要写行号神马的,但是到底是程序啊。可是,我写出来的Code他妈的不能存储!不能存储!不能存储!有鸟用!(据说可以支持录到磁带里,但是我从来没他妈成功的用过我艹)

当然,这用处,也还是有的。用来算算四则运算用神马的。——这算哪门子用处!坑爹呢!

好吧。这些暂且不表。因为还有LOGO语言,传说中的LOGO。伟大的Logo,可以画图的Logo。但是我都忘记了。只是前段时间我师妹让我去看看NetLogo的时候我就想起来满屏幕爬的小海龟来。三角形的小海龟。

哎哟我艹!这是小海龟嘛!你见过三角形的小海龟嘛!

好吧。这些都不重要。高中期间三件事情,“改变了我的轨迹”。第一,我会编程了。第二,认识了初恋,让我赶上了早恋的末班车。第三,Event Code A(有些人知道,有些人不知道。不重要了,但是和编程多少有点关系)。

也不知道怎么就去学编程了。那会儿是以OIer(奥林匹克信息学竞赛)的身份,学Pascal。领我入门的,先是朱老师,后来是胡老师。这么多年我也没回学校去看望二位老师。要不是他们,我大约真的就要冻死街头,饿毙巷角;被城BI管BI追,被土狗咬。——我了个去!这又是神马啊!!!——当然,是他们教会了我Pascal。虽然在有些环节上我是无师自通的(臭屁啊,装逼啊),也因为他们是不错的老师。

00年到01年这段时间里面,我的基础知识是一片混乱。

其实那个时候我已经很牛逼了。一方面,我会Pascal,甚至会一些算法。递归基本上一看就明白了,Delphi学起来也还凑合。到现在我都还有两本Delphi方面的书仍在家里,一本是白皮子的Delphi教程,一本是机工的实用编程100例。还有就是,我每个星期要装上10来次Windows98。什么Ghost,什么PQMagic,什么Norton Tools,都不在话下。

另一方面,在概念上也存在相当多的严重问题。比方说,完全不知道“编译”是个什么过程,妄图把.pas换个exe就期望着能执行,比方说分不清TFrom和TForm1有什么区别。连类型和变量都搞不清楚。我觉得我也是很牛逼了。

但其实编程这种东西,对大部分人,都没什么吸引力的。一开始的时候,大概有30个人参加培训。一个月之后,就剩下我,赵同学和滕同学了。其他人都没了。现在还在IT的,不知道还有几个。

曾经还考虑过,回去带一些小弟弟小妹妹(这个是重点),去给他们讲一些数据结构啊,算法神马的。但是今年一看,奥林匹克竞赛高考一律不加分,心里一下子就冷旺旺的。这下子,搞不好连三个都不剩了。

高二一年,成绩掉的厉害。有多厉害?其中的时候,double了。期末的时候,又double了。对不起,我不是说分数。我是说,名次。

原因很多。但是关键是,我对念书,数理化英语地理生物政治历史,没有那么大了。这要是放在以前,我一定是个博物学家。诺贝尔那样的。呃,好像是叫达尔文。

后来看到过老美们用的历史教案和材料,我觉得我肯定更死翘翘。他们会问阿兹特克人在哪一年遇到了一个什么样的自然灾害死了多少人并对接下来的历史进程产生了如何的影响。

然而那个时候我天真的以为阿兹特克人其实是生活在好望角的。当然,我唯一引以为自豪的,是知道霍尔木兹海峡是黑海到地中海的出入口,而博斯普鲁斯海峡是海上的石油要道。好像我又记反了。真该死。

但是这些都不影响那个时候我继续编程。学会了二叉树,学会了链表,学会了数组。学会了指针的指针的指针的指针。我也不知道怎么学会的,好像就是自然而然的钻到脑子里面去了。但是他们钻地并不深,都给堵住了。所以,现在我的头脑里面很难再钻点什么像样的东西了,都是些明星绯闻,裸体空空神马的。

高三的时候,03年。是最后一次参加OI。认识了三个小盆友,乐乐,敏敏和洋洋。敏敏去学泰语了。乐乐不知道在干什么,只是知道他当年在文曲星PC600上的QBasic玩的是近乎神迹,能用那个破烂到家的MC68000的变种的CPU干很多很多事情。我也有一个,迄今为止也还在手上。后来赵先生也有了一个,PC1020。羡慕死我了。那个时候文曲星的升级大概就和现在手机是一样的,CPU更快,记忆体更大,屏幕分辨率更高。

洋洋玩的也很好。现在好像武大的BBS就是他在维护的。适当的时候我也会关注一下他。不知道他以后会怎么样,但是总之是一路顺风了。几个孩子都很聪明。学校都很好。不像我。到最后的时候,RP超级爆发了一下祖坟上的青烟冒得跟911大火似的,也就考上了一个普通的不能再普通的211。但是我仍然是认为,老天是合理的。高考前我从未系统复习过,也没有做过什么题目。你问我对这件事情自豪吗?Of course!其实说着话的时候,爹浑身正冒出一种傻逼特有的青烟。这叫气场。

03年的时候我就会C++了。用了一本什么成人自考的教材。绿色壳子的书,超薄,还带护翼的,夜用,防侧漏,吸量大。幸亏那个时候没有看Primer这种大部头。要不然死都不知道怎么死的。后来很多人质疑说国内的书怎么怎么烂,说不能误人子弟啊云云。这个时候最好的解决办法,就是找一本尽可能薄的书。这个时候信息量会尽可能少,出错的情况也就会尽可能的少。除非他是文言文写的。

到03年暑假的时候,都是没有自己的PC的。03年暑假,终于买了自己的PC。Athlon XP 1700+,硕泰克的主板(忘了什么芯片组的了,那个时候NV的nForce还是很贵的),256M的内存,80G的酷鱼四。显卡是传说中的Radeon 9100。结果机器买回来,玩了整整一个暑假的游戏,轩辕剑Online。除了画面丑了点,游戏性倒是不差。后来大宇做的网游,倒是越来越SB了。

早在高一的时候,在老胡同学的影响下,我就眼睁睁看着他通关了天之痕和云和山的彼端。自此之后我就有了不玩游戏看录像的毛病。都是好游戏。所以那会儿我特想做RPG。一直到我水平不够做RPG的时候,都是有这个想法的。现在掐自己腿肚子,也算是可以了,只要有美工我就能山寨出一个差不多的RPG来。但是我不再想去做游戏了。

人生理想大抵是如此,等你可以实现理想的时候,往往就会有更远的眼界,想做更大的事情。这个时候,应该回过头来,感念那些在深夜挑灯的时候,给予你温暖的那些好梦。

大学对我来说就只有两个阶段,在江宁的大一大二和在本部的大三大四。

在高考独木桥挤啊挤啊,挤了俩通宵,好不容易才上了开往失业的贼船。很多人以为我以前学编程,现在干IT,我那个时候一定就是所谓的“计算机相关专业”。其实不是的,我学的是测绘。工民建,贱民工。

但是大一大二,大家都知道的,基础课。其实和专业没什么关系。所以那个时候我从来不去上课,天天泡图书馆,就在那等啊。等艳遇。四年等了两个,全是有主的。通过这两个,我还认识了一班哥们。不过我不是Gay,可惜了。事实证明,图书馆不是等姑娘的好地方。人家来都是来看书的,不是来挑郎的。

然后就无聊啊。干嘛呢,抄书。那个时候是把一本清华的图形学教材,一本More Effective C++,一本Large Scaled xxx(就是小贝看的那本没前途的书),一本软件工程,一本COM本质论,抄到了小本子上。当然都只是摘抄,不是全部。才看到MEffC++的时候,惊艳啊!怎么会有那么牛逼的书呢?现在想想,不是那本书牛逼,而是我实在太傻逼了。这个感觉又出现过两次。一次是看到Modern C++ Design的时候,一次是看到Boost里面MPL的代码的时候。

抄书好。好记性不如烂笔头。找两本经典的书抄抄,还是有助于你系统的理解学习一下常识的。寒假回家的时候,装逼的搭了一个Graphic Engine的框架,最后还是不了了之,太监了。但是就是这个只花了我两三个月的东西,在6年之后,我还是写在了我的简历里。因为这是很重要的一步,对我来说。第一步虽然走不稳,但是确实是非常重要的。

时间过得快啊。从初恋把我甩了后,两年一晃就过去了。然后我就到了本部。大三大四,还是过得非常充实的。魔兽练了一个牧师到了60,最后还跌跌撞撞的拿到了祈福;女人,无。然后学业上,虽然绩点烂到要毕不了业,但是好歹发了一篇第一作者EI,两篇第二作者EI。

那个时候,最大的好处是有网上了。大一大二的时候还在gameres和csdn里面混过,后来就再也不混了,发现了两个群。然后在里面天天被一帮狗日的艹啊。艹了个花开花谢。狗叔,猪叔,叛叛,都是那个时候认识的。还有就是壮硕的,也是这篇文章的直接罪魁祸首,陈梓瀚。

S****是迄今为止,我见过水平最好的群。有大牛坐镇,有打手帮喷。不管问什么,都会有答案。虽然有的时候的答案是“您已经被管理员请出xxxxxx群。”但是这也可以学习到,这个问题究竟是多么的傻逼。但是在这之前,我还在一个D****** MVP群里面呆过。在水平上,要差一些。但是对当时我这样的水货而言,气氛更好一些。

所以盲目加牛逼群的人,最好先掂量一下自己有多分量。水平太好或者太差的群,对自己都是不好的。你把一个群的水平拖低了,只会让睾兽们骂累了之后直接把群Mask,不再说话。对谁都没好处。讨论才是持续发展的真正动力,不管是讨论什么,从三体,到三俗,到三急都可以。很多问题,google一下,或者多看点书,你就不会好意思问出来了。

迄今为止,我还在S*****的群里面活跃着,现在这个群除了叛叛和VC,还有出去自立门户单干的猪叔,剩下的活跃用户,几乎都是Autodesk的人了。就连我,也顺藤摸瓜的上了黑车。都是狗叔害的。

临毕业的时候,还做了一把伪学术,发了点Paper,之前也说过了。是和GPU有关的,也和我专业有关的。后来本科论文致谢里面,很多感谢的人,都和这个有关。再次感谢一下猴叔(怎么叔叔们都是禽兽啊)孙凯先生。

本科的时候遇到了后来我硕士的导师。虽然在硕士期间,我和我的同门啊师弟师妹啊什么的,对其还是有些微词的,但是这个毕竟放了我毕业,就算是万幸了。而且那个时候对我也确实是很宽容的。我在和她一起做Paper的时候,她居然就放任我在办公室里面WC3。

这个部分要单独分开来讲一讲。因为很重要。读大学,不完全是为了等失业。也还有一些很重要的事情要去做。比方说破处,比方说学点知识,比方说,认识一些人。认识女人可以一起上床,认识男人可以一起翻墙。认识人妖还可以携手并肩当牛郎。

之前说的两个在图书馆邂逅姑娘,不是终点。最后都成为了中转站。无论如何,谢谢你们,希望你们过得好一点。

籍由她们,我认识了衔哥,老毕(不是拍A片那个老毕),云哥和邦邦。衔哥和老毕,都算是是富二代,人很好。他们比我高一届,一直以来得到他们很多的帮助。衔哥走的那会儿,颇有些难过。很希望以后还可以与他再见面。老毕现在俨然是一个资本家了,开了家小公司,倒买倒卖着什么。云哥和邦邦,那正儿八经都是做技术的人。云哥的技术很好,我还不懂什么叫ASP的时候,他给我分析页面之间怎么传递数据分析的头头是道。有一次他对于AOV网的分析,让我印象极深。我甚至还记得,那个下午将我的老脸晒得滚烫的夕阳。

还有邦邦。很久没有与他联系了,我想他现在应该已经在国外了。他毕业的时候,我留校读研,于是从他那里摸走了近800块钱的书。现在在我枕边的Introduction to Algorithm的影印版,最早便是他的。今天下午和本文的罪魁祸首陈梓瀚在皮扎哈(Pizza Hut)吃着他的软饭,并吹牛的时候,也提到了算法导论。感谢邦邦,是你给我提供了如此多吹牛逼的资本。书上密密麻麻都是你的笔记。不明就里的人,还以为是我刻苦读书的结果。但是实际上我的书从来都比脸干净。

硕士阶段,若干件大事。但是能记录在这里的却很少。头等大事,发生的最晚。是我认识了现在的女朋友。我是在临毕业的时候和她走到一起的。那个时候事情是如此之多,以至于重要的信息全部都被各种毕业前夕的噪音掩盖的一干二净。和我很亲近的师妹都被我蒙在鼓里,上个月还在QQ上很伤心的问起我为什么我一声不吭就甩了和我相濡以沫了多年的他的男朋友暨我的相好,而和另外一个可爱温柔泼辣的MM远走高飞了。我不知道怎么回答她的伤心和无助,只能说等到南京的时候让她一定要请我吃饭。

第二件大事,发生的最早,和技术也有点关系。就是SoftArt项目的开始。是07年底。花了两个多月写了个原型。最后居然也不知道怎么的他妈的就可以运行起来了。如果不是龚敏敏鼓励我,这个东西指不定又要胎死腹中。07年底到现在,项目一直都很顺利,虽然进度有点慢。那不是因为没人手么。08年底的时候,加了一个编译器到项目中。但是到现在这个编译器仍然只是雏形。也是那个时候我逐渐和本文的罪魁祸首陈梓瀚相识相知走到一起去相互掐架。迄今为止,这个编译器也受到了他诸多的启发和鼓励。用一句话来表达我的感激之情,那就是——多谢你的吃屎,让我只用闻屁就够找到茅厕了。

同时也感谢Un-stolen同学,让我可以在伤心绝望痛苦中无形的加快了项目的开发进度。

第三件事情,在测绘局的实习。这大约是我做过的第一个成品项目。感谢领导同志和姐姐哥哥叔叔阿姨们对我的信任和支持,让我有机会再一个数十万行的程序里,当一个不那么称职的Arch。这段经历其实对我之后很长一段时间的作用是巨大的。特别感谢金琳姐,在我发现系统问题并实施重构的日子里,要不是你帮我扛住了主任的压力,我还真有点不知道如何是好呢。不过知道我当时做的成果,现在你们也在用,便觉得除了欠了你一顿面值300人民币的饭外,还是有点点对得起你的。顺便也祝官二代的你工作顺利,早日升职:)

以这样一个数字,我的十年终于可以完满的结尾了。

如今我在Autodesk,算是过的不错。我的Team,我的Leader,我的Manager都很Nice,感谢你们给了我这个可以在团队里历练自己的机会,给了我这个可以开发成熟产品的机会。对王先生和李先生而言,没能去V公司,真是有点遗憾。但是现在看来,我们之间其实是大有合作的机会的。还有MSRA,你并没有能阻绝我全部的路。如果我想去,自信是不会有多少问题的。

在最后,感谢作为本文罪魁祸首的陈梓瀚,是你让我有时间考虑这样一个十年里我究竟是如何成长的。感谢所有在文中出现过的人们。

在机器面前打着哈欠等我写完的我的女朋友张小兔同学,如果不是你一直在等我,恐怕这篇文章又要太监了。不过,我光荣而胆怯的宣布,我已经写完,可以交差了。

我爱你。

posted @ 2010-12-19 23:57 空明流转 阅读(5169) | 评论 (20)编辑 收藏

Syntax of SASL Symbol Name Mangling

September 26

2010

This script describes the rules of symbol name mangling.

V1.0

SASL Name Mangling Syntax

V1.0

Name mangling can be applied to name of function mainly, for distinguishing the overloaded function

MangledName is the result of Name Mangling. It starts with ‘M’ character and ends with ‘Z’ character.

MangledName ::= ‘M’ QualifiedName ‘@@’ ParameterTypes CallingConvention

QualifiedName is base name qualified by scope name. A scope name could be a structure name, class name or namespace name.

ParameterTypes describes the types of parameter list.

‘@@’ is the splitter between qualified name and parameter type.

QualifiedName ::= ( ScopeName ‘@’ )* BaseName

QualifiedName is composited by scope name and base name. ‘@’ is used to split the scope segments.

ScopeName ::=

‘S’ StructTypeName

‘N’ NamespaceName

StructTypeName ::= <name of structure>

NamespaceName ::= <name of namespace>

BaseName ::= <literal name of function>

ScopeName are two sorts, structure name or namespace name. Sorts are distinguished by a lead character. If the name starts with ‘S’ it means the name of structure, and ‘N’ means following name represents a namespace. Note that, if

BaseName is the literal name of the function or a type.

ParameterTypes is a list of parameter types. Because SASL do not support variance parameters, so we need not to considerate that. Syntax of ParameterTypes as following:

ParameterTypes ::= ( ParameterType ‘@@’)*

ParameterType is encoded by type qualifiers and type name.

NOTE THAT, anywhere type name referred means that the original definition name but not alias( such as generated by “typedef” ).

ParameterType ::= ScopeQualifiedTypeName

ScopeQualifiedTypeName is the type name qualified by scopes. It is similar with qualified name.

ScopeQualifiedTypeName ::= ( ScopeName ‘@’ )* BaseTypeName

ScopeName ::= ( ‘S’ StructTypeName ) | ( ‘N’ NamespaceName )

QualifiedBaseTypeName ::= TypeQualifier BaseTypeName

TypeQualifier ::= (‘C’)?(‘S’)?(‘U’)?Q

TypeQualifier describes the qualifier of declaration. In SASL, following qualifiers are supported: constant qualifier (‘C’), uniform qualifier (‘U’) and shared qualifier (‘S’). Each qualifier is represented as a character, and qualifiers is ended by a character ‘Q’.

BaseTypeName ::=

‘S’ StructTypeName

‘B’ BuildinScalarTypeName

‘V’ BuildinVectorTypeName

‘F’ FunctionTypeName

‘M’ BuildinMatrixTypeName

‘A’ ArraySize ArrayComponentTypeName

StructTypeName ::= <literal name of structure>

BuildinScalarTypeNames encode all build-in type into one or two characters.

BuildinScalarTypeName ::=

‘U1’ | ‘U2’ | ‘U4’ | ‘U8’ |‘I1’ | ‘I2’ | ‘I4’ | ‘I8’ | ‘B’ | ’F’ | ‘D’ | ‘O’

ArrayComponentTypeName ::= QualifiedBaseTypeName

ArraySize ::=

<length of array >

‘V’

They are corresponded following building types: uint8_t, uint16_t, uint32_t, uint64_t, int8_t, int16_t, int32_t, int64_t, boolean, float, double and omit (void).

BuildinVectorName ::= VectorLength BuildinScalarTypeName

BuildinMatrixName ::= RowCountOfMatrix ColumnCountOfMatrix BuildinScalarTypeName

BuildinVectorTypeName shows the name of building vector. It makes of length component and scalar type component.

VectorLength Could be 1, 2, 3 or 4 and represents the length of vector.

And the BuildinMatrixTypeName is similar as build-in vector type name.

ArraySize is an integer demonstrating the size of fixed-length array or ‘V’ (void or variant) means that it is a variant length array.

ArrayComponentTypeName is the description of type of component of array. For example, array component type of “int32_t[]” is “int32_t”. So array component type name is set to the mangled name of int32_t, “I4”.

CallingConvention is a single character which shows the calling convention of this function. ‘S’ means “__stdcall”, ‘C’ means “__cdecl” and ‘F’ ,means “__fastcall”

CallingConvention ::=

‘S’

‘C’

‘F’

FunctionTypeName reuses all non-terminators and terminators mentioned above.

FunctionTypeName ::= ReturnType PrarameterTypes CallConvetion ‘@@@’

ReturnType ::= ParameterType ‘@@’

posted @ 2010-09-26 19:12 空明流转 阅读(1683) | 评论 (2)编辑 收藏

明拜之,请曰,“简报可乎?”曰:“可。”

咳咳。最近由于SoftArt的几个参与人员工作都比较繁忙,因此进度上比较松散。但是大体上,SoftArt一直是按照预先想好的计划在进展。为了让大家知道SoftArt的开发进展,同时也是我们开发人员自己的备忘,我们在商议后,决定以简报的形式,不定期地将SoftArt的变化和进展及时地呈现出来。

简介

本简报主要总结了09年11月份以来SoftArt的变更情况。

对于SoftArt来说,09-10年度是非常重要的。在这一年中,尽管SoftArt并没有加入多少新的特性的加入,但是架构、性能都经过了持续性的优化。

在Graphics方面,Minmin为SoftArt撰写了全新的光栅化算法。新的光栅化算法与Larrabe的细分方法类似。这一算法在并发能力上有很明显的优势。尽管在目前性能上与上一版的扫描线算法相对弱势,但是经过Minmin的辛苦工作,这一弱势已经逐步的缩小了。就目前而言,我们认为该算法仍然有很大程度的提升空间。

同时,纹理单元也经过了大量的SSE优化,目前的纹理单元效率已经远远超出最初我为之撰写的版本。

经过一段时间的调优之后,目前程序的瓶颈主要集中在裁切和顶点变换上。已经朋友为我们提出了非常好的建议,接下来这也是我们工作的重点之一。

当然,根据估计,在经过一段时间的调整后,这些问题一定会得到解决的。我们估计最终SoftArt的瓶颈将主要集中在两个地方,一个是IO,一个是Shading部分。目前我们只是使用了简单的shading code,相信在shading code复杂之后,瓶颈会在很大程度上有所转移。

对于IO部分的瓶颈主要由纹理和后备缓冲产生。对于现代图形算法而言,纹理又是重中之重。没有特殊纹理单元的CPU在这一点上实在是吃了大亏。尽管我们在Cache Hit Rate及消除Function Call上下过一定的功夫,并使用了SSE加速了双线和Mipmap的纹理插值计算,但是效果仍然达不到我们的预期。一旦引入各向异性过滤,可以预见,在这一部分,还需要我们投入大量的精力来研究并解决这一问题。

但是由于C++ Shader Code在SIMD特性上的限制,目前我们并没有设计并实现更加复杂的Shader。这一切都有待SASL(SoftArt Shading Language)编译器完成之后才能。Minmin为SASL与渲染器连结的Host API部分撰写了完整的Specification(神人啊,真的是做什么都可以)。尽管目前这一部分在描述上比较简略,但是与DX11相似,相信大家一定可以比较容易的接受这套API。

在编译器方面,主要有Ye负责。目前的编译器各个阶段的接口以及语言特性已经基本成熟。语义和代码生成部分也在有条不紊的开展。在编译器设计期间,得到了Zihan Chen在技术上的大力支持,在此特别表示感谢。

变更清单

Nov 01,2009 – Nov 29, 2009 (r1 - r10) 此阶段的工作主要是将原先在sf.net上的项目,移动到Google code上,并对工程进行了一定的调整,同时移除了一些编译器警告。

Dec 01,2009 – Dec 09,2009 (r11 - r29) 此间,Minmin为现有的C++ Shading Code的接口进行了重构,修复了一些Bugs,并进行了一部分的优化工作。

Dec 10,2009 – Feb 08,2010( r30 – r65) Minmin为SoftArt的顶点和光栅化提供了并行能力。光栅器以Block为粒度对三角形并行光栅化。

Dec 09,2009 – Feb 21,2010( r27 – r66 ) Ye将SASL的分析器由Spirit 1.8移植到2.1

posted @ 2010-08-23 18:19 空明流转 阅读(1943) | 评论 (1)编辑 收藏

     摘要: 呃,纪念一段生活,与技术没什么关系,不过还是想发在首页TAT  阅读全文
posted @ 2010-06-24 23:13 空明流转 阅读(5917) | 评论 (14)编辑 收藏

Python写的。有哥们儿说,Perl多好,一行就OK了,我囧。我不会那么高深的玩意儿,就只好写的烦一点。大bug没有,小bug肯定是有的,凑合着用吧。反正是脚本的,不满意的同鞋可以慢慢改。。。

有图有真相

image

好吧,softart可怜兮兮的才15K行代码,有一半以上都是叛叛贡献的了可能。这里的统计还包括了一部分的py代码。

猛点我下载脚本

posted @ 2010-06-22 01:18 空明流转 阅读(2011) | 评论 (4)编辑 收藏

SoftArt是一款遵守GPLv2协议的开源软件渲染器,目的是在CPU上实现Direct3D 11的全部功能。

项目介绍参见这里

主页参见这里

目前固定管线的工作已经结束,Shading Language的编译器也在紧张开发中。

以下是目前的两个Demo的截图。

ComplexMesh

SampleWindow

在接下来的工作中,除去核心部分的进展外,性能示例、测试用例和特性展示。我们希望通过这些用户程序的开发,暴露SoftArt的性能、稳定性、Feature上的优势和缺陷。

考虑到Roadmap和目前的人手情况,我们希望招募一些志愿开发者从事Demo的开发工作。我们以极大的热诚,欢迎您的加盟。我们可以给予您一个良好的学习锻炼的机会。考虑到主要成员均为在职,可能没有更多的时间来辅导和培训,因此我们希望你可以具备一些基本条件:

* 有一年左右的C++经验;

* 对开发和图形学有钻研的兴趣;

* 有一定自学能力,在较少的指引下高效的学习;

* 有恒心,有热情参与开源项目;

* 当然,如果您有一定的图形学基础,那就更好了。

项目目前的核心开发成员及顾问,均具有6-12年的开发经验,供职于业内的顶级企业。为了让您能够快速溶于项目中,项目组会视情况组织在线/线下的培训和交流活动。相信每个成员均可以在本项目的实施过程中获益匪浅,项目也会因为您的贡献而更添光彩。

如果您有这方面的意向,请致Email于 wuye9036@gmail.com

请在Email注明你的:

ID:常用的ID,最好包括真实姓名

Google Account:如果没有,可以申请一个。因为我们的SVN Repository是建立在Google Code上的)

联系方式:IM(QQ,MSN,GTALK)和Email,有手机最好

自我介绍:包括擅长的技术啦,项目经验啦,闲扯也可,呵呵

希望参与的工作

其他要求:任何要求皆可

我们会在第一时间与您联系,商讨具体事宜。真诚期待您的加盟!

posted @ 2010-06-12 16:19 空明流转 阅读(1985) | 评论 (6)编辑 收藏

Visual Studio 2010开了一整天,敲了不到10行代码,然后几秒钟就被Ctrl + Z掉了。将三方协议寄出之后,难免有些松懈与混沌。周四体检结果出来,一切也就尘埃落定了。既然没心思干活,那可以随便写点什么,总结一下自三月份求职以来的种种经历,打发一下时间。

这几个月求职对我来说,还算是比较顺利的。到现在为止,MSRA的电话面试应该算是全部通过了,V公司也到了谈Offer的阶段。不过由于时间限制、兴趣、职位等种种因素,最终我还是选择了A公司的Offer。这点要向被我放了鸽子的朋友和公司道歉。有些事情,真的要看缘分和运气。待遇、职位、工作内容、工作地点,对我来说都比较适合,而且又有认识的多位前辈在其中供职,对能有这份工作,我是很高兴的。

我收到面试的机会不算特别多,MSRA三次中文的电话面试,A公司的一次电话和两次Face-to-face,V的Face-to-face,还有一个做GIS的单位G的Face-to-face的面试。

最早接受的,是G单位的面试。G单位采取的面试方式是一个Introduction,就是介绍下自己做过什么工作,然后Manager会介绍一下公司主要做哪些方面的工作。由于没什么问题,所以面下来,气氛很好。不过最后我一个在公司里工作的朋友告诉我,我被拒了。为什么不知道,连正式通知都没有。所以我也不好说什么的。不过大体上,这次面试就拉开了我被面的序幕。

MSRA三轮电话面试倒是各有特色。第一轮主要问我做过什么,对职业有什么规划,倾向于什么。然后简单的问了两个技术问题。第二轮是个单纯的技术面试。问我一个Large-scale的图片浏览系统应该怎么设计。然后我就在他的引导下,一步一步的深入,最后还算是比较顺利的纸上谈兵的解决了问题。反正嘛,不外乎就是Tune-Opt这样的顺序。对于这类数据访问型的数据,本质上就是运用Cache解决访问速度的问题。解决的好不好,面试这么短时间内,也是问不出来的。所以对付面试,有充分的分析问题的能力比较好。至于解决问题,那个面试很难考察的清楚。然后有一个彻底把我打垮的问题:操作系统的常用内核对象有哪些?我直接长大了嘴,然后过了好几分钟,干净利落的回答,不知道。然后是一些C++的问题。比方说struct和class有没有什么相同和不同啦一类的。或者是一些很概念性的,诸如Template用在哪些场合。第三轮电话面试比较郁闷。有个哥们儿一口咬定,我不适合做研究。然后27min中的面试有10min是他在接别人电话,还有至少10分钟,是纠结在我不适合做研究的问题上。问题是我本来就申请的是RSDE,哪有多少研究的。

V是我第二个Face-to-face的面试。面试我的是一个挺能侃的哥们儿,看样子是Team Leader。先让我做了一套Cpp的题目,我在博客里面也总结了,这里就不再多说了。然后就是一些公司发展啊,职业发展啊,定位啊一类的。图形方面问道的题目不多,倒是一些诸如不同调用协议之间的区别一类的汇编级的问题被问的很多。我对这些仅仅就了解了一个皮毛,因此回答的也很勉强,很复杂的问题,例如为什么cdecl下,参数是自右向左进栈这样的问题,就很难回答的上来了。不过整体上,从他的侃大山里,学到了不少东西。

A的两次,是典型的大公司的两次面试。第一次面试的是做QA的Team,最后因为和我的期望职位不适合,所以他们的Leader没有给我Offer。第二次就是现在拿Offer的这一次。

一般来说,这类大公司面试,就是分为技术面试和Communication两个部分。

第一个部分就是考察你技术怎么样。技术考察一般分为以下步骤:首先,你做过什么,简要的介绍一下。有什么动机,运用了哪些技术,效果如何,你主要做了写什么。这个时候比较好办,吹水就可以了。遇到了什么问题,怎么解决的。

其次,一些专业技术性的问题,比方说算法一类的。这一类问题底子好就比较容易搞,因为细节不多。但是要注意回答到点子上。比方说上一次被人问了Mipmap究竟是什么含义。我偏导来、偏导去的解释了半天,最后才算是猛的想起来,回答是预计算的降采样,面试我的哥们儿点点头我才算过了关。

再次就是工程学问题。让你写段代码示例。这中间要注意很多方面,比方说Guard Code。不是说我不重视这些东西。但是我对于在白板这样的思想交流工具上表达实现这么具体的东西很反感。有时候还会考一些基础但是具体的算法实现。这一项上,我比较薄弱。不是算法本身就真的差到什么程度,主要还是因为我是手册党。没有手册,你让我写一个完全正确的算法,很困难。点到直线距离就让我为难了好半天。这种基础的东西,荒废久了,还真难记得什么。所以代码什么的漏洞百出,还让面试我的前辈多少有点不太高兴。这点还是因为我太年轻,颇有些冲动和自以为是了。我一个朋友对我说,你有什么不重要,关键是,要是别人需要的,你都有,这才牛逼。我就把这句话当做座右铭了,可惜目前的实施情况实在太不尽如人意。以后进公司,这方面还是要注意一点比较好。

第二个部分就是你的IQ啊,EQ啊,语言能力啊、交流能力啊一类的。这些比较宽泛,也很难有准绳可以衡量。比方说我第一次在A面试的时候,就遇到了HR给我出智商题。我就直言说我这个人智商比较低。然后2道题就作出来1道,说明我大体上是个诚实的人。50%的正确率,大概和弱智没多少区别了。第二次面试就没有,直接面了英语。然后HR Z就说,我的英语太搓,云云。当然比这个说法婉转。这个没办法,我得承认。我的英语确实完全不靠谱。这个以后去了公司,还要多练练。

就我不多的面试经验来看。面试比我预先想的难度低。毕竟面试是允许不完美的,大差不差就可以了,不用把自己弄得太紧张。大公司也没有一般人想象的那么难进,只要你能力上差不多,对得起一年10W左右的薪水(绝大部分外企的薪酬都在这个左右浮动),就肯定能进去。当然,也是看缘分的。有时候没有合适的职位,那也没办法,只要耐心一点等待就好了。

最后祝将要找工作的同学一切顺利。

posted @ 2010-05-29 21:59 空明流转 阅读(2930) | 评论 (7)编辑 收藏

对于C++一系的语言,Name Mangling主要用于同名函数,同名类型和同名变量的重载。编译器可以在编译期将同名函数的不同签名形式区分开来。Name Mangling经常用于以下场合:函数同名称不同签名(函数重载);跨编译单元的变量、函数引用;动态链接库或其他形式的函数、变量导出。

尽管现阶段SASL不打算支持Member Function等比较复杂的行为,甚至暂时不考虑函数重载。但是作为现代语言编译的基本要素,SASL在语义分析阶段,仍然提供了较为完善的Name Mangling机制,为以后的编译器特性扩充打下基础。

SASL的Mangling语法如下:
mangled_name = 'M' basic_name '@' return_value_type parameter_type_list '@' 'Z'
basic_name = string '@'
return_value_type = value_type
parameter_type_list = ( value_type )*
value_type = qualifier_code type_code
qualifier_code = "UN" | "CN" | "NN" | "UC"
type_code = buildin_typecode | struct_class_typecode | array_type_code
buildin_typecode = dimension_code basic_type
dimension_code = scalar | vector | matrix
scalar = 'B'
vector = 'V' (1|2|3|4)
matrix = 'M' (1|2|3|4){2}
basic_type =
  'S1' | 'U1' | 'S2' | 'U2' | 'S4' | 'U4' | 'S8' | 'U8' | 'F' | 'D' | 'V' | 'B'
struct_class_typecode = 'S' string '@@'
array_class_typecode = 'A' type_code size '@@'

和主流语言相比,本Mangling暂时不支持Qualifier(Class Member,Namespace Qualifiers)。以后在需要Qualifier的时候再酌情添加。也就是说暂时不会考虑现有版本和以后版本在二进制上的兼容性。

以下是一个mangling的例子:

double foo();  => Mfoo@@NNBD@Z

posted @ 2010-05-24 23:00 空明流转 阅读(1566) | 评论 (7)编辑 收藏

SALVIA的近期计划主要集中在工程方面。开发组希望能在年底前放出第一个Release。在年底之前,大致的安排如下:

6月份,Code Review Standard。大体上参照Boost和Google的Standard来制定。

6月底之前,Roadmap。Roadmap将按照两个阶段分别制定项目计划表。第一个阶段到年底,即第一个Release发布之前。第二个阶段为2011年之后。

在6月份和12月份,项目组将分别撰写一份工作报告。工作报告预计包含 For Developer, For User, For Manager, For Roadmap四个部分。For Developer主要总结开发进展,针对部分有代表性或关键代码的Code Review撰写报告,并对下个阶段的项目实施提出建议。For User将主要总结API和文档在这一阶段的变化情况,并提供一份性能、功能、安全性、健壮性和Bug部分的用户指南。For Manager将对半年来的配置管理、任务分配等一系列的工作进行整理、汇报和评价,提出下一阶段的工作的纲要和工作指导。For Roadmap将对Roadmap的实施程度、变更情况加以解释和说明,并对Roadmap进行修正,提出完整的下一阶段工作计划。

12月底之前,Wiki、Forum和FAQ的建设。

12月底之前,用户文档开发者文档的整理编写工作。我们将尽量使用户文档能够在Release时发布,但是囿于人手,项目组暂时不能对文档的进度予以承诺。

同时,SALVIA开发者的招募工作仍然在继续当中详情可以参见本博的置顶帖。

最后,项目组成员感谢您对本公告的关注,并真诚希望您的参与!

posted @ 2010-05-12 18:56 空明流转 阅读(1599) | 评论 (2)编辑 收藏

     摘要: 感谢那些在硕士期间帮助过我的淫们~  阅读全文
posted @ 2010-04-29 16:00 空明流转 阅读(5216) | 评论 (14)编辑 收藏

仅列出标题
共12页: 1 2 3 4 5 6 7 8 9 Last