学习一种新的编程语言最佳的方法是使用新语言写程序,第一个MXMACA程序和其他任何语言的程序都相同:打印字符串“Hello World”。
现在,你已经准备好编写第一个MXMACA C程序了。编写MXMACA C程序的主要步骤是:
● 创建一个特殊文件扩展名为.c的源代码文件。
● 使用MXMACA mxcc编译器(mxcc)编译程序。
● 从命令行运行可执行文件,该可执行文件有可在GPU上运行的核函数代码。
具体步骤如下。
(1)首先,我们编写一个打印“Hello World”的程序,示例如下。
(2)将代码保存到文件hello.c,然后用mxcc编译它。和gcc及其他编译器一样,mxcc有类似的语义。
如果运行可执行文件hello,它将输出:
(3)编写一个名为helloFromGpu的核函数,用它来输出字符串“Hello World from GPU!”的代码如下。
(4)用限定符__global__告诉mxcc,该函数将从CPU中调用并在GPU上执行。使用以下代码启动核函数。
三重尖括号用于标记主机线程对设备端代码的调用。核函数是由线程数组执行的,所有线程运行相同的代码。三重尖括号里的参数是执行配置,它指定将使用多少线程来执行该核函数。
在这个例子中,将会运行10个GPU线程,打印“Hello World”的完整代码见示例代码2-1。
函数mcDeviceReset用来显式销毁并清除与当前设备有关的所有资源。将代码保存到helloFromGpu.c文件,然后用mxcc编译它。
运行这个编译出来的可执行文件,它将输出10个“Hello World from GPU!”字符串,每个GPU线程输出一条,其结果如下。
(1)将文件helloFromGpu.c中的函数mcDeviceReset删除,然后编译并运行,看看会发生什么。
(2)用函数mcDeviceSynchronize替换文件helloFromGpu.c中的函数mcDeviceReset,然后编译并运行,看看会发生什么。
(3)每个执行核函数的线程都有一个唯一的线程ID,通过内置变量threadIdx.x可以在核函数中对线程进行访问。请在文件helloFromGpu.c中修改核函数的线程索引,使输出如下。