May*_*ank 13 c++ programming-languages freebsd
对于使用四核处理器的所有内核,我需要在代码中进行更改,即添加对多线程的支持,还是由操作系统自身处理.我有FreeBSD,我使用的语言是C++.我想给我的应用程序提供至少90%的完整CPU周期.
sbi*_*sbi 21
你需要某种形式的并行性.多线程或多处理都可以.
通常情况下,多线程是容易不是多个处理(因为他们可以访问共享数据)的过程.然而,通常情况下,多线程是更难不是多个处理(因为他们访问共享数据)的过程.而且,是的,我刻意写了这个.
如果您有SIMD场景,Ninefingers建议查看OpenMP也非常好.(如果您不知道SIMD的含义,请参阅下面的Ninefingers的有用评论.)
whe*_*ies 11
对于C++中的多线程应用程序,我建议使用Boost.Thread来帮助您充分发挥四核机器的潜力.
至于更改代码,您可能希望考虑使事物尽可能不可变.调试线程之间的状态转换要困难得多.有许多事情可能会以意想不到的方式发生.看到这个 SO线程.
小智 10
这里没有提到的另一个选项,除了线程之外,是通过-fopenmp和libgomp库提供的OpenMP的使用,我在FreeBSD 8系统上安装了这两个选项.
这些为您#pragma提供了并行化某些循环的指令,而语句等,即您可以并行化的位.它负责您的线程和cpu关联.请注意,它是一种通用解决方案,因此可能不是并行化的最佳方式,但它允许您并行化某些例程.
看看这个:https://computing.llnl.gov/tutorials/openMP/
至于使用线程/进程本身,某些例程和工作方式适合它.你能以这种方式解决问题吗?fork()你的进程或创建一个线程是否有意义?如果是这样,那么这样做,但如果没有,请不要试图强制您的应用程序是多线程的,因为.我通常给出的一个例子是最常见的除数算法 - 它依赖于传统实现中的所有时间之前的步骤,因此难以并行.
另请注意,众所周知,对于某些算法,并行化对于并行执行的任何操作的小值实际上都较慢,因为尽管作业完成得更快,但实际上分叉和连接(即线程或进程)的相关时间成本将时间推到串行实现的时间之上.
| 归档时间: |
|
| 查看次数: |
16023 次 |
| 最近记录: |