标签: opencl

clGetPlatformIDs中的错误-1001调用!

我正在尝试使用OpenCL.我有两个NVidia显卡,我安装了"开发者驱动程序"以及来自NVidia网站的SDK.我编译了演示,但是当我跑步时

./oclDeviceQuery

我知道了:

OpenCL SW信息:

clGetPlatformIDs中的错误-1001调用!!!

我该如何解决?这是否意味着无法检测到我的nvidia卡?我正在运行Ubuntu 10.10和X服务器与nvidia驱动程序正常工作.

我很确定这个问题与文件权限无关,因为它也不能与sudo一起使用.

nvidia opencl

18
推荐指数
2
解决办法
2万
查看次数

GPU中缓存未命中的变化

我一直在玩一个访问7个全局内存缓冲区的OpenCL内核,对值做一些事情并将结果存储回第8个全局内存缓冲区.正如我所观察到的,随着输入大小的增加,L1缓存未命中率(=未命中(未命中+命中))变化很大.我找不到这种变化的来源.此处的输入大小表示全局工作项的数量(2的幂和工作组大小的倍数).工作组大小的数量仍为256.

这些是结果.这些显示了L1缓存未命中率.从4096个工作项(16个工作组)开始.

0.677125
0.55946875
0.345994792
0.054078125
0.436167969
0.431871745
0.938546224
0.959258789
0.952941406
0.955016479
Run Code Online (Sandbox Code Playgroud)

分析器说它每个线程使用18个寄存器.这是代码(函数TTsum()应该只做一堆依赖的超越操作,所以它与缓存无关)我猜:

float TTsum(float x1, float x2, float x3, float x4, float x5, float x6, float x7)
{
        float temp = 0;
        for (int j = 0; j < 2; j++)
                temp = temp +  x1 + (float)x2 + x3 + x4 + x5 + x6 + x7;
        temp = sqrt(temp);
        temp = exp(temp);
        temp = temp / x1;
        temp = temp / (float)x2;
        for (int j = 0; …
Run Code Online (Sandbox Code Playgroud)

gpu gpgpu opencl

18
推荐指数
1
解决办法
1480
查看次数

如何在OpenCL中使用固定内存/映射内存

为了减少我的应用程序从主机到设备的传输时间,我想使用固定内存.NVIDIA的最佳实践指南建议使用以下代码映射缓冲区并写入数据:

cDataIn = (unsigned char*)clEnqueueMapBuffer(cqCommandQue, cmPinnedBufIn, CL_TRUE,CL_MAP_WRITE, 0, memSize, 0, NULL, NULL, NULL);

for(unsigned int i = 0; i < memSize; i++) 
{ 
    cDataIn[i] = (unsigned char)(i & 0xff); 
}

clEnqueueWriteBuffer(cqCommandQue, cmDevBufIn, CL_FALSE, 0, 
szBuffBytes, cDataIn, 0, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

英特尔的优化指南建议使用对clEnqueueMapBuffer和clEnqueueUnmapBuffer的调用,而不是调用clEnqueueReadBuffer或clEnqueueWriteBuffer.

使用固定内存/映射内存的正确方法是什么?是否有必要使用enqueueWriteBuffer写入数据或者enqueueMapBuffer是否足够?

另外,CL_MEM_ALLOC_HOST_PTR和CL_MEM_USE_HOST_PTR之间有什么区别?

memory gpu data-transfer gpgpu opencl

18
推荐指数
1
解决办法
6119
查看次数

如何用内核编译opencl项目

我完全是opencl的初学者,我在互联网上搜索并为opencl项目找到了一些"helloworld"演示.通常在这种最小的项目中,有一个*.cl文件包含某种opencl内核,而*.c文件包含main函数.那么问题是如何使用命令行编译这种项目.我知道我应该在linux上使用某种-lOpenCL标志,在mac上使用-framework OpenCL.但我不知道将*.cl内核链接到我的主源文件.感谢您提供任何意见或有用的链接.

kernel compilation opencl

18
推荐指数
2
解决办法
2万
查看次数

使用clCreateBuffer + CL_MEM_COPY_HOST_PTR与clCreateBuffer + clEnqueueWriteBuffer创建缓冲区对象有什么区别?

我在教程中看到了两个版本,但我无法找到它们的优点和缺点.哪一个是正确的?

cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY,sizeof(float) * DATA_SIZE, NULL, NULL);
clEnqueueWriteBuffer(command_queue, input, CL_TRUE, 0, sizeof(float) * DATA_SIZE, inputdata, 0, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

cl_mem input = clCreateBuffer(context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, ,sizeof(float) * DATA_SIZE, inputdata, NULL);
Run Code Online (Sandbox Code Playgroud)

谢谢.

[更新]

我添加CL_MEM_COPY_HOST_PTR,到第二个示例以使其正确.

memory-management opencl

17
推荐指数
2
解决办法
2万
查看次数

为什么Cuda/OpenCL的全球内存中没有银行冲突?

有一点我没想到并且谷歌没有帮助我,为什么可能与共享内存存在冲突,而不是全局内存?与寄存器存在银行冲突吗?

更新 哇我非常感谢Tibbit和Grizzly的两个答案.看来我只能在一个答案上给出绿色复选标记.堆栈溢出我是新手.我想我必须选择一个最好的答案.我可以做点什么来说谢谢答案我不给绿色支票吗?

cuda nvidia opencl bank-conflict

17
推荐指数
2
解决办法
6191
查看次数

JavaCL和JogAmp JOCL如何比较?

JavaCL使用JNA,JOCL使用JNI代替,所以我希望JavaCL能够表现出更好的跨平台兼容性,而JOCL通常应该具有更好的性能.JOCL与JOGL2一起进行测试,这样可以很容易地在CL中使用GL对象,反之亦然.JavaCL能够从当前GL上下文生成其上下文.JavaCL受GPL保护,JOCL根据BSD许可证分发.

关于这两种方法还能说些什么呢?那里有没有比较好的比较?

JavaCL:http://code.google.com/p/javacl/

JOCL:http://jogamp.org/jocl/www/

java opengl java-native-interface jna opencl

17
推荐指数
3
解决办法
4776
查看次数

符合OpenCL标准的CPU/GPU列表

我怎么知道OpenCL可以编程哪个CPU?例如,奔腾E5200.有没有办法知道没有运行和查询它?

cpu opencl

17
推荐指数
3
解决办法
7万
查看次数

GPU中的上下文切换机制是什么?

据我所知,GPU在warp之间切换以隐藏内存延迟.但我想知道在哪种条件下,经线会被切换掉?例如,如果warp执行加载,并且数据已经存在于缓存中.那么warp是否已经关闭或继续下一次计算?如果连续两次添加会发生什么?谢谢

cuda gpu gpgpu opencl

17
推荐指数
1
解决办法
7578
查看次数

使用CMake安装其他文件

我试图提供一些带有一些可执行文件的"源"文件.我想知道是否有办法将这些源文件复制到构建目录(从源目录),然后使用CMake复制到安装目录.

我在这里更具体的目标是包含我在自己的*.cl文件中编写的OpenCL内核.

例:

mkdir build
cd build
cmake ..
make
Run Code Online (Sandbox Code Playgroud)

现在我的目录应该有一个可执行文件(标准CMake),并some_opencl_kernel.cl在我的可执行文件中打开.

c cmake opencl

17
推荐指数
2
解决办法
2万
查看次数