学习科学计算的硬件/架构有多重要?

计算科学 数字 参考请求 计算化学 建筑学 硬件
2021-12-22 17:36:31

如果这是一个有点软、不清楚或基于意见的问题,我们深表歉意。我是(计算)量子化学小组的一名相对较新的博士生。我的小组开发和维护了一些软件包(主要用于小组内首次开发的技术),这是我感兴趣的东西,即高性能数值算法和实现它们。我辅修了计算机科学并获得了数学荣誉,但我从未真正探索过计算机硬件/架构(主要是因为课程不适合我的日程安排),所以我只真正研究了计算机科学的“高级”领域(优化、算法分析、机器学习等)。但是,到目前为止,在我的工作中,我已经遇到了很多与硬件相关的问题(当然,很多关于线程和并发的讨论;我也在尝试学习 GPU 加速)。所以我想知道,理解计算机体系结构(以及课堂作业的“流”:操作系统、硬件、分布式系统等)对于实践的科学软件开发人员有多重要?(特别是在量子化学领域)

我知道知道这些东西不会有什么坏处,我们当然会依赖它们,但是对于专业人士来说,好的工作知识是什么,以便我知道要花多少时间来学习它们?我猜原则上我可以在完全不了解的情况下过关,并且严重依赖库,但我也猜想了解它们的工作原理、识别瓶颈等将是有益的,更不用说开辟更多途径了。我也很感谢任何有关资源(例如教科书、MOOC)的建议,以发展这些领域的工作知识。

编辑:为了清楚起见,我没有参加任何有关硬件的课程,但我在工作和算法课程中学到了关于内存的模糊概念。几个月前,我还阅读了 Nisan 和 Schocken的The Elements of Computing Systems的前四章(并做了练习)。我的长期职业愿望可能是留在学术界,但我并不完全确定。我也有兴趣在工业(可能仍然是研发)和 HPC 中心工作,或者至少想与他们熟悉,这样如果我留在那里,我就可以与学术界合作。

4个回答

我没有专门从事量子化学工作,但我曾在其他需要高性能(以及科学准确性)的领域工作过,所以我认为我们在同一页上。

对于整个团队来说,对上述所有内容的广泛而肤浅的了解是绝对必要的。可以根据需要获得深入的知识,也可以根据需要雇用。

有人需要对操作系统调度有所了解。有人需要对 CPU 管道有所了解。有人需要对分布式文件系统有所了解。有人需要对编译器有所了解。他们不必都是同一个人。

至于如何学习的建议,老实说,我不知道今天最好的选择是什么。如果您真的是从头开始,并且可以访问大学图书馆,我会选择经典,例如 Hennessy 和 Patterson 的Computer Architecture: A Quantitative Approach

我想支持@Pseudonym 的回应,他指出并非团队中的每个人都需要为项目的各个方面做出贡献。需要考虑的一点是,您目前正处于职业生涯的初期,并且将做出您能够做出的任何贡献。但也许五年后,你仍然会在同一个领域工作,或者十年,或者五十年。到那时,也许其他方面会变得更有趣或更重要,所以也许你会专注于那个,但你现在的工作会提供经验和观点,可能会让你领导团队。

潜在的雇主可能不会将您的博士学位主要视为对某个狭窄主题的专业知识的保证,而更多的是作为您可以独立工作的证据。许多人最终在远离论文工作的领域成名。你还有很多时间去开拓你与众不同的职业生涯。您无需现在就决定将来最有用的东西。

理想情况下,在你的教育中,你会出于好奇学习各种科目,如果幸运的话,为了发现你真正喜欢的科目。然后你学习这些主要是因为你喜欢它们。其中一两个可能会继续引起人们的兴趣和刺激,最终您会在不经意间了解它们的非常详细的信息。

研究你认为你的职业需要的东西是不可持续的,你的大脑会开始抵制更深入地研究它不喜欢的东西。对于一个不感兴趣、没有激情的大脑来说,所有这些主题往往变得相当复杂、难以理解。

因此,最重要的是找到有用的教育,重要的是找到一两个你真正喜欢并忠实于它们的学科,无论是量子化学理论、实验室实验、计算算法和模拟,还是现代高性能编程框架。

有哪本书或视频讲座让您无法抗拒阅读、观看或在晚上为自己的非理性、内疚的乐趣而编程,当它已经过了你的就寝时间?

在一个团队中,作为开发低级实现的合作者,技术帮助是很常见的。如果你是一个单独的开发者,或者领导一个团队,这些事情变得更加重要。在这种情况下,您需要熟悉计算层次结构的许多步骤。

但至关重要的是,这种浅薄的熟悉程度主要有助于充当一个平台,您可以通过该平台向专家和专家寻求帮助。无论是单人还是团队,你都会受益于对概念和技术语言的了解,足以理解要问什么、如何有效地提问以及如何整合技术专家的意见。您越容易知道该问什么以及该问谁,您花费的时间就越少。根据我的经验,有效地让自己摆脱困境是一项非常有价值和核心的研究技能。

现在供参考-如果您还没有在概念上将硬件与软件牢固地连接起来,我建议您但是如何知道?J.克拉克斯科特。这是一个快速阅读,从头开始构建具有出色可读性和可访问性的 CPU。这不会帮助您在计算集群上与 Open-MPI 交互,但它会消除金属和代码之间的神秘迷雾。

如果您想从那里获得更多技术性的信息,我会推荐Bryant 和 O'Halleron的 Computer Systems: A Programmer's Perspective读完那本书会给你留下可以很好地为你服务的语言和概念。