zz"Who do you think is the best coder, and why?"zz

本文介绍了多位计算机编程领域的大神。如Bill Joy开发了BSD、TCP/IP等;John Carmack推动3 - D技术发展;David Cutler设计VMS和Windows NT;Don Knuth在编译器等方面贡献巨大;Ken Thompson发明Unix;Rob Pike参与Unix开发,现于Google研究系统。
转自 http://mechgouki.blogdriver.com/mechgouki/241418.html

MIT BBS上说微软电话面试的一道题就是“Who do you think is the best coder, and
why?”。我觉得挺有意思的,也来凑个热闹。排名不分先后。

Bill Joy, 前任Sun的首席科学家,当年在Berkeley时主持开发了最早版本的BSD。他还是
vi和csh的作者。当然,Csh Programming Considered Harmful 是另一个话题乐。据说他
想看看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD的前身。当
然是传说了,但足见他的功力。另一个传说是,1980年初的时候,DARPA让BBN在
Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的B伯伯怒了,拒绝把
BBN TCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。于是B伯伯出手了,端的是一箭
封喉,很快就写出了高性能的伯克利版TCP/IP。当时BBN和DARPA签了巨额合同开发
TCP/IP Stack,谁知他们的代码还不如一个研究生的好。于是他们开会。只见当时B伯伯
穿个T-shirt出现在会议室(当时穿T-shirt不象现在,还是相当散漫的哈)。只见BBN问:
你怎么写出来的?而B伯伯答:简单,你读协议,然后编程就行了。最令偶晕倒的是,B伯
伯硕士毕业 后决定到工业界发展,于是就到了当时只有一间办公室的Sun, 然后他就把
Sparc设计出 来乐。。。象这种软硬通吃的牛人,想不佩服都不行的说。据Bill Joy的同
事说,一般开会的时候B伯伯总是拿一堆杂志漫不经心地读。但往往在关键之处,B伯伯发
言,直切要害,提出 漂亮的构想,让同事们彻底崩溃。对了,他还是Java Spec和JINI的
主要作者之一。


John Carmack,ID Software的founder和Lead Programmer。上个月和一个搞图形的师兄
聊天,他竟然不知道John Carmack, 也让偶大大地晕了一把。不过也许搞研究的和搞实战
的多少有些隔吧。想必喜欢第一人称射击游戏的都知道J哥哥。90年代初只要能在PC上搞
个小动画都能让人惊叹一番的时候,J哥哥就推出了石破天惊的Castle Wolfstein, 然后
再接再励,doom, doomII, Quake...每次都把3-D技术推到极
限。J哥哥的简历上说自己的专长是"Exhaust 3-D technology",真是牛人之言不我欺的
说。做J哥哥这样的人是很幸福的,因为各大图形卡厂家一有了新产品就要向他“进贡”
,不然如果他的游戏不支持哪种卡,哪种卡基本就会夭折乐。当初MS的Direct3D也得听
取 他的意见,修改了不少API。当然,J哥哥在结婚前十数年如一日地每天编程14小时以
上, 也是偶们凡人望尘莫及的。对了,J哥哥高中肆业(?),可以说是自学成才。不过呢
,谁要用这个例子来为自己学习不好辩护,就大错特错了。那Leonardo Da Vinci还是自
学成才呢(人是私生子,不能上学)。普通人和天才还是有区别的。对了,其实偶们叫“达
分奇”是相当不对的,因为Vinci是地名,而Da Vinci就是从Vinci来的人的意思。换句话
说,Leonardo Da Vinci就是“从Vinci来的Leonardo”的意思。叫别人“Da Vinci”就不
知所谓乐。嗯,扯远了,打住。

David Cutler,VMS和Windows NT的首席设计师,去微软前号称硅谷最牛的kernel开发员
。当初他和他的手下在微软一周内把一个具备基本功能的bootable kernel写出来,然后
说:“who can't write an OS in a week?",也是牛气冲天的说。顺便说一句,D爷爷到
NT3.5时,管理1500名开发员,自己还兼做设计和编程,不改coder本色啊。

D爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。 日常交谈F-word不离口。
他面试秘书时必问:"what do you think of the word 'fuck'?" ,让无数美女刹羽而归
。终于有一天,一个同样火爆的女面对这个问题脱口而出:"That's my favorite word"
。于是她被录取乐,为D爷爷工作到NT3.5发布。

