【问题标题】:Passing structs containing size_t from Java to OpenCL将包含 size_t 的结构从 Java 传递到 OpenCL
【发布时间】:2013-01-08 05:57:35
【问题描述】:

CL12.clCreateImage() 的参数之一是包含此structByteBuffer。我将使用OpenCL kernel arguments 中描述的方法来传递结构,但不确定要为size_t 类型的参数使用什么。在 Java 中,当我将参数放入 ByteBuffer 时,如果我使用的是 32 位系统,我应该使用 int(带符号的 32 位)还是使用 long(带符号的 64 位)? 64 位?

【问题讨论】:

    标签: java struct opencl lwjgl


    【解决方案1】:

    size_t 类型是“无符号整数”。你绝对可以使用 int 类型,但要确保它不是负数,否则没有意义。

    考虑到上述情况,您不必担心 32 位和 64 位系统,也不需要使用 long

    所以你可以做类似的事情

    int param = value; //this is the value to pass
    if (param >= 0) {
      pclFunc((size_t)param)
    } else {
      //see how you want to handle this
    }
    

    【讨论】:

    • 你确定 size_t 总是 32bits 吗? AFAIK size_t 与 int 大小相同,然后在 64 位系统上可以是 0 到 2^64 - 1。
    • 抱歉,size_t 始终是 unsigned int 大小,不管 int 是什么大小
    • 如何确定 unsigned int 的大小?
    • usigned int 的大小与signed int 完全相同。它们只是范围不同。所以 unsgned int 在 32 位系统中的范围是 0-2^32,而在单点系统中的范围是 -2^31-2^31,因为 1 位是为 +- 号保留的
    • 我现在离我的工作电脑不近,但我敢打赌 size_t 被定义为:“typedef usigned int size_t”
    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 2011-07-21
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多