gpt4 book ai didi

c++ - OpenMP:从上到下的文本

转载 作者:行者123 更新时间:2023-11-30 05:20:59 24 4
gpt4 key购买 nike

我尝试为大学完成一项任务。在那里我们需要从 std::cin 中获取大文本并将每个带有 'tolower()' 的字符转换为较低的字符并将其放入 std::cout。

这应该是并行化和可扩展的,首先我考虑将文本拆分成行并将每一行分配给一个新线程,但该任务应该专门使用 openMP 来完成。而且应该只使用这么多线程,因为我的机器可以并行运行,对吗?

所以有这个 openMP 'for' 范例:

#pragma omp parallel for

遍历 for 循环中的每个字符是个好主意吗?或者有更好的方法吗?

感谢您的建议!

最佳答案

在任何情况下,您都将遍历每个字符。然而,对于 OpenMP,它已经根据您的机器选择了多个线程,并在您的迭代中选择了 block 策略;两者都是可调的,但您可能不需要。这种情况下的主要限制实际上是您被指示使用 tolower .

一个注意事项:拆分成行不容易并行化。例如,如果您的输入来自终端,如果您执行非阻塞读取或基于行的读取(大多数情况下;可以一次发送多行),则终端层已经为您完成了。如果您从文件中读取,拆分成行需要扫描整个文件以查找换行符并计算它们的开始和结束位置。但这完全是浪费精力,因为您的操作不依赖于线路; tolower不会更改换行符,也不会添加或删除字符。

至于使用 for 是否是个好主意环形;在 OpenMP C 中,是的。 OpenMP 翻译您的典型 for (i=0; i<len; i++)使用 #pragma omp parallel for 变成更智能的算法.使用更高级别的语言,您需要的操作称为 map , 并且可能有并行版本,例如 Haskell 的 parMap .在这样的语言中,你基本上会做 output = map tolower input .我希望具有现代 C++ 知识的人会使用一些 Boost 模板来完成它。

关于c++ - OpenMP:从上到下的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40437753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com