为什么这个 OpenMP 程序比单线程慢?

2023-11-29

请看一下这段代码。

单线程程序:http://pastebin.com/KAx4RmSJ。编译为:

g++ -lrt -O2 main.cpp -o nnlv2

使用 openMP 的多线程:http://pastebin.com/fbe4gZSn编译为:

g++ -lrt -fopenmp -O2 main_openmp.cpp -o nnlv2_openmp

我在双核系统上测试了它(所以我们有两个并行运行的线程)。但多线程版本比单线程版本慢(并且显示时间不稳定,尝试运行几次)。怎么了?我哪里做错了?

一些测试:

单线程:

Layers Neurons Inputs --- Time (ns)

10 200 200 --- 1898983

10 500 500 --- 11009094

10 1000 1000 --- 48116913

多线程:

Layers Neurons Inputs --- Time (ns)

10 200 200 --- 2518262

10 500 500 --- 13861504

10 1000 1000 --- 53446849

我不明白出了什么问题。


您的目标是学习 OpenMP,还是让您的程序更快?如果是后者,则更值得编写乘加代码、减少传递次数并合并 SIMD。

步骤 1:组合循环并使用乘加:

// remove the variable 'temp' completely
for(int i=0;i<LAYERS;i++)
{
  for(int j=0;j<NEURONS;j++)
  {
    outputs[j] = 0;

    for(int k=0,l=0;l<INPUTS;l++,k++)
    {
      outputs[j] += inputs[l] * weights[i][k];
    }

    outputs[j] = sigmoid(outputs[j]);
  }

  std::swap(inputs, outputs);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 OpenMP 程序比单线程慢? 的相关文章

随机推荐

  • 高质量完整屏幕截图 VB.Net

    我正在尝试向我的程序添加一项功能 以便在用户单击按钮时获取用户屏幕的完整屏幕截图 我让程序截取屏幕截图并打开文件对话框来保存它 保存有效 问题是 无论我如何保存屏幕截图 保存的图像都会出现显着的质量损失 并且文本和内容周围会出现像素化 这是
  • ajax调用后f:viewParam丢失

    我有这个 f viewParam 来设置值并在视图中的 back bean 中进行搜索
  • 如何在 Javascript 中将按钮点击率限制为每分钟一次

    我有一个基于 PHP 的 Web 应用程序 用于监视进程的状态并显示具有该状态的页面 用户可以单击页面上的按钮来更新状态 但是 我的服务器上的处理负载足够重 因此不希望过于频繁地更新状态 因此 我想要一种方法来限制某人每分钟点击 提交 按钮
  • 区域设置 en-EN 是无效的区域性标识符

    我最近从一台装有 Windows 10 和 VS 2017 的计算机转移到一台装有 Windows 8 1 和 VS 2017 的计算机 我正在处理一段代码 其中有这样一行 Thread CurrentThread CurrentUICul
  • 如果我使用 celery 作为任务调度程序,如何从 python 应用程序登录到 splunk?

    我有一个在服务器上运行的 python 脚本 该脚本应该由 celery 调度程序每天执行一次 我想将日志直接从脚本发送到 splunk 我正在尝试使用这个splunk handler图书馆 如果我在本地运行没有 celery 的 splu
  • iOS 上带有 UIWebView 的多选项卡 Web 浏览器

    我正在创建一个简单的网络浏览器 我希望我的用户添加选项卡并同时浏览多个网页 就像在 Safari Firefox 或 Chrome 中一样 我已经这样做了 效果很好 但我不知道是否有更简单的方法来做到这一点 当用户添加新选项卡时 我的应用程
  • 终端进程无法启动:shell 可执行文件的路径“C:\Windows\System32”不是符号链接的文件

    我真的不知道该怎么办 有人可以帮忙吗 这是在 vscode 上 这是因为它找不到 exe可执行文件 您可以使用以下设置修复它 如果你使用cmd exe要执行脚本 请使用 terminal integrated shell windows C
  • 如何在正则表达式中匹配“直到该字符序列的任何内容”?

    采用这个正则表达式 abc 这将匹配字符串开头的任何单个字符 除了a b or c 如果您添加一个 之后 abc 正则表达式将继续将每个后续字符添加到结果中 直到满足a or b or c 例如 使用源字符串 qwerty qwerty w
  • 在 dexguarding 时没有有效的 android:name

    我正在尝试对作为系统应用程序运行的应用程序进行 dexguard 但是当我尝试将其推到system app目录中 我从 PackageParser 中收到以下错误 W PackageParser 1995 system app My apk
  • 无法将 Boost.Thread 1.46.1 与 MinGW 4.5.2 链接

    我使用以下方法构建了 boost bjam toolset gcc with thread stage 每当我尝试实际使用 Boost Thread 时 尽管我链接了它 但我都会收到未定义的引用 其他 Boost 库 例如 Regex 或
  • 将字符串转换为日历。最简单的方法是什么? [复制]

    这个问题在这里已经有答案了 将格式化字符串转换为日历的最简单方法是什么 例如日历中的 dd MM yyyy DateFormat df new SimpleDateFormat dd MM yyyy Calendar cal Calenda
  • 将 ASP.NET 部署到 Windows Azure 云,应用程序在云上运行时出现错误

    我正在尝试在 Windows Azure 云中部署 ASP NET 应用程序 我正在使用 Google API 进行应用程序中的调用之一 当我这样做时 我收到以下错误 System UnauthorizedAccessException 对
  • CodeIgniter-单击每个链接或重新加载页面时检查会话变量是否已设置

    我有一个名为 admin 的控制器 如果设置了会话变量 则可以使用控制器中的所有功能 那么当单击页面中的每个链接或重新加载页面时 检查会话是否设置的最佳方法是什么 例如 如果我在多个选项卡中打开我的管理主页 浏览器并从第一个选项卡注销 然后
  • Python PPTX条形图负值

    我使用以下代码为 python pptx 生成的条形图指定条形的特定颜色 chart series 0 format fill solid chart series 0 format fill fore color rgb RGBColor
  • 使用 JOLT 转换重命名嵌套数组中的字段

    我想使用 JOLT 转换库重命名嵌套在另一个数组中的数组中的字段 要重命名的一个字段是数组中的顶级字段 要重命名的两个字段位于嵌套数组内 我尝试过使用通配符 但它们没有给我预期的输出 我使用的是 JOLT 0 0 22 版本 输入 JSON
  • 使用 QueryByAttribute 无法检索空值

    我是 CRM 开发新手 除了 CRM 2011 中的现有值之外 我还想从我的 C 应用程序更新自定义字段值 如果该字段有一些值 那么它工作正常 但如果它为空 那么我收到 给定的键不存在于字典中 错误 下面的代码是我想要实现的目标 IOrga
  • 如何使用 bash 删除并替换终端中的最后一行?

    我想在 bash 中实现一个显示经过秒数的进度条 为此 我需要擦除屏幕上显示的最后一行 命令 clear 会擦除所有屏幕 但我只需要擦除进度条的行并将其替换为新信息 最终结果应如下所示 Elapsed time 5 seconds 然后 1
  • 如何诊断 MS 访问崩溃

    我们有一个用 Access 编写的自定义程序 其中有奇怪的崩溃 我们添加了错误处理 记录并通过电子邮件发送我们自己的代码内部发生的任何崩溃 这使我们能够修复生成的大多数错误 但有时崩溃发生在我们的代码外部 我们发现 2013 年新出现的一个
  • Java 中的谓词

    我正在浏览使用的代码Predicate在爪哇 我从来没有用过Predicate 有人可以指导我任何教程或概念解释吗Predicate以及它在Java中的实现 我假设你正在谈论com google common base Predicate
  • 为什么这个 OpenMP 程序比单线程慢?

    请看一下这段代码 单线程程序 http pastebin com KAx4RmSJ 编译为 g lrt O2 main cpp o nnlv2 使用 openMP 的多线程 http pastebin com fbe4gZSn编译为 g l