标签: nvidia

CUDA atomics causes branch divergence

我正在开发一个 CUDA 内核来计算图像的直方图(NVIDIA GTX 480)。我注意到使用 cuda profiler 发现了 82.2% 的分支分歧。分析器将以下函数指示为差异源,该函数位于名为device_functions.h的文件中(特别是包含 return 语句的行)。

static __forceinline__
unsigned int __uAtomicAdd(unsigned int *p, unsigned int val)
{
  return __nvvm_atom_add_gen_i((volatile int *)p, (int)val);
}
Run Code Online (Sandbox Code Playgroud)

原子操作导致分支发散的说法正确吗?

profiler cuda atomic nvidia

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

如何为 Maxwell 及更高版本的 NVIDIA 架构编写基于 LOP3 的指令?

Maxwell Architecture 在 PTX 汇编中引入了一条新指令,称为 LOP3,根据NVIDIA 博客

“在对多个输入执行复杂逻辑运算时可以保存指令。”

GTC 2016 上,一些 CUDA 开发人员设法使用此类指令加速了Tegra X1 处理器(Maxwell)的atan2f功能。

但是,下面的函数中定义的.cu文件导致未定义的定义__SET_LT__LOP3_0xe2

我是否必须在.ptx文件中定义它们?如果是这样,如何?

