计算科学

科学家使用计算机解决科学问题的问答

2
是否有一种有效的矩阵值连续分数算法?
假设我有一个矩阵方程递归定义为 A[n] = inverse([1 - b[n]A[n+1]]) * a[n] 然后,A [1]的方程看起来类似于连续分数,为此,存在一些避免繁琐的重新计算的高效方法(有关某些示例,请参见“数字食谱”)。 但是,我想知道是否存在允许系数b [n]和a [n]为矩阵的类似方法,唯一的约束条件是b [n] A [n + 1]为正方形矩阵,从而使矩阵 1 - b[n]A[n+1] 实际上是可逆的。
18 algorithms 

4
GPU在哪些统计方法上比CPU快?
我刚刚在台式机上安装了Nvidia GT660图形卡,经过一番挣扎,我设法将其与R接口。 我一直在玩几个使用GPU的R软件包,尤其是gputools,并且在比较我的GPU和CPU执行一些基本操作所花费的时间: 求逆矩阵(CPU更快) qr分解(CPU更快) 大相关矩阵(CPU速度更快) 矩阵乘法(GPU快得多!) 请注意,我主要是对gputools进行了实验,因此也许其他软件包的性能更好。 概括地说,我的问题是:哪些常规统计操作可能值得在GPU而不是CPU上执行?
18 r  gpu 

6
如何确定分子的点基?
您终于设法找到了原子在新发现的分子实体上的空间排列方式。通过光谱学手段,您现在拥有一堆原子坐标,原子类型,键长,键类型以及分子的原子。您现在对确定分子的点组(对称组)感兴趣。 对于简单的分子,例如甲烷(TdTdT_d)或苯(D6hD6hD_{6h}),确定一个分子所属的点组是目视检查的简单问题。但是,当分子偏大时,这不太可行。 给定一个以某种方便的数据格式(* .pdb,*。mol等)存储的分子,您如何从算法上确定该分子的对称基团?

3
是否可以保证BLAS实现提供完全相同的结果?
给定两种不同的BLAS实现,我们可以期望它们进行完全相同的浮点计算并返回相同的结果吗?还是会发生这种情况,例如,一个人将标量积计算为 ,一个人将其计算为 因此可能在IEEE浮点数中给出不同的结果算术?((x1个ÿ1个+ x2ÿ2)+ x3ÿ3)+x4ÿ4((X1个ÿ1个+X2ÿ2)+X3ÿ3)+X4ÿ4 ((x_1y_1 + x_2y_2) + x_3y_3) + x_4y_4 (x1个ÿ1个+ x2ÿ2)+ (x3ÿ3+ x4ÿ4),(X1个ÿ1个+X2ÿ2)+(X3ÿ3+X4ÿ4), (x_1y_1 + x_2y_2) + (x_3y_3 + x_4y_4),

3
处理科学代码中许多常量,变量的C ++最佳实践
我正在开发代码,以使用流体中存在的生物物质来模拟流体流动。这涉及到标准的Navier-Stokes方程以及一些其他的生物学模型。有许多参数/常量。 我已经编写了处理主要计算的函数,但是我遇到的一个问题是这些计算所依赖的大量常量/参数。将10-20个参数传递给一个函数似乎很麻烦。 一种替代方法是使所有常量成为全局变量,但是我知道这在C ++中是不受欢迎的。 处理一个功能的许多输入的标准方法是什么?我应该构造一个结构并通过它吗? 谢谢
17 c++ 


5
出色的软件设计会降低20%的性能
我正在编写一个用于稀疏矩阵计算的小型库,以此来教自己充分利用面向对象的编程。我一直在努力建立一个不错的对象模型,其中各部分(稀疏矩阵和描述其连接结构的图形)之间的耦合非常松散。我个人认为,该代码具有更大的可扩展性和可维护性。 但是,它也比我使用钝器要慢一些。为了测试具有此对象模型的权衡,我编写了一个新的稀疏矩阵类型,该类型打破了基础图的封装,以查看运行的速度有多快。 起初,它看起来很暗淡。我曾经为之骄傲的代码比没有任何精美软件设计的版本慢60%。但是,我能够进行一些低级的优化-内联一个函数并稍微改变一个循环-完全不需要更改API。有了这些更改,现在它仅比竞争对手慢20%。 这使我想到一个问题:如果这意味着我有一个不错的对象模型,我应该接受多少性能损失?

4
为什么不经常使用高阶Runge–Kutta方法?
我只是想知道为什么几乎从未讨论过/没有采用过高阶(即大于4)的Runge-Kutta方法(至少据我所知)。我知道每步需要更多的计算时间(例如RK14和12阶嵌入步骤),但是使用更高阶的Runge–Kutta方法还有其他不利之处(例如稳定性问题)吗?当将其应用于极端时间尺度上具有高振动解的方程式时,这种高阶方法通常不是首选吗?
17 ode  runge-kutta 

