Great job folks! Very cool.
https://github.com/lifting-bits/mcsema
https://github.com/lifting-bits/remill
https://blog.trailofbits.com/2018/01/23/heavy-lifting-with-m...
Like tyoma said in the previous comment, if you had a use case where you needed to run lots of things in parallel, then this would be useful. Latency is much higher on GPUs (clock speeds are lower and memory access latencies are higher), and system call support will make this even worse, so this probably wouldn't fare well unless you had a use case that could utilize that high a degree of parallelism.
- How does the generated ptx code interface with the rest of the system. Is it embedded into some CUDA code?
- Any plans to open source?
1) The generated PTX is written to a file and then dynamically loaded into the fuzzer, which is a CUDA program. Specifically, the cuModuleLoad function can be called to load a ptx file, and then cuModuleGetFunction can be used kind of like dlsym to get pointers to functions that were loaded from the ptx.
2) We do plan to open source! Currently the code is definitely research grade and needs some more work.
Edit: another indicator is if something works at -O0 but breaks at higher optimization levels. That could be undefined behavior in your code, but it could also suggest a bug in the optimizer. Sometimes it's helpful to fiddle with the code to figure out what causes the compiler to break. For example, with the ptxas bug, our code would work fine unless we had a long chain of function calls (even if the functions in the call chain weren't doing anything interesting). That sounds more like a compiler bug than a logic error on our part. Sometimes, you can even figure out which specific pass of the optimizer is breaking the code; LLVM has a bisect tool that allows you to run optimization passes individually until you observe the output breaking.
Cool use of preemptible T4s! The Chrome Clusterfuzz folks were a launch partner for Preemptible VMs, so I have a soft spot for preemptible fuzzing :).
Let me know if you need more quota or have any feedback / questions. We recently improved the preemption rate for preemptible GPUs drastically, so I hope you’ve experienced that.
It's very interesting seeing just how much performance can be squeezed out like this.