我想在带有 OpenCl 内核的 GPU 中运行这个简单的重新排序代码。可能吗?



我想在opencl-kernel中在GPU中运行此简单的C代码。有可能吗?

#include <stdio.h>        
int main()
{
  int a[15]={7,8,0,4,13,1,14,5,10,2,3,11,12,6,9};
  int b[15];
  printf(input datas:  ");
  for (i=0;i<15;i++) printf("%3d",a[i]);
  printf("n");
  for (i=0;i<15;i++) b[a[i]]=i;
  for (i=0;i<15;i++) printf("%3d",b[i]);
  printf("n");
  return 0;
}

我的输入和输出数据应为:

Input:  7 8 0 4 13 1 14 5 10 2 3 11 12 6 9
Output: 2 5 9 10 3 7 13 0 1 14 8 11 12 4 6

是可能的,尽管由于这些随机内存访问,它确实会效率低下。简化了很多,当工作项目(OpenCL内核的实例(访问内存时,GPU会更好。

这样说,要在C和OpenCL中执行此操作,您需要执行以下步骤(同样,我简化了一点(:

  • 包括opencl标题。
  • 编写OpenCL内核本身,然后将其放入main()中的字符串中,将其保存到.cl文件中,然后从main()中读取字符串。
  • 获得所需的GPU设备并创建上下文。
  • 创建一个opencl命令队列。
  • 创建inputoutput设备缓冲区。
  • 将所需信息写入input设备缓冲区(通过命令队列(。
  • 创建一个OpenCL程序(来自内核源字符串(,构建它,获取内核对象并设置其参数。
  • 运行内核(通过命令队列(,该内核将执行所需的操作,从input缓冲区读取并写入output缓冲区。
  • output设备缓冲区(通过命令队列(中读取数据并在屏幕上显示。
  • 发布所有创建的OpenCL对象。

请参阅有关如何开始使用OpenCL和GPU计算的链接。它给出了很好的理论,说明了这样的事情。您会注意到,在纯C中这样做是非常详细的,因此要么使用包装库,例如CF4OCL ,使用C ,要么使用其他具有高级绑定的其他语言(例如Python(。

最新更新