小编jap*_*jap的帖子

Haskell中的INLINE_FUSED编译指示

我正在浏览矢量库并发现了一个{-# INLINE_FUSED transform #-},我想知道它是做什么的?我看到它定义在vector.h其他地方.

optimization haskell inline vector vectorization

13
推荐指数
1
解决办法
309
查看次数

在Haskell中将10 GB向量保存到磁盘的最佳方法

我有一个10GB Data.Vector.Unboxed向量,我想有效地保存到磁盘.什么是最好,最有效的方式?我打算从内存映射文件中读取它.

我已经看过这个包这个包但只适用于Storable,但我需要保持unboxed.

我在考虑转换到列表,但我认为这不是很理想.

haskell

12
推荐指数
2
解决办法
368
查看次数

这是GHC的错误吗?

我有以下程序,它不会编译; 它只是被困在Compiling Main.我不知道为什么它会冻结,因为它是一个错误或我错过了什么?

import qualified Data.Vector.Unboxed as V

test :: [Int]
test = V.foldl' unique [] k
 where 
    n = 10000000
    k = V.generate n (\i -> i `div` 1000 * 1000)
    unique [] k = [k]
    unique acc@(ck:_) k
        | k == ck = acc
        | otherwise = k:acc     

main :: IO ()
main = print $ head test
Run Code Online (Sandbox Code Playgroud)

ghc --make -O3 -Odph -fllvm test.hs

haskell ghc

7
推荐指数
1
解决办法
248
查看次数

在Haskell中更快地进行直方图计算

我是Haskell的新手,我想创建一个直方图.我正在使用Data.Vector.Unboxed融合数据操作; 这是快速的(当使用-O -fllvm编译时)和瓶颈是我的折叠应用程序; 汇总了桶数.

我怎样才能让它更快?我读过关于通过保持严格要求来减少thunk的数量,所以我通过使用seq和foldr来严格限制,但没有看到太多的性能提升.强烈鼓励您的想法.

import qualified Data.Vector.Unboxed as V

histogram :: [(Int,Int)]
histogram = V.foldr' agg [] $ V.zip k v
 where 
    n = 10000000
    c = 1000000
    k = V.generate n (\i -> i `div` c * c)
    v = V.generate n (\i -> 1)
    agg kv [] = [kv]
    agg kv@(k,v) acc@((ck,cv):as)
        | k == ck = let a = (ck,cv+v):as in a `seq` a
        | otherwise = let a = kv:acc in a `seq` a

main …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

7
推荐指数
1
解决办法
350
查看次数

散列表插入中的Haskell空间泄漏

我一直在编写直方图,我在这里得到了很多帮助.我一直使用哈希表对直方图进行编码,以存储密钥和频率值,因为密钥的分布是未知的; 所以它们可能不会被分类或连续组合在一起.

我的代码的问题在于它在GC中花费了太多时间,因此在GC中花费的时间看起来像空间泄漏60.3% - 所以我的生产率差39.7%.

出了什么问题?我试图在直方图函数中对事物进行严格处理,并且我也在内联它(GC时间从69.1%变为59.4%.)

请注意我通过不更新HT中的频率来简化此代码.

{-# LANGUAGE BangPatterns #-}
import qualified Data.HashTable.IO as H
import qualified Data.Vector as V

type HashTable k v = H.BasicHashTable k v

n :: Int 
n = 5000000

kv :: V.Vector (Int,Int)
kv = V.zip k v 
 where
    k = V.generate n (\i -> i `mod` 10)
    v = V.generate n (\i -> 1)

histogram :: V.Vector (Int,Int) -> Int -> IO (H.CuckooHashTable Int Int)
histogram vec !n = do
    ht <- H.newSized …
Run Code Online (Sandbox Code Playgroud)

haskell memory-leaks

5
推荐指数
1
解决办法
217
查看次数

在Haskell中通过网络发送10GB向量的最佳方法

我很想知道在Haskell中通过网络发送10 GB的最佳方法是什么?我不想将其作为二进制发送而无需编写解码/编码器.保持严格或懒惰是最好的吗?

haskell

3
推荐指数
1
解决办法
202
查看次数

填充vector <int>*

我正在学习C++,我遇到了这个函数的问题.我最初传递了整个向量,然后传递了一个指向向量的指针; 但我似乎无法从指向矢量的指针赋值.

void fill(std::vector<int> *vec, const int startVal)
{
    const int n = vec->size();
    for (int i = 0; i < n; ++i)
    {
        vec[i] = startVal + i
    }
}
Run Code Online (Sandbox Code Playgroud)

如何在指针(vec)的第i个位置为向量分配值?

我试过了:

vec->[i] = startVal + i;
Run Code Online (Sandbox Code Playgroud)

c++ vector stdvector

1
推荐指数
1
解决办法
693
查看次数