如果这是一个有点软、不清楚或基于意见的问题,我们深表歉意。我是(计算)量子化学小组的一名相对较新的博士生。我的小组开发和维护了一些软件包(主要用于小组内首次开发的技术),这是我感兴趣的东西,即高性能数值算法和实现它们。我辅修了计算机科学并获得了数学荣誉,但我从未真正探索过计算机硬件/架构(主要是因为课程不适合我的日程安排),所以我只真正研究了计算机科学的“高级”领域(优化、算法分析、机器学习等)。但是,到目前为止,在我的工作中,我已经遇到了很多与硬件相关的问题(当然,很多关于线程和并发的讨论;我也在尝试学习 GPU 加速)。所以我想知道,理解计算机体系结构(以及课堂作业的“流”:操作系统、硬件、分布式系统等)对于实践的科学软件开发人员有多重要?(特别是在量子化学领域)
我知道知道这些东西不会有什么坏处,我们当然会依赖它们,但是对于专业人士来说,好的工作知识是什么,以便我知道要花多少时间来学习它们?我猜原则上我可以在完全不了解的情况下过关,并且严重依赖库,但我也猜想了解它们的工作原理、识别瓶颈等将是有益的,更不用说开辟更多途径了。我也很感谢任何有关资源(例如教科书、MOOC)的建议,以发展这些领域的工作知识。
编辑:为了清楚起见,我没有参加任何有关硬件的课程,但我在工作和算法课程中学到了关于内存的模糊概念。几个月前,我还阅读了 Nisan 和 Schocken的The Elements of Computing Systems的前四章(并做了练习)。我的长期职业愿望可能是留在学术界,但我并不完全确定。我也有兴趣在工业(可能仍然是研发)和 HPC 中心工作,或者至少想与他们熟悉,这样如果我留在那里,我就可以与学术界合作。