gpgpu相关内容
我是CUDA的新用户,无法理解我做错了什么。 我试图计算它在数组中具有id的对象的距离,数组中的轴x和数组中的轴y为每个对象寻找邻居 __ global__ void dist(int * id_d,int * x_d,int * y_d, int * dist_dev,int dimBlock,int i) { int idx = threadIdx.x + blockI
..
我想在一个内核的内核调用之间使用共享内存。 我可以在内核调用之间使用共享内存吗? 解决方案 不,你不能。共享内存具有线程块生命周期。在 __ global __ 函数调用期间,存储在其中的变量可以由属于一个组的所有线程访问。
..
我需要在 cudaSetDevice(); 中设置0或1,才能使用 GPU1) > cudaStreamCreate(stream); cudaMemcpyPeerAsync(p1,1,p0,0,size,stream); ? 代码: //将设备0设置为当前 cudaSetDevice(0); float * p0; size_t size = 1024 * sizeof(
..
有一种方法可以将2D向量转换为数组,以便能够在CUDA内核中使用它? 它被声明为: vector>信息; 我想要cudaMalloc并从主机复制到设备,最好的方法是什么? int * d_information; cudaMalloc((void **)& d_information,sizeof(int)* size);
..
经线有32个线程。 32个线程是否在多处理器中并行执行? 如果32个线程没有并行执行,那么warp中没有竞争条件。 在CUDA编程模型中,所有的线程都在平行地延伸。但是硬件中的实际执行可能不是并行的,因为SM(流多处理器)内的核心数目可以小于32.例如,GT200架构每个SM具有8个核心,并且warp内的线程将需要4个时钟周期 如果多个线程写入同一位置(共享内存或全局内存),如果不想竞赛,
..
我有以下(可编译和可执行)代码使用CUDA Thrust执行 float2 数组的减少。 using namespace std; // include,system #include #include #include #include #include
..
我已使用cudaMalloc分配内存在设备上,并已将其传递给内核函数。是否可以在内核完成执行之前从主机访问该内存? 解决方案 我可以想到的唯一方法是在内核仍在执行时启动的memcpy是通过在与内核不同的流中提交异步memcpy。 (如果你使用内核启动或异步memcpy的默认API,NULL流将强制两个操作序列化。) 但是因为没有办法将内核的执行与流同步,该代码将受制于竞争条件。即复制
..
我试图在 __ device __ 变量上应用内核函数,根据规范,它驻留在“全局内存” #include #include“sys_data.h” #include“my_helper.cuh” #include“helper_cuda.h” #include double X [10] = {1,-2,3,-4,
..
原子操作提供的地址驻留在块共享内存中时,原子操作如何执行?在原子操作期间,它是否暂停对块内其他线程对同一共享内存块的访问,或者停止其他线程执行任何指令,甚至停止所有块中的线程,直到原子操作完成? 解决方案 共享内存硬件包括1024个锁。如果调用在共享内存上运行的原子本质,编译器会发出一个短循环,用于获取并有条件地释放锁,或者如果未获取锁,则循环。因此,性能可以非常依赖于数据:如果一个war
..
在cuBLAS中, cublasIsamin()给出了单精度数组的argmin。 这是完整的函数声明: cublasStatus_t cublasIsamin(cublasHandle_t handle,int n, const float * x,int incx,int *结果) cuBLAS程序员指南提供了有关 cublasIsamin()参数的信息: 如果我对 resu
..
我有以下代码,我想使用nvcc编译。 代码: #include #include #include #include int main(void) { size_t n = 100; size_t i; int * hostData; unsigned int * d
..
我想编译一个有人送给我的cuda项目。虽然编译阶段通过,链接阶段失败。下面是错误的示例: 错误298错误LNK2005:“int __cdecl compare_ints(void const *,void const *) “已经在3level_1.cu.obj decode_p4.cu.obj中定义的(?compare_ints @@ YAHPBX0 @ Z) 基本上,文
..
我需要在GPU上使用CUDA来实现矩阵乘法,用于大矩阵。每个矩阵的尺寸单独大于GPU内存。所以我想我需要一个算法来有效地做到这一点。我去了互联网,但没有找到任何。任何人都可以给我这种算法的名称或链接。 谢谢 解决方案 这里没有真正的正式算法;通常,这些类型的线性代数运算,其中整个问题没有同时存储在存储器中被称为“非核心”操作。 为了解决它,你不需要一个特别复杂的算法,只是CUB
..
我正在寻找一个哈希表实现,我可以使用CUDA编码。有什么好的一个在那里。像Python字典。我将使用字符串作为我的键 解决方案 Alcantara等人已经展示了用于在GPU上构建哈希表的数据并行算法。我相信该实施已作为 CUDPP 的一部分提供。 也就是说,你可能想重新考虑你原来的哈希表选择。按键对数据进行排序,然后在大规模并行设置中可以获得更好的性能。你想解决什么问题?
..
有没有人知道Fermi中的L2缓存的相关信息?我听说它是像全局内存一样缓慢,使用L2只是为了放大内存带宽。但我找不到任何官方来源来证实这一点。有没有人测量L2的命中延迟? 实际上,L2读取未命中如何影响性能?在我的意义上,L2只有在非常记忆绑定的应用程序的意义。 解决方案 此 nvidia 中的主题有一些性能表现的测量。虽然它不是官方信息,可能不是100%准确,它至少给出了一些行
..
我从CUDA Profiler获得信息。我很困惑为什么 Replay Instruction!= Grobal内存回放+本地内存回放+共享银行冲突重放? 查看以下信息我从profiler: 重播说明(%):81.60 全局内存重放(%):21.80 本地内存重放(%):0.00 共享银行冲突重放(%):0.00 我解释这个?是否有其他情况导致指令重放?
..
我已经读过一些论文谈论“持久线程”的GPGPU,但我真的不明白。任何一个人给我一个例子,或者告诉我使用这种编程时尚? 读取和搜索“持久线程”后,我在心中留下了什么: Presistent Threads它只是一个while循环,保持线程运行和计算很多工作。 这是否正确?提前感谢 参考: http://www.idav.ucdavis.edu/publications/pri
..
Numpy可以针对不同的BLAS实现(MKL,ACML,ATLAS,GotoBlas等)“链接/编译”。这不总是直接配置,但它是可能的。 是否也可以对NVIDIA的CUBLAS实现“链接/编译”numpy? 我在网络中找不到任何资源我花了太多时间尝试它,我想确保它可能。 解决方案 一句话:不,你不能这样做。 有一个相当不错的scikit,提供从scipy访问CUBLAS的
..
我们有一个工作站安装了两个Nvidia Quadro FX 5800卡。运行deviceQuery CUDA示例显示每个多处理器(SM)的最大线程数为1024,而每个块的最大线程数为512. 由于只能执行一个块在每个SM一次,为什么最大线程/处理器是最大线程/块的两倍?我们如何利用每个SM的其他512个线程? 设备1:“Quadro FX 5800” CUDA驱动程序版本/ Runt
..
我知道,GPU在经线之间切换以隐藏内存延迟。但我不知道在哪种情况下,翘曲会被切换出来?例如,如果warp执行加载,并且数据已经在缓存中。因此,翘曲是否被切断或继续下一个计算?如果有两个连续的添加,会发生什么? 感谢 解决方案 首先,一旦线程块在多处理器经常驻留,直到他们都退出内核。因此,一个块不会启动,直到有足够的寄存器用于块的所有卷曲,并且直到有足够的空闲共享内存为块。 所以经线
..