C/C++ MPI 加速未达到预期

2024-01-07

我正在尝试编写一个 MPI 应用程序来通过计算机集群加速数学算法。但在此之前我正在做某种基准测试。但最初的结果并不像预期的那么好。

测试应用程序在 4 核时具有线性加速,但 5,6 核并未加速应用程序。我正在使用 Odroid N2 平台进行测试。它有 6 个核心。 Nproc 表示有 6 个核心可用。

我是否缺少某种配置?或者我的代码准备得不够充分(它基于 mpi 的基本示例之一)?

是否有需要考虑的响应时间或同步时间?

以下是我基于 MPI 的应用程序的一些措施。我测量了一个函数的总计算时间。

  • 1核0.838052秒
  • 2核0.438483秒
  • 3核0.405501秒
  • 4核0.416391秒
  • 5核0.514472秒
  • 6核0.435128秒
  • 12 核(3 个 N2 板中的 4 个核)0.06867 秒
  • 18 核(3 个 N2 板中的 6 个核)0.152759 秒

我用 4 核的树莓派 pi4 做了一个基准测试:

  • 1 核 1.51 秒
  • 2核0.75秒
  • 3核0.69秒
  • 4核0.67秒

这是我的基准应用程序:

int MyFun(int *array, int num_elements, int j)
{
  int result_overall = 0;

  for (int i = 0; i < num_elements; i++)
  {
    result_overall += array[i] / 1000;
  }
  return result_overall;
}

int compute_sum(int* sub_sums,int num_of_cpu)
{
  int sum = 0;
  for(int i = 0; i<num_of_cpu; i++)
  {
    sum += sub_sums[i];
  }
  return sum;
}

//measuring performance from main(): num_elements_per_proc is equal to 604800
  if (world_rank == 0)
  {
    startTime = std::chrono::high_resolution_clock::now();
  }
  // Compute the sum of your subset
  int sub_sum = 0;
  for(int j=0;j<1000;j++)
  {
    sub_sum += MyFun(sub_intArray, num_elements_per_proc, world_rank);
  }

  MPI_Allgather(&sub_sum, 1, MPI_INT, sub_sums, 1, MPI_INT, MPI_COMM_WORLD);

  int total_sum = compute_sum(sub_sums, num_of_cpu);
  if (world_rank == 0)
  {
    elapsedTime = std::chrono::high_resolution_clock::now() - startTime;
    timer = elapsedTime.count();
  }

我使用 -O3 优化级别构建它。

UPDATE:新措施:

  • 60480个样本,MyFun调用100000次: 1.47 -> 0.74 -> 0.48 -> 0.36
  • 6048个样本,MyFun调用1000000次: 1.43 -> 0.7 -> 0.47 -> 0.35
  • 6048个样本,MyFun调用10000000次: 14.43 -> 7.08 -> 4.72 -> 3.59

UPDATE2: By the way when I list the CPU info in linux I got this: enter image description here

这是正常的吗? 四核 A73 核心不存在。它说有两个3-3芯的插座。

And here is the CPU utilization with sar: enter image description here Seems like all of the cores are utilized.

I create some plots from speedup: enter image description here enter image description here

看起来 float 计算而不是 int 计算有一点帮助,但核心 5-6 没有多大帮助。我认为内存带宽还可以。在little.BIG架构中平等利用所有CPU时,这是正常行为吗?


None

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

C/C++ MPI 加速未达到预期 的相关文章

