The most basic form of my question is how do I write/execute code specifically to run on the Denver2 CPU and how do I prevent other code from being scheduled on the Denver 2 CPU? Even if it’s just links to external resources I would be grateful for any info.
This question comes partly from a technical problem to solve and partly from the curiosity that I have had for a while about the multi-CPU architecture of the Jetson TX2. Currently, the only way I’m aware of to change the CPU that is in use is through the Power Modes currently we are operating our board with the MAXP_CORE_ALL. This setting seems to have the effect of making the Jetson function as a 6 core CPU. According to HTOP, while running our current robotics workload which is a bunch of ros nodes, the load seems to be about evenly distributed across all 6 cores (although this assumption could be wrong). Originally I thought this separate CPU, which I seemed to remember being advertised as being optimized for single-threaded performance, would be perfect for things that I needed to run in near-real-time.
Now I finally have a practical use for this sort of behavior where I have a camera driver that runs at 20FPS when it’s run by itself, 16-18 FPS when run in concert with everything else, and 10-12 when I’m recording it to disk. Now given this breakdown I think there is definitely a bottleneck on the I/O aspect which I am working to optimize right now, but I am hitting all 6 cores of the system pretty hard and wanted to see any performance differences if I moved it to the Denver CPU as the camera driver is critical to the system. I am aware of SYCL which allows you to program heterogeneous targets which made me wonder if by leveraging CUDA I could target code to the specific CPUs on the Jetson TX2?