Don Knuth。高爷爷其实用不着偶多说。学编程的不知道他就好像学物理的不知道牛顿,
学数学的不知道欧拉,学音乐的不知道莫扎特,学Delphi的不知到Anders Hejlsberg,或
者学Linux不知道Linus Torvalds一样,不可原谅啊。为了让文章完整,就再罗唆几句吧
。高爷爷本科时就开始给行行色色的公司写各种稀奇古怪的编译器挣外快了。他卖给别人
时收一两千美元,那些公司拿了code,加工一下卖出去就是上万上十万。不过也没见高爷
爷不爽过,学者本色的说。想想那可是60年代初啊,高爷爷写编译器写多了,顺带就搞出
了个Attribute Grammar和LR(k),大大地造福后人啊。至于高爷爷在CalTech的编程比赛
(有Alan Kay得众多高高手参加)总是第一,写的Tex到86年就code freeze,还附带2^n美
分奖励等等都是耳熟能详的,偶就不饶舌乐。

顺便说一下,高老大爷是无可争议的写作高手。他给Concrete Mathematics 写的前言可
谓字字铿锵,堪为前言的典范。他的技术文章也是一绝,文风细致,解释精当,而且没有
学究气,不失轻快跳脱。记得几年前读Concrete Mathemathics,时不时开怀大笑,让老
妈极其郁闷,觉得我nerdy到家,不可救药。其实呢,子非鱼,安知鱼之乐,更不知那完
全是高爷爷的功劳。说到写作高手,不能不提Stephen A. Cook。他的文章当年就被我们
的写作老师极力推荐,号称典雅文风的样本。库爷爷一头银发,身材颀长,总是面带谦和
的微笑,颇有仙风道骨,正好和他的仙文相配的说。

高爷爷其实还是开源运动的先驱。虽然他没有象Richard Stallman那样八方奔走,但他捐
献了好多作品,都可以在网上看到,比如著名的Mathematical Writing,MMIXWare,
The Tex Book等,更不用说足以让他流芳百世的Tex乐。

Ken Thompson,C语言前身B语言的作者,Unix的发明人之一(另一个是Dennis M. Riche老
大,被尊为DMR),Belle(一个厉害的国际象棋程序)的作者之一, 操作系统Plan 9的主要
作者(另一个是大牛人Rob Pike, 前不久被google挖走了)。Ken爷爷也算是计算机历史上
开天辟地的人物了。1969年还是计算机史前时代,普通人都认为只有大型机才能运行通用
的操作系统,小型机只有高山仰止的份儿。至于用高级语言来写操作系统,更是笑谈。
Ken爷爷自然不是池中物,于是他和DMR怒了,在1969年到1970间用汇编在PDP-7上写出了
UNIX的第一个版本。他们并不知道,一场轰轰烈烈的UNIX传奇由此拉开了序幕。Ken爷爷
在1971年又把Unix用C重写,于是C在随后20年成就了不知多少豪杰的梦想和光荣。

Ken爷爷还有段佳话: 装了UNIX的PDP-11最早被安装在Bell Lab里供大家日常使用。很快
大家就发现Ken爷爷总能进入他们的帐户,获得最高权限。Bell Lab里的科学家都心比天
高,当然被搞得郁闷无比。于是有高手怒了,跳出来分析了UNIX代码,找到后门,修改代
码,然后重新编译了整个UNIX。就在大家都以为“这个世界清净了”的时候,他们发现
Ken爷爷还是轻而易举地拿到他们的帐户权限,百思不解后,只好继续郁闷。谁知道这一
郁闷,就郁闷了14年,直到Ken爷爷道出个中缘由。原来,代码里的确有后门,但后门不
在Unix代码里,而在编译Unix代码的C编译器里。每次C编译器编译UNIX的代码,就自动生
成后门代码。而整个Bell Lab的人,都是用Ken爷爷的C编译器。
(6)Rob Pike, AT&T Bell Lab前Member of Technical Staff ,现在google研究操作系统

。罗伯伯是Unix的先驱,是贝尔实验室最早和Ken Thompson以及Dennis M. Ritche开发
Unix的猛人,UTF-8的设计人。他还在美国名嘴David Letterman的晚间节目上露了一小脸

