我正在以顺序方式运行.cpp代码(i)和(ii)使用OpenMP语句.我想看看时差.为了计算时间,我用这个:
#include <time.h>
.....
main()
{
clock_t start, finish;
start = clock();
.
.
.
finish = clock();
processing time = (double(finish-start)/CLOCKS_PER_SEC);
}
Run Code Online (Sandbox Code Playgroud)
在代码的顺序(上面)运行中,时间非常准确.运行它需要大约8秒钟.当我在代码中插入OpenMP语句然后计算时间缩短时,但是在控制台上显示的时间大约为8-9秒,实际上它实际上只有3-4秒!
以下是我的代码抽象的样子:
#include <time.h>
.....
main()
{
clock_t start, finish;
start = clock();
.
.
#pragma omp parallel for
for( ... )
for( ... )
for (...)
{
...;
}
.
.
finish = clock();
processing time = (double(finish-start)/CLOCKS_PER_SEC);
}
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我得到了减少的时间,但显示的时间在实时方面并不准确.在我看来,似乎clock()函数正在计算每个线程的个别时间并将它们相加并显示它们.
有人能说出这个的原因或建议我使用任何其他计时功能来衡量OpenMP程序的时间吗?
谢谢.
有没有人知道Windows环境中gettimeofday()函数的等效函数?我正在比较Linux与Windows中的代码执行时间.我正在使用MS Visual Studio 2010并且它一直说,标识符"gettimeofday"未定义.
感谢任何指针.
默认情况下,OpenMP指令:
opm_get_num_threads 给出等同于处理器/核心的线程数.
我有一个8核机器,所以它给了我8个线程.那是最大的吗?如果我故意指定超过8个,我可以获得比8更多的线程吗?
谢谢
我有一个nxm邻接矩阵,其中(i,j)表示i和j之间关联的分数.我需要将其转换为以下格式,如:
i j <score1>
使用R'igraph包并将其输出到文本文件中.
我可以推导出边缘列表,但它没有显示权重.我使用了以下代码:
library(igraph)
g <- graph.adjacency(myAdjacencymatrix)
get.edgelist(g)
但是,它没有显示重量.