2
间断Galerkin:节点vs模态的优缺点
有两种通用方法可以表示不连续Galerkin方法中的解:节点法和模态法。 模态:解由模态系数的总和乘以一组多项式来表示,例如其中通常是正交多项式,例如Legendre。这样的一个优点是正交多项式生成对角质量矩阵。u (x ,t )= ∑ñ我= 1ü一世(t )ϕ一世(x )ü(X,Ť)=∑一世=1个ñü一世(Ť)ϕ一世(X)u(x,t) = \sum_{i=1}^N u_i(t) \phi_i(x)ϕ一世ϕ一世\phi_i 节点:单元由定义解决方案的多个节点组成。然后,基于对插值多项式进行拟合来重建单元,例如,其中是拉格朗日多项式。这样的优点之一是,您可以将节点放置在正交点上并快速求积分。u (x ,t )= ∑ñ我= 1ü一世(x ,t )l一世(x )ü(X,Ť)=∑一世=1个ñü一世(X,Ť)升一世(X)u(x,t) = \sum_{i=1}^N u_i(x,t) l_i(x)升一世升一世l_i 在大规模的情况下,复合物( -自由度)3D混结构具有灵活性,实施的清晰度,和效率的目标/非结构化并行应用程序,什么是每种方法的比较优势和劣势?10610610^610910910^9 我确信那里已经有很多文学作品,所以如果有人可以指出我的想法,那也将是一件很棒的事情。


4
当前可用的GPU是否支持双精度浮点运算?
我已经在包含24个Intel Xeon CPU的节点组成的Ubuntu Linux集群上运行了分子动力学(MD)代码GROMACS。我的兴趣点对浮点算术精度有些敏感,因此我不得不以双精度而不是单精度运行GROMACS-尽管双精度的计算成本较高。因此,在群集上,我以双精度方式编译了GROMACS。 我正在考虑购买一些GPU,因为可能会有相对于CPU的加速(“ GPU加速”)。但是,我需要一个可以执行双精度算术的GPU。您知道这样的硬件是否可以在市场上买到吗?一个在GROMACS邮件列表上最近的文章表明,双精度的GPU市场上不能获得: 硬件尚不支持[双精度算术],但AFAIK。 这个Wikipedia页面似乎暗示双精度GPU并不常见,因为它们可能效率不高: Nvidia GPU上的浮点实现大部分符合IEEE标准。但是,并非所有供应商都这样。这对正确性有影响,对于某些科学应用而言,正确性被认为很重要。虽然在CPU上通常可以使用64位浮点值(双精度浮点数),但GPU并不普遍支持这些值。有些GPU架构牺牲了IEEE遵从性,而另一些则完全缺乏双精度。已经进行了一些努力来在GPU上模拟双精度浮点值。但是,速度折衷首先抵消了将计算量卸载到GPU上的任何好处。 此NVIDIA的Tesla页,在图表中引用“峰值双精度浮点性能”,似乎表明,双精度计算可以,其实,做他们的GPU(虽然在更高的计算成本)。 那么,我应该相信什么?您对此问题有经验吗?

6
Python与FORTRAN
哪个更好:FORTRAN还是Python?我想在两种情况下都需要Gnuplot,对吗? 我目前正在Windows机器上工作。 我想用它来获得物理问题的数值解决方案,包括蒙特卡洛模拟,数值积分和微分,分子动力学等。 我看过一门有关计算物理的课程,其中介绍了FORTRAN(我相信是77)和Python。我打算从一个开始,然后再学习另一个,但是我不知道哪个过渡可能是最简单的。 您还会推荐哪些编译器? 对我而言,基本问题归结为:哪个是最容易学习的,哪个是最快的,哪个是最人性化的,最重要的是哪个是最常用的(因此将这4个进行比较)?除此之外,最常用的(免费或付费)编译器是什么?我目前正在考虑将旧的笔记本电脑(早期的英特尔双核)转换为Linux。希望那足够快。 到目前为止,非常感谢您提供答案!与我正在寻找的答案是LKlevin和SAAD的答案。 如果有任何帮助,我几乎完全了解C ++,Maple的基础知识,并且几乎完全掌握了MATLAB和Mathematica9。
17 python  fortran 

7
脚本化网格生成软件
我正在寻找一个网格生成软件, 是免费和开源的, 为域规范提供了健全的脚本编写界面, 适用于复杂的几何体, 可以生成2D和3D网格, 我有什么选择?

3
共轭梯度比GMRES更好的问题
我对共轭梯度比GMRES方法更好的情况感兴趣。 通常,在许多SPD(对称-正定)情况下,CG是首选,因为它需要较少的存储,并且CG的理论收敛速度是GMRES的两倍。实际观察到这样的费率有什么问题吗?对于相同数量的spmvs(稀疏矩阵矢量乘法),GMRES的性能好于CG或与CG相当吗?

3
对数-对数并行缩放/效率图
我的许多工作都围绕使算法更好地扩展而展开,而显示并行扩展和/或并行效率的首选方法之一是在内核数量上绘制算法/代码的性能,例如 其中,轴表示核心数,轴表示某种度量,例如,每单位时间完成的工作。不同的曲线显示在64个磁芯上的并行效率分别为20%,40%,60%,80%和100%。XXxÿÿy 但不幸的是,在许多出版物,这些结果绘制了对数标度,例如在结果本或本文件。这些对数-对数图的问题在于,评估实际的并行缩放/效率非常困难,例如 与上面的图相同,但具有对数-对数缩放。请注意,并行效率为60%,80%或100%时,结果之间没有太大差异。我在这里对此进行了更广泛的写作。 所以这是我的问题:在对数对数缩放中显示结果有什么理由?我经常使用线性标度来显示自己的结果,并经常被裁判员锤击,说我自己的并行标度/效率结果看起来不如其他人的(对数-对数)结果,但在我的生命中,我无法看到为什么我应该切换绘图样式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.