1. 程式人生 > >win10 cuda_小白之旅(1):c語言的回顧

win10 cuda_小白之旅(1):c語言的回顧

博主自己學習,僅此記錄,並方便學過c、已經配置好cuda的朋友交流學習。(我機子cuda9.0)

第一個cuda專案

        我用的ide是vs2015。新建專案:選中cuda。

然後會自動生成一個.cu,求和的一個程式,用來檢查你是否安裝好,沒啥實際意思(我覺得是這樣),移除掉他就好了,接著,自己新建一個.cpp文件,名字任意,由於cuda使用的就是c,所以在此先溫習下c的相關知識

陣列

舉個基本例子 int in[]={1,2,3},當然也可以分別賦值:in[0]=1...

需要注意的點:

  1. 索引計數從零開始;
  2. 宣告的陣列名是一個指向一定大小(元素數目*每個元素位元組數,這裡是3*size(int))的連續記憶體塊中第一個元素的指標。[]中的數告訴系統指定元素需要在記憶體空間跨過多少步長;
  3. 不可以一次性賦值,比如int out[3]=in,系統一定會報錯,這將需要控制語句(if,for等)的使用,也就是下一節;

控制語句

for 語句

vs 中的for程式碼補全是:

	for (size_t i = 0; i < length; i++)
	{

	}

size_t 是無符號型的整數。注意,for迴圈在我們走向cuda平行計算中扮演關鍵的角色。接下來實現一下複製陣列的功能。

#include<iostream>
using namespace std;
#define	N 3
int main()
{
	int in[] = { 1,2,3 };
	int inCopy[N];

	for (size_t i = 0; i < N; i++)
	{
		inCopy[i] = in[i];
	}
	return 0;
}

if 語句

if語句的標準格式如下:

	if (true)
		{

		}

一些知識點:

  1. 花括號不用加分號;
  2. 如果只有兩句語句,可以使用if (x>0) y=x; else y=0;實現relu函式。
  3. 當然也可以使用三元運算子y = (x>0)? x:0;

其他

continue : 跳過一個迴圈的過程,類似python pass;

break:離開當前迴圈,注意是迴圈,不是if,else;

goto:離開當前迴圈,前往......

switch:常數索引語句

參考:《cuda高效能平行計算》