用cuda写了个程序,怎将另一个c程序的参数传递给.cu文件
cuda吧
全部回复
仅看楼主
level 3
JT2🎃 楼主
先是.C文件
2014年03月19日 01点03分 1
level 3
JT2🎃 楼主
int
main(int argc, char **argv)
{
/* if verbose, print parameters */
if (verbose) {
warn("nx = %d",nx);
warn("dx = %g",dx);
warn("nz = %d",nz);
warn("dz = %g",dz);
warn("nt = %d",nt);
warn("dt = %g",dt);
warn("tmax = %g",tmax);
warn("fmax = %g",fmax);
warn("fpeak = %g",fpeak);
warn("vmin = %g",vmin);
warn("vmax = %g",vmax);
warn("mt = %d",mt);
warn("pml_max = %g",pml_max);
warn("pml_half = %d",pml_thick);
warn("pml_thickness = %d",pml_thickness);
if (dmin==dmax) {
warn("constant density");
} else {
warn("dfile=%s",dfile);
warn("dmin = %g",dmin);
warn("dmax = %g",dmax);
}
}
if (pml_thick != 0)
pml_init (nx, nz, dx, dz, dt, dvv, od, verbose);
/* loop ver time steps */
for (it=0,t=0.0; it<nt; ++it,t+=dt) {
/* if verbose, print time step */
if (verbose>1) warn("it=%d t=%g",it,t);
/* update source function */
if (ns==1)
ptsrc(xs[0],zs[0],nx,dx,fx,nz,dz,fz,dt,t,
fmax,fpeak,tdelay,s);
else
exsrc(ns,xs,zs,nx,dx,fx,nz,dz,fz,dt,t,fmax,s);
/* do one time step */
tstep2(nx,dx,nz,dz,dt,dvv,od,s,pm,p,pp,abs);
2014年03月19日 01点03分 3
level 3
JT2🎃 楼主
参数什么没用的就不打了。。。程序是没错的
2014年03月19日 01点03分 4
level 3
JT2🎃 楼主
接下来是.cu文件
2014年03月19日 01点03分 5
level 3
JT2🎃 楼主
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <cutil.h>
#include <template_kernel.cu>
void runTest( int argc, char** argv);
int main( int argc, char** argv)
{
runTest( argc, argv);
CUT_EXIT(argc,argv);
}
void runTest( int argc, char** argv)
{
CUT_DEVICE_INIT(argc,argv);
unsigned int num_threads =324 ;
unsigned int w=18;
unsigned int h=18;
unsigned int num_blocks = 1;
unsigned int mem_size=sizeof(float)*num_threads* num_blocks;
float* h_ip = (float*) malloc(mem_size);
float* h_ipm = (float*) malloc(mem_size);
float* h_idvv = (float*) malloc(mem_size);
float* h_is = (float*) malloc(mem_size);
float* h_opp = (float*) malloc(mem_size);
float* d_ip;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_ip,mem_size));
float* d_ipm;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_ipm,mem_size));
float* d_idvv;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_idvv,mem_size));
float* d_is;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_is,mem_size));
float *d_opp;
CUDA_SAFE_CALL(cudaMalloc((void**)&d_opp,mem_size));
for( unsigned int i=0; i<num_threads;i++){
h_ip[i]=i;
h_ipm[i]=1;
h_idvv[i]=1;
h_is[i]=1;
/*
printf("i=%d , h_ip=%f , h_ipm=%f , h_idvv=%f , h_is=%f \n",i,h_ip[i],h_ipm[i],h_idvv[i],h_is[i]);
*/
}
CUDA_SAFE_CALL(cudaMemcpy(d_ipm,h_ipm,mem_size,cudaMemcpyHostToDevice));
CUDA_SAFE_CALL(cudaMemcpy(d_ip,h_ip,mem_size,cudaMemcpyHostToDevice));
CUDA_SAFE_CALL(cudaMemcpy(d_idvv,h_idvv,mem_size,cudaMemcpyHostToDevice));
CUDA_SAFE_CALL(cudaMemcpy(d_is,h_is,mem_size,cudaMemcpyHostToDevice));
dim3 grid( 1,1,1);
dim3 block( w,h,1);
testKernel<<< grid, block,mem_size >>>( d_ip,d_ipm,d_opp ,d_is ,d_idvv );
CUT_CHECK_ERROR("Kernelexecution failed");
CUDA_SAFE_CALL( cudaMemcpy( h_opp,d_opp, mem_size, cudaMemcpyDeviceToHost) );
for( unsigned inti=0;i<w-12;i++)
{for( unsigned int j=0;j<h-12;j++){
printf("pp[%d %d]=%f ",i,j,h_opp[j+i*w]);
}
printf("\n\n**********************************************************************\n");
}
free( h_ip);
free( h_ipm);
free( h_idvv);
free( h_is);
free( h_opp);
CUDA_SAFE_CALL(cudaFree(d_ip ));
CUDA_SAFE_CALL(cudaFree(d_ipm ));
CUDA_SAFE_CALL(cudaFree(d_opp ));
CUDA_SAFE_CALL(cudaFree(d_idvv ));
CUDA_SAFE_CALL(cudaFree(d_is ));
}
2014年03月19日 01点03分 6
level 3
JT2🎃 楼主
功能是就是c文件里的tstep2函数,怎么把他们联合在一起运算?
2014年03月19日 01点03分 7
level 3
JT2🎃 楼主
.cu文件的功能就是.c的tstep2函数,怎么让这两个文件一起运行?
2014年03月19日 01点03分 8
1