gpgpu相关内容
我开始为使用OpenCL编写一个小“引擎".现在,我遇到了一个非常奇怪的问题. 当我调用clGetDeviceInfo()来查询特定设备的信息时,参数param_name的某些选项返回错误代码-30(= CL_INVALID_VALUE).一个非常著名的选项是CL_DEVICE_EXTENSIONS选项,无论我使用的是什么sdk或平台,该选项都应返回一串扩展名.我检查了每条边,并仔细检查了参
..
我希望分配一个向量,并使用它的数据指针在GPU上分配一个零拷贝缓冲区.有此cl_arm_import_memory扩展名可用于执行此操作.但是我不确定是否所有马里Midgard OpenCL驱动程序都支持它. 我正在通过此链接,我是以下几行让我很困惑:- 如果公开了扩展字符串cl_arm_import_memory_host,则从普通用户空间分配(例如通过malloc创建的分配)中导入
..
我正在尝试使用pyOpenCL绑定运行OpenCL内核,以便在GPU上运行.我试图将内核加载到程序中.我运行了一次程序,但出现错误.我不更改代码再次运行,并收到了另一个“无效程序"错误. 在使用pyOpenCL的我自己的程序以及示例程序中,这种情况一直在发生.我可以在CPU和GPU上通过C++绑定使用OpenCL,没有问题.所以我认为这是pyOpenCL绑定特有的问题. 我的操作系统是
..
我已经在OpenCL中编写了代码.构建内核程序时出错.错误代码为-11.我尝试打印"BUILD LOG",但它不打印正确的日志,而是生成一些随机变量.这是那部分 //these are variable declarations cl_device_id* devices; cl_program kernelprgrm; size_t size; //these varaibles have
..
我是SYCL/OpenCL/GPGPU的新手.我正在尝试构建并运行恒定添加程序, 的示例代码 #include #include #include #include namespace sycl = cl::sycl; //> template
..
我一直在艰难地建立一个实验,在该实验中,我在设备上使用CUDA分配内存,将指针指向设备上的内存,在OpenCL中使用它,然后返回结果.我想看看是否有可能.我很难让CUDA项目工作,所以我只是在他们的SDK中使用了Nvidia的模板项目.在生成文件中,我在common.mk的libs部分中添加了-lOpenCL.当我这样做时一切都很好,但是当我在template.cu中添加#include
..
据我了解,首选的工作组大小大致取决于计算设备的SIMD宽度(对于NVidia,这是Warp大小,在AMD上是Wavefront). 从逻辑上讲,这会使人们假设首选工作组的大小与设备有关,而不与内核有关.但是,必须使用CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE相对于特定内核来查询此属性.选择一个不是基础硬件设备SIMD宽度的倍数的值将不会完全加载硬
..
我正在使用以下内核来求和. __kernel void reduce(__global float* input, __global float* output, __local float* sdata) { // load shared mem unsigned int tid = get_local_id(0); unsigned int bid = get_g
..
C ++ 17引入了许多新算法来支持并行执行,尤其是 std: :reduce 是 std :: accumulate 的并行版本允许non-commutative操作的non-deterministic行为,例如浮点加法.我想使用OpenCL 2实现reduce算法. 英特尔在此处 a>使用OpenCL 2 work group内核函数来实现 std :: exclusive_scan O
..
我正在尝试运行矢量加法应用程序,在该应用程序中我需要同时启动多个内核, 因此对于并发内核启动,我最后一个问题中有人建议我使用多个命令队列. 我是用数组定义的 context = clCreateContext(NULL, 1, &device_id, NULL, NULL, &err); for(i=0;i
..
我一直在尝试使用openCL进行一些计算,但是结果不正确. 我输入了三个如下所示的float3: [300000,0,0] [300000,300000,0] [300000,300000,300000] 进入此内核: __kernel void gravitate(__global const float3 *position,__global const float3 *
..
我已经构建了一个简单的基于OpenCL的程序(使用C ++),并在Windows 8系统上使用AMD FirePro V4900卡进行了测试.我正在使用AMD APP SDK. 当我将二进制文件复制到另一台计算机(带有NVIDIA Quadro 4000卡的Windows 8)时, “过程入口点clReleaseDevice不能位于动态链接库(我的程序的exe)中".第二台计算机已安装了最新
..
"SIMT"体系结构的某些概念和设计对我来说仍然不清楚. 从我所看到和阅读的内容来看,使代码路径和if()完全分开是一个很糟糕的主意,因为许多线程可能会以锁步的方式执行.现在那到底是什么意思?怎么样呢? kernel void foo(..., int flag) { if (flag) DO_STUFF else DO_SOMETHIN
..
我不太清楚CL_DEVICE_LOCAL_MEM_SIZE的实际含义,它是通过clGetDeviceInfo函数获取的.这个值是表示某个设备上所有可用本地内存的总和,还是工作组中本地内存共享的上限? 解决方案 TL; DR:每个单个处理单元,因此也是分配给工作单元的最大数量. 此值是设备中每个计算单元上可用的本地内存量.由于工作组被分配给单个计算单元,因此这也是任何工作组可以拥有的最
..
我对OpenCL开发的总体情况有些困惑,所以我只列出我当前的理解和问题.如果我错了,请纠正我. 我知道有Intel,AMD提供的SDK(“平台")(我想Nvidia SDK也支持OpenCL?) 其他供应商提供SDK吗? 一个供应商的SDK是否支持另一个供应商的设备?例如带有AMD SDK的Nvidia设备?我可以使用AMD SDK在Intel CPU上运行程序. 是否可以
..
我正在开发一些可用于图像缓冲区的内核.问题是,当我通过直接复制图像数据创建Image2D时,一切正常. 如果我尝试将对写缓冲区的写入队列,则不适用于我的GPU. 这是一个基本的内核: __kernel void myKernel(__read_only image2d_t in, __write_only image2d_t out) { const int x = ge
..
是否可以使用NVIDIA的nvcc编译器来编译.cl文件?我正在尝试设置Visual Studio 2010以在CUDA平台下编码Opencl.但是,当我选择CUDA C/C ++编译器进行编译和生成.cl文件时,它给了我类似nvcc不存在的错误.有什么问题吗? 解决方案 您应该能够使用nvcc来编译OpenCL代码.通常,我建议对C兼容代码使用文件名扩展名.c,对C ++兼容代码使用文件
..
如何使用boost :: compute进行流压缩? 例如如果只想对数组中的某些元素执行繁重的操作.首先,使用与您要对其执行操作的元素相对应的掩码数组生成掩码数组: mask = [0 0 0 1 1 0 1 0 1] 然后对掩码数组执行互斥扫描(前缀和)以获取: scan = [0 0 0 0 1 2 2 3 3] 然后使用以下方法压缩该数组: if (mask[
..
针对该主题(SIMD模式),我阅读了关于SO的几个问题,但仍需要对事情的工作方式进行一些澄清/确认. 如果我们有GPGPU,为什么要使用SIMD? SIMD内部函数-它们可在GPU上使用吗? CPU SIMD与GPU SIMD? 如果我在SIMD-8模式下编译代码,以下几点正确吗? 1)这意味着不同工作项的8条指令正在并行执行. 2)这是否意味着所有工作项都仅在执行同一条
..
众所周知,AMD-OpenCL支持WaveFront(2015年8月): http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/12/AMD_OpenCL_Programming_Optimization_Guide2.pdf 例如,AMD Radeon HD 7770 GPU支持超过25,000个 机上工作项,并可以切换到新
..