OpenCL C++の参照用の clang 実装を使用して、仕様の 13 ページにあるソースをコンパイルしました。
#include <opencl_def>
#include <opencl_memory>
#include <opencl_vector_load_store>
half bar(half a) { //ok: half built-in type passed by value
half b = a; //ok: copying half data type
b += 10.0; // not allowed: arithmetic operation
// vload should be used or cl_khr_fp16 support enabled
float f = cl::vload_half<1>(0, &b); // ok
return a; //ok: return half built-in type
}
kernel void foo(cl::global_ptr<half> pg) { //ok: a global pointer
// passed from the host
int offset = 1;
half *ptr = pg.get() + offset; //ok: half pointer arithmetic
half b = bar(*ptr); //ok: dereferencing half pointer
if(b < *ptr) { //not allowed: it is only supported if cl_khr_fp16
// extension is enabled
}
}
仕様によると、half
変異のある行があり、これは有効ではないため、コンパイルが失敗すると予想していました。悲しいことに、それは何の不満もなくコンパイルされました。
私は何か間違っていることを理解していますか?