Hi,

Though current hardware I  tested on does not have half2 support, errors I get 
when trying to compile using:
g++ testHalf.cpp -o testHalf -lOpenCL


which hardware though ? __fp16 seems to be an ARM-only extension to C, so it 
likely doesn't compile on x86-64 at all.


Anyway, host-side half support is not pocl's business. I've tried compiling the 
Half.cl example on my ODROID C2, with


pocl 1.3-pre/master-0-gdf366d8 Release+Asserts, LLVM 6.0.0, SLEEF, POCL_DEBUG, 
FP16


and poclcc returned:

  |     ERROR |  Error(s) while linking:
Cannot find symbol _Z6vload2mPU8CLglobalKDh in kernel library


... which is really pocl's fault, lib/kernel/vload.cl is missing the half 
implementations. Anyway fixing this is trivial (implemented by macros) and 
after that, it compiles.


Since nobody (so far) has put serious effort into half support, it has bugs 
like this, but trying to get it working on old pocl + old LLVM + ARM64 is going 
to be much more painful.


-- mb

________________________________
From: Benson Muite <[email protected]>
Sent: Monday, August 13, 2018 8:40:08 PM
To: [email protected]
Subject: Re: [pocl-devel] 【Hi】 There is Question about half2


If it helps, this is packaged in Fedora:

https://koji.fedoraproject.org/koji/buildinfo?buildID=1131711

Though current hardware I  tested on does not have half2 support, errors I get 
when trying to compile using:

g++ testHalf.cpp -o testHalf -lOpenCL