,一脸憨厚地帮一胖子吹牛搞怪。让偶佩服不已的是,罗伯伯还是1980年奥运会射箭的银

牌得主。他还是个颇为厉害的业余天文学家,设计的珈玛射线望远镜差点被NASA用在航天

飞机上。他还是两本经典,The Unix Programming Environment 和 The Practice of
Programming 的作者之一。如果初学者想在编程方面精益求精,实在该好好读读这两本书

。它们都有中文版的说。罗伯伯还写出了Unix下第一个基于位图的窗口系统,并且是著名

的blit 终端的作者。当然了,罗伯伯还是号称锐意革新的操作系统,Plan9,的主要作者

。可惜的是,Plan9并没有引起多少人的注意。罗伯伯一怒之下,写出了振聋发聩的雄文

Systems Software Research is Irrelevant,痛斥当下系统开发的不思进取,固步自封

的弊病。虽然这篇文章是罗伯伯含忿出手,颇有偏激之词,但确实道出了系统开发的无奈

:开发周期越来越长,代价越来越大,用户被统一到少数几个系统上,结果越来越多的活

动是测量和修补,而真正的革新越来越少。

就在罗伯伯郁闷之极的时候,google登门求贤来乐。如果说现在还有一家大众公司在不遗

余力地把系统开发推向极致的话,也就是google乐。随便看看google的成果就知道了。具

有超强容错和负载平衡能力的分布式文件系统GFS (现在能够用100,000台廉价PC搭起一个

巨型分布系统,并且高效便宜地进行管理的系统也不多哈),大规模机器学习系统(拼写检

查,广告匹配,拼音搜寻。。。哪个都很牛的说),更不用说处理海量并行计算的各式
google服务了。Rob在System Software Research is Irrelevant里萧瑟地说现在没有人

再关心系统研究的前沿成果了。想不到他错了,应为google关心。google网络了大批功成

总是试图吸取系统研究的最新成果。想必Rob Pike在google很幸福。愿他做出更棒的系统



