我一直在尝试并行化我的 Haskell 代码,但它变得越来越慢,所以我制作了一些示例代码来显示我的问题,这里是串行代码:
module Main where
import System.Environment
sumRangeSquares :: (Num a, Enum a) => a -> a -> a
sumRangeSquares start end = sum $ map (^2) [start .. end]
main :: IO ()
main = do
[start, end] <- map read <$> getArgs
print $ sumRangeSquares start end
Run Code Online (Sandbox Code Playgroud)
编译并stack ghc -- -O2 -rtsopts -eventlog -threaded src/Main.hs运行 time ./src/Main 1 10000000,大约 0.4 秒完成
现在明显的并行对应物是:
module Main where
import Control.Parallel.Strategies
import System.Environment
sumRangeSquares :: (Num a, Enum …Run Code Online (Sandbox Code Playgroud) 所以我在 C++ 中有一个函数,如下所示:
void print_vec(std::vector<int> v) {
for (int i: v) {
std::cout << i << ' ';
}
std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
哪个有效,但仅适用于 int 向量。我想要类似的东西
void print_iter(Iterable<CanDoCout> iterable) {
for (auto i: iterable) {
std::cout << i << ' ';
}
std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我如何实施print_iter?或者我怎样才能找出如何实现这样的通用函数?