summaryrefslogtreecommitdiff
path: root/MPBenchmarks/MemoryTasks.h
blob: 92e35f6a382264bdb40c9c33572241738552bf94 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Memory tasks
// (c) EB Nov 2009

#ifndef MemoryTasks_h
#define MemoryTasks_h

#include "Config.h"
#include "GPUTask.h"
#include "CPUTask.h"

// Copy two buffers (GPU)
class CopyGPUTask : public GPUTask
{

public:

  enum CopyType
  {
    HOST_TO_DEVICE_COPY,
    DEVICE_TO_HOST_COPY,
    DEVICE_TO_DEVICE_COPY
  };

  CopyGPUTask(int copyType,Logger * log) : GPUTask(0,log)
  {
    mCT = copyType;
  }

  ~CopyGPUTask()
  {
  }

  double run(int workgroupSize,size_t sz);

private:

  // Copy type
  int mCT;

};

// Zero one buffer (GPU)
class ZeroGPUTask : public GPUTask
{

public:

  ZeroGPUTask(int wordSize,Logger * log) : GPUTask("gpu_zero.cl",log)
  {
    mWS = wordSize;
    char options[200];
    _snprintf(options,200,"-DWORD_SIZE=%d",mWS);
    buildProgram(options,log);
  }

  ~ZeroGPUTask()
  {
  }

  double run(int workgroupSize,size_t sz);

private:

  // Word size
  int mWS;

};

// CPU

class CopyCPUTask : public CPUTask
{
public:
  double run(int nThreads,size_t sz);
};

class ZeroCPUTask : public CPUTask
{
public:
  double run(int nThreads,size_t sz);
};

#endif // MemoryTasks_h