Salve,
sarei curioso di sapere come è organizzata e come si comporta la shared memory all'interno dell'architettura cuda. In particolare si parla di una shared memory per ciascun MP (nel mio caso, ho una GF210 2 MP quindi 2 SM da 16 KB ciascuna). Ciascun blocco ha una shared memory, al cui interno thread appartenenti allo stesso blocco possono condividere dati. Ciò vuol dire che se io, all'interno di un MP ho una shared memory da 16KB, e avendo 8 blocchi, ciascun blocco vede 2KB?
Sostanzialmente il mio problema riguarda la ripartizione di un'immagine, e io vorrei fare in modo che l'elaborazione di ciascuna parte sia effettuata a partire dalla shared memory e non dalla memoria globale a disposizione (più lenta). Non sapendo però in che misura effettuare tale ripartizione, ho paura di non apportare nessun miglioramento!! Se c'è qualche anima pia che mi possa chiarire le cose gliene sarei grato
P.S. Allego le specifiche della mia scheda video
CUDA Device Query (Driver API) statically linked version
There is 1 device supporting CUDA
Device 0: "GeForce 210"
CUDA Driver Version: 3.0
CUDA Capability Major revision number: 1
CUDA Capability Minor revision number: 2
Total amount of global memory: 536870912 bytes
Number of multiprocessors: 2
Number of cores: 16
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes
Total number of registers available per block: 16384
Warp size: 32
Maximum number of threads per block: 512
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
Maximum memory pitch: 262144 bytes
Texture alignment: 256 bytes
Clock rate: 1.40 GHz
Concurrent copy and execution: Yes
Run time limit on kernels: No
Integrated: No
Support host page-locked memory mapping: Yes
Compute mode: Default (multiple host threads can use this device simultaneously)