OpenCL尝试使用信号量崩溃驱动程序

时间:2013-01-06 18:49:28

标签: opencl


在编写简单的OpenCL内核时,我试图使用信号量,它破坏了我的GPU驱动程序(AMD 12.10)。在查看我发现的示例之后,只有在本地工作大小不等于1时才会发生崩溃。 此代码取自example

    #pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
    #pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
    #pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
    #pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable

    void GetSemaphor(__global int * semaphor)
    {
      int occupied = atom_xchg(semaphor, 1);
      while(occupied > 0)
      {
          occupied = atom_xchg(semaphor, 1);
      }
    }

    void ReleaseSemaphor(__global int * semaphor)
    {
       int prevVal = atom_xchg(semaphor, 0);
    }

    __kernel void kernelNoAtomInc(__global int * num,
                __global int * semaphor)
    {
      int i = get_global_id(0);
      GetSemaphor(&semaphor[0]);
      {
        num[0]++;
      }
      ReleaseSemaphor(&semaphor[0]);
    }

在示例作者中使用

CQ.Execute(kernelNoAtomInc, null, new long[1] { N }, new long[1] { 1 }, null);

其中N = global_work_size和local_work_size = 1
现在,如果我将1更改为null或2或4或我试过的任何其他数字--AMD驱动程序将粉碎。

CQ.Execute(kernelNoAtomInc, null, new long[1] { N }, new long[1] { 2 }, null);

我目前没有其他PC可以测试它。然而,作者故意离开local_group_size = 1似乎很奇怪,这就是为什么我认为我在这里遗漏了一些东西。有人可以向我解释一下吗?另外,据我所知,将local_group_size保留为1会大大影响性能,或者不会? 感谢。

主机:Win8 x64,HD6870

0 个答案:

没有答案