OpenMP:从上到下
OpenMP: Upper text to lower
我试着为大学做一个任务。在这里,我们需要从std::cin中获取大文本,并将带有'tolower()'的每个字符转换为小写字符,并将其放入std::cout中。
这应该是并行的和可扩展的,首先我想把文本分成几行,并给每一行一个新的线程,但这项任务应该专门用openMP来完成。应该只使用一定数量的线程,因为我的机器可以并行运行,对吧?
所以有这个openMP 'for'范例:
#pragma omp parallel for
这是一个好主意,迭代每一个字符在for循环?还是有更好的办法?
谢谢你的建议!
无论如何都要遍历每个字符。然而,当谈到OpenMP时,它已经根据您的机器和迭代的块策略选择了许多线程;两者都是可调的,但您可能不需要这样做。在这种情况下,主要的限制实际上是你被指示使用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模板来做这件事。
相关文章:
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 在不损失精度的情况下将double从C++传输到python
- 需要从存档中读取一行文本.txt直到找到"hhh",然后转到下一行
- C++ - 如何从上到下制作 4x4 矩阵和 cout 列(需要解密字符串)
- 如何从上到下翻转 2D 数组?
- Visual C 32位整数从文件到8位字符到文件 - 程序在某些整数上崩溃
- 如何使O(n)的函数检查字母(上和下)和()+-*/到尾递归?
- std::vector 从一行代码清空到下一行代码
- 将字符串[]从C#发送到SafeArrayAccessData()上的C++ Dll 'E_UNEXPECTEDCatastrophic Error'
- 错误:在 DLSYSM 的情况下,从“void*”到“void (*)()”的转换无效
- strcat 3 char从char []到char *在Windows上工作,但在Cygwin中给出了细分故障
- 当孩子存储在基本指针的向量上时,如何从基础到儿童班级动态
- 如何在网格上找到从A到B的最短路径
- C++将字符串字符从下到高,从上到低
- 创建滚动背景(从上到下滚动)
- 从上到下横向打印BST
- 使用方向枚举列表时反转方向(从左到右或从上到下)
- OpenMP:从上到下
- OpenGL ES纹理起源在不同的手机上从上/左到下/左是不同的
- 从上到下,反之亦然,在c++中没有循环