gpt4 book ai didi

haskell - 并行矩阵乘法

转载 作者:行者123 更新时间:2023-12-04 15:36:21 25 4
gpt4 key购买 nike

我使用 par 编写了一个简单的并行矩阵乘法和 pseq .

运行此程序后,没有任何 Spark 转换(SPARKS:20(0 转换,0 修剪))。

我想听听您对改进这个程序的评论。

还有关于在 Haskell 中学习并行编程的方法。

import Data.List
import Control.Parallel

parHelp :: ( Num a ) => [ a ] -> [ a ] -> a
parHelp [] [] = 0
parHelp ( x : xs ) ( y : ys ) = ret where
ret = par a ( pseq b ( a + b ) ) where
a = x * y
b = parHelp xs ys

helpMult :: ( Num a ) => [ a ] -> [ [ a ] ] -> [ a ]
helpMult _ [] = []
helpMult x ( y : ys ) = ret where
ret = par a ( pseq b ( a : b ) ) where
a = sum . zipWith ( *) x $ y
b = helpMult x ys

mult :: ( Num a ) => [ [ a ] ] -> [ [ a ] ] -> [ [ a ] ]
mult [] _ = []
mult ( x : xs ) ys = ret where
ret = par a ( pseq b ( a : b ) ) where
a = helpMult x ys
b = mult xs ys

main = print $ mult [[1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4] ] ( transpose [[1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4 ] , [ 1 .. 4] ])

最佳答案

您是否尝试过非常大(至少 1000 x 1000)的矩阵?计算可能太短而无法并行化。

关于haskell - 并行矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8480087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com