随机推荐

  • Java 8 中多重继承的用法

    Am I usingJava 8 的一个功能或misusing it 请参阅下面的代码和解释以了解为什么选择这样 public interface Drawable public void compileProgram public Pro
  • 线程编程中的守护简单列表?

    我正在阅读一本 POSIX 线程书籍进行一些练习 并且我试图找出在一个简单的单链表中需要互斥锁的位置作为一个小练习问题 例如 如果我有一个节点结构列表 template
  • PHP - 使用 LOAD DATA INFILE 将 CSV 文件导入到 mysql 数据库

    我有一个这样的 csv 文件数据 Date Name Call Type Number Duration Address PostalCode City State Country Latitude Longitude Sep 18 201
  • 使用unicode字符u201c

    我是 python 新手 在理解 unicode 时遇到问题 我在用着 Python 3 4 我花了一整天的时间试图通过阅读有关 unicode 的内容来解决这个问题 包括http www fileformat info info unic
  • 具有新 Firebase 的 Nodejs 应用程序不会检索数据库项目

    我是 Nodejs 新手 但已经有一个工作的 js 客户端程序 Firebase 版本 3 0 2 事实证明 我需要一个服务器来完成一些在 js 客户端中不可能完成的简单事情 当我在 Nodejs 中尝试这个基本的事情时 没有任何反应 数据
  • 在 MATLAB 中查找变量的小数位数

    给定变量 x 12 3442 我想知道变量的小数位数 在这种情况下 结果将是 4 如何在不反复试验的情况下做到这一点 这是一个紧凑的方法 y x 10 1 20 find y round y 1 假设x是您的数字 20 是小数点后的最大位数
  • 在java中将数组的字符串表示形式转换回int数组

    刚刚开始使用 Java 编程 如果我有一个存储在 txt 文件中的数组 如下所示 10 22 30 55 10 20 19 如何将其转换回正常的 int 数组以在代码中使用 我需要能够将其简单地存储在这样的 txt 文件中 以便我可以手动对
  • 如何在 Windows 上安装 python-levenshtein?

    经过几天的搜索 我准备放弃寻找 Python 2 7 Windows 64 位 的预编译二进制文件Python Levenshtein 库 http pypi python org pypi python Levenshtein 所以不是我
  • Java 中的 getter/setter

    我是 Java 新手 但有一些使用 ActionScript 3 的 OOP 经验 因此我尝试依靠我所知道的内容进行迁移 在 ActionScript 3 中 您可以使用 get 和 set 关键字创建 getter 和 setter 这意
  • 相机控件在 iOS 7 上不可见

    我使用图像选择器控制器来调用设备相机 下面列出的代码在 iOS 7 下工作正常 但是当我在 iOS 7 上使用相同的代码启动相机时 我看不到 使用 和 取消 按钮 void getCameraPicture UIImagePickerCon
  • R - 使用“rep”创建重复序列

    我想知道是否有更简单的方法来制作列表 例如 10 4 20 6 和 30 3 然后手写 example lt c 4 4 4 4 与函数 rep 我知道我可以重复某个序列 n 次 每次重复 n 次 但我不知道如何用每个数字的不同数量来制作一
  • O(n) 算法的计算时间可以超过 O(n^2) 吗?

    假设我有两种算法 for int i 0 i lt n i for int j 0 j lt n j do something in constant time 这自然是O n 2 假设我也有 for int i 0 i lt 100 i
  • 渐进式 Web 应用程序中的重定向

    我试图在通知单击时重定向到渐进式网络应用程序中的特定网址 但它不会重定向 情况 1 如果 Web 应用程序未添加到主屏幕 则在收到通知后单击浏览器窗口将打开并重定向到所需的 URL 情况 2 如果 Web 应用程序添加到主屏幕 则登陆页面是
  • PostgreSQL 9.1 时区

    我正在使用 postgresql 在数据库中存储一些日期 在我的应用程序中 它完全了解时区是至关重要的 我正在客户端 服务器和数据库之间进行一些基本测试 我从 GWT 中执行的浏览器应用程序发送日期 并读取 postgresql 上的日期
  • iTunes Connect - 无法邀请预发行应用程序的“内部测试人员”

    我的应用程序已获准通过新的 Apple TestFlight 应用程序进行分发 我试图通过邀请 内部测试员 iTunes Connect gt Prerelease gt Internal Testers但我看到的只是两个信息框 要开始测试
  • Pycharm 不接受“list[Example]”作为项目列表的类型提示[重复]

    这个问题在这里已经有答案了 我在 PyCharm 中发现了一个奇怪的类型 Example是我自己的班级 但我想这并不那么重要 因为 IDE 正在抱怨list类型没有定义 getitem 这是不正确的方法 我想知道这是一个错误还是我以错误的方
  • Magento - 对自定义报价总计字段应用税

    我为 Magento 创建了一个附加费模块 它在报价中添加了一个自定义总计字段 附加费含税输入到 Magento 中 我已成功获取将附加费添加到报价中的模块 并且结帐页面上的总计是正确的 当我尝试对附加费征税 以便将其包含并显示在结账页面的
  • jQuery Ajax Post 与数据

    当使用某些参数单击按钮时 我尝试调用 PHP 文件 它一直执行到 jsfile js 中的警报语句为止 之后ajax部分没有被执行 帮助我 主要 html
  • 当应用程序在后台运行时获取 GPS 位置更新

    我有一个 Android 应用程序 可以跟踪客户位置并每 10 秒发送一次位置 但是 在 android O 中 位置更新每小时会获得几次 正如有关 android O 中 GPS 位置更新限制的文档中所述 无论如何 为了克服这个问题 我使
  • C/C++ MPI 加速未达到预期

    我正在尝试编写一个 MPI 应用程序来通过计算机集群加速数学算法 但在此之前我正在做某种基准测试 但最初的结果并不像预期的那么好 测试应用程序在 4 核时具有线性加速 但 5 6 核并未加速应用程序 我正在使用 Odroid N2 平台进行