このコードは、CUDAの行列乗算を並列処理するためにx colとx rowsを取り込むプログラムからのものです。サンプルサイズが大きければ大きいほど良い。数値が大きいとsegフォールトが発生する
x個の乱数を自動的に生成する機能があります。
答えは簡単ですが、私はちょうどその理由を正確に知りたいと思っていました。しかし、配列内の625000000要素を使って実行すると、エラーが発生します。私はそれがintのためにメモリ内に許されているサイズを超えたためだと思う。
数値が大きいほどintの代わりに使用するデータ型は何ですか? これは、データが割り当てられてから、関数に渡される方法です。
a.elements = (float*) malloc(mem_size_A);
合格
int mem_size_A = sizeof(float) * size_A; //for the example let size_A be 625,000,000
:randomInitが何をしているか
randomInit(a.elements, a.rowSize,a.colSize, oRowA, oColA);
が、私は2×2に入ると言っているが、それはかかるので、私は16の倍数にそれを水増ししています2x2と16x16の0にマトリックスを埋め込み、2x2はまだそこにあります。
void randomInit(float* data, int newRowSize,int newColSize, int oldRowSize, int oldColSize)
{
printf("Initializing random function. The new sized row is %d\n", newRowSize);
for (int i = 0; i < newRowSize; i++)//go per row of new sized row.
{
for(int j=0;j<newColSize;j++)
{
printf("This loop\n");
if(i<oldRowSize&&j<oldColSize)
{
data[newRowSize*i+j]=rand()/(float)RAND_MAX;//brandom();
}
else
data[newRowSize*i+j]=0;
}
}
}
私はループ内のprintfで実行しました。
Creating the random numbers now
Initializing random function. The new sized row is 25000
This loop
Segmentation fault
「データ」はどのように定義されていますか? – cnicutar
データ配列をどこでmallocしますか?おそらく小さすぎる –
この関数を呼び出すコードを表示してください。実際には、あなたのsegフォルトを示す小さな、完全なプログラムを作り、あなたの質問にそれを貼り付けてください。 http://sscce.org/を参照してください。 –