英伟达graphic engineer面经
整个过程问了很多技术问题,主要有以下
1.第一题是开胃菜, 问我说, 你有这样一段代码:
while () {
for ()
{
if ()
break;
}
}那个break以后是去哪儿?回答: break是break出for循环, 然后做之后的事.
2.你有一个浮点数, 3.999, 你对它取整(int)a, 是多少?"
3,那么, 你如果想让一个浮点数四舍五入, 但仍然用(int)这个操作, 你该怎么办?那个magic number是多少?
4.你如何交换a和b?我回答答, a -= b, b += a, a = b - a,
你这个方法有什么issue? 当两个数太大的时候可能会exceed 整数的表达.
那怎么办?答, tmp = b, b=a, a=tmp;
不用tmp呢?
答, 假设你的地址是32位的, double是64位的, 那么我能这么做:
swap(double *addr1, double *addr2)
{
addr1 | = addr2<<32;
addr2 = addr1 &0x0000ffff;
addr1 = addr1>>32;
}
(实际上这道题,最好的做法是
void xorSwap (int *x, int *y) { if (x != y) { *x ^= *y; *y ^= *x; *x ^= *y; } })
5.如何找出一个数的msb(most significant bit)? 最高位的bit数.答 : while(v>>1) count++;
还有更快的吗?
答, 可以采取二分的思路. 先看v>>16, 如果不是0, 就测v>>24, 如果是0就测v>>8这样子类推. 当然, 最快的方法是说, 就一个数最高位bit的位置其实是对它求log2(v)的过程, 比如说4 就是100, 8 就是1000, 9 是1001但是9的最高位bit数和8一样, 就是log2(9)取整. 所以可以把这个数先cast成double, double x=(double)v|1; 然后, 这个浮点数的指数断的数-1023就是它的msb, 也就是说 (x&0x00000000ffffffff)<
6.你给我描述一下fixed graphic pipeline. (啊...终于到我的老本行了.....)
答, fixed graphic pipeline的方法是, 对于送到图形pipeline里的任务(顶点数据, index数据, 目前的变换矩阵), 先对每个顶点数据进行modelview变换, 然后施加透视投影变换, 下一步是根据index数据以及透视变换的结果进行光栅化, 对于固定管线来说, 光照计算在光栅化之前逐顶点地完成, 然后由光栅化来对像素的颜色进行逐像素插值, 通常采用双曲型插值算法. 然后就是进行z-buffer遮挡检测及剔除, alpha通道合成, 然后完成渲染.
7.那你和我讲一下有shader的pipeline答, 在我的知识里最up to date 的pipeline有四个步骤, vertex shader, tesellation shader, geometry shader, 和pixel shader. vertex shader里可以根据用户编写的shader程序来替换固有管线的顶点变换步骤, tessellation shader是在DirectX11和opengl4.0以后新加入的内容, TS包括hull shader和patch shader两个部分, 对于传入的顶点数据和index数据, HS用来计算control points的变换, 此时可能也可能不对顶点进行进一步地变换, 因用户所采用的算法而定, PatchS中, 根据patch的uv坐标和它的control points的数据, 采用相应的插值算法来计算生成光滑的patch, 比如bicubic spline, bezier patch什么的, whatever, 然后计算的结果传入到GS中去, GS根据需求可能也可能不生成更多的图元或者计算法线, 最后是PS, PS课根据编写的光照程序根据传入的数据逐像素插值, 然后计算最后的光照合成.
8.谈一下你所知道的shading approachs,你刚才谈到compositing, 说说什么是compositing,
9.你知道什么non-rasterization based 算法吗?那光线跟踪呢?
10.现在我们有这样一个项目, 我们的组是做一些关于SLI技术的研发, 我们采用两种approach, 一种是balabala, 另一种是balabala2(这里之所以是balabala因为我没听懂.) 请你谈一下你认为这两种方法的思路是怎样的? 那我说仔细些, 我们有一种方法是说把屏幕分成两份, 一个GPU计算其中一个, 另一个计算另一份, 你觉得这个方法有什么问题?
11.你知道phone shading是怎么做的?
整个过程就是特别关注技术,你回答的时候提到的知识点,面试官也会深挖,看你掌握的程序。
希望大家都能顺利通过面试,早日找到心仪的工作