标签: cuda

CUDA模型 - 什么是扭曲尺寸?

最大工作组大小与翘曲大小之间的关系是什么?假设我的设备有240个CUDA流处理器(SP),并返回以下信息 -

CL_DEVICE_MAX_COMPUTE_UNITS:30

CL_DEVICE_MAX_WORK_ITEM_SIZES:512/512/64

CL_DEVICE_MAX_WORK_GROUP_SIZE:512

CL_NV_DEVICE_WARP_SIZE:32

这意味着每个流多处理器(即计算单元)有8个SP.现在warp size = 32与这些数字有关吗?

cuda gpgpu

43
推荐指数
2
解决办法
3万
查看次数

为什么cudaMalloc()使用指针指针?

例如, cudaMalloc((void**)&device_array, num_bytes);

之前已经过这个问题,回复是"因为cudaMalloc返回错误代码",但是我没有得到它 - 什么有双指针与返回错误代码有什么关系?为什么一个简单的指针不能完成这项工作?

如果我写

cudaError_t catch_status;
catch_status = cudaMalloc((void**)&device_array, num_bytes);
Run Code Online (Sandbox Code Playgroud)

错误代码将被放入catch_status,并返回一个指向分配的GPU内存的简单指针就足够了,不应该吗?

c c++ pointers cuda

43
推荐指数
3
解决办法
8676
查看次数

可以/我应该在GPU上运行此代码吗?

我正在研究一个统计应用程序,它在一个数组中包含大约10-30万个浮点值.

有几种方法在嵌套循环中对数组执行不同但独立的计算,例如:

Dictionary<float, int> noOfNumbers = new Dictionary<float, int>();

for (float x = 0f; x < 100f; x += 0.0001f) {
    int noOfOccurrences = 0;

    foreach (float y in largeFloatingPointArray) {
        if (x == y) {
            noOfOccurrences++;
        }
    }

    noOfNumbers.Add(x, noOfOccurrences);
}
Run Code Online (Sandbox Code Playgroud)

当前的应用程序是用C#编写的,在Intel CPU上运行,需要几个小时才能完成.我不了解GPU编程概念和API,所以我的问题是:

  • 是否有可能(并且有意义)利用GPU来加速这样的计算?
  • 如果是:有没有人知道任何教程或获得任何示例代码(编程语言无关紧要)?

任何帮助将受到高度赞赏.

c c++ parallel-processing cuda gpu

42
推荐指数
5
解决办法
2万
查看次数

使用cudamalloc().为什么双指针?

我目前正在浏览http://code.google.com/p/stanford-cs193g-sp2010/上的教程示例以学习CUDA.__global__下面给出了演示功能的代码.它只创建了两个阵列,一个在CPU上,一个在GPU上,用7号填充GPU阵列,并将GPU阵列数据复制到CPU阵列中.

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

__global__ void kernel(int *array)
{
  int index = blockIdx.x * blockDim.x + threadIdx.x;

  array[index] = 7;
}

