问题列表 - 第44072页

OpenMP:Visual C++ 2008和2010之间的巨大性能差异

我正在运行一个摄像头采集程序,对采集的图像进行处理,我正在使用简单的OpenMP指令进行处理.所以基本上我等待来自相机的图像,然后处理它.

迁移到VC2010时,我看到了非常奇怪的性能问题:在VC2010下,我的应用程序占用了近100%的CPU,而在VC2008下只占用了10%.

如果我只对处理代码进行基准测试,那么VC2010和VC2008之间没有区别,使用采集功能会产生差异.

我已经将重现问题所需的代码减少到一个简单的循环,执行以下操作:

  for (int i=0; i<1000; ++i)
  {
    GetImage(buffer);//wait for image
    Copy2Array(buffer, my_array);

    long long sum = 0;//do some simple OpenMP parallel loop
    #pragma omp parallel for reduction(+:sum)
    for (int j=0; j<size; ++j)
      sum += my_array[j];
  }
Run Code Online (Sandbox Code Playgroud)

这个循环占2008年CPU的5%,2010年占70%.

我做了一些分析,这表明在2010年大部分时间花在了OpenMP上 vcomp100.dll!_vcomp::PartialBarrierN::Block

我还做了一些并发性分析:

在2008年,处理工作分布在3个工作线程上,由于处理时间远远低于图像等待时间,所以它们非常活跃

相同的线程出现在2010年,但它们都被该PartialBarrierN::Block功能100%占用.由于我有四个核心,他们正在吃75%的工作,这大致是我在CPU职业中看到的.

所以看起来OpenMP和Matrox采集库(专有)之间存在冲突.但它是VS2010或Matrox的错误吗?有什么我能做的吗?使用VC++ 2010对我来说是必须的,所以我不能坚持使用2008.

十分感谢

状态更新

正如DeadMG所建议的那样,使用新的并发框架会导致40%的CPU.分析它显示时间花在处理上,因此它没有显示我在OpenMP中看到的错误,但在我的情况下性能比OpenMP差.

状态更新2

我已经安装了最新英特尔C++的评估版.它显示完全相同的性能问题!!

我交叉发布到MSDN论坛

状态更新3

在Windows 7 64位和XP 32位上测试,结果完全相同(在相同的机器上)

c++ performance openmp visual-studio-2010

25
推荐指数
2
解决办法
8726
查看次数

ffmpeg没有找到vcodec libx264

我安装了最新的ffmpeg,但似乎无法找到视频编解码器.我是否需要完成删除ffmpeg并重新运行./configure以使ffmpeg找到视频编解码器?

这是我目前的配置:

FFmpeg version git-f61cbc2, Copyright (c) 2000-2011 the FFmpeg developers built on Jan 18 2011 10:59:49 with gcc 4.0.1 (Apple Inc. build 5465) configuration: --enable-libmp3lame --enable-shared --disable-mmx --arch=x86_64 libavutil 50.36. 0 / 50.36. 0 libavcore 0.16. 1 / 0.16. 1 libavcodec 52.108. 0 / 52.108. 0 libavformat 52.94. 0 / 52.94. 0 libavdevice 52. 2. 3 / 52. 2. 3 libavfilter 1.74. 0 / 1.74. 0 libswscale 0.12. 0 / 0.12. 0

或者,我可以重新运行make命令来包含库吗?

这是我的代码转换代码段:

ffmpeg -i ~/Desktop/watercarts.mov …

ffmpeg video-encoding libavcodec

11
推荐指数
2
解决办法
2万
查看次数

查询需要帮助

如何从表T1中选择结果

T1.itemID = T2.itemID
Run Code Online (Sandbox Code Playgroud)

在T2中没有找到相应的记录,即仅在T1中找到?

mysql sql

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

Qt的缺点

我是qt的初学者.我认为这很有用,但有些事情是错的.我认为这不是头号开发者的选择.为什么开发人员不喜欢使用Qt?什么是Qt的最佳替代品?

qt

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

将Eclipse命令绑定/绑定到swt按钮

在Eclipse中,您可以使用菜单贡献来添加将调用命令的工具栏按钮和菜单.除了以编程方式调用命令onclick之外,有没有办法对普通的swt按钮执行此操作?

eclipse swt command

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

iPhone UITableViewController自定义布局

我是iPhone编程的初学者.我的第一个应用程序是一个UITableViewController,但现在我想尝试一下.我们的想法是创建一个如下所示的自定义布局:

布局:

---------------------
Image     |    Button     
---------------------
UICalendar
---------------------
UITableView
---------------------
Button     |   Button
---------------------
Run Code Online (Sandbox Code Playgroud)

问题1:正如您所看到的,我想添加一些额外的UI元素.我见过的所有教程都将UITableViewController描述为单个UITableView(控制器中不包含其他UI元素).所以我的问题是可以扩展UITableViewController以实现这种布局吗?什么是正确的方法呢?

