【发布时间】:2013-01-25 12:21:59
【问题描述】:
我正在寻找有关 Win32 上 C/C++ 的一些多线程资源的快速指针。我有兴趣比较使用单线程和多线程的数值计算的相对性能。这些问题不必是现实世界的,但它们不应该如此微不足道,以至于相对性能无关紧要。我的第一次尝试是实现 Eratosthenes 的单线程 Sieve 和 Atkin 的 Sieve,假设两者都有相对简单的多线程示例,但我找不到任何一个。 我不想成为多线程专家,但接受这需要一些努力,我已经为大约 30 小时的编程时间做了预算。我有 Russinovich 和 Solomon 的 Windows Internals 以及 Richter 和 Nasarre 通过 C/C++ 编写的 Windows 的副本,我很乐意购买其他书籍,但如果有免费资源,我更喜欢它们。
我想避免使用任何外部库,例如Boost 以使示例尽可能干净,以避免任何依赖问题。我不想去 CLR 附近的任何地方
上下文是我为 Excel 编写 dlls/xlls,因为 Excel 12 微软声称这些函数可以是多线程的,我想研究它是如何工作的。
我已经离开 Stack Exchange 一两年了,所以请保持温和。我对我发现的大部分内容都进行了一些探索,重点是理论而不是实现
【问题讨论】:
-
Eratosphenes 并行化很简单。您可能遇到的唯一问题是数据内存缓存,它与线程本身并不完全相关。所有与线程相关的 API 都在 MSDN 上进行了描述,并附有示例。
-
您使用的是 C++11 吗?如果是,您真的不需要外部库,因为线程直接集成在语言中。
-
感谢您的及时回复,看看 Eratosthenes 的筛子,瘫痪外环似乎没有什么好处,但内环可以分成奇偶对,但这需要锁定真/假数组,它可能支配使用 2 个线程的任何性能增益。考虑尝试多线程筛子的答案将是一项富有成效的编程练习,即使它不直接适用于我要解决的问题。另外我忘记了一条重要信息,我在 XP 5.1 服务包 3 上使用 Visual C++ 10
-
@phineas 您是在寻找有关多线程实现的知识,还是在寻找可以“并行化”的算法?
-
我知道您并不想使用外部库,但您可能还是想查看 OpenMP。您可能只需将
#pragma omp parallel for添加到您的代码中即可。
标签: c++ c windows multithreading numerical-methods