我正在尝试将用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位,但是我希望能有效地做到这一点.希望有人可以提供帮助或提供参考.
非常感谢,
干杯!
我最近一直在使用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版本?在此先感谢您的帮助!
我正在努力将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) 我正在尝试在运行时(我必须这样做)连接函数,这可能涉及函数的输入和输出中的类型类约束.
在像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) GHCi> compare 2 3
LT
GHCi> compare 3 3
EQ
GHCi> compare 4 3
GT
Run Code Online (Sandbox Code Playgroud)
我认为情商意味着平等,但LT和GT是什么意思?
我有一个由数字和非数字列组成的数据框.
我想提取(子集)非数字列,所以字符为1.虽然我能够使用字符串对数字列进行子集化sub_num = x[sapply(x, is.numeric)],但我无法使用is.character表单执行相反的操作.谁能帮我?
我想将一个参数传递给一个名为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,undefined和1.
方法1:显然,我不希望在传递之后更改参数(当然在简单整数的情况下).
方法2:如果只有Internet Explorer支持它,这将是完美的.
方法3:这似乎是唯一的选择.但它看起来并不像其他人那么漂亮,传递的东西要被评估而不是功能.
有没有更好的办法?
我想要争夺一个字符串,使其不可读,所以想出了这个方法:
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)更好的方法.
我想解析一个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) 经过一段令人沮丧的研究后,我正在写这篇文章,我希望这里有人能够启发我这个话题.
我想在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诠释,这似乎是不可能转变成根据这个.
haskell ×6
shuffle ×2
aeson ×1
closures ×1
dataframe ×1
hugs ×1
install ×1
intrinsics ×1
java ×1
javascript ×1
json ×1
macos ×1
neon ×1
quickcheck ×1
r ×1
random ×1
scope ×1
settimeout ×1
sse ×1
typeclass ×1