testHalf.cpp:6:1: error: ‘__fp16’ does not name a type; did you mean ‘._116’?
 __fp16 Add( __fp16 a, __fp16 b ) {
 ^~~~~~
 ._116
testHalf.cpp: In function ‘int main(int, char**)’:
testHalf.cpp:67:2: error: ‘__fp16’ was not declared in this scope
  __fp16 a = 3.5;
  ^~~~~~
testHalf.cpp:67:2: note: suggested alternative: ‘._116’
  __fp16 a = 3.5;
  ^~~~~~
  ._116
testHalf.cpp:68:37: error: ‘a’ was not declared in this scope
  printf("return  %f \n", (float)Add(a, 0.53) );
                                     ^
testHalf.cpp:68:33: error: ‘Add’ was not declared in this scope
  printf("return  %f \n", (float)Add(a, 0.53) );
                                 ^~~
testHalf.cpp:87:85: warning: ‘_cl_command_queue* 
clCreateCommandQueue(cl_context, cl_device_id, cl_command_queue_properties, 
cl_int*)’ is deprecated [-Wdeprecated-declarations]
 mand_queue  cmdQueue = clCreateCommandQueue(context_id, device_id, 0, &status);
                                                                              ^

In file included from testHalf.cpp:3:
/usr/include/CL/cl.h:1443:1: note: declared here
 clCreateCommandQueue(cl_context                     /* context */,
 ^~~~~~~~~~~~~~~~~~~~
testHalf.cpp:87:85: warning: ‘_cl_command_queue* 
clCreateCommandQueue(cl_context, cl_device_id, cl_command_queue_properties, 
cl_int*)’ is deprecated [-Wdeprecated-declarations]
 mand_queue  cmdQueue = clCreateCommandQueue(context_id, device_id, 0, &status);
                                                                              ^

In file included from testHalf.cpp:3:
/usr/include/CL/cl.h:1443:1: note: declared here
 clCreateCommandQueue(cl_context                     /* context */,
 ^~~~~~~~~~~~~~~~~~~~
testHalf.cpp:90:8: error: expected ‘;’ before ‘host’
  __fp16 host[4] = {0.3, 4.8, 2.5, 3.1};
        ^~~~~
        ;
testHalf.cpp:91:83: error: ‘host’ was not declared in this scope
  clCreateBuffer(context_id,  CL_MEM_READ_WRITE, sizeof(__fp16) * 4, host, 
&status);
                                                                     ^~~~

testHalf.cpp:91:83: note: suggested alternative: ‘short’
  clCreateBuffer(context_id,  CL_MEM_READ_WRITE, sizeof(__fp16) * 4, host, 
&status);
                                                                     ^~~~
                                                                     short

On 08/12/2018 11:08 PM, Michal Babej wrote:

Hello,


Pocl_version 0.13 + llvm 3.8 are both VERY old. I would be surprised if half 
type works there, especially in combination with 64bit ARM. I recommend you get 
LLVM 6 and pocl at least 1.1, otherwise you'll experience problems.


Regards,

-- mb


________________________________
From: Wuweijia <[email protected]><mailto:[email protected]>
Sent: Monday, August 13, 2018 5:33:46 AM
To: Portable Computing Language development discussion
Cc: Fanbohao
Subject: [pocl-devel] 【Hi】 There is Question about half2


Hi:

     I write the opencl demo. In this demo , I wrote the half2 type .  But it 
compile it failed.



   The output as below:

                2018-07-13 03:24:42.805561780] POCL: in fn void 
pocl_incr_device_ref() at line 294:

*** INFO ***  [GPUStub] void pocl_incr_device_ref() devices_ref=2

### use a saved llvm::Module

### fetching kernel metadata for kernel testHalf program 0x7f80a43000 input 
llvm::Module 0x7f80bf9580

[2018-07-13 03:24:42.805712080] POCL: in fn cl_mem POclCreateBuffer(cl_context, 
cl_mem_flags, size_t, void *, cl_int *) at line 94:

[2018-07-13 03:24:42.805752880] POCL: in fn cl_int 
POclEnqueueNDRangeKernel(cl_command_queue, cl_kernel, cl_uint, const size_t *, 
const size_t *, const size_t *, cl_uint, const cl_event *, cl_event *) at line 
133:

*** INFO ***  Preferred WG size multiple 8

[2018-07-13 03:24:42.805786020] POCL: in fn cl_int 
POclEnqueueNDRangeKernel(cl_command_queue, cl_kernel, cl_uint, const size_t *, 
const size_t *, const size_t *, cl_uint, const cl_event *, cl_event *) at line 
209:

*** INFO ***  Queueing kernel testHalf with local size 1 x 1 x 1 group sizes 3 
x 1 x 1...

### calling the kernel compiler for kernel testHalf local_x 1 local_y 1 local_z 
1 parallel_filename: 
/sdcard/pocl/kcache/HK/BOCDHECGLACEHDFDNAGEMLIFMJJKNKIKKHGMB/testHalf/1-1-1/parallel.bc

### cloning the preloaded LLVM IR

[2018-07-13 03:24:42.806801840] POCL: in fn llvm::Module 
*kernel_library(cl_device_id) at line 1341:

*** INFO ***  Using 
/data/data/org.pocl.libs/files/share/pocl/kernel-aarch64-unknown-linux-android-generic.bc
 as the built-in lib.

### autovectorizer enabled



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Found a loop: .lr.ph.i

LV: Can't if-convert the loop.

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Found a loop:

LV: Can't if-convert the loop.

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Found a loop:

LV: Can't if-convert the loop.

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Found a loop:

LV: Can't if-convert the loop.

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Found a loop:

LV: Can't if-convert the loop.

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Found a loop:

LV: Can't if-convert the loop.

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Not vectorizing: Cannot prove legality.



LV: Checking a loop in "_cl_printf" from /sdcard/pocl/kcache/temp_t6kfN4.cl

LV: Loop hints: force=? width=0 unroll=0

LV: Not vectorizing: Cannot prove legality.

/usr1/code/source/pocl/llvm-3.8.0.src/lib/Bitcode/Writer/ValueEnumerator.h:132: 
unsigned int llvm::ValueEnumerator::getTypeID(llvm::Type*) const: assertion "I 
!= TypeMap.end() && "Type not in ValueEnumerator!"" failed

libc: 
/usr1/code/source/pocl/llvm-3.8.0.src/lib/Bitcode/Writer/ValueEnumerator.h:132: 
unsigned int llvm::ValueEnumerator::getTypeID(llvm::Type*) const: assertion "I 
!= TypeMap.end() && "Type not in ValueEnumerator!"" failed



the test is abort now; I have add it ” pragma OPENCL EXTENSION cl_khr_fp16 : 
enable” to cl file  but it still faled



Env:

                CPU: AARCH64

                OS: LINUX / android

                Pocl_version 0.13 + llvm 3.8

                GPU: no









------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot



_______________________________________________
pocl-devel mailing list
[email protected]<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/pocl-devel


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
pocl-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pocl-devel

Reply via email to