デバイスファンクションからアクセスするには、大きなデータファイル(1000000行と2カラム)が必要です。計算のすべてのステップで、変数の値がデバイス関数内で変化し、データファイルの特定の行の値が必要になります。そのため、すべてのステップで変数の値を制御することができないため、データファイル全体をデバイス関数で使用できるようにする必要があります。デバイスファンクションからの大きなデータファイルアクセス
以下のプログラムでは、変数の値がデバイスファンクションからホストデバイスファンクションに送信され、ホストファンクションからホストファンクション(データファイルが使用可能)に変数が送信されます。ホスト関数は配列全体から必要な値を取得します。このようにして、ある特定のステップに必要な値がデバイス関数に渡されます。しかし、このプロセスはコードのために働いていません。
私はCUDA V0.2.1221かのキーワード__host__ __device__
作品かどうかわかりません。
デバイスの機能に大きなデータファイルをaccssする方法を提案してください。
コードの必要な部分にはbeowが与えられます。
__host__
void magnetic(R *xx, R *magfield)
{
float Bx[1000001],By[1000001];
R x[3];
int k;
FILE *fp;
fp = fopen("field.dat", "r");
for (int i=0;i<=1000000;i++)
{
fscanf(fp, "%f%f", &Bx[i], &By[i]);
}
fclose(fp);
printf("%f\t%f\n",Bx[0],By[0]);
for(int i=0;i<3;i++){
x[i]=*xx;
xx++;
}
//printf("%f\t%f\t%f\n",x[0],x[1],x[2]);
k=round((zi+x[2])/dz);
magfield[0]=Bx[k];
magfield[1]=By[k];
magfield[2]=2.;
}
__host__
void magnetic(R *xx, R *magfield);
__host__ __device__
void field(R *xx, R *magfield){
R x[3];
for(int i=0;i<3;i++){
x[i]=*xx;
xx++;
}
magnetic(x,magfield);
}
__host__ __device__
void field(R *xx, R *magfield);
__device__
void eval_rhs( R *f, R *df, R time, int istep) {
R magfield[3],vXB[3];
df[0] = f[3];
df[1] = f[4];
df[2] = f[5];
field(&f[0], magfield);
crossmultiply(&f[3], magfield, vXB);
df[3] = Ex + vXB[0];
df[4] = Ey + vXB[1];
df[5] = Ez + vXB[2];
}
「cuda V0.2.1221」とは何ですか? – talonmies
デバイスコードから大きなデータにアクセスするためのサンプルコードは、次のような回答があります。http://stackoverflow.com/questions/27282273/is-it-possible-to-access-hard-disk-directly-from-gpu/ 36899573#36899573多分あなたの質問は重複しています。 –