Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>This works #include "cuda_runtime.h" #include "device_launch_parameters.h" #include #include #include</p> <pre><code>#define m_CellNum 100 #define CELLMAXPARTICLENUM 10 int numPartilces = 10; extern void Initialize(); __device__ struct CCell { int m_CellParticleNumber ; int m_aCellParticleID[CELLMAXPARTICLENUM]; } ; CCell* hvalue; CCell* dvalue; int* dCellParticleID; __constant__ CCell * c_value; // #define VALUE "c_value" __global__ void Sum_constant(CCell* value, int N) { int index; index = blockIdx.x * blockDim.x + threadIdx.x; if (index&gt;=100) return; for(int idx=0;idx&lt;10 ;++idx) value[index].m_aCellParticleID[idx]= value[index].m_aCellParticleID[idx]+ c_value[index].m_aCellParticleID[idx] ; //return; } int main() { int numPartilces = 10; hvalue = new CCell[m_CellNum]; cudaMalloc((void**)&amp;dvalue,m_CellNum * sizeof(CCell)); //calling function to initialize the value Initialize(); //initializing the device momory cudaMemcpy(dvalue, hvalue, sizeof(CCell)*m_CellNum,cudaMemcpyHostToDevice); //copying value to constant memory cudaMemcpyToSymbol(c_value, &amp;dvalue, sizeof(dvalue)); //dividing bolcks and grid int block_size = 4; int n_blocks = m_CellNum/block_size + (m_CellNum%block_size == 0 ? 0:1); //invocking kernel function Sum_constant &lt;&lt;&lt; n_blocks, block_size &gt;&gt;&gt; (dvalue,m_CellNum); //copying value from host to device cudaMemcpy(hvalue, dvalue,m_CellNum * sizeof(CCell),cudaMemcpyDeviceToHost); //showing result for(int i = 0; i &lt; 100; ++i) { std::cout&lt;&lt; "i=" &lt;&lt; i&lt;&lt;std::endl ; for(int j = 0; j &lt;numPartilces ; ++j) { std::cout&lt;&lt;hvalue[i].m_aCellParticleID[j]&lt;&lt;"\n"; } std::cout&lt;&lt;hvalue[i].m_CellParticleNumber&lt;&lt;"Particle Num"&lt;&lt;std::endl; } free(hvalue); cudaFree(dvalue); cudaFree(c_value); return 0; } void Initialize() { for(int i = 0; i &lt; m_CellNum; ++i) { hvalue[i].m_CellParticleNumber = 0; for(int j = 0; j &lt; numPartilces; ++j) { hvalue[i].m_aCellParticleID[j] = j+2; hvalue[i].m_CellParticleNumber++; } } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload