Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Optimization openMP和SSE,我的程序不';不要加速_Optimization_Openmp_Sse - Fatal编程技术网

Optimization openMP和SSE,我的程序不';不要加速

Optimization openMP和SSE,我的程序不';不要加速,optimization,openmp,sse,Optimization,Openmp,Sse,以下是我并行运行的部分代码: timer.Start(); for(int i = 0; i < params.epochs; ++i) { #pragma omp for for(int j = 0; j < min_net; ++j) { std::pair<CVectorSSE,CVectorSSE>& sample = d

以下是我并行运行的部分代码:

timer.Start();
        for(int i = 0; i < params.epochs; ++i)
        {
            #pragma omp for
            for(int j = 0; j < min_net; ++j)
            {
                std::pair<CVectorSSE,CVectorSSE>& sample = data_set[j];
                nets[j]->Approximate(sample.first,net_outputs[j]);
                out_gradients[j].SetDifference(net_outputs[j],sample.second);
                nets[j]->BackPropagateGradient(out_gradients[j],net_gradients[j]);
            }

        }
        timer.Stop();
timer.Start();
对于(int i=0;i近似值(示例。首先,netu输出[j]);
out_梯度[j]。设定差(净_输出[j],采样。秒);
nets[j]->反向传播梯度(out_梯度[j],net_梯度[j]);
}
}
timer.Stop();
纪元=100
我有AMD athlon X2 5000+
当我在没有omp指令的情况下启动此代码时,时间是相同的。。。 当我在运行两个程序(带/不带omp)时查看任务管理器/性能时 在这两种情况下,都使用了2个磁芯。。。看来VS(VS 2008)以某种方式优化了omp之类的代码???
并行循环中的代码使用SSE指令。。。 我想知道,也许在多核过程中只有一个SSE单元,但这将是愚蠢的。。。 也许有人能告诉我我做错了什么? 我知道这取决于循环中的代码,但是如果循环中的代码是并行的,那么它必须加速

好吧,我肯定做错了什么-看看下面的代码:

time_t start;
time_t stop;

start = time(NULL);
#pragma omp for
for(int i = 0; i < 10; ++i)
{
    Sleep(1000);
}
stop = time(NULL);

cout<<difftime(stop,start)<<endl;
启动时间;
时间不会停止;
开始=时间(空);
#pragma omp for
对于(int i=0;i<10;++i)
{
睡眠(1000);
}
停止=时间(空);

cout我在Linux上使用gcc尝试了第二个示例。我的程序在Core i3上运行3秒。我猜您遇到的问题是您没有正确配置OpenMP。GCC需要一个选项-fopenmp来启用OpenMP。VS可能需要类似的配置。

您应该分析代码并查看花费的时间-否则您只是猜测性能问题在哪里是我在VS中启用了openMP(项目/属性/语言/使用openMP),此外,该程序加载vcomp90.dll,这是openmp dll…好吧,我现在知道了-pragma omp for doestn work-我必须键入pragma omp parallel for。。。