win10 cuda_小白之旅(1):c語言的回顧
阿新 • • 發佈:2018-12-14
博主自己學習,僅此記錄,並方便學過c、已經配置好cuda的朋友交流學習。(我機子cuda9.0)
第一個cuda專案
我用的ide是vs2015。新建專案:選中cuda。
然後會自動生成一個.cu,求和的一個程式,用來檢查你是否安裝好,沒啥實際意思(我覺得是這樣),移除掉他就好了,接著,自己新建一個.cpp文件,名字任意,由於cuda使用的就是c,所以在此先溫習下c的相關知識
陣列
舉個基本例子 int in[]={1,2,3},當然也可以分別賦值:in[0]=1...
需要注意的點:
- 索引計數從零開始;
- 宣告的陣列名是一個指向一定大小(元素數目*每個元素位元組數,這裡是3*size(int))的連續記憶體塊中第一個元素的指標。[]中的數告訴系統指定元素需要在記憶體空間跨過多少步長;
- 不可以一次性賦值,比如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)
{
}
一些知識點:
- 花括號不用加分號;
- 如果只有兩句語句,可以使用if (x>0) y=x; else y=0;實現relu函式。
- 當然也可以使用三元運算子y = (x>0)? x:0;
其他
continue : 跳過一個迴圈的過程,類似python pass;
break:離開當前迴圈,注意是迴圈,不是if,else;
goto:離開當前迴圈,前往......
switch:常數索引語句
參考:《cuda高效能平行計算》