Skip to content

Add parallel sort example (#220) - #606

Merged
ChunelFeng merged 2 commits into
ChunelFeng:mainfrom
LJX1021403:add-parallel-sort-example
Sep 2, 2026
Merged

ChunelFeng merged 2 commits into
ChunelFeng:mainfrom
LJX1021403:add-parallel-sort-example

Conversation

@LJX1021403

Copy link
Copy Markdown
Contributor

Added a new example E06-ParallelSort that demonstrates how to use CGraph's pipeline to sort a large array in parallel.

The example:

  • Generates 1,000,000 random integers.
  • Splits them into 4 equal parts.
  • Uses four SortGNodes to sort each part concurrently.
  • Merges the results and verifies correctness.
  • Prints thread IDs and execution time to show parallel execution.

Fixes #220

@ChunelFeng

ChunelFeng commented Sep 2, 2026

Copy link
Copy Markdown
Owner

你好,看了您的例子,感觉整体很不错,非常符合 CGraph 的特性和思想。

个人提出一点建议哈:

  1. 在 merge node中,对所有 100w 个数据进行了重排,相当于之前的SortNode 都有点摆设了。
  2. 单就一个demo而言,中间的 print 信息可能略微有点多了。但内容其实都是【肯定正确】的 info 消息,有点类似大白话了。
  3. demo本身,没能对比出来 在大量数据的情况下 并行排序 和 普通std::sort 的性能区别。

我个人提供两个优化思路,建议参考其一:

第一个思路:

  1. 生成的初始化 data 中,固定是 0-100w 仅乱序但不重复的 100w个数字。
  2. 增加一个在generate 和 sort 中间,增加一个node,功能是将 data按照 0-25w,25w-50w 这种方式做一次归并。确保前面 25w个数值,虽然是无序的,但实际都在 0-25w之间。依次类推。
  3. 后面接 4个 sortNode,对别对着四个 part 进行排序。完成排序后,即为最终序。

第二个思路:

  1. 随机生成 100w个数字,不care任何规律,跟当前保持一致。
  2. 后面接 sort,分别对 4个part进行排序,跟当前保持一致。
  3. 最后的 merge 节点中,按照插入排序的方式,4个局部有序的 sub_data,放到最终的 data中。确保data 是有序的。

最终还可以比较一下,并行排序和 std::sort 的真实性能差距。直接用 UTimeCounter("xxx") 即可,不需要自己计算时间了。
btw:数据随机生成,可以写在 第一个node 的 init方法中。计算耗时的时候,仅计算 pipeline->run() 的耗时。 std::sort 也仅计算 sort 的耗时,不需要考虑 data gene 的耗时

@ChunelFeng

Copy link
Copy Markdown
Owner

对了,记得在 CONTRIBUTORS.md 文档中,添加自己的信息哈。感谢

@LJX1021403

Copy link
Copy Markdown
Contributor Author

感谢您的详细建议!我已经更新了示例:

1.合并节点已改为四路归并,不再整体重排。

2.增加了串行 std::sort 基准对比,并输出加速比。

3.精简了日志,聚焦性能对比。

4.已在 CONTRIBUTORS.md 中添加了自己的信息。

数据随机生成已放在第一个节点的 init 方法中;计时的部分我目前采用 std::chrono 计算 pipeline->process() 和 std::sort 本身的耗时,后续如需要会改用 UTimeCounter。

目前示例在 100 万随机整数上显示约 1.3 倍加速(并行 vs 串行)。如果还有需要调整的地方,请随时指出。

@ChunelFeng
ChunelFeng merged commit ba89a94 into ChunelFeng:main Sep 2, 2026
@ChunelFeng

Copy link
Copy Markdown
Owner

感谢您的贡献,已经合入。

如果有兴趣,非常希望可以添加个人微信,随时交流。

我的vx 见项目readme。

@LJX1021403
LJX1021403 deleted the add-parallel-sort-example branch September 3, 2026 02:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

提供 parallel sort 的example

2 participants