- 作者: mechgouki 2004年07月15日, 星期四
<think>嗯,用户现在想了解如何使用GPU Coder为训练和评估后的ssdObjectDetector生成代码。首先,我需要回忆一下之前关于GPU Coders的讨论,其中提到了CUDA、OpenCL等技术,以及GPU在深度学习中的应用。用户之前的问题涉及GPU编程的基本概念和应用场景,现在他们可能已经进行到实际应用的阶段,需要具体的代码生成步骤。 首先,我需要明确用户提到的“GPU Coder”是什么。根据之前的回答,GPU Coders是指使用GPU进行高性能计算的开发者,但这里用户可能指的是MathWorks的GPU Coder工具,它可以将MATLAB代码转换为优化的CUDA代码,以便在GPU上运行。因此,我需要确认这一点,并确保回答中的工具和步骤是针对MATLAB的GPU Coder。 接下来,用户的问题是关于ssdObjectDetector的代码生成。ssdObjectDetector是MATLAB中用于目标检测的深度学习模型,基于SSD(Single Shot MultiBox Detector)架构。用户可能在训练和评估模型后,希望将模型部署到GPU上,以提高推理速度。因此,生成代码的步骤需要包括如何将训练好的模型导入GPU Coder,配置代码生成参数,生成CUDA代码,并进行验证。 我需要分步骤解释整个过程,确保用户能够逐步操作。首先,用户需要确保安装了必要的工具,比如MATLAB的Deep Learning Toolbox和GPU Coder,以及CUDA工具包和兼容的NVIDIA GPU。然后,加载训练好的ssdObjectDetector模型,配置GPU Coder的参数,比如目标语言为CUDA,设置输入数据的类型和大小,最后生成代码并验证其正确性。 同时,用户可能需要了解生成代码的意义,比如提高推理速度、便于部署到嵌入式系统或与其他系统集成。需要解释生成代码后的应用场景,例如实时目标检测、嵌入式部署或与其他框架集成。 还要注意用户可能遇到的常见问题,比如输入数据类型的配置错误,GPU兼容性问题,或者生成代码后的性能优化。因此,在回答中可以加入一些优化建议,如使用半精度浮点数(fp16)减少内存占用,或者调整线程块大小以提高并行效率。 另外,需要参考之前的回答中提到的核心技术,如CUDA、cuDNN等,说明GPU Coder如何利用这些库来优化生成的代码。例如,生成的代码可能调用cuDNN中的高效卷积实现,从而提升性能。 最后,用户可能需要相关的问题建议,比如如何优化生成的代码,如何处理不同的输入尺寸,或者如何将生成的代码集成到其他应用程序中。因此,生成的相关问题应该围绕这些潜在的需求展开,帮助用户进一步深入学习和解决问题。 总结来说,回答的结构需要包括准备工作、代码生成步骤、生成代码的含义解释、常见注意事项,以及相关问题。需要确保每一步都清晰,并引用之前提到的工具和库,保持回答的一致性和准确性。</think>### 使用 GPU Coder 为 `ssdObjectDetector` 生成代码的方法与意义 #### **1. 准备工作** - **环境要求**: - 安装 MATLAB 的 **Deep Learning Toolbox** 和 **GPU Coder**。 - 配置 CUDA 工具包(需与 MATLAB 版本兼容)和 NVIDIA GPU(支持 CUDA)。 - 已训练好的 `ssdObjectDetector` 模型(通过 `trainSSDObjectDetector` 训练完成)。 #### **2. 生成代码的具体步骤** ##### **(1) 加载模型与输入定义** ```matlab % 加载训练好的 ssdObjectDetector 模型 load('trainedSSDDetector.mat', 'detector'); % 定义输入数据类型和尺寸(需与训练数据一致) inputSize = detector.Network.Layers(1).InputSize; % 输入图像尺寸,如 [300 300 3] inputType = coder.typeof(uint8(zeros(inputSize))); % 输入类型为 uint8 图像 ``` ##### **(2) 配置 GPU Coder** ```matlab % 创建 GPU Coder 配置对象 cfg = coder.gpuConfig('mex'); % 生成 MEX 文件(测试用) % 或生成独立代码:cfg = coder.gpuConfig('lib'); % 设置目标语言为 CUDA cfg.TargetLang = 'C++'; cfg.GpuConfig.Enabled = true; % 指定输入参数(图像输入) args = {inputType}; ``` ##### **(3) 生成代码** ```matlab % 调用 codegen 生成代码(以 detect 方法为例) codegen -config cfg detect -args args -report ``` - **`detect.m`** 需包含调用模型的检测逻辑,例如: ```matlab function [bboxes, scores] = detect(img) persistent detector; % 持久化变量避免重复加载模型 if isempty(detector) detector = coder.loadDeepLearningNetwork('trainedSSDDetector.mat'); end [bboxes, scores] = detector.detect(img); end ``` ##### **(4) 验证生成的代码** ```matlab % 测试生成的 MEX 文件 img = imread('test_image.jpg'); [bboxes, scores] = detect_mex(img); % 调用生成的 MEX 函数 ``` #### **3. 生成代码的深层含义** - **性能加速**:通过将 MATLAB 代码转换为 CUDA 代码,利用 GPU 并行计算能力加速目标检测,尤其适合实时应用(如视频流处理)[^1]。 - **部署灵活性**:生成的代码可编译为独立库或集成到 C/C++/Python 项目中,支持嵌入式设备(如 NVIDIA Jetson)或云端部署。 - **资源优化**:GPU Coder 自动优化内存分配和内核调度,减少手动编写 CUDA 代码的复杂度。 #### **4. 注意事项** - **输入一致性**:确保代码生成时的输入尺寸与模型训练时完全一致。 - **GPU 兼容性**:检查 CUDA 版本与 MATLAB 的兼容性(如 MATLAB R2023a 需 CUDA 11.8)。 - **性能调优**:通过 `coder.gpu.kernel` 指令手动调整线程块大小(需熟悉 CUDA 架构)。 --- ### **相关问题** 1. 如何为 `ssdObjectDetector` 生成多尺度输入支持的代码? 2. 生成的 CUDA 代码如何集成到 Python 应用中? 3. GPU Coder 与 TensorRT 在部署深度学习模型时的优劣对比? [^1]: 基于 CUDA 的并行计算可显著加速矩阵运算,参考 NVIDIA 官方文档。 [^2]: 使用 GPU Coder 生成代码时默认调用 cuDNN 加速卷积操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值