CUDA夏令营
参加CUDA On Arm Platform 线上夏令营学习笔记01
前言
说一下参加这次夏令营的初衷吧。如果对NeRF有研究的朋友应该知道NVIDIA今年年初搞了个big news,Instant NGP,可以在五秒内重建出一个三维模型,将nerf的训练时间从以天为单位,降低到以秒计算。这是非常amazing的work。而我的研究领域恰好是三维重建,因此对这篇论文很感兴趣。
但是,这篇论文他不按套路出牌,并不是用传统的pytorch实现,整个项目都是用CUDA写的,当然github上也有大神用python复现了一下,但是速度比用cuda写的有很大差距,换句话说,这个work之所以牛逼,不仅是哈希编码这种算法上的加速,cuda这种底层加速也功不可没。因此,怀揣着好奇心我打算学一下cuda并加入了NVIDIA社区举办的夏令营活动。
这里在夏令营最后一天做一下实战总结,并且后期这个cuda专栏可能会继续更新,有时间的话,应该还会出一个专栏进行Instant NGP的源码讲解。
一、cuda究竟做了什么?
正如我前面所说,本次总结是基于实战的,在此次夏令营中,我觉得难度最高的两个work,一个是矩阵乘法,另一个是求取一个数组的累加。今天我们主要讲第二个work,通过这个work我们可以了解相比于CPU,GPU究竟做了什么,怎么做到的?
二、实战
1.问题
给定一个数组A,它包含1000000个int类型的元素,求他所有的元素之和:
输入:A[1000000]
输出:output(A中所有元素之和)
如果在CPU中,代码如下(示例):
int _sum_cpu(int *ptr, int count)
{
int sum = 0;
for (int i = 0; i < count; i++)
{
sum += ptr[i];
}
return sum;
}
可以看到用CPU的话代码