相关疑难解决方法(0)

使用CUDA运行时API检查错误的规范方法是什么?

查看有关CUDA问题的答案和评论,以及CUDA标记维基,我发现通常建议每个API调用的返回状态都应该检查错误.API文档包括像功能cudaGetLastError,cudaPeekAtLastError以及cudaGetErrorString,但什么是把这些结合在一起,以可靠地捕捉和无需大量额外的代码报告错误的最好方法?

cuda error-checking

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

如何使用cuda沿行方向对大型二维矩阵进行缩减?(每行的最大值和最大值索引)

我正在尝试沿着2D矩阵的行方向实现缩减.我从stackoverflow上找到的代码开始(非常感谢Robert!)

thrust :: max_element比较cublasIsamax慢 - 更有效的实现?

上面的链接显示了一个在单行上执行缩减的自定义内核.它将输入行分为多行,每行有1024个线程.效果很好.

对于2D情况,一切都是相同的,除了现在有一个网格尺寸.所以每个块的y维度仍然是1.问题是当我尝试将数据写入每个块内的共享内存(在代码中的"max_idx_kernel_reduction_within_block"内核中)时,需要很长时间(超过(行数)*(在1行上执行减少所需的时间.我宁愿运行for循环).我知道我有很多元素,但我期待比这更快的东西.

我不认为内存访问模式是一个问题,但我听说TOTAL共享内存量可能是限制?:CUDA:合并全局内存访问速度比共享内存快吗?另外,分配大型共享内存阵列会减慢程序的速度吗?

任何使我的代码更快的建议(第一个内核是瓶颈)?非常感谢,非常感谢!!

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <cuda_runtime.h>

#define NCOLS 163317 // number of columns
#define NROWS 8 // number of rows
#define nTPB 1024  // Threads per Block. nTPB should be a power-of-2
#define MAX_BLOCKS_X ((NCOLS/nTPB)+1) // # of blocks I will launch

#define MIN(a,b) ((a>b)?b:a)
#define FLOAT_MIN -1.0f // lowest anticipated number of the data. Values in array will be compared with this and updated …
Run Code Online (Sandbox Code Playgroud)

c cuda shared-memory reduction

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

标签 统计

cuda ×2

c ×1

error-checking ×1

reduction ×1

shared-memory ×1