Questions tagged «blas»

基本线性代数子程序-具有矢量,矢量,矩阵矢量和矩阵矩阵运算的标准API库。

6
Fortran编译器真的好多少?
这个问题是对“ HPC的C ++ vs Fortran ”的答复中最近进行的两个讨论的扩展。而且,这不仅仅是一个挑战,而不是一个问题... 支持Fortran的最常听到的论据之一是编译器更好。由于大多数C / Fortran编译器共享相同的后端,因此为两种语言在语义上等效的程序生成的代码应该相同。但是,有人可能会争辩说,对于编译器来说,C / Fortran更容易实现优化。 因此,我决定尝试一个简单的测试:我获得了daxpy.f和daxpy.c的副本,并使用gfortran / gcc对其进行了编译。 现在daxpy.c只是daxpy.f(自动生成的代码,很难看的丑陋的)的f2c转换,所以我拿走了这段代码并对其进行了一些清理(满足daxpy_c),这基本上意味着将最里面的循环重写为 for ( i = 0 ; i < n ; i++ ) dy[i] += da * dx[i]; 最后,我使用gcc的向量语法重新编写了它(输入daxpy_cvec): #define vector(elcount, type) __attribute__((vector_size((elcount)*sizeof(type)))) type vector(2,double) va = { da , da }, *vx, *vy; vx = …
74 fortran  c  blas  benchmarking 

3
BLAS,LAPACK和其他线性代数库的关系是什么?
我一直在研究我一直在从事的项目的C ++线性代数库。我仍然没有掌握的东西是BLAS和LAPACK与其他线性代数库的连接。 浏览关于线性代数库的这篇文章,我发现有趣的是: 一些库独立于BLAS和LAPACK 有些需要BLAS和LAPACK 有些具有BLAS和LAPACK的可选接口 而且据我了解,您可以使用BLAS和LAPACK直接解决线性代数问题 我可以想象有些库只是用C和Fortran编写的BLAS和LAPACK库的C ++接口,而另一些则实现了自己的替代例程,但是 BLAS和LAPACK的可选接口的含义是什么?选择退出后您失去了什么,图书馆正在做什么呢? 是否有任何库提供的不仅仅是接口?例如,UMFPACK用C编写,并且具有BLAS和LAPACK的可选接口。BLAS和LAPACK不能自己做什么UMFPACK(或其他库)?

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

3
为什么矩阵向量乘法缩放没有缩放?
抱歉,很长的帖子,但我想一开始就包括我认为相关的所有内容。 我想要的是 我正在实现用于稠密矩阵的Krylov子空间方法的并行版本。主要是GMRES,QMR和CG。我(剖析后)意识到我的DGEMV例程是可悲的。因此,我决定通过隔离来集中精力解决这一问题。我尝试在12核计算机上运行它,但以下结果是4核Intel i3笔记本电脑的结果。趋势差异不大。 我的KMP_AFFINITY=VERBOSE输出在这里。 我写了一个小代码: size_N = 15000 A = randomly_generated_dense_matrix(size_N,size_N); %Condition Number is not bad b = randomly_generated_dense_vector(size_N); for it=1:n_times %n_times I kept at 50 x = Matrix_Vector_Multi(A,b); end 我相信这可以模拟CG进行50次迭代的行为。 我尝试过的 翻译 我最初是用Fortran编写代码的。我将其翻译为C,MATLAB和Python(Numpy)。不用说,MATLAB和Python太可怕了。令人惊讶的是,对于上述值,C比FORTRAN好一到两秒。一致。 剖析 我分析了要运行的代码,并且运行了46.075几秒钟。这是将MKL_DYNAMIC设置为FALSE并且使用了所有内核的时候。如果我将MKL_DYNAMIC设置为true,则在任何给定时间点仅使用(大约)一半数量的内核。以下是一些详细信息: Address Line Assembly CPU Time 0x5cb51c mulpd %xmm9, %xmm14 36.591s 最耗时的过程似乎是: Call Stack …

2
PETSc对稠密矩阵有多有用?
无论我在哪里看到,PETSc教程/文档等都说它对线性代数很有用,并且通常指定稀疏系统将受益。那密矩阵呢?我关注解决稠密。Ax=bAx=bAx=bAAA 我已经在Fortran中编写了自己的CG和QMR代码。基本构造是撕裂伪代码,并在可能的情况下(和)添加BLAS例程ddot,dnrm并dgemv进行一些自我调整。与PETSc相比如何? 我知道最好的答案是我自己尝试一下,但是由于时间和其他原因,这是不可能的。 任何帮助深表感谢。

2
科学计算中复杂算术的危险
复杂的内积具有由惯例决定两个不同的定义:ˉ Ù Ť v或ü Ť ˉ v。在BLAS中,我找到了例程cdotu,zdotu和cdotc,zdotc。前两个例程实际上计算u T v(伪内积!),而后两个例程将内积中的第一个向量共轭。另外,通过任一定义(共轭Ù或v),⟨ ü ,v ⟩ = ¯ ⟨ v ,ù ⟩⟨ ü ,v ⟩⟨u,v⟩\langle u,v\rangleü¯Ťvu¯Tv\bar{u}^TvüŤv¯uTv¯u^T\bar{v}üŤvuTvu^Tvüuuvvv⟨ ü ,v ⟩ = ⟨ v ,ù ⟩¯¯¯¯¯¯¯¯¯¯¯⟨u,v⟩=⟨v,u⟩¯\langle u,v\rangle=\overline{\langle v,u\rangle}与共轭!此外,正如评论中指出的那样,为多值复杂函数选择主要值可能取决于惯例。 我的问题是:这种复杂性是否会导致在科学计算中使用复杂算术的真正危险?Deal.ii的作者强调了这个问题,他们建议始终将复数分为实数部分和虚数部分,并且仅使用实数算法。但是我从来没有发现拆分方法很方便。例如,考虑时谐麦克斯韦方程的PML。 在大多数开源FEM软件中,除FreeFem ++和libmesh之外,似乎都普遍担心使用复数。但是,即使有两个例外,复杂算法的测试也比实数少。 我的最后一个问题是:我们是否应该始终避免使用复数?

6
在C / C ++中是否有BLAS的参考级实现?
netlib BLAS实施是一个很好的参考,大多数未进行优化且有据可查(例如zgemm)。但是,它在Fortran 77中使用,这使那些接受过更现代编程编程的人无法使用。在C / C ++中是否有BLAS的参考级实现(如netlib)?
11 blas  education 


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.