float atan2f(const float dy, const float dx) 
{
 float flag, z = 0.0f;
 __SET_LT(flag, fabsf(dy), fabsf(dx));

 uint32_t m, t1 = 0x80000000; 
 float t2 = float(M_PI) / 2.0f;

 __LOP3_0x2e(m, __float_as_int(dx), t1, __float_as_int(t2));
 float w = flag * __int_as_float(m) + float(M_PI)/2.0f; 

 float Offset = copysignf(w, dy);
 float t = fminf(fabsf(dx), fabsf(dy)) …
Run Code Online (Sandbox Code Playgroud)

cuda nvidia

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

使用 Nvidia Optix 和开放资产导入库 (assimp) 进行光线追踪 - 渲染多个网格

我尝试将开放资产导入库(读取各种 3D 模型文件类型)的多功能性与 NVidia Optix 光线追踪相结合来渲染模型。

到目前为止,只要我渲染的模型由单个网格组成,它就可以工作。当我尝试渲染具有多个网格的文件时,我只得到部分结果。我无法缩小问题所在,寻找一些见解。相关代码在这里:

使用 assimp 导入器加载文件并创建 optix 缓冲区:

int loadAsset(const char* path)
{
Assimp::Importer importer;

scene = importer.ReadFile(
    path,
    aiProcess_Triangulate
    //| aiProcess_JoinIdenticalVertices
    | aiProcess_SortByPType
    | aiProcess_ValidateDataStructure
    | aiProcess_SplitLargeMeshes
    | aiProcess_FixInfacingNormals
    );

if (scene) {
    getBoundingBox(&scene_min, &scene_max);
    scene_center.x = (scene_min.x + scene_max.x) / 2.0f;
    scene_center.y = (scene_min.y + scene_max.y) / 2.0f;
    scene_center.z = (scene_min.z + scene_max.z) / 2.0f;

    float3 optixMin = { scene_min.x, scene_min.y, scene_min.z };
    float3 optixMax = { scene_max.x, scene_max.y, scene_max.z };
    aabb.set(optixMin, optixMax);

    unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ mesh nvidia assimp optix

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

NVRM: RmInitAdapter failed: Xid: 79, GPU has fall off the bus

有两次,当我使用 4x1080ti 完成训练模型时,服务器宕机了。服务器为什么会崩溃?

我得到 sysylog 并发现 Nvidia 驱动程序或 GPU 有问题。

系统日志:(和nvidia-bug-report.log

[第二个]

9 月 6 日 21:11:41 gpu-8-server-intesight 内核:[31429.221258] NVRM:RmInitAdapter 失败!(0x30:0xffff:682)

9 月 6 日 21:11:41 gpu-8-server-intesight 内核:[31429.221337] NVRM:rm_init_adapter 设备承载次要编号 0 失败

9 月 6 日 21:13:54 gpu-8-server-intesight 内核:[31562.154256] NVRM:RmInitAdapter 失败!(0x30:0xffff:682)

9 月 6 日 21:13:54 gpu-8-server-intesight 内核:[31562.154306] NVRM:rm_init_adapter 失败,设备承载次要编号 1

[第一个]

9 月 6 日 02:48:40 gpu-8-server-intesight 内核:[557998.990374] NVRM:PCI 上的 GPU:0000:04:00:GPU-bc54db68-a3cb-54e9-7287-b95c69e41cf1

9 月 6 日 02:48:40 gpu-8-server-intesight 内核:[557998.990375] NVRM:GPU 板序列号:

9 月 6 日 02:48:40 gpu-8-server-intesight 内核:[557998.990376] …

crash ubuntu driver nvidia multi-gpu

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

OpenCV - 将 GpuMat 复制到 cuda 设备数据中

我正在尝试将 a 中的数据复制cv::cuda::GpuMatuint8_t*要在内核中使用的变量。

GpuMat 包含分辨率为 752x480 且类型为 CV_8UC1 的图像数据。下面是示例代码:

uint8_t *imgPtr;
cv::Mat left, downloadedLeft;
cv::cuda::GpuMat gpuLeft;

left = imread("leftview.jpg", cv::IMREAD_GRAYSCALE);
gpuLeft.upload(left);

cudaMalloc((void **)&imgPtr, sizeof(uint8_t)*gpuLeft.rows*gpuLeft.cols);
cudaMemcpyAsync(imgPtr, gpuLeft.ptr<uint8_t>(), sizeof(uint8_t)*gpuLeft.rows*gpuLeft.cols, cudaMemcpyDeviceToDevice);

// following code is just for testing and visualization...
cv::cuda::GpuMat gpuImg(left.rows, left.cols, left.type(), imgPtr);
gpuImg.download(downloadedLeft);
imshow ("test", downloadedLeft);
waitKey(0);
Run Code Online (Sandbox Code Playgroud)

但输出并不如预期。以下分别是输入和输出图像。

输入 输入图像

输出 在此输入图像描述

我已经尝试将cv::Mat源提供给cudaMemcpy. 看起来运行良好。问题似乎与cv::cuda::GpuMat和有关cudaMemcpy这里讨论了类似的问题

另外,如果图像是 256 或 512,则程序似乎运行良好。

我缺少什么?应该怎样做才能使 752x480 图像正常工作?

c++ opencv cuda gpu nvidia

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

如何从服务器 xforwarding openGL 应用程序

我有一台带有 nvidia 显卡的服务器,我想运行一些 openGL 应用程序并将显示内容 xforwarding 到客户端。

我怎样才能做到这一点?目前我还没有安装 X 窗口系统。

x11 opengl ssh nvidia x11-forwarding

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

CUDA 中的块间同步

我为这个问题搜索了一个月。我无法同步 CUDA 中的块。

我读过很多关于atomicAdd、合作组等的文章。我决定使用一个全局数组,这样一个块就可以在全局数组的一个元素上写入。写入之后,块的线程将等待(即陷入 while 循环),直到所有块都写入全局数组。

当我使用 3 个块时,我的同步效果很好(因为我有 3 个 SM)。但使用 3 个街区可以让我获得 12% 的入住率。所以我需要使用更多的块,但它们无法同步。问题是:SM 上的一个块等待其他块,因此 SM 无法获取另一个块。

我能做些什么?当区块数量超过SM数量时,如何同步区块?

CUDA-GPU 规范:CC。6.1、3 SM、Windows 10、VS2015、GeForce MX150 显卡。请帮助我解决这个问题。我使用了很多代码,但没有一个起作用。

parallel-processing cuda gpu nvidia

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

CUDA 合并内存访问速度取决于字长

我有一个 CUDA 程序,其中一个经线需要访问(例如)96 字节的全局内存。

它正确对齐内存位置和通道索引,以便在单个事务中合并并完成访问。

该程序可以使用 12 个通道进行访问,每个通道访问一个 uint8_t。或者,它将使用 6 个通道访问 uint16_t,或使用 3 个通道访问 uint32_t。

这些替代方案之间是否存在性能差异,如果每个线程访问较少量的内存,访问速度是否更快?

当每个 warp 需要访问的内存量不同时,优化它是否有好处,以便线程在可能的情况下访问更小的单元(16 位或 8 位)?

cuda gpu gpgpu nvidia

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

tensorflow:找不到 dnn 实现

我正在尝试使用 gpu 在 tensorflow 上运行我的代码 Keras CuDNNGRU,但即使我已经安装了 CUDA 和 CuDNN,它也总是出现错误“找不到 dnn 实现”。

我已经多次重新安装 CUDA 和 CuDNN,并将 CuDNN 版本从 7.2.1 升级到 7.5.0,但它没有解决任何问题。我还尝试在 Jupyter Notebook 和 python 编译器(在终端上)运行我的代码,并且两个结果是相同的。这是我的硬件和软件的详细信息。

  1. 特斯拉 V100 PCIE 16GB
  2. Ubuntu 18.04
  3. NVIDIA-SMI 384.183
  4. CUDA 9.0
  5. CuDNN 7.5.0
  6. 迷你康达 3
  7. 蟒蛇 3.6
  8. TensorFlow 1.12
  9. 凯拉斯 2.1.6

这是我的代码。

encoder_LSTM = tf.keras.layers.CuDNNGRU(hidden_unit,return_sequences=True,return_state=True)
encoder_LSTM_rev=tf.keras.layers.CuDNNGRU(hidden_unit,return_state=True,return_sequences=True,go_backwards=True)

encoder_outputs, state_h = encoder_LSTM(x)
encoder_outputsR, state_hR = encoder_LSTM_rev(x)
Run Code Online (Sandbox Code Playgroud)

这是错误信息。

2019-05-27 19:08:06.814896: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1511] Adding visible gpu devices: 0
2019-05-27 19:08:06.814956: I tensorflow/core/common_runtime/gpu/gpu_device.cc:982] Device interconnect StreamExecutor with strength 1 edge …
Run Code Online (Sandbox Code Playgroud)

python gpu nvidia tensorflow cudnn

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

Nvidia GPU 可以启动多少个线程?

Nvidia GTX 1050 4GB GPU 可以启动多少个线程?例如:内核<<<1,32>>>(args); 可以启动 32 个线程。那么可能的最大线程数是多少?我知道这篇文章nvidia GTS 450 有多少线程

cuda gpu nvidia

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