- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Hello
In the attached code which is reduced from a larger code, the middle-value of my vector of arrays specifically blows up when enqueued and just printed from the kernel (no operation is done, only read and print). But, if an operation is done and printed I get expected value. I request your advice on this behavior from the kernel.
Please note this behavior is happening only on GPU and works as expected on the CPU.
I have made suitable comments in the code to identify the value that blows up inside the kernel and printing the expected values before the kernel for comparison.
System spec: Ubuntu 18.04.4 LTS, Intel® Core™ i7-7700HQ CPU @ 2.80GHz, Intel® HD Graphics 630 (Kaby Lake GT2)
oneAPI version beta 07, running on default L0 BE
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Hi Suraj,
Thank you for reporting this problem. Actually, at some point sycl::stream is showing such behavior and if you see closely you will find that the stream buffer is copying the previous content for long results. Please see the below snippet of the output (with some changes in code)
o/p
kernel 4 0 0.5878
kernel 4 1 -0.000000087422771453857421875
kernel 4 2 421875000087422771453857421875
kernel 5 0 421875000087422771453857421875
kernel 5 1 -0.5878
And if you will check the result after the kernel you will get the correct values inside your buffer, you can also try to print just value of readafter[i][j] with i==5 and j==0 you will get the correct result.
And if there is a need to print all of these values inside the kernel and can use experimental printf this will give you the correct result with your given code. Please refer below the code snippet to use experimental printf.
#ifdef __SYCL_DEVICE_ONLY__
#define CONSTANT __attribute__((opencl_constant))
#else
#define CONSTANT
#endif
//below lines inside kernel
static const CONSTANT char FMT[] = "n: %d\n";
sycl::intel::experimental::printf(FMT, 7);
We will also report this behavior with sycl::stream to the concerned team meanwhile you can continue debugging your use-case with experimental printf. Also, please check the attached updated code.
Warm Regards,
Abhishek
링크가 복사됨
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Hi Suraj,
Thank you for reporting this problem. Actually, at some point sycl::stream is showing such behavior and if you see closely you will find that the stream buffer is copying the previous content for long results. Please see the below snippet of the output (with some changes in code)
o/p
kernel 4 0 0.5878
kernel 4 1 -0.000000087422771453857421875
kernel 4 2 421875000087422771453857421875
kernel 5 0 421875000087422771453857421875
kernel 5 1 -0.5878
And if you will check the result after the kernel you will get the correct values inside your buffer, you can also try to print just value of readafter[i][j] with i==5 and j==0 you will get the correct result.
And if there is a need to print all of these values inside the kernel and can use experimental printf this will give you the correct result with your given code. Please refer below the code snippet to use experimental printf.
#ifdef __SYCL_DEVICE_ONLY__
#define CONSTANT __attribute__((opencl_constant))
#else
#define CONSTANT
#endif
//below lines inside kernel
static const CONSTANT char FMT[] = "n: %d\n";
sycl::intel::experimental::printf(FMT, 7);
We will also report this behavior with sycl::stream to the concerned team meanwhile you can continue debugging your use-case with experimental printf. Also, please check the attached updated code.
Warm Regards,
Abhishek
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Thank you, Abhishek for the code snippet. "experimental printf" works well. The issue is resolved for me.
- 신규로 표시
- 북마크
- 구독
- 소거
- RSS 피드 구독
- 강조
- 인쇄
- 부적절한 컨텐트 신고
Hi Suraj,
Thank you for the confirmation. Please post a new thread if you have any other issues.
Warm Regards,
Abhishek
