Qualcomm visited our campus to hire engineers for their Graphics team. The initial screening was conducted on HirePro (details of which can be found easily online - basic apti, C programming and computer science).
Post that, there were two rounds:
Round 1 was taken by a senior staff engineer, who had a significant amount of experience working with compilers. I had worked with LLVM as part of a course project, so they had questions regarding that - how does LLVM work, some questions related to the IR, how does the CodeGen part of LLVM work, which part of it did I work on for my project and so on. The next question was related to matrix multiplication and how would you improve its performance, to which I suggested the tiled approach. They then asked me how would you select the tile size and some related questions, which I was able to answer. Some other questions related to a project that I had done on the Linux kernel which we discussed briefly and post this, they asked me to reverse a linked list, which I wrote and that was it. The interview was scheduled for 45 minutes, but we got done in around 25 minutes. They asked me if I had questions, and that discussion went on for another 10 minutes, and we were done.
Round 2 was taken by another person from the same team. He was quite experienced too, and started with some basic coding questions. - 2SUM, find out whether a number is a power of two and so on. Fairly basic, nothing too difficult at all. Then, gave me a couple of code snippets which I had to optimise - the solution to one was just parallelise it and the second one could be optimised by reducing the number of conditional branches that were being taken.
for(i=0;i<2n;i++) {
a[i] = b[i]+c[i]
}
for(j=0;j<n;j++) {
if(j<=2) a[j]--;
else {
a[j]++;
}
}He then asked me some questions related to a project where I had worked with CUDA - what are threads, what are warps, what are thread blocks and so on. Asked me to write code for matrix multiplication for GPUs - didn't remember the exact syntax but gave him an idea of how you would want to map threads to calculations and so on. Asked me what kind of GPUs I had worked with - GPGPUs, or gaming GPUs and so on. Asked me some more questions related to synchronisation primitives in GPUs - where would you need them, what are the cons of using them, and that was about it. Lasted for around 45 minutes.
Verdict: Selected.
Compensation Details: Wrote about it here.