微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pyopencl - 如何使用泛型类型?

如何解决pyopencl - 如何使用泛型类型?

我使用 32 位浮点数和 32 位整数可互换地工作。我想要两个完全相同的内核,但一个用于整数,一个用于浮点数。一开始我以为我可以使用模板什么的,但似乎无法指定两个名称相同但参数类型不同的内核?

import pyopencl as cl
import numpy as np

ctx = cl.create_some_context()
queue = cl.CommandQueue(ctx)

prg = cl.Program(ctx,"""
__kernel void arange(__global int *res_g)
{
  int gid = get_global_id(0);
  res_g[gid] = gid;
}

__kernel void arange(__global float *res_g)
{
  int gid = get_global_id(0);
  res_g[gid] = gid;
}
""").build()

错误

<kernel>:8:15: error: conflicting types for 'arange'
__kernel void arange(__global float *res_g)
              ^
<kernel>:2:15: note: prevIoUs deFinition is here
__kernel void arange(__global int *res_g)

最方便的方法是什么?

解决方法

#define 指令可用于:

code = """ 
__kernel void arange(__global TYPE *res_g)
{
  int gid = get_global_id(0);
  res_g[gid] = gid;
}
"""

prg_int = cl.Program(ctx,code).build("-DTYPE=int")
prg_float = cl.Program(ctx,code).build("-DTYPE=float")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。