OpenCL图像过滤器迭代而不返回主机?

我面前没有我的代码,但我正在做一个常见的场景,在这个场景中,图像被采样、写入、重复。每次迭代都需要我将结果读回CPU,并再次将其扔回OpenCL。限制是图像要么读要么写,而不是两者都读。是否有一种方法可以在内核中完成所有这些操作,而不是将其循环回CPU?您不需要将结果读回主机,但需要重写算法,以使用带有附加纹理的多个步骤来存储中间结果 您不需要将结果读回主机,但需要重写算法,以使用带有附加纹理的多个步骤来存储中间结果 你可能想进一步澄清你的问题。是什么阻止了您以读写方式创建图像,并以类似乒乓球的

OpenCL编译器之间的语法差异

以下代码使用intel/nVidia OpenCL编译器编译(两者都基于LLVM): AMD编译器表示无效类型转换,仅接受带有全局限定的代码,如下所示: ((global float*))(&foo->bar))[1]=1; 根据规范,哪一个是正确的?(还有:我是否应该在某个地方报告不一致的编译器?OpenCL规范在转换指针时允许几乎无限的灵活性。基本上,规则是程序员知道自己在为特定硬件做什么。它没有解决跨内存空间强制转换的具体问题,因此这可能被认为是未定义的行为。供应商之间的差

NVIDIA OpenCL示例编译

我是OpenCL的新手 现在我正在编译一个英伟达的OpenCL SDK代码示例,命名为“OpenCL带宽测试”,链接在这里()p> 在这个示例中,包含一个名为“oclBandwidthTest.cpp”的文件 这个文件引用了“oclUtils.h”和“shrQATest.h”,所以我在makefile中添加了这两个文件路径 但当我试图编译它时,它仍然说“未定义对'shrLog''shrLogEx''oclErrorString'的引用…”。。。(太多了) 我必须做到明天,但从上周五起我还必须做

OpenCL和OpenCL嵌入式配置文件之间的主要区别

最近我在一些开发板上看到了OpenCLEP支持,比如OdroidXu。我知道的一件事是OpenCL EP是针对ARM处理器的,但它与基于桌面的OpenCL有哪些不同的功能。标准中的第10节回答了您的问题。本节专门介绍OCL嵌入式配置文件,ans首先列举了该配置文件所暗示的限制。以下列举了主要差异(从OpenCL 1.2开始): 64位整数支持是可选的 支持3D图像是可选的 支持二维图像数组写入是可选的。如果cles\u khr\u 2d\u image\u array\u写入 嵌入式配置文件支

在OpenCL中,步骤()是否算作条件?

OpenCL中的条件可能会影响性能,因为所有分支都将被评估。如果我可以使用step()来描述我的问题,那么这会避免这个问题吗?因为OpenCL只是一个API规范,最普遍的答案是:依赖于实现 然而,由于该函数可以(相对)轻松地在任何ALU上计算(通常只需一条指令),因此我认为假设答案是有效的否,这并不算作条件 关于问题的第二部分,就像@DarkZeros建议的那样,它并不能完全解决问题——但这是正确方向上的一步(呵呵):如果您可以使用step()函数的结果而不触发分支,那么您就很好了 为了举例说明

使用CPU时出现OpenCL segfault

我正在使用OpenCL实现一个FFT算法(特别是OpenCL中的算法)。它在两个不同的NVIDIA GPU(特斯拉K20c和GeForce GTX 650)上运行良好,但在我的Intel CPU上运行时会出现分段错误 我已经在内核代码中找到了问题所在,但没有意义。只有两行代码在包含时出错,这两行代码是下一块中最后两次写入本地内存。没有其他写入内存会导致CPU出现问题,也不会导致GPU出现问题 __kernel void fft_init(__global float2 *g_data, __lo

在另一张卡上运行的OpenCL字节码

我有使用OpenCL进行计算的程序,OpenCL代码很大,编译时间约为2分钟,CPU负载为100%。当然,我保存编译的二进制结果。然后第二次启动从二进制加载opencl程序。我可以在另一个具有相同芯片但不同特性(RAM、时钟等)的视频卡上使用相同的二进制文件吗?就OpenCL规范而言,您只能保证程序二进制文件可以在创建它的同一设备上重复使用 实际上,许多OpenCL实现返回的二进制文件与同一供应商提供的更广泛的设备兼容。例如,NVIDIA在您从其实现中请求二进制文件时返回,这是一种相当高级的中间

OpenCL内存传输问题(错误代码-6)

我内心有点死了。我整天都在做这件事,但毫无结果。我在运行一些以前运行得很好的代码时遇到了问题,所以我编写了一个简短的“玩具”OpenCL程序来尝试找出发生了什么,但我的玩具程序让我感到困惑和难以置信的沮丧 我正在使用一款具有3Gb全局内存的Nvidia 780i。它的最大分配容量约为780 Mb。起初,当我故意过度分配时,它不会出错。解决了这个问题(它是排版的,但是编译器/分析器没有捕捉到它)。现在,即使在试图分配低于设备应该能够处理的方式时,我在第二个大缓冲区分配上也会得到一个错误代码-6(C

Opencl ArrayFire找不到LAPACK,但我找到了

我刚刚下载了(3.3.1)的最新版本,正在尝试构建它。我被卡在了cmake.上。我安装了一堆丢失的库,重新运行它,现在我得到: 及 我已经安装了lapack,它位于/usr/lib/liblapack.so(这是一个可选的符号链接,但没有损坏)。还安装了lapacke。ArrayFire需要lapacke库(在Ubuntu上,liblapacke-dev,图形部分需要GLEW-MX(在Ubuntu上,libglewmx-dev)。ArrayFire需要lapacke库(在Ubuntu上,libl

将OpenCL结果附加到列表/减少解决方案室

我有一个带有多个工作项的OpenCL内核。让我们假设在讨论中,我有一个二维工作区,其中x*y元素在一个大小相同但稀疏的输入元素数组中工作。这些输入元素很少会产生我想要保留的结果,而大多数不会。我想让另一个内核排队,它只将保留的结果作为输入 在OpenCL中,是否可以将结果附加到某种列表中,作为输入传递给另一个内核,或者是否有更好的方法来减少解决方案空间的体积?此外:考虑到OpenCL的编程模型,这是一个很好的问题吗?如果结果数据量很小(即:0-10%),我会使用本地原子和全局原子以及全局计数器

OpenCL-在数组的每n个元素中插入值

我有一个100个元素的数组,我想做的是将这100个元素复制到另一个数组的每n个元素中 假设n是3 将值复制到每个第n个元素后,新数组将具有[val1 0 val2 0 val3 0…]。现在在opencl中,我尝试创建一个指向当前索引的指针,每次只需向该值添加n即可。但是,当前索引中始终保持相同的值。下面是我的代码 __kernel void ddc(__global float *inputArray, __global float *outputArray, __const int int

Opencl 内核未保留对全局cl_mem对象的写入

我有一个在多个设备之间共享内存对象的设置。我试图多次调用内核来积累一些值。在CPU上,这工作正常。在GPU上,后续调用看不到上一次调用的结果。这是带有调试语句的内核 #pragma OPENCL EXTENSION cl_khr_fp64 : enable __kernel void mgrid_sum(__global double *ar, __global double *ap,

OpenCL错误“;参数不能用地址空间“限定”;

我有以下OpenCL内核代码: kernel void mandelbrot(global write_only image2d_t output_image) { int2 pos = { get_global_id(0), get_global_id(1) }; write_imageui(output_image, (int2)(pos.x, pos.y), (uint4)(254, 0, 0, 254)); } 当程序生成时,我收到以下错误消息: :1:52:错误:参数

至强Phi的最新OpenCL驱动程序

我正在努力为英特尔至强Phi获取最新的OpenCL驱动程序。我有一个骑士角(Knights Corner,KNC),我只找到了不推荐使用的OpenCL运行时14.2(从2014年开始?)。在哪里可以找到未弃用的版本 网站: 如果我下载最新的英特尔OpenCL SDK for Applications,我只获得对Xeon的支持,但不支持Xeon Phi。不幸的是,最新的驱动程序是14.2。我从英特尔论坛上得到了答案 因此,它已被弃用,但同时也是Xeon Phi KNC的最新OpenCL驱动程序

Opencl 从缓冲区复制的速度差异

我无法理解为什么这些示例中的复制速度变化如此之大。我从他们那里得到了几乎不真实的图像。“更快”变量的计算时间也更快 没有帮助: 将“slow”变量的所有变量移到内核中,各种内存标志几乎不会改变结果 原来问题出在内核中,但问题到底是什么 警告!我粘贴了整个文件 将pyopencl导入为cl 将numpy作为np导入 从PIL导入图像 导入时间 更快的变体。从缓冲区复制大约需要0.15秒 width=800 高度=800 X=0 Y=0 R=2 最大值=80000 xmin=X-R xmax=X+

如何将OpenCL内核编译成我不知道的AMD GPU的二进制文件';你没有吗?

我在AMD论坛上找到一些参考资料,可以对未实际安装在编译系统中的目标GPU进行脱机编译。但是我找不到一个方法来做这件事 换句话说,如果不购买此卡,如何为6900XT创建二进制文件 另外,主机和目标操作系统都是Windows 10。您可能希望在问题中包括您试图针对的(操作)系统。@pmdj:完成,谢谢您指出。我很幸运使用RGA for OpenCL(ROC-m)。但是我不知道所有的AMD芯片。@Tim:我已经看过了;它没有列出任何超过Radeon VII的架构。没有RDNA。

如何在OpenCL中使用本地内存?

我最近一直在玩OpenCL,我能够编写只使用全局内存的简单内核。现在我想开始使用本地内存,但我似乎不知道如何使用get\u local\u size()和get\u local\u id()一次计算一个“块”的输出 例如,假设我想将苹果的OpenCL Hello World示例内核转换为使用本地内存的内核。你会怎么做?以下是原始内核源代码: __kernel square( __global float *input, __global float *output, co

opencl设备信息,本地内存量

我的问题是关于以CL_DEVICE_LOCAL_MEM_SIZE为参数的opencl调用clGetDeviceInfo 它是返回每个工作组的本地内存量,还是返回设备上作为本地可用的内存总量?还是别的什么 我的GPU是Nvidia GeForce 9800 GT,上面调用的返回值是16K 提前谢谢 它是每个计算单元。本地内存由在计算单元上执行的所有工作组使用。单个组不能超过此大小,因为它必须在单个计算单元上执行 例如,在您的情况下,如果每个工作组需要8K的本地内存,则在每个计算单元上最多可以同时调

单个主机上有多个OpenCL CPU设备?

主机是否会有多个CPU类型的设备?多核CPU将作为单个设备出现,但双插座主板呢?每个处理器在OpenCL中会有两个独立的设备吗 我正试图提前计划我正在开发的应用程序。根据我的经验,在双插槽主板上,您仍然有一个CPU设备。操作系统通常会向用户隐藏内核是位于同一物理CPU上还是位于不同的物理CPU上,甚至是在机器上(当然)。我认为这种行为是非常合乎逻辑的,至少在机器上是这样,因为内核在物理上的位置没有太大区别(在GPU的情况下,访问其他设备内存是非常麻烦的;在CPU上,将所有线程固定到同一个物理CP

在OpenCL内核中,有没有任何方法可以让特定线程在某种情况下等待其他线程 __内核 无效示例(uuu全局int*a、uuu全局int*dependency、uint cols) { int j=此处的更genter code\u global\u id(0); int i=获取全局id(1); 如果(i>0&&j>0) { 而(1) { 测试=1; } //等待家属 ----------------------------- -------------------------- } }

在上面的内核代码中,为什么在没有无限循环的所有线程中跳过while循环。有什么想法吗。 我正在处理一个有趣的问题,它需要一个线程根据一些条件等待其他线程完成,但是每次当它在GPU上运行时,上面的while或while(wait_条件)都会被跳过 在GPU上的OpenCL内核中,是否有其他方法使特定线程等待其他线程 提前谢谢 在高层,GPU是数据并行计算设备。他们喜欢在不同的数据上运行相同的任务。当他们的任务做不同的事情时,他们做得不好 您的代码说明了一个任务并行问题。所以我的高层次问题是你在解决

CLGetDeviceID在OpenCL中失败,错误代码为-30

使用ATI Firepro V8750的机器上,以下程序的输出如下: "Couldn't find any devices:No error" (这在调用第一个CLGetDeviceID时发生)。返回的错误代码为-30。这是什么意思 我无法理解为什么它找不到设备。我已经检查了CLinfo.exe是否列出了我的GPU以及我拥有的英特尔CPU。有人能给我指点一下这里出了什么问题吗 其他信息: AMD应用程序SK 2.4 壁炉驱动器:8.911.3.3_VistaWin7_X3

Opencl 复制后本地内存和全局内存之间的值不同

我在GPU内核中工作,在将数据从全局内存复制到本地内存时遇到一些问题 这是我的内核函数: __kernel void nQueens( __global int * data, __global int * result, int board_size) 所以我想从全局int*数据复制到局部int辅助数据[OBJ_SIZE] 我尝试像普通阵列一样复制: for(int i = 0; i < OBJ_SIZE; ++i) { aux_data[stack_size*OBJ_SIZE

OpenCL粒子系统内存布局

我需要一些关于OpenCL代码的建议。我在OpenCL中编写一个粒子系统,直接从OpenCL绘制到gpu上,因此不需要复制到CPU。这一切都很好,但我在创建新粒子时遇到了问题 我已经在GPU上分配了一个大内存区域,其中包含所有粒子数据。粒子的一个参数称为isAlive,它决定粒子的活动天气。当我想要创建一个新粒子时,我会找到一个不活动的粒子,在将其设置为isAlive true之前将其位置修改为其起始位置。这个过程非常昂贵,因为我必须遍历所有粒子以找到不活动的粒子,同时我必须确保多个线程不会同时

Opencl clFinish挂起,队列为空

我已经使用clCreateCommandQueue()创建了多个OpenCL队列 创建的所有队列都没有错误。其中一个队列中暂时没有命令。所有内核执行都很顺利,等等。最后,我需要释放我创建的队列。所有clFinish()都正常,只有一个除外,它等待队列,队列中没有命令(例如,队列中没有命令)。所以 返回正确,但是 clFinish(queueN); 永远挂着。解决办法是什么 操作系统是Ubuntu 12.04 x64。GPU是GeForce GTS450。OpenCLSDK1.1可能是一个驱动程

OpenCL中的HyperQ支持

我想运行在单个GPU上异步执行的异构内核。我认为这在Nvidia Kepler K20(或任何具有计算能力3.5+的设备)中是可能的,方法是将每个内核启动到不同的流,运行时系统根据资源可用性将它们映射到不同的硬件队列。 在OpenCL中可以访问此功能吗? 如果是这样,那么OpenCL中CUDA“流”的等价物是什么? Nvidia驱动程序是否支持通过OpenCL在其K20卡上执行此操作? 他们是否有任何AMD GPU具有类似的功能(或者是否正在开发)? 回答这些问题对我有很大帮助 原则上,您可以使

在OpenCL中使用Struct

我想在OpenCL中初始化一个数据结构。在C++中,结构的初始化类似: typedef struct mystruct{ float x; float y; float z; mystruct(){ x = 0.0; y = 0.0; z = 0.0; } }mystruct; 如何在OpenCL中执行此操作?您可以使用与C中相同的方式键入定义结构,然后使用 mystruct foo = {1.0, 2.1

如何获取OpenCL设备的内核数?

在我的应用程序中,我想向用户显示各种OpenCL设备。 我无法决定如何显示设备中的内核数。 这只是为了让我们知道有多少线程可以同时并行运行 计算单元告诉我们多处理器的数量,这可以通过CL\u设备\u MAX\u计算单元获得。 要确定每个多处理器支持多少线程,CL\u设备\u最大工作\u组\u大小是正确的参数吗 在我的笔记本电脑上获得以下结果: ATI 7670m GPU CL_DEVICE_MAX_COMPUTE_UNITS = 6 CL_DEVICE_MAX_WORK_GROUP_SIZE =

不含Nvidia CUDA SDK的openCL

我已经安装了支持Nvidia CUDA的GPU设备。我的要求是在我的GPU上运行openCL应用程序。我是否可以独立于Nvidia Cuda SDK执行此操作?您只需要安装Nvidia GPU驱动程序即可运行支持OpenCL的二进制文件。libOpenCL.so包含在驱动程序中 为了编译应用程序,您还需要OpenCL头文件。这些可能来自CUDA工具包,也可能来自一个单独的软件包(比如Ubuntu的opencl headers),或者您可以直接从下载(请记住,NVIDIA实现了opencl规范的1

如何在openCL中将图像从全局内存复制到本地内存

我有两个输入图像,我将它们从主机传递到内核。 我的图像的尺寸是370x427 我想让自己熟悉本地内存,因此我也将本地映像传递给内核,并尝试将全局映像复制到本地 我正在以1D数组的形式发送图像。当我尝试显示结果时,它不起作用。我的全局工作大小是{width*height},我将null传递给本地大小ClenqueEndRangeKernel,假设我会为本地内存选择合适的大小 下面是我的内核代码 如果有人能给我一个提示,请告诉我 __kernel void computeSSD(__glo

为什么clEnequeMapBuffer不映射到原始指针、OpenCL、Caffe

假设CPU指针(CPU_ptr_)已经存在,那么我为gpu(cl_gpu_mem_)创建一个缓冲区。问题是,当我将gpu缓冲区映射到cpu指针(mapped_ptr)时,映射的_ptr不等于原始指针(cpu_ptr_),这导致CHECK_EQ(mapped_ptr,cpu_ptr_)引发错误 cl_gpu_mem_ = clCreateBuffer(ctx.handle().get(), CL_MEM_READ_WRITE |

是",;“循环展开”;在OpenCL中是隐式的还是显式的?

我曾尝试在OpenCl代码中添加#pragma unroll和#pragma unroll,但没有看到延迟方面的任何改进。循环中的语句是独立的,应该并行运行。所以,我想知道OpenCL是否隐式展开循环,添加展开pragma不会有帮助 我的部分代码是这样的 for(j = 0; j < 4; j++) { m[0][j] = p0[j] + p0[j+4]; m[0][j+4] = p0[j] - p0[j+4]; m[1][j] = p1[j] + p1[j

OpenCL读取图像精度

我正在尝试将图像放大254x倍。读取图像F返回的结果不是线性的,而是阶梯式的-我每15点观察一次跳跃。取样器的精度是多少 输入为9个值,输出为2304个值 摘自输出: x read_imagef 120 120 121 120.9375 122 121.875 123 122.8125 124 123.75 125 124.6875 126 125.625 127 126.5625 128 128.4375 129 129.375 130 130.3125 131 131.25 132 13

OpenCL并行调度

我正在NVIDIA上使用OpenCL2.0的测试版支持,目标是高端GPU,如1080ti。在我的计算管道中,我有时需要分派工作来独立处理相对较小的图像。理论上,我认为这些图像应该能够在单个GPU上并行处理,因为单个图像的工作组数量不会使GPU的所有计算单元饱和 这在OpenCL中可能吗?这个在OpenCL中有名字吗 如果可能,为单个设备使用多个队列是否是唯一的方法?或者驱动程序会查看“waitEventList”并决定哪些内核可以并行处理 我是否需要CL_队列\u超出\u顺序\u执行\u模式\u

未找到OpenCL平台

我正在运行XFX RX 580 gpu,OpenCL没有检测到它 当我打字时: eth --list-devices lspci -vnn | grep VGA -A 12 我得到: cpp-ethereum, a C++ Ethereum client [OPENCL]:No OpenCL platforms found [OPENCL]: Listing OpenCL devices. FORMAT: [deviceID] deviceName 但当我打字时: eth --list-d

将一定数量的OpenCL工作项放入CPU有什么意义?

我试图理解为什么我可以在一个CPU中有比一个GPU在一个维度上更多的工作项 平台0设备0 ==CPU== DEVICE_VENDOR: Intel DEVICE NAME: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz MAXIMUM NUMBER OF PARALLAEL COMPUTE UNITS: 4 MAXIMUM DIMENSIONS FOR THE GLOBAL/LOCAL WORK ITEM IDs: 3 MAXIMUM NUMBER OF WO

平台OpenCL版本和设备之间有什么不同?

具体来说,我有单平台版本2.1和单设备版本2.0,我想使用C++14功能,这些功能仅在OpenCL2.1中受支持。我可以吗?当涉及到功能限制时,什么是重要的:平台还是设备?平台版本到底有什么意义,因为它总是归结为使用设备 平台版本到底有什么意义,因为它总是归结为使用设备 无论如何 平台=代码库和API等的版本 设备=硬件的功能 从某种意义上说,平台更新可能会改变您使用API编写代码的方式,而设备功能可能会随着hardawre芯片而改变 平台版本到底有什么意义,因为它总是归结为使用设备 无论如何

PyOpenCL程序。”__“内核”;和事件系统

如果我理解正确,PyOpenCL有两种启动内核的方法。cl.enqueue\u nd\u range\u kernel方法和简化的cl.program.“\u kernel”方法,允许您在初始化期间立即指定参数。但是,如果cl.enqueue\u ndu range\u kernel能够等待和初始化事件,我还没有为cl.program找到这样一种方法 -------------更新------------ 好的,我明白了!它的工作原理类似于event=cl.program。“\uu内核” 但是有

Opencl 浮动VS浮动

在OpenCL中使用floatN代替float有什么优势吗 比如说 float3 position; 及 谢谢我对OpenCL不太熟悉,但在GLSL中,使用向量进行数学运算更有效,因为GPU可以同时对所有N个组件应用相同的操作。此外,在GLSL中,向量还支持像点积这样的操作,作为内置语言功能。这取决于硬件 NVidia GPU有一个标量架构,所以向量在它们上比编写纯标量代码没有什么优势。引用(PDF链接): CUDA体系结构是一种标量体系结构。因此,没有性能 使用向量类型和指令的好处。这些应仅

OpenCL中的最大内存分配大小只有可用主内存的四分之一——为什么?

对于设备信息参数CL\u device\u MAX\u MEM\u ALLOC\u SIZE,OpenCL标准(2.0,与早期版本类似)有如下说明: 中内存对象分配的最大大小 字节。最小值为最大值 (最小值(1024*1024*1024,1/4 CL_设备_全局_成员_尺寸), 128*1024*1024)用于不属于 类型CL\ U设备类型\自定义 事实证明,AMD和Intel CPU OpenCL实现一次只能提供四分之一的可用内存(在我的机器上约为2 GiB,在其他机器上为8 GiB,与此类似

Opencl 尝试将动态本地内存传递给内核时发生访问冲突

我想为我的内核动态分配本地内存: error_code = clSetKernelArg(myKernel, 2, localMemSize, NULL); 此调用将使用在windows 7 Visual Studio 2012上触发访问冲突 英特尔OpenCL SDK 2014测试版 我做错什么了吗 [编辑]这是我在github上的项目 这是Intel 2014 Beta OpenCL SDK中的一个错误 解决方法是禁用API调试 对不起,赏金猎人。我觉得这很好。你能把你的代码扔到什么地方吗

Opencl AMD波前与工作组

我对AMD波前的术语和OpenCL的工作组大小有点困惑。 我发现不同的来源有不同的说法 我的问题是:AMDs GCN技术的波前大小是多少?根据这个问题:opencl上的一个工作组至少应该有多大才能不浪费占用空间 我从amd得到的信息是,GCN的波前大小是16。我一次可以在CU上运行4个波前,每个CU最多有40个飞行中波前。因此,我的意思是,在opencl中,一个工作组的大小至少应该是16 但常见的信息(例如在or中)是波前大小为64,根据该工作组大小,如果大于64的倍数,则至少应为64安。这也与

Opencl gcl_memcpy指针类型自动检测

我有一个运行在OS X上的普通内核,它返回一个int。基本位是: cl_int d; cl_int* dptr = &d; void* dev_d = gcl_malloc(sizeof(cl_int),NULL,CL_MEM_WRITE_ONLY); // ... stuff to setup dispatch queue dispatch_sync(queue, ^{ // ... running the kernel stuff gcl_memcpy((v

在opencl中为图像对象使用指针

我尝试使用指针而不是2D图像对象缓冲区读取图像对象 img_fmt.image_channel_order = CL_R; img_fmt.image_channel_data_type = CL_UNORM_INT8; __kernel void test(__read_only image2d_t in, __write_only image2d_t out) { float *p; void *temp; temp = (void *)&in;

安装OpenCL ubuntu AMD

我想安装fglrx并使用GPU。但我没有成功安装它。我正在使用ubuntu 14.04.03 Trusty 此处显示lspci输出: [thomas@elsa:~]$ lspci | grep -i --color 'vga' 00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (rev 06) 01:

Opencl 内核和程序对象之间的区别是什么?

我已经阅读了一些资源:OpenCLKhronos书籍、GATech教程、纽约大学教程,我还可以阅读更多。但我还是不完全明白内核和程序对象之间有什么区别? 到目前为止,对我来说最好的解释是这样的,但这还不足以让我完全理解: 程序对象:一个程序对象封装了一些源代码(可能有几个内核函数)及其最后一次成功构建。 内核:内核对象封装内核的 执行内核时使用的参数 也许程序对象就是代码?内核是编译后的可执行文件吗?是这样吗?因为我能理解这样的事情 提前谢谢 程序是一个或多个内核加上可选支持函数的集合。可以从源

OpenCL是否在OpenCL上下文之间具有共享上下文功能?

就像与opengl共享缓冲区一样,而是另一个opencl。就像将缓冲区迁移到另一个opencl上下文,但没有事件依赖关系 我找不到关于它的任何信息,但我需要将opencl缓冲区数据复制到另一个使用相同设备的opencl上下文缓冲区,并且我需要它远离主机端副本。我需要设备端到/来自同一设备缓冲区副本。我正在使用的缓冲区也有许多附加到其操作的事件 我正在从事的一个项目有多个上下文,使用不同的内核,使用多个GPU,使用双缓冲管道进行计算,我试图在不接触pci-e桥接器的情况下将相同的行为适配到单个GP

未从MQL5中的OpenCL内核获取预期输出

以下是我尝试使用的函数: #define SIZE_X 512 #define SIZE_Y 512 int cl_ctx; int cl_prg; int cl_krn; int cl_mem; float ExponentialMA( const int position, const int period, const double prev_value,

英特尔FPGA OpenCL:跟踪内核时钟频率低的原因

我正在为Intel Cyclone V FPGA实现OpenCL设计。它基于Terasic DE10标准OpenCL BSP的修改版本 修改包括与外部AD转换卡的连接,该转换卡连接到FPGA板,为其实现了自定义的基于VHDL的Qsys块,该块以约16MHz的采样率将采样流传输到avalon双时钟FIFO中。FIFO的输出连接到内核时钟域,FIFO的Avalon流接口输出作为通道导出到OpenCL内核,如主题5.4.5.4下的《英特尔FPGA SDK for OpenCLTM标准版编程指南》中所述

Opencl 定义$OPEN\u CL\u LIB时遇到问题。我该怎么做?

我在定义$OPEN\u CL\u LIB时遇到了一个问题。我通过sudo apt install ocl-icd-opencl-dev成功安装了这个应用程序 经过这一步,我得到了同样的问题。 “请将$OPEN\u CL\u LIB设置为libOpenCL.so的路径” 我如何解决这个问题?有人有主意吗 致意 乔治与此同时,我想出了一个解决办法。您必须修改profile(~/.bashrc)中的.bashrc文件。该路径类似于从NDK环境定义的路径。e、 g.导出开放式库=$OPEN\u CL\u

写入全局内存导致OpenCL For循环中的崩溃

我的一个OpenCL助手函数在一个位置写入全局内存,运行良好,内核通常执行。但是,当直接从该行之后运行时,它会冻结/崩溃内核,并且我的程序无法运行 此函数中的值会发生变化(NDRange为2^16时的值不同),因此循环也会发生变化,并且由于条件的原因,并非所有线程都可以执行相同的代码 为什么这是一个问题?我是不是错过了某种记忆阻塞之类的东西 void添加世界种子(yada-yada-yada….,consuint global\u id,\uu global long*world\u种子) (

  1    2   3   4   5   6  ... 下一页 最后一页 共 39 页