[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
2022-01-29 10:30:14
質問
のチュートリアルの例を見ているところです。
http://code.google.com/p/stanford-cs193g-sp2010/
CUDAを学ぶために このコードでは
__global__
関数を以下に示します。CPU と GPU の 2 つの配列を作成し、GPU の配列に数字の 7 を代入し、GPU の配列のデータを CPU の配列にコピーするだけです。
#include <stdlib.h>
#include <stdio.h>
__global__ void kernel(int *array)
{
int index = blockIdx.x * blockDim.x + threadIdx.x;
array[index] = 7;
}
int main(void)
{
int num_elements = 256;
int num_bytes = num_elements * sizeof(int);
// pointers to host & device arrays
int *device_array = 0;
int *host_array = 0;
// malloc a host array
host_array = (int*)malloc(num_bytes);
// cudaMalloc a device array
cudaMalloc((void**)&device_array, num_bytes);
int block_size = 128;
int grid_size = num_elements / block_size;
kernel<<<grid_size,block_size>>>(device_array);
// download and inspect the result on the host:
cudaMemcpy(host_array, device_array, num_bytes, cudaMemcpyDeviceToHost);
// print out the result element by element
for(int i=0; i < num_elements; ++i)
{
printf("%d ", host_array[i]);
}
// deallocate memory
free(host_array);
cudaFree(device_array);
}
私の疑問は、なぜ
cudaMalloc((void**)&device_array, num_bytes);
ステートメントにダブルポインタを使用していますか?偶数
こちら
の定義によると、最初の引数はダブルポインタです。
のように、GPU上に割り当てられたメモリの先頭へのポインタを返すだけではダメなのでしょうか?
malloc
関数がCPU上で行っているのでしょうか?
解決方法は?
すべてのCUDA API関数は、エラーコード(またはエラーが発生しなかった場合はcudaSuccess)を返します。他のすべてのパラメータは参照渡しです。しかし、プレーンCでは参照を持つことができません。そのため、戻り情報を格納する変数のアドレスを渡す必要があります。ポインターを返すので、ダブルポインターを渡す必要があります。
また、同じ理由でアドレスを操作する有名な関数として
scanf
という関数があります。何度、この書き忘れをしたことか
&
を、値を格納したい変数の前に置くことです;)
int i;
scanf("%d",&i);
関連
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】ポインタと整数の比較で警告が出る
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】C言語で入力が整数型かどうかチェックする
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】.axfファイルとは何ですか?