我正在以顺序方式运行.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程序的时间吗?
谢谢.
我无法让Eclipse为我的源代码编制索引.我目前正在Windows XP上使用Eclipse Helios.
我有一个名为src的目录.在其中,我有一堆dirs,像这样:
src
-include (common headers)
-lib
-libIO (source code for this library)
-libGUI (source code for this library)
-pgms
-pgm1 (source code and headers for this pgm)
-pgm2 (source code and headers for this pgm)
每个叶子都有自己的Makefile.src中没有顶级Makefile.pgm1可以并且确实包含来自include和lib/libIO以及lib/libGUI的文件.
基本上,我希望Eclipse为我的整个src目录编制索引,而不必为树中的每个叶子设置一个C/C++项目. 我似乎无法找到实现这一目标的方法.
这是我的症状; 我正在努力解决的问题:
在pgm1目录中编辑源代码时,它引用在我的include dir头文件中声明并在lib/libIO中找到的源文件中定义的函数.
但是,当我按F3来获取函数的声明时,Eclipse说"无法在索引中找到符号'X'".我似乎无法让Eclipse在我的光标下找到方法的头部声明或源定义(就像Java模块完美无缺).这可能吗?
如果你有这个功能
template<typename T> f(T&);
Run Code Online (Sandbox Code Playgroud)
然后尝试调用它,让我们说一个rvalue就好
f(1);
Run Code Online (Sandbox Code Playgroud)
为什么T不能被推导为const int,使得参数成为一个const int&因而可以绑定到一个rvalue?
我正在C++ 0x中实现一个压缩垃圾收集器供我个人使用,我有一个问题.显然,收集器的机制取决于移动对象,我一直想知道如何根据指向它的智能指针类型来实现它.我一直在考虑指针类型本身的指针指针,或者,收集器维护一个指向每个对象的指针列表,以便可以修改它们,从而在访问时无需双重de-ref指针但在收集期间添加一些额外的开销和额外的内存开销.什么是最好的方式去这里?
编辑:我主要关心的是快速分配和访问.我并不关心特别有效的收藏或其他维护,因为这不是GC的目的.
好吧,我之前已经有过这一百万次,并且之前已经回答了100万次+1.
然而,又一次.我有3个项目,A,B和C,每个都是一个DLL.每个项目都是.Net 4.0(不是客户端构建,完整4.0).项目C引用A和B.它们作为项目引用,输出设置为本地复制.
在C中,我的.cs文件中有两个using语句:
using A;
using B;
Run Code Online (Sandbox Code Playgroud)
当我编译时,我得到了无法找到的投诉B.答案很好.B取决于A.
我该怎么办?我删除并重新添加,关闭VS2010,重新打开它,查看.csproj文件.我只是无法得到它.再次,第一百万次.
请有人给我一个足够的感觉,让我一劳永逸地学习这个来源!
是的,这可能在StackOverflow中的某个地方得到了解答,但在我迄今为止检查的任何顶级答案中都没有.这些术语过于通用而无法使用,太多问题的答案是"duh,添加引用".我已经过了那一点.
这是我得到的错误.有3种,但从过去的经验来看,最后一种是真实的.
Error 130 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' does not contain a definition for 'Database' and no extension method 'Database' accepting a first argument of type 'AWI.WWG.EXPMRI.MriUpload.Data.MriUpload' could be found (are you missing a using directive or an assembly reference?)
Error 114 'object' does not contain a definition for <blah>
Error 59 The type or namespace name '<blah>' could not be found (are you missing a using directive or an assembly reference?) …Run Code Online (Sandbox Code Playgroud) 我使用的是标准的iostream获取某个文件的一些输入,并且我感到困惑unget()与putback(character).从文档中我可以看出,这些函数实际上是相同的,unget()只记得放入的字符,所以我很紧张.我一直都在使用putback(character),但character始终是最后读过的角色,我一直在考虑改变unget().putback(character)永远是相同的unget(),如果character总是最后读取的字符?
有没有人知道Windows环境中gettimeofday()函数的等效函数?我正在比较Linux与Windows中的代码执行时间.我正在使用MS Visual Studio 2010并且它一直说,标识符"gettimeofday"未定义.
感谢任何指针.
我有一个关于C/C++如何在内部存储使用符号声明的多维数组的问题foo[m][n].我不是在质疑指针的纯指针等等......因为速度原因,我在问...
如果我错了,请纠正我,但语法上foo是一个指针数组,它们本身指向一个数组
int foo[5][4]
*(foo + i) // returns a memory address
*( *(foo + i) + j) // returns an int
Run Code Online (Sandbox Code Playgroud)
我从很多地方听说过C/C++编译器foo[m][n]在幕后转换为一维数组(计算所需的一维索引i * width + j).但是如果这是真的那么以下就可以了
*(foo + 1) // should return element foo[0][1]
Run Code Online (Sandbox Code Playgroud)
因此我的问题foo[m][n]是:(总是吗?)存储在内存中作为平面一维数组是真的吗?如果是这样,为什么上面的代码如图所示.
怎么能std::shared_ptr提供noexcept operator=?当然,如果这shared_ptr是最后一个,那么它将不得不销毁其内容,并且它不能保证该对象的析构函数不会抛出,或者最初使用的自定义删除器不会抛出.
我正在用C++实现一个自定义词法分析器,当试图读取空格时,ifstream将不会读取它.我正逐字逐句阅读>>,所有的空白都消失了.是否有任何方法可以让ifstream保留所有的空白并将其读出来给我?我知道在阅读整个字符串时,读取将停留在空白处,但我希望通过逐字逐句阅读,我会避免这种行为.
尝试:.get(),由许多答案推荐,但它具有相同的效果std::noskipws,即,我现在获得所有空格,但不是我需要的一些构造的新行字符.
这是违规代码(扩展评论被截断)
while(input >> current) {
always_next_struct val = always_next_struct(next);
if (current == L' ' || current == L'\n' || current == L'\t' || current == L'\r') {
continue;
}
if (current == L'/') {
input >> current;
if (current == L'/') {
// explicitly empty while loop
while(input.get(current) && current != L'\n');
continue;
}
Run Code Online (Sandbox Code Playgroud)
我正在打破这一while行并查看其中的每个值current,\r或者\n肯定不在其中 - 输入只是跳到输入文件中的下一行.