gpgpu相关内容

共享内存上原子操作的性能

当提供的地址驻留在块共享内存中时,原子操作如何执行?在原子操作过程中,是暂停块内其他线程对同一个共享内存bank的访问,还是停止其他线程执行任何指令,甚至停止跨所有块的线程,直到原子操作完成? 解决方案 共享内存硬件包括1024个锁.如果调用对共享内存进行操作的原子内在函数,编译器会发出一个短循环来获取并有条件地释放锁,或者如果未获取锁则循环.因此,性能可能非常依赖数据:如果一个 warp ..
发布时间:2022-01-10 16:00:29 其他开发

为什么 CUDA 中的常量内存大小受到限制?

根据 “CUDA C 编程指南";,只有在命中多处理器常量缓存时,常量内存访问才会受益(第 5.3.2.4 节)1.否则,半扭曲的内存请求可能比合并全局内存读取的情况更多.那么为什么恒定的内存大小限制为 64 KB? 为了不问两次,再问一个问题.据我了解,在 Fermi 架构中,纹理缓存与 L2 缓存相结合.纹理使用是否仍然有意义,或者全局内存读取以相同的方式缓存? 1恒定内存(第 5 ..
发布时间:2022-01-10 15:59:10 其他开发

不支持外部调用 - CUDA

目标是调用另一个文件中可用的设备函数,当我编译 global 内核时,它显示以下错误 *External calls are not supported (found non-inlined call to _Z6GoldenSectionCUDA)*. 有问题的代码(不是完整的代码,而是出现问题的地方),猫范数.h # ifndef NORM_H_# 定义 NORM_H_# 包括 ..
发布时间:2022-01-10 15:51:21 C/C++开发

在不同范围内的 Cuda 内核中生成随机数

我正在尝试在 cuda 内核中生成随机数随机数.我希望从均匀分布和整数形式中生成随机数,从 1 到 8.每个线程的随机数都不同.可以生成随机数的范围也因一个线程而异.一个线程中范围的最大值可能低至 2,或者在另一个线程中可能高达 8,但不会高于该值.因此,我在下面提供了一个示例,说明我希望如何生成数字: 在线程#1 -->范围的最大值是 2,所以随机数应该在 1 到 2 之间在线程#2 -->范 ..
发布时间:2022-01-10 15:50:23 其他开发

CUDA 中的矩阵向​​量乘法:基准测试和表现

我正在用一些新的基准测试结果更新我的问题(我还重新表述了问题以更具体并更新了代码)... 我按照 CUDA C 编程指南 使用共享内存.先介绍一下我在 Jetson TK1(GPU:Tegra K1,计算能力 3.2)上所做的一些基准测试结果,并与 cuBLAS 进行比较: 在这里,我猜 cuBLAS 有一些魔力,因为它的执行似乎不受 A 的列数的影响,这反过来意味着沿着列存在某种并行 ..
发布时间:2022-01-10 15:49:42 其他开发

如何在 CUDA 内核中调用主机函数?

正如以下错误所暗示的,内核中不允许调用主机函数('rand'),如果我确实需要这样做,我想知道是否有解决方案. 错误:不允许从 __device__/__global__ 函数(“xS_v1_cuda")调用主机函数(“rand") 解决方案 很遗憾,您不能在设备中调用未使用 __device__ 修饰符指定的函数.如果您需要设备代码中的随机数,请查看 cuda 随机生成器 curand h ..
发布时间:2022-01-10 15:48:41 其他开发

如何创建或操作 GPU 汇编器?

是否有人在创建/操作 GPU 机器代码(可能是在运行时)方面有经验? 我对修改 GPU 汇编代码很感兴趣,可能在运行时以最小的开销进行.具体来说,我对基于汇编程序的基因编程很感兴趣. 我知道 ATI 已经为他们的一些卡发布了 ISA,并且 nvidia 最近发布了针对旧卡的 CUDA 反汇编程序,但我不确定是否可以在运行时甚至之前修改内存中的指令. 这可能吗?欢迎提供任何相关信息 ..
发布时间:2022-01-10 15:47:31 其他开发

如何使用 CUDA 刷新 GPU 内存(物理重置不可用)

在内存被刷新之前,我的 CUDA 程序在执行期间崩溃了.结果,设备内存仍然被占用. 我在 GTX 580 上运行,不支持 nvidia-smi --gpu-reset. 将 cudaDeviceReset() 放在程序开头只会影响进程创建的当前上下文,不会刷新之前分配的内存. 我正在使用该 GPU 远程访问 Fedora 服务器,因此物理重置非常复杂. 所以,问题是 - 在 ..
发布时间:2022-01-10 15:46:38 其他开发

