gpgpu相关内容
我在写一个CUDA内核,我使用C ++中的 string 数据类型。然而,编译器抛出以下错误: 错误:调用主机函数(“std :: basic_string,std :: allocator> :: operat
..
由链接撰写: https://docs.nvidia.com/deploy/ pdf / CUDA_Multi_Process_Service_Overview.pdf 1.1。全部 1.1.1。 MPS 多进程服务(MPS)是CUDA应用程序编程接口(API)的另一种二进制兼容的 实现。 MPS运行时体系结构旨在透明地将 合作多进程CUDA应用程序(通常是MPI作业)启用
..
当计算CUDA内核时,以下内容不工作,因为内核在执行时不会阻止CPU程序执行: start timer kernel>>(); end timer (成功)定时CUDA内核的三种基本方法: (1)两个CUDA eventRecords。 float responseTime; // result will be i
..
CUDA是否支持双精度浮点数?也需要同样的原因。 解决方案 提示: 如果你想使用双精度,你必须将GPU架构设置为 sm_13 (如果你的GPU支持它)。 否则它仍然会将所有双精度值转换为浮点值,并只给出一个警告(如faya的帖子中所示)。 标志是: -arch = sm_13 code>
..
您认为GPU作为像CUDA这样的CPU计划的未来是什么?你认为他们将成为主流,并成为行业中下一个被采用的流行?苹果正在构建一个使用GPU来完成CPU任务的新框架,并且在Nvidias CUDA的科学项目中取得了很多成功。 解决方案 首先我不认为这个问题真的属于SO。 在我看来,GPU是一个非常有趣的选择,当你做基于矢量的浮点数学。然而这转化为:它不会成为主流。大多数主流(桌面)应用程
..
我更新我的问题与一些新的基准测试结果(我也重新设计的问题更具体,我更新了代码)... 在CUDA C中的矩阵向量乘法的内核,位于 CUDA C使用共享内存。让我首先提出一些基准测试结果,我在一个Jetson TK1(GPU:Tegra K1,计算能力3.2)和一个与cuBLAS的比较: 这里我猜cuBLAS有一些魔术,因为它似乎执行不受数字 A 的列,这反过来意味着沿着 A 的列有
..
我编写一个代码来计算两个向量的点积,使用点积的CUBLAS例程,但它返回主机内存中的值。我想使用点积进一步计算在GPGPU只。如何使值仅驻留在GPGPU上,并将其用于进一步的计算,而无需从CPU到GPGPU的显式副本? 解决方案 >根据talonmies的答案,从CUBLAS V2 api(CUDA 4.0)开始,返回值可以是一个设备指针。参考他的答案。但是如果你使用V1 API,它是一个
..
如果我在主机和设备(GPU arch sm_13)上执行浮点(单精度)操作,那么值是不同的? 解决方案 有关这方面的一个很好的讨论可以在白皮书。基本上: IEEE-754几乎是目前所有的功能; 这个标准,你仍然可以看到结果的差异(着名的,英特尔在内部为双精度做80位),或高优化设置与您的编译器可以改变结果 计算能力2.0及更高版本NVIDIA卡支持单精度和双精度的IEEE-754
..
这不是一个秘密,在CUDA 4.x的第一次调用 cudaMalloc 可以是可笑的慢(这是报告了几次),貌似一个 最近,我注意到了奇怪的行为: cudaMalloc 的运行时间取决于我链接到我的程序的第三方CUDA库 (注意,我不使用这些库,只是链接我的程序) 我使用以下程序运行一些测试: int main(){ cudaSetDevice(0); unsigned
..
正如以下错误所暗示的,在内核中不允许调用主机函数('rand'),我不知道是否有解决方案,如果我需要这样做。 错误:不允许从__device __ / __ global__函数(“xS_v1_cuda”)调用主机函数(“rand”) __ device__的函数。 修饰符。如果您在设备代码中需要随机数字,请查看cuda随机生成器 curand http://developer.n
..
我目前正在开发一个GPU版本的CPU函数 (例如函数Calc(int a,int b,double * c,souble * d,CalcInvFunction GetInv)),其中主函数通过函数指针(例如在上面的例子中GetInv是CalcInvFunction类型的主函数)。我的问题是,如果我必须把Calc()函数完全在GPU中,我必须传递GetInv函数作为函数指针参数在设备功能/内核函
..
我一直在GPU上开发一个加密算法,目前坚持使用算法来执行大整数加法。大整数以通常的方式表示为一串32位字。 例如,我们可以使用一个线程来添加两个32位字。为简单起见,假设 要添加的数字具有相同的长度和每块线程的数量==字数。然后: __ global__ void add_kernel(int * C,const int * A,const int * B){ int x = A
..
我想在cuda内核中产生随机数随机数。我希望从均匀分布和整数形式生成随机数,从1到8开始。每个线程的随机数将不同。可以生成随机数的范围也将从一个线程到另一个线程变化。一个线程中的范围的最大值可以低至2,或者在另一个线程中,其可以高达8,但不高于8。所以,我提供了一个例子,下面我想要生成的数字: 在线程#1 - 最大范围是2,所以随机数应该在1和2之间 在线程#2 - >最大范围是6,所以
..
我有一个CUDA程序,似乎在某种程度上限制了一些资源,但我不知道该资源是什么。这里是内核函数: __ global__ void DoCheck(float2 * points,int * segmentToPolylineIndexMap, int segmentCount,int * output) { int segmentIndex = threadIdx.x + block
..
如果我使用线程网格启动内核(例如只有1个块): ); 这个网格现在如何分割成经纱?这个网格的前两行是经线还是前两栏,还是这是任意排序的?假设GPU计算能力为2.0,翘曲大小为32。 解决方案 线程在块内按顺序编号, c $ c> threadIdx.x 变化最快,然后 threadIdx.y 第二快的变化, threadIdx.z 最慢的变化。这在功能上与多维数组
..
我注意到,CUDA应用程序往往具有5-15秒的粗略最大运行时间,然后它们将失败并退出。我意识到理想的是没有CUDA应用程序运行那么长,但假设它是使用CUDA的正确选择,并且由于每个线程的顺序工作量,它必须运行那么长,是有任何方法来延长这个时间量,要解决这个问题? 解决方案 我不是CUDA专家, 您可以禁用Windows监视程序计时器,但这是 强烈不推荐 >,原因应该很明显。 要禁用它,您
..
图形处理单元的通用计算( GPGPU )是一个非常有吸引力的概念,利用GPU的力量为任何种类的计算。 我想要使用GPGPU进行图像处理,粒子和快速几何操作。 ,似乎这个空间中的两个竞争者是CUDA和OpenCL。我想知道: Windows / Mac上的OpenCL是否可以使用Java? 是否直接使用JNA? 我忘记了什么? > 任何现实世界的体验/示例/战争故事都
..
我想测量GPU的内核时间,如何在NVIDIA CUDA中测量它? eg __ global__ void kernelSample() { 这里的一些代码 获取开始时间 一些代码在这里 获取停止时间 一些代码在这里 } 解决方案 尝试这样,它会以毫秒为单位测量两个事件之间的时间。 cudaEvent_t start,stop; float elapsedT
..
我一直在使用CUDA几个星期,但我有一些疑虑的块/ warp /线程的分配。 我从教学角度研究建筑(大学项目),所以达到最高的表现不是我的关注。 首先,我想知道我是否直接得到这些事实: 程序员写了一个内核, 每个块都分配给流处理多处理器(SM)。一旦分配,它不能迁移到另一个SM。 每个SM将其自己的块分割成经线(目前最大为32个线程)。一个warp中的所有线程在SM的资源
..
我有一个GeForce GTX 580,我想说明的线程总数(理想情况下)实际上与此并行运行,以与2或4与多核CPU进行比较。 p> deviceQuery提供以下可能的相关信息: CUDA功能主要/次要版本号:2.0 (16)多处理器x(32)CUDA内核/ MP:512 CUDA内核 每个块的最大线程数:1024 我想我听说每个CUDA核心可以运行一个warp i并
..