标签: cuda

在二维数组上比较 Matlab 与 CUDA 的相关性和减少

我正在尝试使用 FFT 与使用加窗方法比较互相关。

我的 Matlab 代码是:

isize = 20;
n = 7;
for i = 1:n %%7x7 xcorr
  for j = 1:n
    xcout(i,j) = sum(sum(ffcorr1 .* ref(i:i+isize-1,j:j+isize-1))); %%ref is 676 element array and ffcorr1 is a 400 element array
  end
end
Run Code Online (Sandbox Code Playgroud)

类似的CUDA内核:

__global__ void xc_corr(double* in_im, double* ref_im, int pix3, int isize, int n, double* out1, double* temp1, double* sum_temp1)
{

    int p = blockIdx.x * blockDim.x + threadIdx.x;
    int q = 0;
    int i = 0;
    int j = …
Run Code Online (Sandbox Code Playgroud)

matlab cuda reduction multidimensional-array correlation

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

CUDA 快速数学运算

这是我的代码

    __device__ void calculateDT(float *devD, int *devImg, int cntVoxelLi, int *neighVoxels)
   {
    float minV = devD[cntVoxelLi];
   int cv = devImg[cntVoxelLi];
   float v = 0,cuVal = 0;
   int c1=0,d1=0,r1=0;
   GetInd2Sub(cntVoxelLi, r1,c1,d1);

   for(int ind=0;ind<9;ind++)
   {
    v = pow(float(cv - devImg[neighVoxels[ind]]),2);
    cuVal = devD[neighVoxels[ind]]  + (1-exp(-v/100));
    minV = min(minV, cuVal);
   }
   devD[cntVoxelLi] = minV;
   }
Run Code Online (Sandbox Code Playgroud)

当我运行整个程序时,大约需要 15 秒。但是当我删除

     exp(-v/100)
Run Code Online (Sandbox Code Playgroud)

只需7秒。似乎是这个exp操作需要很多时间。我也尝试使用 expf 函数。如何提高性能?

cuda

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

nvidia cuda使用机器的所有核心

我在一台拥有四个内核的cpu的机器上运行cuda程序,如何更改cuda c程序以使用所有四个内核和所有可用的gpu?

我的意思是我的程序在gpus计算之前也在主机端执行操作'...

谢谢!

c cuda nvidia scientific-computing

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

二维阵列的Cuda减少

我想计算Cuda中整个图像的平均值.为了测试2D数组的减少效果,我在下面编写了这个内核.最终输出o​​应该是所有图像值的总和.输入g是2D阵列,每个像素的值为1.但是这个程序的结果是总和为0.对我来说有点奇怪.

我在本教程中模仿1D阵列的减少http://developer.download.nvidia.com/compute/cuda/1.1-Beta/x86_website/projects/reduction/doc/reduction.pdf我写这个2D表格.我是Cuda的新手.欢迎提出有关潜在错误和改进的建议!

只需添加一条评论.我知道计算一维数组的平均值是有意义的.但我想利用更多并测试更复杂的还原行为.这可能不对.但只是一个考验.希望任何人都能给我更多关于减少常见做法的建议.

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

cudaEvent_t start, stop;
float elapsedTime;

__global__ void 
reduce(float *g, float *o, const int dimx, const int dimy)
{
extern __shared__ float sdata[];

unsigned int tid_x = threadIdx.x;
unsigned int tid_y = threadIdx.y;

unsigned int i = blockDim.x * blockIdx.x + threadIdx.x;
unsigned int j = blockDim.y * blockIdx.y + threadIdx.y; 

if (i >= dimx || j >= dimy)
    return;

sdata[tid_x*blockDim.y + tid_y] = g[i*dimy + j];

__syncthreads(); …
Run Code Online (Sandbox Code Playgroud)

parallel-processing cuda reduction

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

内核启动失败:参数无效,CUDA运行时错误

我正在尝试在随附的代码中启动内核。我收到消息“内核启动失败:参数无效”。

// System includes
#include <stdio.h>
#include <assert.h>

// CUDA runtime
#include <cuda_runtime.h>

// Helper functions and utilities to work with CUDA
#include <helper_functions.h>

// This will output the proper CUDA error strings in the event that a CUDA host call returns an error
#define checkCudaErrors(err)  __checkCudaErrors (err, __FILE__, __LINE__)

inline void __checkCudaErrors(cudaError err, const char *file, const int line )
{
    if(cudaSuccess != err)
    {
        fprintf(stderr, "%s(%i) : CUDA Runtime API error %d: %s.\n",file, line, (int)err, cudaGetErrorString( err ) …
Run Code Online (Sandbox Code Playgroud)

cuda runtime-error

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

Cuda将char**传递给内核

我对这个基本的CUDA代码感到烦恼.

我有一个char**平面的2d密码数组,我目前的实现是CUDA只是迭代这个列表并显示密码.但是,当我去显示它们时,我只是得到"(NULL)".我不太清楚为什么会这样.有人可以解释它发生了什么吗?

主要:

char ** pwdAry;
pwdAry = new char *[numberOfPwd];

//pwdAry given some values (flat 2d array layout)
const int pwdArySize = sizeof(pwdAry);    
dim3 grid(gridSize,gridSize);
dim3 block(blockSize,blockSize);

searchKeywordKernel << <grid, block >> >(pwdAry);

return EXIT_SUCCESS;
Run Code Online (Sandbox Code Playgroud)

CUDA:

__global__ void searchKeywordKernel(char **passwordList)
{
    int x = threadIdx.x + blockIdx.x * blockDim.x;
    int y = threadIdx.y + blockIdx.y * blockDim.y;
    int pitch = blockDim.x * gridDim.x;
    int idx = x + y * pitch;
    int tidy = idx / pitch; …
Run Code Online (Sandbox Code Playgroud)

c++ cuda

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

声明"在给定SM上运行的所有线程可能合作"是真还是假?

在Udacity的测验:线程和块"并行编程简介"中,它询问语句"在给定SM上运行的所有线程可以合作解决问题"是真还是假.答案是错误的,但我认为应该是真的,因为:

  • 它使用"可能"而不是"必须".
  • 一些论文正在谈论块间GPU通信.

我有什么误解吗?

cuda gpu gpgpu

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

cuda运行时错误(48):没有内核映像可用于在设备上执行

我是pytorch的新手.我从这个存储库中获取了代码https://github.com/ruotianluo/ImageCaptioning.pytorch,并希望为图像制作标题.安装"CUDA",当我运行脚本来创建注释时,会产生以下结果:

$ CUDA_LAUNCH_BLOCKING = 1条蟒蛇eval.py --model model.pth - -infos_path infos.pkl --image_folder等等--num_images 1 /home/azat/anaconda2/lib/python2.7/site-packages/h5py/ 初始化的.py :36:FutureWarning:不推荐将issubdtype的第二个参数从floatto 转换为 np.floating.在将来,它将被视为np.float64 == np.dtype (float) .type.从进口._conv作为register_converters _register_converters /home/azat/anaconda2/lib/python2.7/site-packages/torch/cuda/ INIT的.py:97:UserWarning:实测值GPU0的GeForce 820M是CUDA能力2.1.PyTorch不再支持这款GPU,因为它太旧了.warnings.warn(old_gpu_warn%(d,name,major,capability 1))DataLoaderRaw从文件夹加载图片:blah 0列出目录中的所有图像blah DataLoaderRaw找到8张图片THCudaCheck FAIL文件=/pytorch/torch/lib/THC/generic/THCTensorMathPairwise.cu line = 40 error = 48:没有内核映像可用于设备Traceback(最近一次最后一次调用):文件"eval.py",第122行,在vars(opt)中文件"/ home/azat/Programing/Python/techno_atom_neuro/Others Implementation/ImageCaptioning.pytorch-master/eval_utils.py",第82行,在eval_split中data = loader.get_batch(split)文件"/ home/azat/Programing/Python/techno_atom_neuro/Others实现/ ImageCaptioning.pytorch-master/dataloaderraw.py",第112行,在get_batch img = Variable(preprocess(img),volatile = True)文件"/home/azat/anaconda2/lib/python2.7/site-packages/torchvision /transforms/transforms.py",第42行,在调用 img = t(img)文件"/home/azat/anaconda2/lib/python2.7/ site-packages/torchvision/transforms/transforms.py",第118行,在调用 返回F.normalize(tensor,self.mean,self.std)文件"/home/azat/anaconda2/lib/python2.7/site- packages/torchvision/transforms/functional.py",第161行,标准化t.sub_(m).div_(s)RuntimeError:cuda运行时错误(48):没有内核映像可以在/ pytorch /上的设备上执行火炬/ lib目录/ THC /通用/ THCTensorMathPairwise.cu:40

所以,我想知道这个错误是什么,硬件或软件.我该如何解决这个问题呢.谢谢.

PyTorch
OS: Ubuntu 16.04
PyTorch version: 0.3.1 pip …
Run Code Online (Sandbox Code Playgroud)

python cuda gpu python-2.7 pytorch

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

减去两个整数会导致设备代码中出现整数下溢

在我的cuda设备代码中,我正在检查,其中我减去线程的id和blockDim以查看天气与否,我可能想要使用的数据在范围内.但是当这个数字低于0时,它似乎又回到了最大值.

#include <iostream>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>

float input[] =
{
1.5f, 2.5f, 3.5f,
4.5f, 5.5f, 6.5f,
7.5f, 8.5f, 9.5f,
};

__global__ void underflowCausingFunction(float* in, float* out)
{
    int id = (blockDim.x * blockIdx.x) + threadIdx.x;
    out[id] = id - blockDim.x;
}

int main()
{
    float* in;
    float* out;

    cudaMalloc(&in, sizeof(float) * 9);
    cudaMemcpy(in, input, sizeof(float) * 9, cudaMemcpyHostToDevice);
    cudaMalloc(&out, sizeof(float) * 9);

    underflowCausingFunction<<<3, 3>>>(in, out);

    float recivedOut[9];
    cudaMemcpy(recivedOut, out, sizeof(float) * 9, cudaMemcpyDeviceToHost);

    cudaDeviceSynchronize();

    std::cout << recivedOut[0] << " …
Run Code Online (Sandbox Code Playgroud)

c++ cuda integer-overflow underflow nvcc

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

如何以与numpy linalg“ inv”或“ pinv”函数相同的精度执行PyCUDA 4x4矩阵求逆

我的代码执行4x4矩阵求反(128、256、512)数时,遇到了精度问题。当我使用原始版本(即numpy函数np.linalg.inv或)时np.linalg.pinv,一切正常。

不幸的是,使用下面的CUDA代码,我将naninf值转换为倒置矩阵。

更明确地说,我将此矩阵求反:

2.120771107884677649e+09 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
0.000000000000000000e+00 3.557266600921528288e+27 3.557266600921528041e+07 3.557266600921528320e+17
0.000000000000000000e+00 3.557266600921528041e+07 3.557266600921528288e+27 3.557266600921528041e+07
0.000000000000000000e+00 3.557266600921528320e+17 3.557266600921528041e+07 1.778633300460764144e+27
Run Code Online (Sandbox Code Playgroud)

如果使用经典的numpy“ inv”,则会得到以下3x3倒置矩阵:

4.715266047722758306e-10 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
0.000000000000000000e+00 2.811147187396482366e-28 -2.811147186834252285e-48 -5.622294374792964645e-38
0.000000000000000000e+00 -2.811147186834252285e-48 2.811147187396482366e-28 -5.622294374230735768e-48
0.000000000000000000e+00 -5.622294374792964645e-38 -5.622294374230735768e-48 5.622294374792964732e-28
Run Code Online (Sandbox Code Playgroud)

为了检查该逆矩阵的有效性,我将其乘以原始矩阵,结果是单位矩阵。

但是使用CUDA GPU反转后,我得到了以下矩阵:

0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00 0.000000000000000000e+00
-inf -inf -9.373764907941219970e-01 -inf
inf nan -inf nan
Run Code Online (Sandbox Code Playgroud)

所以,我想竟被以提高精度到我的CUDA内核或Python代码,以避免这些naninf值。

这是CUDA内核代码,并调用了我的主要代码的一部分(我已经用numpy inv函数注释了经典方法:

    # Create arrayFullCross_vec array
    arrayFullCross_vec = np.zeros((dimBlocks,dimBlocks,integ_prec,integ_prec)) …
Run Code Online (Sandbox Code Playgroud)

python cuda matrix matrix-inverse pycuda

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