小编ehi*_*ird的帖子

转换SSE和NEON内在函数 - 改组

我正在尝试将用SSE3内在函数编写的代码转换为NEON SIMD,因为有一个shuffle函数而被卡住了.我看过GCC Intrinsic s,ARM手册和其他论坛,但一直无法找到解决方案.

码:

_m128i upper = _mm_loadu_si128((__m128i*)p1);

register __m128i mask1 = _mm_set_epi8 (0x80,0x80,0x80,0x80,0x80,0x80,0x80,12,0x80,10,0x80,7,0x80,4,0x80,1);
register __m128i mask2 = _mm_set_epi8 (0x80,0x80,0x80,0x80,0x80,0x80,12,0x80,10,0x80,7,0x80,4,0x80,1,0x80);
__m128i temp1_upper = _mm_or_si128(_mm_shuffle_epi8(upper,mask1),_mm_shuffle_epi8(upper,mask2));
Run Code Online (Sandbox Code Playgroud)

虽然vtbl1_u8(uint8x8_t,uint8x8_t)指令创建了一个查找表,可用于为目标寄存器赋值,但它只能在64位寄存器上运行.而且随机操作在启动时执行比较,必须在NEON和我不知道如何有效地做到这一点.

r0 =(mask0&0x80)?0:SELECT(a,mask0&0x0f)// SELECT(a,n)从a中提取第n个8位参数.

r1 =(mask1和0x80)?0:SELECT(a,mask1和0x0f)

...

我找不到首先检查掩码的高位然后有效地选择掩码的低4位的指令.我知道我们可以比较寄存器中的每个位,然后在指定条件时选择低4位,但是我希望能有效地做到这一点.希望有人可以提供帮助或提供参考.

非常感谢,

干杯!

sse shuffle intrinsics neon

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

如何在以前的安装中安装Haskell平台?

我最近一直在使用Haskell,几天前使用MacPorts安装了gtk2hs(一个用于Haskell的gtk库).出于某种原因,MacPorts认为适合安装GHC 6.10而不是之前的GHC 6.12安装,但我并不在意.

现在我发现自己希望改进最新的Haskell平台的并行性支持,所以我今天安装了它,并且安装成功 - 除了当我在终端输入"ghc -v"时,我被告知我还​​有GHC 6.10.

我尝试过使用uninstall-hs,它告诉我我的系统上有三个Haskell:版本6.12,6.12.3和7.04.我不确定6.12.3是如何出现的,以及6.10发生了什么?最重要的是,如何开始运行7.04版本?在此先感谢您的帮助!

macos install haskell

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

使用Hugs在Haskell中使用"ERROR - C stack overflow"

我正在努力将CSV文件解析为CSV类型,这是一个Record列表,它是Field的列表,它只是字符串.插入新行然后尝试访问csv后,我得到c堆栈溢出错误.我读过这个错误可能来自太大的"thunk"使用尾递归,但我不认为那是我做错了什么?

type CSV = [Record]
type Record = [Field]
type Field = String

run :: IO()
run =
 do
  inFile <- readFile "myFile.csv"
  let csv = parse inFile
  let csv = (insertRow "abc,def,ghi" csv)
  putStr (show csv)

insertRow :: String -> CSV -> CSV
insertRow newRow csv = csv ++ [toRecord newRow]

parse :: String -> CSV
parse file = map toRecord (parseLines file "" [])

toRecord :: String -> Record
toRecord line = parseWords line "" []

-- parseLine …
Run Code Online (Sandbox Code Playgroud)

stack-overflow haskell hugs

6
推荐指数
2
解决办法
532
查看次数

键入类和记录作为接口

我正在尝试在运行时(我必须这样做)连接函数,这可能涉及函数的输入和输出中的类型类约束.

在像Java这样的语言中,这将是微不足道的.f1 :: Int -> Num,f2 :: Num -> Num我们现在可以打电话了f2 . f1.如果Num是一个Java风格的界面,那将没有问题.但类型类的行为不像接口.

类型类允许您做的一件事是避免在数据类型之间进行转换.我们可以来回转换并摆脱类型类.但令人担忧的是,我们无缘无故地创造了所有物品.我们试着避免这种情况.

我开始尝试创建一个(a,Api a)的元组,其中Api是一个将在a上运行的函数的记录.我的猜测可能与类型类的工作方式非常相似?但是你遇到了混凝土类型问题,我认为存在.但后来我意识到(a,Api a)应该能够完全隐藏a,因为没有人关心,然后Api变成了数据类型的简单记录,而不是函数.

所以我想知道......是否解决了这种懒惰?

module Main where

--data Api a = Api { f1 :: a -> Int, f2 :: a -> String }
data Api = Api { f1 :: Int, f2 :: String }

data MyData = MyData Int String

