-
-
Notifications
You must be signed in to change notification settings - Fork 96
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Large errors using Intel OpenCL for CPUs #148
Comments
Hello, I have not yet managed to make this runtime work with my machine, but this issue resembles the low accuracy of sincos functions on Intel iGPUs. There is a fix for intel vendor id that it forces to precompute all twiddle factors in LUT there, my guess would be that vendor id is different in this case and the fix is not applied. Can you try setting config.useLUT = 1 and see if this fixes the issue? Best regards, |
That fixes it. Thank you so much! |
Great! However, I am not sure how to make this permanent as this is an issue of this particular specification. |
Would it make sense to enable |
It already is on by default for vendor 0x8086 (Intel) though. Can you check the vendorID value for your device? The command is clGetDeviceInfo(device, CL_DEVICE_VENDOR_ID, sizeof(cl_int), &vendorID, 0); |
How very clever of them! :) It's a little odd. They actually create two different platforms, each with a single device. The first one is called "Intel(R) FPGA Emulation Platform for OpenCL(TM)" and the device has vendor ID 0x1172. The second one is called "Intel(R) OpenCL" and the device has vendor ID 0x8086. The platform vendor for both of them is "Intel(R) Corporation". |
This vendor id apparently belongs to Altera Corporation. I guess I can add a special check for CL_PLATFORM_VENDOR to be Intel(R) Corporation as it is the common factor. |
Altera is now part of Intel. They bought it some years back. |
When running VkFFT under Intel's OpenCL for CPUs, I find that it gives very large errors. The results aren't totally wrong, but the accuracy is much worse than I expect.
The following C++ function illustrates the problem. It fills an array with random values, performs forward and backward 3D FFTs, and compares the output to the input. On most OpenCL implementations I've tested the agreement is excellent. For example on NVIDIA OpenCL the maximum error is 7.59959e-07. But on Intel it is hundreds of times larger: 0.000337124.
Any idea what could be causing this? Thank you for your help!
The text was updated successfully, but these errors were encountered: