标签: gpu-programming

OpenCL中的元素操作(Cuda)

我为两个矩阵的元素乘法构建了一个内核,但至少在我的配置中,当每个矩阵大于2GB时,我的OpenCL内核只会更快.所以我想知道,如果是因为我的天真内核(见下文)或者因为元素操作的本质,这意味着元素操作不会因使用GPU而获益.

感谢您的输入!

核心:

KERNEL_CODE = """
// elementwise multiplication: C = A .* B.
__kernel void matrixMul(
        __global float* C,
        __global float* A,
        __global float* B,
        int width, int height)
{
    // ID
    int x = get_global_id(0);
    int y = get_global_id(1);

    // Multiplying
    C[y * height + x ] = A[y * height + x] * B[y * height + x];
}
"""
Run Code Online (Sandbox Code Playgroud)

ps我读了一些专家认为,CUDA与OpenCL有太大的不同,无法在同一个问题中回答这两个问题,可以自由地从标题和标签中删除它.

cuda opencl gpu-programming

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

使用C++ AMP库

我正在尝试开始使用该<amp.h>库.但是当我输入时#include amp.h,我收到一条错误消息,说无法打开源文件<amp.h>.有什么特别的东西我需要做才能使它可用吗?

#include <stdio.h>
#include <tchar.h>
#include <amp.h>
Run Code Online (Sandbox Code Playgroud)

c++ windows visual-studio-2010 gpu-programming c++-amp

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

(void**)&x和(void*)x之间有什么区别?

(void**)&x和(void*)x之间有什么区别?我会给你一些代码,请帮帮我.

float *xd;
int size=width*width*size(float);
cudaMalloc((void **)&x,size); 1
cudaMalloc((void *)x,size);   2
cudaMalloc(&x,size);          3
cudaMalloc(*x,size);          4

cudaFree(xd);
Run Code Online (Sandbox Code Playgroud)

我只想知道其中的区别.

cudaMalloc()函数的第一个参数是指针变量的地址,该变量必须在分配后指向分配的对象.指针变量的地址应该转换为(void**),因为函数需要一个通用指针值; 内存分配函数是一个通用函数,不限于任何特定类型的对象.此地址允许cudaMalloc()函数将已分配对象的地址写入指针变量.3 cudaMalloc()函数的第二个参数以字节为单位给出要分配的对象的大小.第二个参数的使用与C malloc()函数的size参数一致.

c pointers cuda gpgpu gpu-programming

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

复制后本地和全局内存之间的值不同

我正在使用GPU内核,我在将数据从全局内存复制到本地内存时遇到一些问题,这是我的内核函数:

__kernel void nQueens( __global int * data, __global int * result, int board_size)
Run Code Online (Sandbox Code Playgroud)

所以我想从__global int*data复制到__local int aux_data [OBJ_SIZE] 我试图像普通数组一样复制:

for(int i = 0; i < OBJ_SIZE; ++i)
{
    aux_data[stack_size*OBJ_SIZE + i] = data[index*OBJ_SIZE + i];
}
Run Code Online (Sandbox Code Playgroud)

还有复制功能:

event_t e = async_work_group_copy ( aux_data,   (data + (index*OBJ_SIZE)),  OBJ_SIZE, 0);
wait_group_events (1, e);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我在全局和本地内存之间得到不同的值.我不知道我做错了什么......

opencl gpu-programming

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

cudaMemcpyToSymbol表现

我有一些函数可以在常量设备内存中加载变量并启动内核函数.我注意到第一次将一个变量加载到常量内存中时需要0.6秒,但是常量内存上的下一个加载非常快(0.0008秒).无论哪个函数是main中的第一个函数,都会出现此行为.下面是一个示例代码:

        __constant__ double res1;

        __global__kernel1(...) {...}

        void function1() {
            double resHost = 255 / ((double) size);
            CUDA_CHECK_RETURN(cudaMemcpyToSymbol(res1, &resHost, sizeof(double)));


            //prepare and launch kernel
        }

        __constant__ double res2;

        __global__kernel2(...) {...}

        void function2() {
            double resHost = 255 / ((double) size);
            CUDA_CHECK_RETURN(cudaMemcpyToSymbol(res2, &resHost, sizeof(double)));


            //prepare and launch kernel
        }

        int main(){
            function1(); //takes 0.6 seconds for loading
            function2(); // takes 0.0008 seconds for loading
            function1(); //takes 0.0008 seconds for loading

            return 0;
        }
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我可以避免吗?

