FieldData structs implemented

This commit is contained in:
Robin committed 2024-12-20 18:46:18 +01:00
1 parent ac63abe93a
commit 0db764c52f
10 files changed
+196 -90

No files matched your search

-60
View File
@@ -1,60 +0,0 @@
#include "datareader.h"
#include <netcdf>
using namespace std;
using namespace netCDF;
std::vector<float> readData(std::string path, std::string variableName) {
netCDF::NcFile data(path, netCDF::NcFile::read);
multimap<string, NcVar> vars = data.getVars();
NcVar var = vars.find(variableName)->second;
int length = 1;
for (NcDim dim: var.getDims()) {
length *= dim.getSize();
}
vector<float> vec(length);
var.getVar(vec.data());
return vec;
}
std::pair<float*, size_t> loadDataToDevice(std::string path, std::string variableName) {
netCDF::NcFile data(path, netCDF::NcFile::read);
multimap<string, NcVar> vars = data.getVars();
NcVar var = vars.find(variableName)->second;
int length = 1;
for (NcDim dim: var.getDims()) {
length *= dim.getSize();
}
// Store NetCDF variable in pinned memory on host
float *h_array;
cudaMallocHost(&h_array, sizeof(float)*length);
var.getVar(h_array);
// Copy data to device
float *d_array;
cudaError_t status = cudaMalloc(&d_array, sizeof(float)*length);
if (status != cudaSuccess)
cout << "Error allocating memory: " << status << "\n";
cudaMemcpyAsync(d_array, h_array, sizeof(float)*length, cudaMemcpyHostToDevice);
cudaDeviceSynchronize(); // Heavy hammer synchronisation // TODO: Use streams
cudaFreeHost(h_array);
return std::pair(d_array, length);
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.