我无法理解特斯拉C1060上令人尴尬的并行计算的缩放性能.使用所有块和每个块的多个线程运行它,我得到的运行时间约为0.87秒.
但是,如果我只在一个块中运行所有迭代,每个块有一个线程,则运行时间最长为1872秒,这远远超过240x0.87s = 209s,我只希望缩小到只使用其中一个240个流媒体处理器.
相反,通过使用所有240核心,我似乎加速超过2000倍.这种超线性加速怎么可能; 在我对这个系统的性能建模中,我应该注意哪些其他因素?
我怎么能只调用它的函数看到的函数?
定义我想要隐藏的函数,因为私有函数是不够的,因为它仍然可以被类中的其他公共函数看到.
现在我使用lambda表达式来定义函数内部的匿名函数.有没有更好的解决方案?
从这里了解到,功能的定义enumFromThenTo是
enumFromThenTo :: a -> a -> a -> [a]
enumFromThenTo x1 x2 y = map toEnum [fromEnum x1, fromEnum x2 .. fromEnum y]
Run Code Online (Sandbox Code Playgroud)
但是,当我用下面的代码测试函数时:
import GHC.Enum
myEnumFromThenTo :: Enum a => a->a->a->[a]
myEnumFromThenTo x1 x2 y = map toEnum [fromEnum x1, fromEnum x2 .. fromEnum y]
xs1 :: [Float]
xs1 = myEnumFromThenTo 1 3 10
xs2 :: [Float]
xs2 = enumFromThenTo 1 3 10
-- -- | Used in Haskell's translation of @[n,n'..m]@.
-- enumFromThenTo …Run Code Online (Sandbox Code Playgroud) 我正在写一些我认为显然是正确的代码,但似乎GHC并不这么认为:
class Convert a b where
convert :: a -> b
class (Convert a b, Convert b c) => F a b c where
f :: a -> c
f = f2 . f1
where f2 = convert :: b -> c
f1 = convert :: a -> b
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了这样的错误信息,所以我想知道GHC在尝试推断出合适的类型时遇到了什么困难,或者我是否必须提供GHC更多的类型信息?
Main.hs:53:18:
Could not deduce (Convert b2 c2) ac)
bound by the class declaration for ‘F’ at Main.hs:(50,1)-(54,34)
Possible fix:
add (Convert b2 c2) to the context of
an expression type …Run Code Online (Sandbox Code Playgroud)