gpgpu相关内容
我知道完整的GPU是计算的庞然大物-包括计算的每个步骤和内存.因此,很明显,GPU可以计算出我们想要的任何东西-它已经完成了Turing. 我的问题是关于各种GPU(“流处理器"/"CUDA核心")上的单个着色器: 图灵完成了吗? 我(理论上)可以使用单个着色器在任意输入上计算任意函数吗? 我试图了解计算着色器的“规模"是什么. 解决方案 您将着色器指的是用于计算着色的程序吗?
..
Nvidia GPU列表-GeForce 900系列-写道: 4单精度性能的计算方式是 2倍 着色器乘以基本核心时钟速度. 即例如对于GeForce GTX 970,我们可以计算性能: 1664内核* 1050 MHz * 2 = 3494 GFlops峰值(3494400 MFlops) 我们可以在“处理能力(峰值)GFLOPS-单精度"列中看到此值. 但是为什么我
..
我正在寻找一种减少长度相等的多个块的快速方法 排列成一个大向量. 我有N个子数组(连续元素),它们排列成一个大数组.每个子数组都有一个固定的大小:k. 所以整个数组的大小是:N * K 我正在做的是将内核调用N次.在每次计算子数组的约简时,如下所示: 我将遍历大向量中包含的所有子数组: for(i=0;i
..
我尝试了许多不同的Tensorflow示例,这些示例在CPU上工作正常,但是当我尝试在GPU上运行它们时会产生相同的错误.一个小例子是这样的: import tensorflow as tf # Creates a graph. a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') b = tf.co
..
我有一个非常基本的片段着色器,我想将'gl_PrimitiveID'输出到我定义的片段缓冲区对象(FBO)中.下面是我的片段着色器: #version 150 uniform vec4 colorConst; out vec4 fragColor; out uvec4 triID; void main(void) { fragColor = colorConst; tri
..
我正在寻找一种优雅的方式来在CUDA内核中传递多个重复的参数, 众所周知,每个内核参数都位于每个堆栈的堆栈中因此,CUDA线程在内核传递给每个线程的参数和位于每个堆栈上的内存之间可能存在重复。 为了尽量减少传递的重复参数的数量,我正在寻找一种优雅的方式。 为了解释我的担忧:假设我的代码如下: kernelFunction>>>
..
我有2000个2D数组(每个数组为1000x1000),我需要计算每个数组的平均值并将结果放入一个2000向量中。 通过为每个2D数组调用内核来做到这一点,但是我天真地想立即进行计算。 这就是我为一个内核完成的工作2D阵列。我想让内核在一个内核中针对2000个2D阵列执行此操作。 #include #include #include
..
我有一维数组“ A”,它是由许多数组“ a”组成的,例如: 中数组“ a”的示例p> 我正在实现一个代码,对不连续的段进行求和(对“ A”中每个数组“ a”的相同颜色的段中的数字求和,如下所示: “ 有什么想法可以有效地做到这一点? 非常感谢 注意:这些图片代表只有一个数组“ a”。大数组“ A”包含许多数组“ a” 解决方案 在一般情况下,预先不知道数据的
..
我已经写了一个CUDA代码来解决NP-Complete问题,但是性能却不是我所怀疑的。 我了解“一些”优化技术(使用共享的内存,纹理,零复制...) CUDA程序员应该了解哪些最重要的优化技术? 解决方案 您应该阅读NVIDIA的CUDA编程最佳实践指南: http://developer.download.nvidia.com/compute/cuda /3_0/toolki
..
在CUDA程序中为寄存器(用于保存寄存器的内存)和共享内存(更快的访问)使用无符号的短整数有意义吗? 我创建模板设备功能(使用寄存器和共享内存),专门用于uint和ushort。 使用: 对于uint:25个寄存器,速度460 MB /秒。 对于ushort:26个寄存器,速度为420 MB /秒。 因此,没有理由使用无符号short int。 解决方案 我对CUDA没有
..
我从我的 Setup()内核中生成了 1个256个线程的块,以建立一个数组 RNGstates 具有256个CURAND状态: __ global__ void Setup(curandState * RNGstates,long seed){ int tid = threadIdx.x; curand_init(seed,tid,0,& RNGstates [tid]); }
..
我需要这样的类迭代器 ”> https://github.com/thrust/thrust/blob/master/examples/strided_range.cu 但是这个新的迭代器执行下一个序列 [k * size_stride,k * size_stride + 1,...,k * size_stride + size_chunk-1,...] w
..
在CUDA中使用易失性限定符声明寄存器数组是什么意思? 当我尝试将volatile关键字与寄存器数组一起使用时,它删除了溢出的寄存器数内存到本地内存。 (即强制CUDA使用寄存器而不是本地内存)这是预期的行为吗? 我没有找到有关volatile的寄存器阵列使用方面的任何信息。 这是两个版本的ptxas -v输出 带有易变限定符 __volatile__浮点数组[32
..
说我有两个数组 A 和 B 和一个 kernel1 通过将两个数组分成不同的块,对两个数组进行一些计算(例如,向量加法),并将部分结果写入 C 。 kernel1 然后继续执行此操作,直到处理完数组中的所有元素为止。 unsigned int i = blockIdx.x * blockDim.x + threadIdx.x; unsigned int gridSize = block
..
让我以具有1.3计算能力的硬件为例。 有30个SM。然后最多可以同时运行240个块(考虑到寄存器和共享内存的限制,对块数的限制可能要低得多)。超过240的那些块必须等待可用的硬件资源。 我的问题是,何时将超过240的那些块分配给SM。完成前240个模块中的一些块之后?还是当前240个块中的所有完成时? 我写了这样的一段代码。 #include #inc
..
我正在Ubuntu 14.04上安装CUDA,并且具有Maxwell卡(GTX 9 **系列),并且我认为我已经使用工具包正确安装了所有内容,因为我可以编译示例。但是,我在应该安装SDK的地方读到了这句话(这似乎与sdk 4讨论过)。我不确定工具包和SDK是否不同?当我拥有更高版本的9系列卡时,这是否意味着我正在运行CUDA 6?这是我的nvcc版本 nvcc:NVIDIA(R)Cuda编
..
当查看NVIDIA Fermi架构中的性能计数器的名称(cuda的doc文件夹中的Compute_profiler.txt文件)时,我注意到对于L2缓存未命中,有两个性能计数器,即l2_subp0_read_sector_misses和l2_subp1_read_sector_misses。他们说这些是两片L2。 为什么它们有两片L2?与流多处理器体系结构有关系吗? 谢谢 解决方
..
这个程序似乎很好,但是我仍然会犯错,有些建议吗? 程序: #include“ dot.h” #include #include #include int main(int argc,char ** argv) { int * a,* b,* c; int * dev_a,* dev_b
..
我想直接在不使用CPU-RAM的情况下将数据从GPU0-DDR复制到GPU1-DDR。 如第15页上所述: http://people.maths.ox.ac.uk/gilesm/cuda/MultiGPU_Programming.pdf 对等Memcpy 从GPU A上的指针直接复制到GPU上的指针B 对于UVA,只需使用cudaMemcpy(…,cudaMemcpyDe
..
让我们采用 nVidia Fermi计算体系结构。它说: 第一个基于Fermi的GPU,实现了30亿个晶体管,具有多达512个CUDA内核。 CUDA内核每个线程的每个时钟执行一个浮点数或整数指令。 512个CUDA内核以16个SM(每个32个内核)进行组织。 [...] 每个CUDA处理器都具有完整的流水线整数算法。逻辑单元(ALU)和浮点单元(FPU)。 [...]
..