myf1 (MyData x y) = x
myf2 (MyData x y) = y
myApi x = Api (myf1 x) (myf2 …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

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

LT和GT是什么意思?

GHCi> compare 2 3
LT
GHCi> compare 3 3
EQ
GHCi> compare 4 3
GT
Run Code Online (Sandbox Code Playgroud)

我认为情商意味着平等,但LT和GT是什么意思?

haskell

6
推荐指数
2
解决办法
6605
查看次数

来自字符和数字的数据框的子集字符列

我有一个由数字和非数字列组成的数据框.

我想提取(子集)非数字列,所以字符为1.虽然我能够使用字符串对数字列进行子集化sub_num = x[sapply(x, is.numeric)],但我无法使用is.character表单执行相反的操作.谁能帮我?

r dataframe

6
推荐指数
2
解决办法
1万
查看次数

如何将参数传递给使用setTimeout调用的函数?

我想将一个参数传递给一个名为using的函数setTimeout.我找到了这三个选项:

A = 1;
// Method 1: closure things
setTimeout(function() { whatsA(A); }, 100);
// Method 2: third argument (same result with [A])
setTimeout(whatsA, 100, A);
// Method 3: eval
setTimeout('whatsA(' + A + ')', 100);
A = 2;
function whatsA(X) { console.log(X); }
Run Code Online (Sandbox Code Playgroud)

这在Internet Explorer 9中显示2,undefined1.

方法1:显然,我不希望在传递之后更改参数(当然在简单整数的情况下).

方法2:如果只有Internet Explorer支持它,这将是完美的.

方法3:这似乎是唯一的选择.但它看起来并不像其他人那么漂亮,传递的东西要被评估而不是功能.

有没有更好的办法?

javascript closures scope settimeout

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

使用Java争夺一个词

我想要争夺一个字符串,使其不可读,所以想出了这个方法:

public String scrambleWord(String start_word){

     char[] wordarray = start_word.toCharArray();

        char[] dummywordarray = start_word.toCharArray();

        Random random = new Random();

        int r = random.nextInt(wordarray.length-1);
        int i = 0;

        int j = r+1;

        while(i <= r){

            dummywordarray[wordarray.length -i-1] = wordarray[i];

            i++;
        }


        while (j <= wordarray.length -1){

            dummywordarray[j-r-1] = wordarray[j];

            j++;

        }

        String newword = String.valueOf(dummywa);



        return newword;
Run Code Online (Sandbox Code Playgroud)

所以我首先将字符串转换为char数组,在我的方法中,我不得不复制char数组"dummywordarray".通过这个算法,每个字母都会改变位置.但它不会被很好地打乱,因为你可以一眼就把它重新组合在一起.因此我通过该方法传递了一个少于9个字符的给定字符串7次,并且这些单词被很好地加扰,即不可读.但我尝试了30个字符的字符串,它花了500遍,然后才能保证它很好地加扰了.500!我确信有一个更好的算法,我想要一些建议:a)改进这种方法或b)更好的方法.

java shuffle

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

使用Aeson解析嵌套的对象数组

我想解析一个JSON对象并使用给定的name和创建一个JSONEventargs

我正在使用Aeson,现在我不得不转换"args":[{"a": "b"}]为a [(String, String)].

提前致谢!

{-# LANGUAGE OverloadedStrings #-}

import Control.Applicative
import Data.Aeson

data JSONEvent = JSONEvent [(String, String)] (Maybe String) deriving Show

instance FromJSON JSONEvent where
  parseJSON j = do
    o <- parseJSON j
    name <- o .:? "name"
    args <- o .:? "args" .!= []
    return $ JSONEvent args name

let decodedEvent = decode "{\"name\":\"edwald\",\"args\":[{\"a\": \"b\"}]}" :: Maybe JSONEvent
Run Code Online (Sandbox Code Playgroud)

json haskell aeson

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

SIMPLE随机数生成

经过一段令人沮丧的研究后,我正在写这篇文章,我希望这里有人能够启发我这个话题.

我想在haskell函数中生成一个简单的随机数,但是,如果没有各种非平凡的元素,例如Monads,"do"中的asignation,创建生成器等,这似乎是不可能的.

理想情况下,我正在寻找相当于C的"rand()".但经过多次搜索,我很确信没有这样的东西,因为语言是如何设计的.(如果有,请有人赐教).由于这似乎不可行,我想找到一种方法来获取我的特定问题的随机数,以及关于如何获得随机数的一般解释.

prefixGenerator :: (Ord a, Arbitrary a) => Gen ([a],[a])
prefixGenerator = frequency [ 
    (1, return ([],[])),
    (2, do {
            xs1 <- orderedListEj13 ;
            xs2 <- orderedListEj13 ;
            return (xs1,xs2)
       }),
    (2, do {                
            xs2 <- orderedListEj13 ;
            return ((take RANDOMNUMBERHERE xs2),xs2)
       })
    ]
Run Code Online (Sandbox Code Playgroud)

我正试图掌握QuickCheck,但我无法使用随机数字使其变得困难.我试过像这样(通过把一个drawInt 0(长度XS2)替代RANDOMNUMBERHERE),但我卡住与采取需要诠释的事实和方法给我留下了一个IO诠释,这似乎是不可能转变成根据这个.

random haskell quickcheck

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