opencl相关内容
我知道,在出现分歧的情况下,IF和ELSE都是在GPU上为每个工作项执行的,最后在掩码的帮助下我们选择了其中一个。但我不能理解,如果我们两个都被执行了,那么它怎么会增加执行单元的空闲。 我已经讨论了一些关于堆栈溢出的问题,但它们与堆栈溢出如何影响执行单元的空闲无关。 有人能给我解释清楚这个概念吗?分歧如何增加执行单元中的停滞或空闲? 推荐答案 在执行两个代码路径以选择一个结
..
我正在尝试在OpenCL上实现矩阵乘法。我有一块ATI Radeon HD Radeon 5000系列显卡。 这是我在网上找到的程序之一,但链接错误即将到来,我无法解决这些错误。 我尝试运行此站点中提到的代码 http://gpgpu-computing4.blogspot.in/2009/10/matrix-multiplication-3-opencl.html 我从此站点开始设置
..
我现在正在学习Boost::Compute OpenCL包装库。 我遇到复制过程非常慢的问题。 如果我们将CPU到CPU的复制速度调整为1,那么GPU到CPU、GPU到GPU、CPU到GPU的复制速度有多快? 我不需要精确的数字。仅仅是一个大概的想法就会有很大的帮助。例如,CPU-CPU至少比GPU-GPU快10倍。 推荐答案 没有人回答我的问题。 所以我写了一个程序来检查
..
在Windows10上的OpenCL1.2程序中,在我将内核排队几秒钟之后,提示显示ucrtbase.dll中的内存位置有一个未处理的异常。因此,我使用";try和catch";来获取有关该异常的更多信息。然后我得到了这个: Microsoft C++异常:内存位置0x00000076482F5A28处的CL::错误。 我的内核中的内存读/写可能有问题。但是内核程序包含
..
cl_device_id定义为";tyecif struct_cl_device_id*cl_device_id";。 在OpenCL方法中,clGetDeviceIDs;device";参数的类型为";cl_device_id*";,并返回指向可用设备列表的指针。我试图使用memcpy将整个结构传递给另一个变量。为此,我需要知道";_cl_devi
..
我已将host code写在OpenCL中。但是我需要首先从read中获取数据,我需要确保我在读取文件时所做的操作是正确的。(我不确定这是否是在OpenCL中读取文件的方式) 1-我将read file function中写入的c++放在main之前。 2-然后,我放入函数来混合数据。同样在main 之前 3-在main函数中,我调用上述两个函数来读取数据,然后将其混合。 4
..
在(动态)将CUDA代码编译为PTX时,您可以传递--generate-line-info命令行参数,并在PTX中获得一组.loc条目,它们将PTX位置与源文件位置相关联。 在NVIDIA平台上将OpenCL代码编译成PTX(clBuildProgram)时也有这样的功能吗? 推荐答案 尝试-nv-line-info。我找不到它的文档,但是编译器接受它并生成您想要的东西。 值得注
..
CUDA 3.0工具包文档listedNVIDIA的OpenCL编译器接受几个标志,作为OpenCL标准要求之外的扩展: 选项 说明 -cl-nv-maxrregcount 最多注册一个内核(或设备函数?)可以使用);作为--maxrregcount传递给ptxas -cl-nv-opt-level 代码优化级别。 -cl-nv-verbose 启用详细模式。 但
..
以this question为基础,实现了一个全局状态的伪随机数生成器: __global uint global_random_state; void set_random_seed(uint seed){ global_random_state = seed; } uint get_random_number(uint range){ uint see
..
我目前正在使用挡路矩阵乘法在OpenCL内核中乘以字节矩阵:我将矩阵细分为瓦片(32x32),将这些瓦片加载到本地内存中,然后将其写回全局内存。 目前,内存访问是瓶颈。我正在尝试对其进行优化。 假设我要乘以C=A x B,其中A、B、C是字符* A(NDIM,PDIM)、B(PDIM,MDim)、C(Ndim,MDim)。 我当前将A设置为行主格式,B设置为列主格式,以确保
..
我编写了一个计算两个矩阵乘积的小型OpenCL应用程序。现在我注意到,如果矩阵的大小超过8192x8192,则性能会显著下降(16384 x 16384的计算速度要慢约80倍),甚至串行实现的速度也要快5倍以上。以下是主机代码: /*Make some includes and definitions here*/ #include "stdafx.h" #include
..
我正在编写一个OpenCL程序,我希望使用DMA将数据从帧采集卡传输到GPU。如何获取GPU上OpenCL缓冲区的物理地址以执行此操作? 推荐答案 使用OpenCL,您无法获取缓冲区的物理GPU地址。 但是,您可以将缓冲区的一个区域直接映射到主机内存,从而允许使用标准C/C++代码(如memcpy)将内存复制进来和复制出来。请参阅clEnqueue eMapBuffer。
..
用C++编写OpenCL主机程序时,我们使用以下接口调用OpenCL内核: cl_int clEnqueueNDRangeKernel ( cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, const size_t *global_work_offset, const
..
对于CUDA,我知道它们是在向默认流(NULL流)发出启动命令后异步执行的,那么在OpenCL中呢?示例代码如下: cl_context context; cl_device_id device_id; cl_int err; ... cl_kernel kernel1; cl_kernel kernel2; cl_command_queue Q = clCreateCommandQueue
..
我对这种架构很失望,因为没有明显的解释为什么工作组应该是三维的,或者我只是还没有找到解释。由于可以从一维工作组模拟任意数量的维度,这似乎增加了额外的复杂性,使理解将您的工作划分到工作组的最佳方式变得更加困难。 For example, this person discovered that switching axis sped up his execution with a factor
..
我尝试使用CUDA驱动程序API运行.cl内核生成的PTX汇编代码。我采取的步骤如下(标准OpenCL过程): 1)加载.cl内核 2)JIT编译 3)获取编译后的PTX代码并保存。 到目前为止一切顺利。 我注意到PTX ASSEMBLY内部有一些特殊的寄存器,%envreg3,%envreg6等。问题是当我尝试使用驱动程序API执行代码时,这些寄存器没有设置(根据p
..
我正在尝试在GPU上运行内核,并在主机(CPU)上进行额外的计算。我看到了这个效果: 只有内核需要2000毫秒左右: clEnqueeNDRangeKernel... clFinish(或者clWaitForEvents,我都试过了) 我用睡眠在CPU上模拟了额外的计算(10): clEnqueeNDRangeKernel... 睡眠(10); clFin
..
我有一台AMD RX 570 4G, OpenCL告诉我,每个组最多可以使用256个工作组和256个工作项目. 假设我使用所有256个工作组,每个工作组包含256个工作项目 现在,每个工作项的最大私有内存大小是多少? 专用内存是否等于总vRAM(4 GB)除以总工作项(256x256)? 还是等于Cache如果等于Cache,是怎么回事? GPU 私有内存空间是
..
我正在尝试在OpenCL中运行我的第一批代码。为了创建子缓冲区,我有“OpenCL in Action”一书中的以下代码。代码显示创建子缓冲区失败的错误。我的电脑配备英特尔CPU和NVIDIA GPU。然而,当我在另一台装有AMD CPU和GPU的计算机上运行代码时,它工作得很好。你知道为什么这个代码不能在非AMD平台上运行吗? 以下是错误: 代码是这样的: #include
..
我有一个正在运行的OpenCL内核。如何检查变量中选定位置的位是否等于1? 例如,我发现在C#中可以使用代码like this将uint转换为包含位的字符串: // Here we will store our bit string bit; // Unsigned integer that will be converted uint hex = 0xfffffffe; //
..