小编ala*_*lae的帖子

数组中连续子序列的总和

给出以下数组:

tab = [80,12,14,5,70,9,26,30,8,12,16,15]
Run Code Online (Sandbox Code Playgroud)

我想计算大小为4的所有可能序列的总和如下:

S1=80+12+14+5=111
S2=12+14+5+70 =101
S3=14+5+70+9 =98
....
Run Code Online (Sandbox Code Playgroud)

我已经在python上实现了一个简短的程序来执行此操作并且效率不高:

import numpy as np


tab= np.array([80,12,14,5,70,9,26,30,8,12,16,15])
tab_size=tab.size
n=tab_size
s=0
seq_len=5
for i in range (0,n-(seq_len-1),1):
    print("index i ",i)
    for k in range(i+1,(seq_len+i),1):
            print ("index k ", k)
            tab[i]=tab[i]+tab[k]
            s=s+1
print(s)         
tab
Run Code Online (Sandbox Code Playgroud)

结果如下:

array([111, 101,  98, 110, 135,  73,  76,  66,  51,  12,  16,  15])
Run Code Online (Sandbox Code Playgroud)

我注意到每个元素将参与总和操作4次,这是不好的.你有什么有效的想法吗?
我想补充一点,序列大小不固定,在这个例子中只是4.提前谢谢

python arrays algorithm

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

计算2D阵列CUDA的平均值

我需要使用CUDA计算2D数组的平均值,但我不知道如何继续.我开始做列减少之后,我将得到结果数组的总和,并在最后一步我将计算平均值.

要做到这一点,我需要立即在设备上完成整个工作?或者我只是一步一步地做,每一步都需要来回和来自CPU和GPU.

cuda gpu gpgpu

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

使用 CUDA 减少排列在大向量中的多个等长块

我正在寻找一种快速方法来减少排列为大向量的多个相同长度的块。我有 N 个子数组(连续元素),它们排列在一个大数组中。每个子数组都有固定的大小:k。所以整个数组的大小是:N*K

我正在做的是调用内核N次。每次它计算子数组的减少如下:我将迭代大向量中包含的所有子数组:

    for(i=0;i<N;i++){
       thrust::device_vector< float > Vec(subarray, subarray+k);
       float sum = thrust::reduce(Vec.begin(), Vec.end(), (float)0, thrust::plus<float>());
       printf("sum %f\n",sum);
 }
Run Code Online (Sandbox Code Playgroud)

对于纯 CUDA 我会这样做(伪代码):

 for(i=0;i<N;i++){
        reduction_kernel(subarray)

         }
Run Code Online (Sandbox Code Playgroud)

您是否有另一种解决方案来一次性执行连续子数组的缩减?使用纯 CUDA 或 Thrust

cuda gpgpu nvidia reduction thrust

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

标签 统计

cuda ×2

gpgpu ×2

algorithm ×1

arrays ×1

gpu ×1

nvidia ×1

python ×1

reduction ×1

thrust ×1