Limitations of the Emulator
- Concurrent executionModeling of concurrent kernel executions has limitations. During execution, the emulator is not guaranteed to run interacting work items in parallel. Therefore, some concurrent execution behaviors, such as different kernels accessing global memory without a barrier for synchronization, might generate inconsistent emulation results between executions.
- Same address space executionThe emulator executes the host runtime and kernels in the same address space. Certain pointer or array use in your host application might cause the kernel program to fail and vice versa. Example uses include indexing externally allocated memory and writing to random pointers. To analyze your program, you may use memory leak detection tools, such as Valgrind. However, the host might encounter a fatal error caused by out-of-bounds write operations in your kernel and vice versa.
- Conditional pipe operationsEmulation of pipe behavior has limitations, especially for conditional pipe operations where the kernel does not call the pipe operation in every loop iteration. In these cases, the emulator might execute pipe operations in a different order than on the hardware.
- GCC versionYou must run the emulator host programs on Linux with a version oflibstdc++.sofrom GCC 7.4.0 or later. You can achieve this either by installing GCC 7.4.0 or later on your system or setting theLD_LIBRARY_PATHenvironment variable such that a compatiblelibstdc++.sois identified.