何时调用 cudaDeviceSynchronize?

何时真正需要调用 cudaDeviceSynchronize 函数? 据我从 CUDA 文档中了解到,CUDA 内核是异步的,因此我们似乎应该在每次内核启动后调用 cudaDeviceSynchronize.但是,我尝试了相同的代码(训练神经网络),有和没有任何 cudaDeviceSynchronize,除了时间测量之前的一个.我发现我得到了相同的结果,但速度提高了 7-12 倍(取决于矩 ..
发布时间:2022-01-10 15:46:32 其他开发

使用 CUBLAS 例程在 GPGPU 上保留点积

我正在编写代码来使用点积的 CUBLAS 例程计算两个向量的点积,但它返回主机内存中的值.我只想使用点积在 GPGPU 上进行进一步计算.如何使值仅驻留在 GPGPU 上并将其用于进一步计算,而无需从 CPU 到 GPGPU 进行显式复制? 解决方案 你不能完全使用 CUBLAS. 根据 talonmies 的回答,从 CUBLAS V2 api (CUDA 4.0) 开始返回值可以是设备 ..
发布时间:2022-01-10 15:44:03 其他开发

我可以将 CUDA 与非 NVIDIA GPU 一起使用吗?

我正在寻找一种在没有 NVIDIA GPU 的系统上运行 CUDA 程序的方法. 我尝试安装 MCUDA 和 gpuOcelot,但安装时似乎遇到了一些问题. 我已经阅读了 如何使用软件实现在没有 GPU 的情况下运行 CUDA?.那里的答案建议更改系统的硬件,使用模拟器(现已弃用)或切换到 OpenCL.这些都不能充分满足我的要求 解决方案 CUDA 是 NVIDIA 专有技 ..
发布时间:2022-01-10 15:43:20 其他开发

可以在 C++ CUDA 内核中使用字符串数据类型吗?

我正在编写一个 CUDA 内核,我在其中使用 C++ 中的 string 数据类型.但是,编译器抛出以下错误: 错误:从 __device__/__global__ 函数调用主机函数("std::basic_string, std::allocator>::operator =")("doDecompression") 是不允许的 内核中不允许使用字符串吗?如果没有,在内核中为 char 数组 ..
发布时间:2022-01-10 15:41:45 其他开发

NVIDIA GPU (sm_13) 上的 IEEE-754 标准

如果我在主机和设备(GPU arch sm_13)上执行浮点(单精度)操作,那么值会不同吗? 解决方案 在 白皮书 来自 NVIDIA.基本上: 目前几乎所有东西都实现了 IEEE-754; 即使在忠实实施该标准之间,您仍然可以看到结果差异(众所周知,英特尔在内部使用 80 位实现双精度),或者编译器的高优化设置可能会改变结果 计算能力 2.0 及更高版本的 NVIDIA 卡支持 ..
发布时间:2022-01-10 15:40:34 其他开发

与第 3 方 CUDA 库链接会减慢 cudaMalloc

在 CUDA 4.x 上第一次调用 cudaMalloc 已经不是什么秘密了速度可能慢得离谱(被报告了好几次),这似乎是 CUDA 驱动程序中的一个错误. 最近,我注意到奇怪的行为:cudaMalloc 的运行时间直接取决于我链接到我的程序的第 3 方 CUDA 库的数量(请注意,我不使用这些库,只需将我的程序与它们链接) 我使用以下程序运行了一些测试: int main() {cu ..
发布时间:2022-01-10 15:38:15 其他开发

在一个 GPU 上运行多个 CUDA 应用程序

CUDA 文档没有具体说明多少个 CUDA 进程可以共享一个 GPU.例如,如果我在系统中只安装了一张 GPU 卡的情况下,由同一用户启动多个 CUDA 程序,效果如何?能保证执行的正确性吗?在这种情况下,GPU 是如何调度任务的? 解决方案 来自独立主机进程的 CUDA 活动通常会创建独立的 CUDA contexts,每个进程一个.因此,从不同主机进程启动的 CUDA 活动将在同一设备 ..
发布时间:2022-01-10 15:35:02 其他开发

CUDA 驱动程序 API 与 CUDA 运行时

在编写 CUDA 应用程序时,您可以在驱动程序级别或运行时级别工作,如图所示(库是 CUFFT 和 CUBLAS 用于高级数学): (来源:tomshw.it) 我假设两者之间的权衡是提高低级 API 的性能,但以增加代码复杂性为代价.具体的区别是什么?有哪些重要的事情是高级 API 不能做的? 我正在使用 CUDA.net 与 C# 进行互操作,它是作为驱动程序 API 的副本 ..
发布时间:2022-01-10 15:34:52 C#/.NET