- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题的描述实际上与 this post 中的相同。 ,但是虽然我觉得可以理解对应的solution ,如果有的话,我看不出它如何适用于我的问题。
这是我的示例程序
{-# LANGUAGE BangPatterns #-}
import System.Random (randoms, mkStdGen)
import Control.Parallel.Strategies
import Control.DeepSeq (NFData)
import Data.List
data Point = Point !Double !Double
fmod :: Double -> Double -> Double
fmod a b | a < 0 = b - fmod (abs a) b
| otherwise = if a < b then a
else let q = a / b
in b * (q - fromIntegral (floor q :: Int))
standardMap :: Double -> Point -> Point
standardMap k (Point q p) =
Point (fmod (q + p) (2 * pi)) (fmod (p + k * sin(q)) (2 * pi))
iterate' gen !p = p : (iterate' gen $ gen p)
iterateN :: (Point -> Point) -> [Int] -> Point -> [Point]
iterateN _ [] p = [p]
iterateN gen (dn:dns) p =
p : (iterateN gen dns $ (head . drop dn) $ iterate' gen p)
ensemble :: [Point]
ensemble = zipWith Point qs ps
where qs = randoms (mkStdGen 42)
ps = randoms (mkStdGen 21)
main = let dns = take 100 $ repeat 10000
ens = take 1000 ensemble
obs = \(Point p q) -> p^2 - q^2
work = map obs . (iterateN (standardMap 7.0) dns)
ps = parMap rdeepseq work ens
in putStrLn $ show (foldl' (+) 0 $ map (foldl' (+) 0) ps)
Debian 3.2.46-1 x86_64}
与
GHC 7.4.1
我明白了
$ ghc -O3 --make stmap.hs -threaded
$ time ./stmap +RTS -N1
real 1m9.791s
user 1m9.448s
sys 0m0.208s
$ time ./stmap +RTS -N2
real 0m36.981s
user 1m13.113s
sys 0m0.656s
$ time ./stmap +RTS -N4
real 0m23.110s
user 1m31.310s
sys 0m0.792s
$ time ./stmap +RTS -N8
real 0m20.537s
user 2m21.921s
sys 0m21.017s
$ ./stmap +RTS -N8 -sstderr 1>/dev/null
112,032,905,392 bytes allocated in the heap
59,112,296 bytes copied during GC
971,520 bytes maximum residency (35 sample(s))
96,416 bytes maximum slop
8 MB total memory in use (1 MB lost due to fragmentation)
Tot time (elapsed) Avg pause Max pause
Gen 0 27032 colls, 27031 par 6.49s 0.81s 0.0000s 0.0015s
Gen 1 35 colls, 35 par 0.39s 0.05s 0.0014s 0.0028s
Parallel GC work balance: 4.05 (6799831 / 1680927, ideal 8)
MUT time (elapsed) GC time (elapsed)
Task 0 (worker) : 14.81s ( 14.84s) 0.96s ( 0.97s)
Task 1 (worker) : 0.00s ( 15.81s) 0.00s ( 0.00s)
Task 2 (bound) : 0.03s ( 15.80s) 0.01s ( 0.01s)
Task 3 (worker) : 14.72s ( 14.82s) 0.98s ( 0.99s)
Task 4 (worker) : 14.70s ( 14.84s) 0.96s ( 0.97s)
Task 5 (worker) : 14.69s ( 14.82s) 0.98s ( 0.99s)
Task 6 (worker) : 14.69s ( 14.82s) 0.98s ( 0.99s)
Task 7 (worker) : 14.72s ( 14.81s) 0.99s ( 1.00s)
Task 8 (worker) : 14.76s ( 14.83s) 0.97s ( 0.98s)
Task 9 (worker) : 14.76s ( 14.81s) 1.00s ( 1.00s)
SPARKS: 1000 (1000 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
INIT time 0.00s ( 0.00s elapsed)
MUT time 118.87s ( 14.95s elapsed)
GC time 6.87s ( 0.86s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 125.74s ( 15.81s elapsed)
Alloc rate 942,488,358 bytes per MUT second
Productivity 94.5% of total user, 751.8% of total elapsed
gc_alloc_block_sync: 1130880
whitehole_spin: 0
gen[0].sync: 0
gen[1].sync: 175
$ ./stmap +RTS -N8 -sstderr
60364.38698300099
112,033,885,088 bytes allocated in the heap
4,626,963,592 bytes copied during GC
2,101,264 bytes maximum residency (1846 sample(s))
652,528 bytes maximum slop
13 MB total memory in use (0 MB lost due to fragmentation)
Tot time (elapsed) Avg pause Max pause
Gen 0 25497 colls, 25496 par 29.42s 3.70s 0.0001s 0.0022s
Gen 1 1846 colls, 1846 par 17.97s 2.26s 0.0012s 0.0071s
Parallel GC work balance: 2.00 (577773617 / 288947149, ideal 8)
MUT time (elapsed) GC time (elapsed)
Task 0 (worker) : 14.86s ( 15.03s) 6.07s ( 6.10s)
Task 1 (worker) : 0.00s ( 21.13s) 0.00s ( 0.00s)
Task 2 (bound) : 0.03s ( 21.11s) 0.02s ( 0.02s)
Task 3 (worker) : 14.92s ( 14.99s) 6.06s ( 6.14s)
Task 4 (worker) : 14.88s ( 15.02s) 6.07s ( 6.11s)
Task 5 (worker) : 14.91s ( 15.02s) 6.09s ( 6.12s)
Task 6 (worker) : 14.92s ( 15.04s) 6.07s ( 6.10s)
Task 7 (worker) : 14.86s ( 15.03s) 6.03s ( 6.11s)
Task 8 (worker) : 14.86s ( 15.03s) 6.07s ( 6.10s)
Task 9 (worker) : 14.92s ( 15.00s) 6.11s ( 6.13s)
SPARKS: 1000 (1000 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled)
INIT time 0.00s ( 0.00s elapsed)
MUT time 120.36s ( 15.18s elapsed)
GC time 47.39s ( 5.96s elapsed)
EXIT time 0.00s ( 0.00s elapsed)
Total time 167.75s ( 21.13s elapsed)
Alloc rate 930,821,901 bytes per MUT second
Productivity 71.7% of total user, 569.5% of total elapsed
gc_alloc_block_sync: 1253157
whitehole_spin: 21
gen[0].sync: 4
gen[1].sync: 19789
最佳答案
变化可能是由于使用 +RTS -Nn
导致创建一个绑定(bind)线程和n
工作线程(参见输出),因此一个工作线程将与绑定(bind)线程共享一个物理内核并进行干扰。因此,建议使用低于可用物理内核总数的数字作为 +RTS -N
的参数。 .
另一个潜在的问题是负载平衡:如果存在负载不平衡,您可能需要以不同的方式拆分工作(threadscope 配置文件会有所帮助)。看看这个paper有关调整的更多详细信息。
关于multithreading - Haskell:次优的并行 GC 工作平衡,并行执行没有加速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18271752/
我正在尝试了解二叉树的属性。但我不确定一件事: 定义。二叉树的声明: 如果对于每个节点,它认为左子树中的内部节点数和右子树中的内部节点数最多相差 1,则二叉树是平衡的。 如果任意两个叶子的差异都存在,
我有一个带有分片键和索引的集合。但是当我运行平衡时,不会为这个集合移动 block ,因为其他集合 block 正在按预期移动到其他机器。此集合中仅移动了一个 block 。 最佳答案 目前(这将在不
给定一个data.table如下,id1是一个subject-level ID,id2是一个within-subject repeated-measure ID,X 是数据变量,其中有很多。我想平衡数
由于 C++ 集合是在二叉树中实现的,如果我们以递增或递减顺序插入项目,那么集合将更像是一个列表而不是树。有没有什么方法可以在插入项目后平衡树? 最佳答案 C++ 集(即 std::set)通常实现为
我是一名初学者程序员,设计了一个智能手机网站,我有一个主体背景图像,我想慢慢改变颜色平衡,交替颜色,就像有人将 Photoshop 颜色平衡控制条调整一定百分比一样。任一方向。当您查看页面时,这种情况
我开发了一段多线程代码。该代码在 Web 应用程序中调用,因此可能由多个线程(请求)并行调用。为了控制此代码将要创建的线程数量(通过多个并行请求调用),我使用静态共享 ThreadPoolExecut
我正在为 Linux 内核开发一些网络驱动程序。我有几个 if-else 条件,我正在重新分配或释放“skb”结构——这是我有点困惑的地方。关于我在那些 if-else 中做什么 - 我遇到了 2 种
平衡 BST 的最佳和最差搜索性能是什么?每种情况发生时如何用一句话解释? 最佳答案 最佳情况:当搜索到的元素位于树的根部时。你得到 O(1)。 最坏情况:当搜索元素在最长分支的叶子处时,树是单边的。
我在平衡 AVL 树问题上遇到了麻烦,因为我的解决方案似乎与教科书后面的解决方案冲突。我查看了 AVL 树的在线可视化,他们认为我的是正确的。我的课本错了吗? 这是树: 然后我必须将 65 插入到这个
我有一个系统,我在其中使用 RS232 来控制一个灯,该灯接受以浮点形式给出的表示电压(在 2.5 - 7.5 范围内)的输入。然后控件会给出 0 到 6000 范围内的输出,这是传感器拾取的亮度。
我有一个分层目录,每个目录中有很多文件,每个文本文件中有很多 URL 字符串。我想下载 Hadoop 中所有文件中的所有 URL,以实现更好的平衡。 例如,如果我有 1+5 个节点的 Hadoop 集
请查看附件图片,这是一种跷跷板。但从图像来看,黑体具有相同的密度。并且水平矩形使用“Revolute”关节与三角形相连。但仍然没有任何建议。在目前的情况下,它需要平衡。 最佳答案 由于浮点精度等限制导
因此,在平衡 KD 树时,您应该找到中位数,然后将所有较小的元素放在左子树上,将较大的元素放在右子树上。但是,如果您有多个元素与中位数具有相同的值,会发生什么情况?他们进入左子树,右子树还是丢弃它们?
请帮我找到一种干净的方法来从现有数组中创建一个新数组。如果任何类的示例数小于该类中的最大示例数,则应该进行过采样。样本应该从原始数组中提取(随机或顺序都没有区别) 比方说,初始数组是这样的: [ 2
我是一名软件开发人员,但想成为服务器可扩展性领域的新架构师。 在多个服务使用同一数据集的情况下,旨在扩展冗余和负载平衡。 问题是:在一个理想主义的系统中,服务是否应该尝试优化它们的内部处理以减少对远程
假设我有 10 个分区用于 Kafka 中的给定主题。 我的选择是在消费者之间自动平衡这 10 个分区的负载? 我已经阅读了这篇文章 https://stackoverflow.com/a/28580
假设我有一个 B 树,其节点为 3-4 配置(3 个元素和 4 个指针)。假设我按照规则合法地建立我的树,我是否有可能达到一层中有两个节点并且一个节点有 4 个退出指针而另一个节点只有两个退出指针的情
当光标在一个括号上时,如何跳转到配对括号。很高兴在 工作emacs -nw . 就像 % 在 Vim 中。 ;;从@Lindy、@Francesco 得到提示后,我发现了更多: C-M-f
我在平衡 AVL 树时遇到问题。我一直在寻找如何平衡它们的步骤,但我找不到任何有用的东西。 我知道有4种: 单左旋 单右旋 双左右旋转 双左右旋转 但我就是无法得到如何选择其中之一和 在哪个节点上应用
我想获得类似于打印中平衡文本行但用于 block 元素的结果。假设在一个 300/100 像素的容器中有一组 50/50 像素的盒子。在容器中 float 盒子将使它们填满一“行”,然后像这样包裹到下
我是一名优秀的程序员,十分优秀!