Skip to content

Commit 3db6ebc

Browse files
fix:hip code could not run in DCU
2 parents 568084f + 8c43037 commit 3db6ebc

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

source/module_hsolver/kernels/rocm/dngvd_op.hip.cu

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,25 @@ namespace hsolver {
5757
hipErrcheck(hipMemcpy(_vcc, vcc.data(), sizeof(double) * vcc.size(), hipMemcpyHostToDevice));
5858

5959
// Copy eigenvalues back to device
60+
<<<<<<< HEAD
6061
hipErrcheck(hipMemcpy(_eigenvalue, eigenvalue.data(), sizeof(doubl int* fail_info)
62+
=======
63+
hipErrcheck(hipMemcpy(_eigenvalue, eigenvalue.data(), sizeof(double) * eigenvalue.size(), hipMemcpyHostToDevice));
64+
}
65+
#endif // __LCAO
66+
67+
// GPU implementation of generalized eigenvalue solver for single precision complex
68+
template <>
69+
void dngvd_op<std::complex<float>, base_device::DEVICE_GPU>::operator()(
70+
const base_device::DEVICE_GPU* ctx,
71+
const int nstart,
72+
const int ldh,
73+
const std::complex<float>* _hcc,
74+
const std::complex<float>* _scc,
75+
float* _eigenvalue,
76+
std::complex<float>* _vcc,
77+
int* fail_info)
78+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
6179
{
6280
// Allocate host memory for complex matrices
6381
std::vector<std::complex<float>> hcc(ldh * nstart, {0, 0});
@@ -66,7 +84,25 @@ namespace hsolver {
6684
std::vector<float> eigenvalue(nstart, 0);
6785

6886
// Copy complex Hamiltonian matrix from device to host
87+
<<<<<<< HEAD
6988
hipErrcheck(hipMemcpy(hcc.data(), _hcc, sizeof(std::complex<float>) * hcc.size(), hipMemcpyDevice eigenvalue.data(),
89+
=======
90+
hipErrcheck(hipMemcpy(hcc.data(), _hcc, sizeof(std::complex<float>) * hcc.size(), hipMemcpyDeviceToHost));
91+
92+
// Copy complex overlap matrix from device to host
93+
hipErrcheck(hipMemcpy(scc.data(), _scc, sizeof(std::complex<float>) * scc.size(), hipMemcpyDeviceToHost));
94+
95+
base_device::DEVICE_CPU* cpu_ctx = {};
96+
97+
// Call CPU solver for complex single precision
98+
dngvd_op<std::complex<float>, base_device::DEVICE_CPU>()(
99+
cpu_ctx,
100+
nstart,
101+
ldh,
102+
hcc.data(),
103+
scc.data(),
104+
eigenvalue.data(),
105+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
70106
vcc.data(),
71107
fail_info);
72108

@@ -77,7 +113,24 @@ namespace hsolver {
77113
hipErrcheck(hipMemcpy(_eigenvalue, eigenvalue.data(), sizeof(float) * eigenvalue.size(), hipMemcpyHostToDevice));
78114
}
79115

116+
<<<<<<< HEAD
80117
// GPU implementation of generalized eigenvalue solver for double precision compt, {0, 0});
118+
=======
119+
// GPU implementation of generalized eigenvalue solver for double precision complex
120+
template <>
121+
void dngvd_op<std::complex<double>, base_device::DEVICE_GPU>::operator()(
122+
const base_device::DEVICE_GPU* ctx,
123+
const int nstart,
124+
const int ldh,
125+
const std::complex<double>* _hcc,
126+
const std::complex<double>* _scc,
127+
double* _eigenvalue,
128+
std::complex<double>* _vcc,
129+
int* fail_info)
130+
{
131+
// Allocate host memory for double complex matrices
132+
std::vector<std::complex<double>> hcc(ldh * nstart, {0, 0});
133+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
81134
std::vector<std::complex<double>> scc(ldh * nstart, {0, 0});
82135
std::vector<std::complex<double>> vcc(ldh * nstart, {0, 0});
83136
std::vector<double> eigenvalue(nstart, 0);
@@ -86,7 +139,11 @@ namespace hsolver {
86139
hipErrcheck(hipMemcpy(hcc.data(), _hcc, sizeof(std::complex<double>) * hcc.size(), hipMemcpyDeviceToHost));
87140
88141
// Copy double complex overlap matrix from device to host
142+
<<<<<<< HEAD
89143
hipErrcheck(hipMemcpy(scc.data(), _scc, eigenvectors back to device
144+
=======
145+
hipErrcheck(hipMemcpy( eigenvectors back to device
146+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
90147
hipErrcheck(hipMemcpy(_vcc, vcc.data(), sizeof(std::complex<double>) * vcc.size(), hipMemcpyHostToDevice));
91148
92149
// Copy eigenvalues back to device
@@ -97,7 +154,11 @@ namespace hsolver {
97154
// GPU implementation of standard eigenvalue solver for double precision
98155
template <>
99156
void dnevx_op<double, base_device::DEVICE_GPU>::operator()(
157+
<<<<<<< HEAD
100158
const base_device:: _hcc, sizeof(double) * hcc.size(), hipMemcpyDeviceToHost));
159+
=======
160+
c _hcc, sizeof(double) * hcc.size(), hipMemcpyDeviceToHost));
161+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
101162
102163
base_device::DEVICE_CPU* cpu_ctx = {};
103164
@@ -108,7 +169,11 @@ namespace hsolver {
108169
hipErrcheck(hipMemcpy(_vcc, vcc.data(), sizeof(double) * vcc.size(), hipMemcpyHostToDevice));
109170
110171
// Copy eigenvalues back to device
172+
<<<<<<< HEAD
111173
hipErrcheck(hipMemcpy(envalue,
174+
=======
175+
hipEenvalue,
176+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
112177
std::complex<float>* _vcc)
113178
{
114179
// Allocate host memory for complex matrices
@@ -119,9 +184,13 @@ namespace hsolver {
119184
// Copy complex Hamiltonian matrix from device to host
120185
hipErrcheck(hipMemcpy(hcc.data(), _hcc, sizeof(std::complex<float>) * hcc.size(), hipMemcpyDeviceToHost));
121186
187+
<<<<<<< HEAD
122188
base_device::DEVICE_CPU* cpu_ctx = {};
123189
124190
// Copy eigenvalues back to device
191+
=======
192+
base_device::DEVICE_CPU* cpu_ctx = // Copy eigenvalues back to device
193+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
125194
hipErrcheck(hipMemcpy(_eigenvalue, eigenvalue.data(), sizeof(float) * eigenvalue.size(), hipMemcpyHostToDevice));
126195
}
127196
@@ -133,8 +202,12 @@ namespace hsolver {
133202
const int ldh,
134203
const std::complex<double>* _hcc,
135204
const int m,
205+
<<<<<<< HEAD
136206
double* _eigenvalue,
137207
std::cot));
208+
=======
209+
double* _eigenvalut));
210+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
138211
139212
base_device::DEVICE_CPU* cpu_ctx = {};
140213
@@ -150,8 +223,12 @@ namespace hsolver {
150223
151224
// Copy double complex eigenvectors back to device
152225
hipErrcheck(hipMemcpy(_vcc, vcc.data(), sizeof(std::complex<double>) * vcc.size(), hipMemcpyHostToDevice));
226+
<<<<<<< HEAD
153227
154228
//lex<float>* hcc,
229+
=======
230+
lex<float>* hcc,
231+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
155232
std::complex<float>* scc,
156233
const int m,
157234
float* eigenvalue,
@@ -169,7 +246,11 @@ namespace hsolver {
169246
std::complex<double>* hcc,
170247
std::complex<double>* scc,
171248
const int m,
249+
<<<<<<< HEAD
172250
double* eigenvle* vcc,
251+
=======
252+
le* vcc,
253+
>>>>>>> 8c430373269e0a744ed2fda32b97d3b3df6a0188
173254
int* fail_info)
174255
{
175256
}

0 commit comments

Comments
 (0)