int main(void)
{
  int num_elements = 256;

  int num_bytes = num_elements * sizeof(int);

  // pointers to host & device arrays
  int *device_array = 0;
  int *host_array = 0;

  // malloc a host array
  host_array = (int*)malloc(num_bytes);

  // cudaMalloc a device array
  cudaMalloc((void**)&device_array, num_bytes);

  int block_size = 128;
  int grid_size = num_elements / block_size;

  kernel<<<grid_size,block_size>>>(device_array); …
Run Code Online (Sandbox Code Playgroud)

c malloc cuda

41
推荐指数
4
解决办法
4万
查看次数

数组结构与CUDA中的结构数组

从我在这里读到的一些评论中,出于某种原因,对于像CUDA这样的并行实现,最好有Structure of Arrays(SoA)over Array of Structures(AoS)吗?如果这是真的,谁能解释为什么?提前致谢!

c c++ arrays struct cuda

41
推荐指数
2
解决办法
3万
查看次数

如何选择运行作业的GPU?

在多GPU计算机中,如何指定应运行CUDA作业的GPU?

作为一个例子,在安装CUDA时,我选择安装NVIDIA_CUDA-<#.#>_Samples然后运行几个nbody模拟实例,但它们都在一个GPU 0上运行; GPU 1完全空闲(使用监控watch -n 1 nvidia-dmi).检查CUDA_VISIBLE_DEVICES使用

echo $CUDA_VISIBLE_DEVICES
Run Code Online (Sandbox Code Playgroud)

我发现这没有设定.我尝试使用它

CUDA_VISIBLE_DEVICES=1
Run Code Online (Sandbox Code Playgroud)

然后nbody再次运行但它也进入了GPU 0.

我看了相关的问题,如何选择指定的GPU来运行CUDA程序?,但deviceQuery命令不在CUDA 8.0 bin目录中.除此之外$CUDA_VISIBLE_DEVICES$,我看到其他帖子引用环境变量,$CUDA_DEVICES但这些没有设置,我没有找到有关如何使用它的信息.

虽然与我的问题没有直接关系,但是使用nbody -device=1我能够让应用程序在GPU 1上运行但是使用nbody -numdevices=2不能在GPU 0和1上运行.

我在使用bash shell运行的系统上测试这个,在CentOS 6.8上,使用CUDA 8.0,2 GTX 1080 GPU和NVIDIA驱动程序367.44.

我知道在使用CUDA编写时,您可以管理和控制要使用的CUDA资源,但在运行已编译的CUDA可执行文件时,如何从命令行管理?

cuda nvidia

41
推荐指数
5
解决办法
8万
查看次数

Cuda gridDim和blockDim

我得到的是什么blockDim,但我有问题gridDim. Blockdim给出块的大小,但是什么gridDim?在互联网上它说明gridDim.x了x坐标中的块数.

我怎么知道是什么blockDim.x * gridDim.x给出的?

我怎么知道gridDim.xx行中有多少个值?

例如,请考虑以下代码:

int tid = threadIdx.x + blockIdx.x * blockDim.x;
double temp = a[tid];
tid += blockDim.x * gridDim.x;

while (tid < count)
{
    if (a[tid] > temp)
    {
       temp = a[tid];
    }
    tid += blockDim.x * gridDim.x;
}
Run Code Online (Sandbox Code Playgroud)

我知道tid从0开始.代码然后有tid+=blockDim.x * gridDim.x.什么是tid现在这个手术后?

cuda

40
推荐指数
2
解决办法
6万
查看次数

cuda与张量核心有什么区别?

我对与HPC计算相关的术语完全不熟悉,但我刚刚看到EC2在AWS上发布了他们的新型实例,该实例由新的Nvidia Tesla V100提供支持,它具有两种"核心":Cuda Cores(5.120),以及张量核心(640).两者有什么区别?

cuda gpu nvidia

40
推荐指数
4
解决办法
4万
查看次数

CUDA驱动程序API与CUDA运行时

编写CUDA应用程序时,您可以在驱动程序级别或运行时级别工作,如此图像所示(库是CUFFT和CUBLAS用于高级数学运算):

CUDA层模型
(来源:tomshw.it)

我假设两者之间的权衡是低级API的性能提升,但代价​​是代码的复杂性增加.有什么具体的差异,是否有任何重要的事情,你不能用高级API?

我正在使用CUDA.net与C#进行互操作,它是作为驱动程序API的副本构建的.这鼓励在C#中编写许多相当复杂的代码,而使用运行时API的C++等效代码更简单.这样做有什么可以赢的吗?我能看到的一个好处是,将智能错误处理与其余的C#代码集成起来更容易.

c# c++ cuda gpgpu cuda.net

39
推荐指数
3
解决办法
3万
查看次数

在用户编写的内核中推动

我是Thrust的新手.我看到所有Thrust演示文稿和示例仅显示主机代码.

我想知道我是否可以将device_vector传递给我自己的内核?怎么样?如果是,内核/设备代码中允许的操作是什么?

cuda thrust

38
推荐指数
4
解决办法
2万
查看次数

标签 统计

cuda ×10

c ×4

c++ ×4

gpgpu ×2

gpu ×2

nvidia ×2

arrays ×1

c# ×1

cuda.net ×1

malloc ×1

parallel-processing ×1

pointers ×1

struct ×1

thrust ×1