草庐IT

cuda-gdb

全部标签

在CUDA中测量特定指令或代码线的内存带宽的方法?

有没有办法测量CUDA中某个内存指令或代码行的内存带宽?(NVPROF可以输出整个内核的内存带宽。)如果Clock()函数是唯一的方法,那么计算带宽的方程式是什么?(汇总地址为每个{指令或代码行}除以()差异吗?)我想查看某个指令或限制内存带宽的代码线。(例如,MSHR..)我有两个设备GTX980(Maxwell,SM_52)和P100(Pascal,SM_60),上面是X86_64BITSLinux系统。看答案一种可以提供一些见识的工具是Nsight工具中的指令级分析。它可以使您了解当SM“失速”(未能发布任何指示)时应归咎于哪一行。由于LD/ST指令没有阻止执行,因此您经常立即看到摊位下

c++ - 无法在 gdb 中打印全局对象

我有这个简单的C++代码:#includeusingnamespacestd;vectorq;intmain(){q.push_back("test1");q.push_back("test2");cout当我使用gdb打印变量q时,出现以下错误:Nosymbol"q"incurrentcontext.我像这样使用g++编译我的程序:g++-ga.cpp这是我的gdb命令:gdba.outGNUgdb(GDB)7.12Copyright(C)2016FreeSoftwareFoundation,Inc.LicenseGPLv3+:GNUGPLversion3orlaterThisisf

c++ - CUDA: block 的更多维度还是只有一个?

我需要使用CUDA对矩阵(基本上是内存中一次浮点值的vector)的每个元素求平方根。矩阵维度不是已知的“先验”,可能会有所不同[2-20.000]。我在想:我可能会像这样使用(正如乔纳森在这里建议的那样)一个block维度:intthread_id=blockDim.x*block_id+threadIdx.x;并检查thread_id是否低于rows*columns...这非常简单直接。但是有什么特殊的性能原因为什么我应该使用两个(甚至三个)block网格维度来执行这样的计算(记住我毕竟有一个矩阵)而不是一个?我在考虑合并问题,比如让所有线程按顺序读取值

【Linux】Linux开发工具(yum、gdb、git)详解

一、软件包管理器yum1、什么是软件包在Linux下安装软件,通常的办法是下载到程序的源代码,并进行编译,得到可执行程序。但这样太麻烦了,于是有些人把一些常用的软件提前编译好,做成软件包(可以理解成在Windows上的安装程序)放在一个服务器上,通过包管理器可以很方便的获取到这个编译好的软件包,直接进行安装。软件包和软件包管理器,就好比"App"和“应用商店” 这样的关系。yum(YellowdogUpdater,Modified)是Linux下非常常用的一种包管理器。主要应用在Fedora,RedHat,Centos等发行版上。Linux下安装软件的方式:源代码安装。rpm包安装。yum工具

CUDA Cpp正电子发射断层扫描仪校准和图像重建—蒙特卡洛3D伊辛模型

要点GPU对比CPU计算正弦和:使用单CPU、使用OpenMP库和CUDACUDA并行计算:3D网格运行内核:线程块,线程线性处理3D数组,并行归约,共享内存,矩阵乘法/平铺矩阵乘法,基本线性代数子程序平铺分区,矢量加载,warp级内在函数和子warp,线程发散和同步,联合组使用2D和3D模板,迭代求解偏微分方程和图像处理使用GPU纹理硬件执行快速插值,图像配准蒙特卡洛模拟3D伊辛模型CUDA流CUDA正电子发射断层扫描仪校准和图像重建GPU扩展矩阵乘法示例假设我们有两个矩阵,AAA和BBB。假设AAA是一个n×mn\timesmn×m矩阵,这意味着它有nnn行和mmm列。还假设BBB是m×w

c++ - cuda在gpu和主机之间统一内存

我正在编写一个基于cuda的程序,需要定期将一组项目从GPU传输到主机内存。为了保持进程异步,我希望使用cuda的UMA在主机内存中有一个内存缓冲区和标志(这样GPU和CPU都可以访问它)。GPU将确保标志已清除,将其项目添加到缓冲区,然后设置标志。CPU等待设置标志,从缓冲区中复制内容,然后清除标志。据我所知,这不会产生任何竞争条件,因为它会强制GPU和CPU轮流,始终读取和写入彼此相对的标志。到目前为止,我还没有能够让它工作,因为似乎确实存在某种竞争条件。我想出了一个具有类似问题的更简单的示例:#include__global__voiduva_counting_test(intn

c++ - GDB:我们如何从 std::tuple 中提取值

我们如何提取/打印std::tuple中的单个值?这是名为test.cc的文件中的示例程序。#include#includeusingnamespacestd;intmain(){autot=make_tuple(111,222);cout(t)(t)编译它g++--std=c++11-gtest.cc在gdb中运行gdb--args./a.out...(gdb)startTemporarybreakpoint1at0x400836:filetest.cc,line7.Startingprogram:/home/fmlheureux/a.outTemporarybreakpoint1,

c++ - 在 CUDA 中用小 M 对两个 MxN 矩阵执行逐 vector 点积的最快方法是什么?

我有两个矩阵,每个都是MxN,其中M=16和N大得多(比如n=262144,例如)。我的目标是生成一个长度为N的vector,其中每个元素对应于每个矩阵中的nthvector的点积。我尝试了以下方法,其中cIdx对应于每个矩阵中列vector的列索引。毫不奇怪,NVIDIAVisualProfiler告诉我这种方法主要受内存带宽限制。publicstaticvoidMatrixDotProduct(float*matrix1,float*matrix2,float*dotProduct,int2matrixDimensions){inti=blockIdx.x*blockDim.x+t

c++ - CUDA 纹理和夹紧

有什么方法可以将超出范围的纹理地址限制在某个值吗?就我而言,我希望将它们设置为简单的零,但我需要的地址模式似乎不存在。谢谢。编辑:知道cudaAddressModeBorder设置的作用吗? 最佳答案 我不认为有一种方法可以指定钳位,但你可以做显而易见的事情并在边缘周围添加一个1像素的黑色(零)边框并将你的寻址偏移1。它不应该有更多的数据和它会免费为您夹紧。如果您有最大尺寸的2D纹理(对于CUDA2.x,它是64kx64k),每像素16字节(最坏情况),那么对于1像素边框,您只会看到4MB的额外数据,这对于PCIex16卡,复制到卡

c++ - 为什么我不能进入GDB 中的C++ cout 标准库函数?

我写了一个简单的test.cc如下:#includeusingnamespacestd;intmain(){cout然后我编译了:g++-gtest.cc-otest.o我运行了gdb并在"Helloworld"行放置了一个断点:$gdbtest.o(gdb)b7(gdb)c然后gdb停在"Helloworld"行,但是当我运行时(gdb)s它无法进入cout函数。所以我的问题是,如何进入cout函数? 最佳答案 如果它没有链接到带有调试信息的标准库版本,它不知道如何进入库;它只能越过它(也就是说,运行直到控制权返回到带有调试信息的