标签: vectorization

为什么 Java 矢量 API 与标量相比如此慢?

我最近决定尝试一下 Java 的新孵化矢量 API,看看它能达到多快。我实现了两种相当简单的方法,一种用于解析 int,另一种用于查找字符串中字符的索引。在这两种情况下,与标量方法相比,我的矢量化方法都慢得令人难以置信。

这是我的代码:

public class SIMDParse {

private static IntVector mul = IntVector.fromArray(
        IntVector.SPECIES_512,
        new int[] {0, 0, 0, 0, 0, 0, 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10, 1},
        0
);
private static byte zeroChar = (byte) '0';
private static int width = IntVector.SPECIES_512.length();
private static byte[] filler;

static {
    filler = new byte[16];
    for (int i = 0; i < 16; i++) {
        filler[i] = zeroChar;
    }
}

public static int parseInt(String str) …
Run Code Online (Sandbox Code Playgroud)

java simd vectorization

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

用于计算不同点处向量分割的方差的向量化

我有一个一维数组arr,我需要计算从位置 0 开始的所有可能的连续子向量的方差。使用 for 循环可能更容易理解:

np.random.seed(1)
arr = np.random.normal(size=100)

res = []   
for i in range(1, arr.size+1):
    subvector = arr[:i]
    var = np.var(subvector)
    res.append(var)
Run Code Online (Sandbox Code Playgroud)

有没有办法res不用for循环来计算?

python numpy vectorization

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

沿指定轴的两个 numpy 数组的外部总和

我有两个numpy.array对象xy其中x.shapeis(P, K)y.shapeis (T, K)。我想对这两个对象进行外部求和,以使结果具有 shape (P, T, K)。我知道np.add.outernp.einsum功能,但我无法让它们执行我想要的操作。

下面给出了预期的结果。

  x_plus_y = np.zeros((P, T, K))
  for k in range(K):
    x_plus_y[:, :, k] = np.add.outer(x[:, k], y[:, k])
Run Code Online (Sandbox Code Playgroud)

但我必须想象有一种更快的方法!

python numpy vectorization

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

将 avx 变量传递给 std::function 时引发 bad_function_call 和分段错误

这个问题是在编写一些与计算机图形学相关的代码时发现的,简化版的代码如下所示:

\n
#include <bits/stdc++.h>\n\n#define __AVX__ 1\n#define __AVX2__ 1\n#pragma GCC target("avx,avx2,popcnt,tune=native")\n#include <immintrin.h>\n\nnamespace with_avx {\nclass vec {\n   public:\n    vec(double x = 0, double y = 0, double z = 0, double t = 0) {\n        vec_data = _mm256_set_pd(t, z, y, x);\n    }\n    __m256d vec_data;\n};\n}  // namespace with_avx\n\nnamespace without_avx {\nclass vec {\n   public:\n    vec(double x = 0, double y = 0, double z = 0, double t = 0) {\n        vec_data[0] = x, vec_data[1] = y, vec_data[2] = z, vec_data[3] = t;\n    }\n …
Run Code Online (Sandbox Code Playgroud)

c++ debugging g++ vectorization avx

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

R:使用 all() 保持函数向量化

我有一个fun检查多个条件的函数a, b。如果满足所有条件,该函数应返回TRUE,否则应返回FALSE

a = 1
b = 0

fun <- function(a, b){
  all(a < 1,
      b < 1,
      na.rm = TRUE)
}

fun(a, b)
Run Code Online (Sandbox Code Playgroud)

这个函数就可以解决这个问题。但是,如果我现在使用向量,all()当然不会保留向量形式,而是返回单个TRUEFALSE

我想要一个与以下功能相同的功能:

a = 1:2
b = 0:1

funV <- function(a, b){
  a < 1 & b < 1
}

funV(a, b)
Run Code Online (Sandbox Code Playgroud)

但没有链接&,它也应该适用于缺失值。

r vectorization

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

postgres如何处理位数据类型?

我有一个类型为bit(2000)的列向量的表.db引擎如何处理此值的操作ANDOR?它是否只是分成32位块(或分别为64位),然后分别比较每个块,最后简单地将结果连接在一起?还是只处理两个字符串?

我的观点是预测,哪个用例会更快.我得到了一个键值数据(用户项).

userID | itemID
U1     | I1
U1     | Ix
Un     | Ij
Run Code Online (Sandbox Code Playgroud)

对于每个用户,我想计算n个最近邻居的列表(例如,使用jaccard索引).

select my_jaccard(select itemID from table where userID=U1,select itemID from table where userID=U2)
Run Code Online (Sandbox Code Playgroud)

我的解决方案 - 我将输入数据解析为用户向量表,其中向量的类型为bit(2000),在表示特定项目的位置上有1.

userID | vector
U1     | 00.......01
U1     | 0..1.....00
Un     | 00..1..1..0
Run Code Online (Sandbox Code Playgroud)

我只是在这张桌子上

select vector1&vector2
Run Code Online (Sandbox Code Playgroud)

关键是每个用户最多只有10条记录用于所有项目,即向量最多有10个有效位.我认为,解析整个bitvector只是为了找到有效位需要更多的计算资源,而不是简单地将user1的10个值与user2的10个值相互比较.

是否更快地使用长位向量,这些位向量的位数设置为1,或者更好地将原始值用作集合并将两个集合在一起?(一套最多10件)

我同时使用psql v8.2和v9.x.

postgresql vectorization data-mining computation

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

MATLAB中的矩阵运算

我试图简化我的代码,我遇到了一个小问题.让

v  = [1; 2; 3];
a1 = [4; 5; 6];
a2 = [7; 8; 9];
A  = [a1, a2];
Run Code Online (Sandbox Code Playgroud)

我的目标是计算

u = [v.*a1, v.*a2]
Run Code Online (Sandbox Code Playgroud)

只使用v一次.这可能吗?

matlab matrix vectorization

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

Vectorize octave/matlab代码

以下是八度代码(kmeans的一部分)

centroidSum = zeros(K);
valueSum = zeros(K, n);
for i = 1 : m  
  for j = 1 : K    
    if(idx(i) == j)
      centroidSum(j) = centroidSum(j) + 1;
      valueSum(j, :) = valueSum(j, :) + X(i, :);
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

代码有效,是否可以对代码进行矢量化?没有if语句很容易对代码进行矢量化,但是如何使用if语句对代码进行矢量化?

matlab matrix vectorization octave

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

两个张量之间的Kronecker产品

我有两个张量:x是2乘2乘3,y也是2乘2乘3.定义张量的每个正面切片是x1 x2 x3,y1,y2,y3.xi或yi是2乘2矩阵.如何在matlab中在x和y之间做kronecker产品?我想要得到的是同时没有任何循环的matlab中的kron(x1,y1),kron(x2,y2),kron(x3,y3).

matlab matrix vectorization multiplication

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

复制矢量并将每个副本向下移1行而不进行for循环

我想复制一个向量N时间来创建一个矩阵,每个副本向下移动1行.见图像(第一列是向量1到5).如果不使用for循环就能实现这一点会很棒.

在此输入图像描述

到目前为止,能够做到这一点repmat(my_vector, 1, 5)来创建一个N×5矩阵.

matlab matrix vectorization

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