Q
多线程操作符
1
A
回答
1
我不不了解IDL,但是如果你有更高级别的类型,这当然是可能的。例如,你可以方便地并行数组操作。据推测,这就是“4200000点”所指的,尽管有人决定让这些图表真的难以阅读。
为了进行比较,在C(可能OpenMP并行化的),你可能有类似:
#pragma omp parallel for
for (int i=0; i<sizeof(B)/sizeof(B[0]); i++) {
B[i]-=A[i];
}
在更高层次的语言,如NumPy的,Matlab或C++,它可能只是B=B-A
。所有这一切说,B=A-A
听起来像B=0
混淆我。
您以最喜欢的语言请求并行操作符?这里有一点Haskell:
import Control.Parallel
pmap _ [] = []
pmap f (x:xs) =
let rest=pmap f xs
in rest `par` (f x):rest
parOp op a b = pmap (uncurry op) (zip a b)
parAdd = parOp (+)
main = do
putStrLn$show ([0..300] `parAdd` [500..800])
是的,它仍然是一个循环。大量的操作(不是操作符)是这种并行性的关键。
0
的矩阵,阵列等基本操作可以并行化 - 向上滚动到第41页,你会发现:
对于系统比较图,结果被报道的420万个元素数组。
编辑:假设你有一个数组A = [1, 2, 3, 4, 5, 6]
。
计算B = A - A = [0, 0, 0, 0, 0, 0]
涉及6个减法操作(1-1
,2-2
等)。
- 使用单个CPU,无论线程数量多少,减法必须串联执行。
- 有多个CPU但只有一个线程,减法也是按照一系列的顺序执行 - 这就是线程的定义。
- 多个CPU,多个线程 - 减法可以在线程/ CPU之间分配,因此可以同时发生(最多可用CPU数量)。
1
我认为重要的是还要考虑到并非所有的操作都是相同的。例如,如果您使用某种类型的bignum库,则可能能够将大量数据分成较小的部分,完成不同数量的整数(并行),然后结转。无论如何,它不会成为整数的单周期添加。乘法涉及几个步骤,并划分,很多步骤。
在给出的例子中,浮点数(浮点数意味着a non-trivial adding process)具有“420万个数据点”:我怀疑它们将这些数据存储在一个小的32位寄存器中。 添加的“简单”操作突然变成了一个巨大的迭代过程......或者如果他们能够并行执行,速度可能会快很多。
虽然使用小整数的简单操作可能不值得通过,但值得注意的是B=A+A
尽管看起来很简单,但实际上可能会导致很多计算。 1行代码不一定意味着1次操作。
相关问题
- 1. Eigen多线程操作
- 2. 多线程搜索操作
- 3. Tiff操作多线程C#
- 4. 多线程 - 添加更多的线程,并继续操作
- 5. JSP中的多线程操作
- 6. iPhone的多线程操作通讯录
- 7. 多线程连接(Long millis)操作
- 8. iOS FMDB多线程操作失败
- 9. 多线程中的无效操作
- 10. 有限的多线程操作
- 11. 嵌套多线程操作跟踪
- 12. SerialPorts和多线程 - 跨线程操作无效
- 13. 多线程队列操作不比单线程速度更快
- 14. 线/字符串操作
- 15. 网络操作的多进程与多线程
- 16. 从另一个线程操作线程
- 17. C#中的线程操作
- 18. 跨线程操作控制
- 19. 跨线程操作无效
- 20. 跨线程操作无效:
- 21. iOS线程等待操作
- 22. 跨线程操作无效
- 23. 跨线程操作无效
- 24. 跨线程操作无效
- 25. 跨线程操作无效
- 26. 多处理器和多线程 - 操作系统
- 27. 多个操作符[]重载
- 28. 多处理池工作线程中的线程标识符
- 29. 在多线程应用程序中按位操作较慢吗?
- 30. 线程加互操作程序
这不是一个平行的循环,而不是所谓的多线程操作符? – Skeptic 2010-11-14 15:06:51
没错。这也在本文中提到:**对于系统 比较图,结果报告为420万个元素的数组。**关于上述评论:您可以始终提供运算符的多线程重载。 – 2010-11-14 15:08:51
运算符的多线程重载? Hrm ...即使你指的是对非整型类型的操作符,也似乎不可能创建一个多线程操作符。请用你最喜欢的语言举个例子。 – Skeptic 2010-11-14 15:19:03