问题2:对于UITableViewController,我不使用XIB文件,但有些人会这样做.为什么我在创建UITableViewController时会使用XIB文件?有什么好处?什么是最佳做法?

更新:实际上我正在考虑的是为UICalendar(UICalendarController)和UITableView(UITableViewController)分别设置一个控制器.我只是不知道如何实现它.

谢谢.

iphone xcode uitableview

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

使用Reactive Extensions(Rx)进行延迟和重复数据删除

我想使用Reactive Extensions转换一些消息,并在一小段延迟后转发它们.

消息看起来像这样:

class InMsg
{
   int GroupId { get; set; }
   int Delay { get; set; }
   string Content { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

输出看起来像这样:

class OutMsg
{ 
   int GroupId { get; set; }
   string Content { get; set; }
   OutMsg(InMsg in)
   {
       GroupId = in.GroupId;
       Content = Transform(in.Content);  // function omitted
   }
}
Run Code Online (Sandbox Code Playgroud)

有几个要求:

  • 延迟的长度取决于消息的内容.
  • 每条消息都有一个GroupId
  • 如果较新的消息带有与等待传输的延迟消息相同的GroupId,则应丢弃第一个消息,并且仅在新的延迟周期之后发送第二个消息.

给定一个Observable <InMsg>和一个Send函数:

IObservable<InMsg> inMsgs = ...;

void Send(OutMsg o)
{
     ... // publishes transformed messages
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Select来执行转换.

void SetUp()
{
     inMsgs.Select(i …
Run Code Online (Sandbox Code Playgroud)

c# reactive-programming system.reactive

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

电子邮件服务器的990字符限制的解决方法

想要知道是否有任何函数/类/等...来帮助我的HTML因此而影响电子邮件的990字符限制.

问题:( 来源)

请注意,邮件服务器对电子邮件中包含的每一行都有990个字符的限制.如果发送的电子邮件包含长度超过990个字符的行,则这些行将被其他行结束字符细分,这可能会导致电子邮件中的损坏,特别是对于HTML内容.要防止这种情况发生,请在电子邮件中的适当位置添加自己的行结束字符,以确保没有行超过990个字符.

其他人似乎都有这个问题?你是怎么解决这个问题的?

听起来我需要找到一个分割HTML并手动添加换行符的好地方,呃......

更新:

它是包含许多行的指法数据.所以我需要添加一个\n或<br />某个地方?

更新#2:添加MIME类型代码

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n"; // added this, but still no results
$headers .= "From: from@email.com\r\n";
Run Code Online (Sandbox Code Playgroud)

这是我如何调用函数:

我原来怎么称呼:

return $html;
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:

return imap_8bit($html); // not working, nothing is captured in the error log
Run Code Online (Sandbox Code Playgroud)

return imap_binary($html); // not working, nothing is captured in the error log
Run Code Online (Sandbox Code Playgroud)

更新#3(添加邮件功能)

try {
    mail(
        'to@email.com',
        'Subject of Email',
        $html,
        $headers
        );
    } catch …
Run Code Online (Sandbox Code Playgroud)

php character-limit html-email mail-server

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

Java:从磁盘写入/读取映射

我有一个数据结构,我希望能够在关闭程序之前写入文件,然后从文件中读取以在下次应用程序启动时重新填充结构.

我的结构是HashMap<String, Object>.对象非常简单; 对于成员变量,它有一个String,以及两个Boolean类型的小型本机数组.这是一个真正简单的应用程序,我不希望一次超过10-15 <key,value>对.

我一直在使用Object输入/输出流进行实验(不成功).我是否需要使Object类可序列化?

你能给我任何关于最佳方法的建议吗?我只需要朝着正确的方向努力.谢谢!

编辑:嗯,我仍然感到愚蠢,我正在从一张地图写入并阅读另一张地图,然后比较它们以检查我的结果.显然我在比较他们错了.叹.

java collections file-io serialization

13
推荐指数
1
解决办法
2万
查看次数

如何在Linux上运行ASP.Net与标准的以Microsoft为中心的解决方案相比?

我知道有可能使用MonoApache在Linux上开发和托管ASP.Net站点,但我想知道它的工作原理以及它是否值得麻烦?我更喜欢开源,但对于这个项目,我想要最快,最简单,最可靠的解决方案.

我将建立的网站将是一个使用MySQL的相当基本的ASP.Net网站.

我想知道是否有其他人在我这样的情况下使用Mono的经验以及项目的进展情况.它与使用以微软为中心的解决方案相比如何?

我知道Mono仍然有点不完整,但我希望我不需要它缺少的功能.

这个问题可能有点"两极分化".大多数类似的问题似乎得到了非常亲微软或亲Linux的回复.我希望能有一些不偏不倚的回应,最好是有经验的人.

.net linux asp.net mono

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