使用cuda實現兩個陣列的相加,熟悉cuda相關函式的使用。
#include #include __global__ void addkernel( int* c, const int* a, const int* b )
cudaerror_t cuda_add( const int* a, const int* b, int* out, int size )
//2、分配視訊記憶體空間
cudastatus= cudamalloc( (void**)&dev_a, size * sizeof(int) );
if( cudastatus != cudasuccess )
cudastatus= cudamalloc( (void**)&dev_b, size * sizeof(int) );
if( cudastatus != cudasuccess )
cudastatus= cudamalloc( (void**)&dev_c, size * sizeof(int) );
if( cudastatus != cudasuccess )
//3、將宿主程式資料複製到視訊記憶體中
cudastatus= cudamemcpy( dev_a, a, size * sizeof( int ), cudamemcpyhosttodevice );
if( cudastatus != cudasuccess )
cudastatus= cudamemcpy( dev_b, b, size * sizeof( int ), cudamemcpyhosttodevice );
if( cudastatus != cudasuccess )
//4、執行程式,宿主程式等待顯示卡執行完畢
addkernel<<<1,size>>>( dev_c, dev_a, dev_b );
//5、查詢核心初始化的時候是否出錯
cudastatus= cudagetlasterror( );
if( cudastatus != cudasuccess )
//6、與核心同步等待執行完畢
cudastatus= cudadevicesynchronize( );
if( cudastatus != cudasuccess )
//7、獲取資料
cudastatus= cudamemcpy( out, dev_c, size * sizeof( int ), cudamemcpydevicetohost );
if( cudastatus != cudasuccess )
}cudafree(dev_c );
cudafree(dev_a );
cudafree(dev_b );
return cudastatus;
}int main( int argc, char** argv ) ;
const int b[arraysize] = ;
int c[arraysize] = ;
int i;
cudadeviceprop prop;
//獲取cuda數目
int count;
cudagetdevicecount(&count);
printf("cuda數==%d\n",count);
for(i=0;i編譯執行指令:
# nvcc first_cuda.cu -o first_cuda
# ./first_cuda
執行結果:
cuda數==1
compute capability: 3.5
shared mem per mp: 49152
運算結果是:
c陣列[11, 22, 33, 44, 55]
兩個數字相加
兩個數字相加 題幹 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3...
不用 實現兩個數相加
方法一 用邏輯運算 a b 表示a b 中每位不進製的和,a b 1 二進位制加法 1 1 1,把1左移以為10,1 1 10,表示a b 所有進製 思想是兩個數字相加中能分解成 不進製的和 每一位相加的進製 a b a b a b 1 如果a b 0的時候 a b a b 負整數運算也可以,因為補...
兩個數相加(python版)
給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。class solution object def a...