feat(lab01): add Slice GM Host lab
This commit is contained in:
@@ -22,12 +22,21 @@ static __device__ float f(float x);
|
||||
* tabGM est un tableau promu, qui a autant de case que de thread
|
||||
* </pre>
|
||||
*/
|
||||
__global__ void reductionIntraThreadGMHOST(float* tabGM , int nbSlice)
|
||||
{
|
||||
__global__ void reductionIntraThreadGMHOST(float* tabGM , int nbSlice) {
|
||||
const int NB_THREAD = Thread2D::nbThread();
|
||||
const int TID = Thread2D::tid();
|
||||
|
||||
// TODO SliceGMHOST
|
||||
const float delta_x = 1.f / (float)nbSlice;
|
||||
|
||||
int s = TID;
|
||||
tabGM[TID] = 0.f;
|
||||
|
||||
while(s < nbSlice) {
|
||||
float xi = s * delta_x;
|
||||
tabGM[TID] += f(xi);
|
||||
|
||||
s+=NB_THREAD;
|
||||
}
|
||||
|
||||
// Conseils :
|
||||
//
|
||||
@@ -43,13 +52,10 @@ __global__ void reductionIntraThreadGMHOST(float* tabGM , int nbSlice)
|
||||
|* Private *|
|
||||
\*-------------------------------------*/
|
||||
|
||||
__device__ float f(float x)
|
||||
{
|
||||
// TODO SliceGMHOST
|
||||
return -1;
|
||||
}
|
||||
__device__ float f(float x) {
|
||||
return 4.f / (1.f + x * x);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------*\
|
||||
|* End *|
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -29,20 +29,19 @@ extern __global__ void reductionIntraThreadGMHOST(float* tabGM,int nbSlice);
|
||||
|
||||
SliceGMHOST::SliceGMHOST(Grid grid , int nbSlice , double* ptrPiHat , bool isVerbose) :
|
||||
RunnableGPU(grid, "SliceGM_HOST_" + to_string(nbSlice), isVerbose), // classe parente
|
||||
//
|
||||
nbSlice(nbSlice), //
|
||||
ptrPiHat(ptrPiHat) //
|
||||
{
|
||||
this->nTabGM = -1; // TODO SliceGMHOST // le nombre de case de tabGM. Indication : grid.threadCounts() donne le nombre de thread ed la grille
|
||||
this->sizeTabGM = -1; // TODO SliceGMHOST // la taille en octet de tabGM [octet]
|
||||
nbSlice(nbSlice),
|
||||
ptrPiHat(ptrPiHat)
|
||||
{
|
||||
|
||||
// TODO SliceGMHOST
|
||||
}
|
||||
this->nTabGM = grid.threadCounts(); // le nombre de case de tabGM. Indication : grid.threadCounts() donne le nombre de thread de la grille
|
||||
this->sizeTabGM = nTabGM * sizeof(float); // la taille en octet de tabGM [octet]
|
||||
|
||||
SliceGMHOST::~SliceGMHOST(void)
|
||||
{
|
||||
// TODO SliceGMHOST
|
||||
}
|
||||
GM::malloc(&tabGM, sizeTabGM);
|
||||
}
|
||||
|
||||
SliceGMHOST::~SliceGMHOST(void) {
|
||||
GM::free(tabGM);
|
||||
}
|
||||
|
||||
/*--------------------------------------*\
|
||||
|* Methode *|
|
||||
@@ -60,9 +59,9 @@ SliceGMHOST::~SliceGMHOST(void)
|
||||
*
|
||||
* </pre>
|
||||
*/
|
||||
void SliceGMHOST::run()
|
||||
{
|
||||
// TODO SliceGMHOST // call the kernel
|
||||
void SliceGMHOST::run() {
|
||||
|
||||
reductionIntraThreadGMHOST<<<dg, db>>>(tabGM, nbSlice);
|
||||
|
||||
// Indication:
|
||||
// dg et db sont stokcer dans la classe parente
|
||||
@@ -70,7 +69,7 @@ void SliceGMHOST::run()
|
||||
// exemple : reductionIntraThreadGMHOST<<<dg,db>>>(...)
|
||||
|
||||
reductionHost();
|
||||
}
|
||||
}
|
||||
|
||||
/*--------------------------------------*\
|
||||
|* Private *|
|
||||
@@ -88,7 +87,15 @@ void SliceGMHOST::reductionHost()
|
||||
|
||||
|
||||
// TODO SliceGMHOST
|
||||
float tab[nTabGM];
|
||||
GM::memcpyDToH(tab, tabGM, sizeTabGM);
|
||||
for (int i = 0; i < nTabGM; i++) {
|
||||
*ptrPiHat += (double)tab[i];
|
||||
}
|
||||
const double delta_x = 1.f / (float)nbSlice;
|
||||
*ptrPiHat *= delta_x;
|
||||
}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------*\
|
||||
|* End *|
|
||||
|
||||
@@ -11,29 +11,27 @@
|
||||
|* Impelmentation *|
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
namespace sliceGMHost
|
||||
{
|
||||
namespace sliceGMHost {
|
||||
|
||||
class BestGrid
|
||||
{
|
||||
class BestGrid {
|
||||
|
||||
public:
|
||||
public:
|
||||
|
||||
static Grid get()
|
||||
{
|
||||
const int MP = Hardware::getMPCount();
|
||||
static Grid get() {
|
||||
const int MP = Hardware::getMPCount();
|
||||
const int CORE_MP = Hardware::getCoreCountMP();
|
||||
|
||||
// TODO SliceGMHOST grid
|
||||
dim3 dg(MP, 1, 1);
|
||||
dim3 db(CORE_MP, 2, 1); // produit <=1024
|
||||
Grid grid(dg, db);
|
||||
|
||||
// to remove once coded
|
||||
{
|
||||
Couts::redln("aie aie aie, your best grid won t build itself");
|
||||
assert(false);
|
||||
}
|
||||
}
|
||||
return grid;
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------------*\
|
||||
|* End *|
|
||||
|
||||
@@ -29,7 +29,7 @@ int main(int argc , char** argv)
|
||||
// public
|
||||
{
|
||||
cudaContext.deviceId = 0; // in [0,2] width Server Cuda3
|
||||
cudaContext.launchMode = LaunchModeMOO::USE; // USE TEST BENCHMARK FORCEBRUT
|
||||
cudaContext.launchMode = LaunchModeMOO::TEST; // USE TEST BENCHMARK FORCEBRUT
|
||||
|
||||
cudaContext.deviceDriver = DeviceDriver::LOAD_ALL; // LOAD_CURRENT LOAD_ALL
|
||||
cudaContext.deviceInfo = DeviceInfo::ALL_SIMPLE; // NONE ALL ALL_SIMPLE CURRENT
|
||||
@@ -49,4 +49,3 @@ int main(int argc , char** argv)
|
||||
/*----------------------------------------------------------------------*\
|
||||
|* End *|
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -182,4 +182,3 @@ void addvectorTristream()
|
||||
/*----------------------------------------------------------------------*\
|
||||
|* End *|
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -55,8 +55,8 @@ int mainTest()
|
||||
void slice()
|
||||
{
|
||||
VTSliceGMHOST test1;
|
||||
VTSliceGM test2;
|
||||
VTSliceSM test3;
|
||||
// VTSliceGM test2;
|
||||
// VTSliceSM test3;
|
||||
|
||||
|
||||
test1.run();
|
||||
@@ -96,4 +96,3 @@ void vectorStream()
|
||||
/*----------------------------------------------------------------------*\
|
||||
|* End *|
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
|
||||
@@ -67,8 +67,8 @@ int mainUse()
|
||||
void slice(bool& isOk)
|
||||
{
|
||||
SliceGmHostUse sliceGmHostUse(IS_VERBOSE);
|
||||
SliceGmUse sliceGmUse(IS_VERBOSE);
|
||||
SliceSmUse sliceSmUse(IS_VERBOSE);
|
||||
// SliceGmUse sliceGmUse(IS_VERBOSE);
|
||||
// SliceSmUse sliceSmUse(IS_VERBOSE);
|
||||
|
||||
isOk &= sliceGmHostUse.isOk(IS_VERBOSE);
|
||||
// isOk &= sliceGmUse.isOk(IS_VERBOSE);
|
||||
@@ -213,4 +213,3 @@ void print(bool isSuccess)
|
||||
/*----------------------------------------------------------------------*\
|
||||
|* End *|
|
||||
\*---------------------------------------------------------------------*/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user