cuda gpu-programming gpu-constant-memory

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

CUDA编程:占用是在不同进程之间实现GPU切片的方式吗?

有一些方法可以实现GPU共享.我遇到了入住.我是否可以使用它在共享GPU的进程(例如tensorflow)中切片GPU?这里的切片意味着GPU资源始终专用于该过程.使用占用率我将了解GPU和SM的详细信息,并基于此我启动内核,说明为这些GPU资源创建块.
我正在使用安装了cuda 9工具包的NVIDIA公司的GK210GL [特斯拉K80]
请建议.谢谢!

cuda gpgpu cluster-computing gpu-programming tensorflow

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

请推荐用于GPU编程的图形卡

我正在寻找一种用于试验GPU编程的图形卡的建议.我倾向于通过CUDA倾向于OpenCL.还在寻找价格合理的卡(价格是50美元还是更低?)

cuda gpgpu opencl gpu-programming

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

用CUDA提取矩阵列?

使用nvprof,我发现以下内核是我的CUDA应用程序的瓶颈

__global__ void extractColumn_kernel(real_t *tgt, real_t *src, int *indices, int numRows, int len) {
  int stride = gridDim.x * blockDim.x;
  int tid = blockDim.x * blockIdx.x + threadIdx.x;
  for (int j = tid; j < len; j += stride) {
    int colId = j / numRows;
    int rowId = j % numRows;
    tgt[j] = src[indices[colId]*numRows + rowId];
  }
}
Run Code Online (Sandbox Code Playgroud)

它打算将src列出的矩阵的列提取indices到矩阵中tgt.请注意,矩阵srctgt两者都有numRows行,并以列主要维度存储.此外,len = length(indices)*numRows是矩阵的条目总数tgt. …

c cuda matrix extraction gpu-programming

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

为什么不同流中的内核执行不是并行的?

我刚刚在CUDA中学习了流技术,并尝试了它。然而,不希望的结果返回,即,流不是并行的。(在GPU Tesla M6,OS Red Hat Enterprise Linux 8上)

我有一个大小为(5,2048)的数据矩阵,还有一个处理矩阵的内核。

我的计划是分解“ nStreams = 4”扇区中的数据,并使用4个流来并行执行内核。

我的部分代码如下所示:

int rows = 5;
int cols = 2048;

int blockSize = 32;
int gridSize = (rows*cols) / blockSize;
dim3 block(blockSize);
dim3 grid(gridSize);

int nStreams = 4;    // preparation for streams
cudaStream_t *streams = (cudaStream_t *)malloc(nStreams * sizeof(cudaStream_t));
for(int ii=0;ii<nStreams;ii++){
    checkCudaErrors(cudaStreamCreate(&streams[ii]));
}

int streamSize = rows * cols / nStreams;
dim3 streamGrid = streamSize/blockSize;

for(int jj=0;jj<nStreams;jj++){
    int offset = jj * streamSize;
    Mykernel<<<streamGrid,block,0,streams[jj]>>>(&d_Data[offset],streamSize);
}    // d_Data is …
Run Code Online (Sandbox Code Playgroud)

c++ cuda gpu-programming

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

如何在vb.net中使用GPGPU或GPU处理(CUDAFY)

所以我正在尝试研究如何在vb.net中使用我的GPU进行处理.我发现了一个看起来很棒的c#教程(对于c#用户来说看起来很简单).无论如何,我对c#的了解非常糟糕,我无法将事情从c#转移到vb.net.

这是链接:

http://www.codeproject.com/Articles/202792/Using-Cudafy-for-GPGPU-Programming-in-NET

如果有人可以将其转换为vb.net代码(这是有道理的)那么那就太好了.否则,如果有人可以给我一个非常简单的vb.net示例,基于本教程(或其他任何东西)在GPU上运行矢量操作,那么这可能会更好!:d

c# vb.net cuda gpgpu gpu-programming

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