-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsoa.cu
48 lines (46 loc) · 1.39 KB
/
soa.cu
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
#include "soa.h"
#include <stdlib.h>
struct VectorNArray2DSoA makeGPUArray2DSoA(int Nx, int Ny) {
struct VectorNArray2DSoA vecarray;
vecarray.Nx = Nx;
vecarray.Ny = Ny;
for (int i = 0; i < N; i++) {
cudaMalloc(&vecarray.data[i], sizeof(double) * Nx * Ny);
}
return vecarray;
}
struct VectorNArray2DSoA makeCPUArray2DSoA(int Nx, int Ny) {
struct VectorNArray2DSoA vecarray;
vecarray.Nx = Nx;
vecarray.Ny = Ny;
for (int i = 0; i < N; i++) {
vecarray.data[i] = (double *)malloc(sizeof(double) * Nx * Ny);
}
return vecarray;
}
void copyArray2DSoA(struct VectorNArray2DSoA *src, struct VectorNArray2DSoA *dst,
cudaMemcpyKind kind){
for (int i = 0; i < N; i++) {
cudaMemcpy(dst->data[i],src->data[i],sizeof(double)*src->Nx*src->Ny,kind);
}
}
void copyArray2DAoS(struct VectorN* src, struct VectorN *dst, int Nx, int Ny,
cudaMemcpyKind kind){
cudaMemcpy(dst,src,sizeof(struct VectorN)* Nx*Ny,kind);
}
void DeleteGPUArray2DSoA(struct VectorNArray2DSoA *vecarray) {
for (int i = 0; i < N; i++) {
cudaFree(vecarray->data[i]);
}
}
void DeleteCPUArray2DSoA(struct VectorNArray2DSoA *vecarray) {
for (int i = 0; i < N; i++) {
free(vecarray->data[i]);
}
}
struct VectorN *makeArray2DAoS(int Nx, int Ny) {
struct VectorN *ptr;
cudaMalloc(&ptr, sizeof(struct VectorN) * Nx * Ny);
return ptr;
}
void DeleteArray2DAoS(struct VectorN *ptr) { cudaFree(ptr); }