-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathutils.c
More file actions
62 lines (51 loc) · 1.59 KB
/
utils.c
File metadata and controls
62 lines (51 loc) · 1.59 KB
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
#define WARP_SIZE 16
#define DEBUG false
/* ---------------- [[HELPER FUNCTIONS FOR GLOBAL MEMORY]] ---------------- */
float *_copyHostDevice(float *src, int src_size) {
float *src_d;
cudaMalloc((void**)&src_d, sizeof(float) * src_size);
cudaMemcpy(src_d, src, sizeof(float) * src_size, cudaMemcpyHostToDevice);
return src_d;
}
float *_copyDeviceHost(float *src, int src_size, float *dst=NULL) {
float *target;
if (dst == NULL) {
target = (float*)malloc(sizeof(float) * src_size);
} else {
target = dst;
}
cudaMemcpy(target, src, sizeof(float) * src_size, cudaMemcpyDeviceToHost);
return target;
}
/* ---------------- [[HELPER FUNCTIONS FOR TILING]] ---------------- */
typedef struct {
int x;
int y;
} GlobalDim;
__device__ GlobalDim getGlobalDim(dim3 blockDim, dim3 blockIdx, dim3 threadIdx) {
GlobalDim gd;
gd.x = blockDim.x * blockIdx.x + threadIdx.x;
gd.y = blockDim.y * blockIdx.y + threadIdx.y;
return gd;
}
dim3 getGridBasedOnBlockSize(int width, int height, int block_size) {
int gridX = (int)ceil((float)width / block_size);
int gridY = (int)ceil((float)height / block_size);
return dim3(gridX, gridY);
}
/* ---------------- [[HELPER FUNCTIONS FOR DEBUGGING]] ---------------- */
void _sleep(int n) {
#ifdef __APPLE__
sleep(n);
#else _WIN32
Sleep(n * 1000);
#endif
}
void drawMatrix(float *m, int width, int height) {
for (int i=0; i < height; i++) {
for (int j=0; j < width; j++) {
printf("%f ", m[i * width + j]);
}
printf("\n");
}
}