小编paw*_*zig的帖子

Eigen vs Matlab:并行化矩阵乘法

我想比较矩阵乘法中Matlab的速度与Intel(R)Core(TM)i7-4770 CPU @ 3.40GHz上的Eigen 3的速度.代码包括Eigen:

#include <iostream>
#include "Eigen/Dense"
#include <chrono>
#include <omp.h>


using namespace std;
using namespace Eigen;

const int dim=100;

int main()
{
    std::chrono::time_point<std::chrono::system_clock> start, end;

    int n;
    n = Eigen::nbThreads();
    cout<<n<<"\n";

    Matrix<double, Dynamic, Dynamic> m1(dim,dim);
    Matrix<double, Dynamic, Dynamic> m2(dim,dim);
    Matrix<double, Dynamic, Dynamic> m_res(dim,dim);

    start = std::chrono::system_clock::now();

    for (int i = 0 ; i <100000; ++i) {
        m1.setRandom(dim,dim);
        m2.setRandom(dim,dim);
        m_res=m1*m2;

    }

    end = std::chrono::system_clock::now();
    std::chrono::duration<double> elapsed_seconds = end-start;

    std::cout << "elapsed time: …
Run Code Online (Sandbox Code Playgroud)

c++ matlab eigen c++11

7
推荐指数
1
解决办法
2423
查看次数

Fortran vs C:Mandelbrot基准

我偶然发现了基准游戏(代码页)并比较了Fortran和C.我对Mandelbrot测试的计算时间差异感到非常惊讶(Fortran慢了4.3倍!)因为两种语言都有非常相似的功能集.此外,Fortran应该能够更加激进地进行优化(例如,"对于重度计算,Fortran是否比C更容易优化?").

可以解释Fortran中缺少哪些功能,以获得速度,例如在C示例中?(似乎这里的位操作正在提升代码.)

编辑:这不是一个关于哪种编程语言更好的问题(总是有许多方面发挥作用).在这个例子中,这是一个关于优化差异的基本问题.


附加由彼得·科德斯答案:有在一张纸上为Fortran应用程序矢量化基础也即将讨论SIMD在FORTRAN编程.对于英特尔编译器:Fortran中的显式向量编程

c performance benchmarking fortran

6
推荐指数
1
解决办法
678
查看次数

gcc错误:从double*到const double的无效转换

我正在使用gcc 4.5.0版.使用下面的简单示例,我将假设从double*到const double*的转换无效

#include <iostream>
using namespace std;

void foo(const double *a)
{
    cout<<a[0]*2.<<endl;
}

int main()
{
    double *a=new double[2];
    a[0]=1.;
    a[1]=2.;
    foo(a);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

为什么编译没有错误?

一个反例是以下类似的:

#include<iostream>
using namespace std;

void foo(const double **a)
{
cout<<a[0][0]*2.<<endl;
}


int main()
{
    double **a=new double*[2];
    a[0]=new double[2];
    a[1]=new double[2];
    a[0][0]=1.;
    foo(a);
    cout<<a[0][0]<<endl;
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

(第二个例子的解决方案:将foo定义为foo(const double*const*a).感谢Jack Edmonds评论,这解释了错误消息)

c++ gcc

5
推荐指数
2
解决办法
5147
查看次数

功能模板的规范

我想创建一个函数模板,其中类T仅限于特殊基类T_base的派生类.实现这一目标的有效方法是什么?谢谢你的帮助!

c++ templates base-class derived-class function-templates

3
推荐指数
1
解决办法
230
查看次数

emacs org-mode:org-files中链接的文件夹别名

我正在emacs中使用组织文件进行文档编制。是否可以为组织文件中的文件夹定义别名?动机:说我有几个文件链接,它们属于同一文件夹。如果我移动文件,则必须更改所有这些链接。仅更改一个文件夹别名会更容易。这可能吗?

emacs hyperlink org-mode

3
推荐指数
1
解决办法
840
查看次数

程序在服务器上相互麻痹(使用openMP和python进行c ++)

我有一个紧急的问题,因为我的时间已经不多了:我让我的计算过程在一个8核的服务器上,因此我在我的c ++代码中使用openMP,它工作正常.当然我不是唯一一个使用服务器的人,所以我的容量并不总是800%的CPU.

但现在好几次,有人在机器上启动他的python prog使我和他的编程完全陷入困境:虽然我仍在使用大约500%的CPU,但代码运行的时间大约是.100倍慢 - 对我和另一个人来说.你知道原因是什么,如何防止它?

c++ python openmp

1
推荐指数
1
解决办法
243
查看次数

类中的函数指针

我需要一个不同功能的开关来规避频繁的if方向.它应该类似于以下代码,封装在一个类中:

#include<iostream>
#include<stdlib.h>

using namespace std;

template<class T>
class MaxSwitch
{
public:
typedef T (MaxSwitch::*Max_P)(T,T);
Max_P fooC_P;

MaxSwitch(int Q) {
    if (Q==0)fooC_P=&MaxSwitch::MaxVal1;
    else fooC_P=&MaxSwitch::MaxVal2;
}

inline T MaxVal1(T kx,T MAX)
{
    return kx+1;
}

inline T MaxVal2(T kx,T MAX)
{
    return MAX;
}

};

 int main( int argc, char ** argv )
{
int Q=atoi ( argv[1] );
MaxSwitch<int> MAXSW(Q);


int MAX=5;

for ( int kx=0;kx<MAX;kx++ ) for ( int ky=0;ky<(MAXSW.fooC_P)(kx,MAX);ky++ )
    {
        cout<<"(kx="<<kx<<", ky="<<ky<<endl;
    }

return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我现在有一个小问题,函数调用(MAXSW.fooC_P)(ky,MAX)是错误的.怎么做得好?

c++ typedef function-pointers

0
推荐指数
1
解决办法
449
查看次数