Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
BioEM
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MPIBP-Hummer
BioEM
Commits
e9b15195
Commit
e9b15195
authored
Jul 24, 2014
by
David Rohr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix memory allocation for CC Probability
parent
62cf7c72
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
29 additions
and
35 deletions
+29
-35
bioem.cpp
bioem.cpp
+1
-1
bioem_cuda.cu
bioem_cuda.cu
+4
-6
include/map.h
include/map.h
+10
-16
map.cpp
map.cpp
+14
-12
No files found.
bioem.cpp
View file @
e9b15195
...
...
@@ -270,7 +270,7 @@ int bioem::configure(int ac, char* av[])
printf
(
"Time Precalculate %f
\n
"
,
timer
.
GetCurrentElapsedTime
());
timer
.
ResetStart
();
}
pProb
.
init
(
RefMap
.
ntotRefMap
,
param
.
nTotGridAngles
,
*
this
);
pProb
.
init
(
RefMap
.
ntotRefMap
,
param
.
nTotGridAngles
,
param
.
nTotCC
,
*
this
);
if
(
DebugOutput
>=
2
&&
mpi_rank
==
0
)
{
...
...
bioem_cuda.cu
View file @
e9b15195
...
...
@@ -397,8 +397,7 @@ int bioem_cuda::deviceInit()
gpumap
->
sum_RefMap
=
sum
;
gpumap
->
sumsquare_RefMap
=
sumsquare
;
checkCudaErrors
(
cudaMalloc
(
&
pProb_memory
,
pProb_device
.
get_size
(
RefMap
.
ntotRefMap
,
param
.
nTotGridAngles
,
param
.
param_device
.
writeAngles
)));
checkCudaErrors
(
cudaMalloc
(
&
pProb_memory
,
pProb_device
.
get_sizeCC
(
RefMap
.
ntotRefMap
,
param
.
nTotCC
,
param
.
param_device
.
writeCC
)));
checkCudaErrors
(
cudaMalloc
(
&
pProb_memory
,
pProb_device
.
get_size
(
RefMap
.
ntotRefMap
,
param
.
nTotGridAngles
,
param
.
nTotCC
,
param
.
param_device
.
writeAngles
,
param
.
param_device
.
writeCC
)));
for
(
int
i
=
0
;
i
<
2
;
i
++
)
{
...
...
@@ -484,15 +483,14 @@ int bioem_cuda::deviceStartRun()
{
maxRef
=
(
size_t
)
RefMap
.
ntotRefMap
*
(
size_t
)
GPUWorkload
/
100
;
pProb_host
=
new
bioem_Probability
;
pProb_host
->
init
(
maxRef
,
param
.
nTotGridAngles
,
*
this
);
pProb_host
->
initCC
(
maxRef
,
param
.
nTotCC
,
*
this
);
pProb_host
->
init
(
maxRef
,
param
.
nTotGridAngles
,
param
.
nTotCC
,
*
this
);
pProb_host
->
copyFrom
(
&
pProb
,
*
this
);
}
pProb_device
=
*
pProb_host
;
pProb_device
.
ptr
=
pProb_memory
;
pProb_device
.
set_pointers
();
checkCudaErrors
(
cudaMemcpyAsync
(
pProb_device
.
ptr
,
pProb_host
->
ptr
,
pProb_host
->
get_size
(
maxRef
,
param
.
nTotGridAngles
,
param
.
param_device
.
writeAngles
),
cudaMemcpyHostToDevice
,
cudaStream
[
0
]));
checkCudaErrors
(
cudaMemcpyAsync
(
pProb_device
.
ptr
,
pProb_host
->
ptr
,
pProb_host
->
get_size
(
maxRef
,
param
.
nTotGridAngles
,
param
.
nTotCC
,
param
.
param_device
.
writeAngles
,
param
.
param_device
.
writeCC
),
cudaMemcpyHostToDevice
,
cudaStream
[
0
]));
if
(
FFTAlgo
)
{
...
...
@@ -527,7 +525,7 @@ int bioem_cuda::deviceStartRun()
int
bioem_cuda
::
deviceFinishRun
()
{
if
(
GPUAsync
)
cudaStreamSynchronize
(
cudaStream
[
0
]);
checkCudaErrors
(
cudaMemcpyAsync
(
pProb_host
->
ptr
,
pProb_device
.
ptr
,
pProb_host
->
get_size
(
maxRef
,
param
.
nTotGridAngles
,
param
.
param_device
.
writeAngles
),
cudaMemcpyDeviceToHost
,
cudaStream
[
0
]));
checkCudaErrors
(
cudaMemcpyAsync
(
pProb_host
->
ptr
,
pProb_device
.
ptr
,
pProb_host
->
get_size
(
maxRef
,
param
.
nTotGridAngles
,
param
.
nTotCC
,
param
.
param_device
.
writeAngles
,
param
.
param_device
.
writeCC
),
cudaMemcpyDeviceToHost
,
cudaStream
[
0
]));
if
(
FFTAlgo
)
{
...
...
include/map.h
View file @
e9b15195
...
...
@@ -91,7 +91,7 @@ public:
{
public:
int
max_prob_cent_x
,
max_prob_cent_y
,
max_prob_orient
,
max_prob_conv
;
myfloat_t
max_prob_norm
,
max_prob_mu
;
myfloat_t
max_prob_norm
,
max_prob_mu
;
}
max
;
};
...
...
@@ -105,7 +105,7 @@ public:
class
bioem_Probability_cc
{
public:
myfloat_t
forCC
;
myfloat_t
forCC
;
};
class
bioem_Probability
...
...
@@ -113,39 +113,33 @@ class bioem_Probability
public:
int
nMaps
;
int
nAngles
;
int
nCC
;
int
nCC
;
__device__
__host__
bioem_Probability_map
&
getProbMap
(
int
map
)
{
return
(
ptr_map
[
map
]);}
__device__
__host__
bioem_Probability_angle
&
getProbAngle
(
int
map
,
int
angle
)
{
return
(
ptr_angle
[
angle
*
nMaps
+
map
]);}
__device__
__host__
bioem_Probability_cc
&
getProbCC
(
int
map
,
int
cc
)
{
return
(
ptr_cc
[
cc
*
nMaps
+
map
]);}
__device__
__host__
bioem_Probability_cc
&
getProbCC
(
int
map
,
int
cc
)
{
return
(
ptr_cc
[
cc
*
nMaps
+
map
]);}
void
*
ptr
;
bioem_Probability_map
*
ptr_map
;
bioem_Probability_angle
*
ptr_angle
;
bioem_Probability_cc
*
ptr_cc
;
bioem_Probability_cc
*
ptr_cc
;
static
size_t
get_size
(
size_t
maps
,
size_t
angles
,
bool
writeAngles
)
static
size_t
get_size
(
size_t
maps
,
size_t
angles
,
size_t
cc
,
bool
writeAngles
,
bool
writeCC
)
{
size_t
size
=
sizeof
(
bioem_Probability_map
);
if
(
writeAngles
)
size
+=
angles
*
sizeof
(
bioem_Probability_angle
);
if
(
writeCC
)
size
+=
cc
*
sizeof
(
bioem_Probability_cc
);
return
(
maps
*
size
);
}
static
size_t
get_sizeCC
(
size_t
maps
,
size_t
cc
,
bool
writeCC
)
{
size_t
size
=
sizeof
(
bioem_Probability_map
);
if
(
writeCC
)
size
+=
cc
*
sizeof
(
bioem_Probability_cc
)
;
return
(
maps
*
size
);
}
void
init
(
size_t
maps
,
size_t
angles
,
bioem
&
bio
);
void
initCC
(
size_t
maps
,
size_t
cc
,
bioem
&
bio
);
void
init
(
size_t
maps
,
size_t
angles
,
size_t
cc
,
bioem
&
bio
);
void
copyFrom
(
bioem_Probability
*
from
,
bioem
&
bio
);
void
set_pointers
()
{
ptr_map
=
(
bioem_Probability_map
*
)
ptr
;
ptr_angle
=
(
bioem_Probability_angle
*
)
(
&
ptr_map
[
nMaps
]);
ptr_cc
=
(
bioem_Probability_cc
*
)
(
&
ptr_map
[
nMap
s
]);
ptr_cc
=
(
bioem_Probability_cc
*
)
(
&
ptr_angle
[
nMaps
*
nAngle
s
]);
}
};
...
...
map.cpp
View file @
e9b15195
...
...
@@ -280,23 +280,15 @@ int bioem_RefMap::precalculate(bioem_param& param, bioem& bio)
return
(
0
);
}
void
bioem_Probability
::
init
(
size_t
maps
,
size_t
angles
,
bioem
&
bio
)
void
bioem_Probability
::
init
(
size_t
maps
,
size_t
angles
,
size_t
cc
,
bioem
&
bio
)
{
nMaps
=
maps
;
nAngles
=
angles
;
ptr
=
bio
.
malloc_device_host
(
get_size
(
maps
,
angles
,
bio
.
param
.
param_device
.
writeAngles
));
nCC
=
cc
;
ptr
=
bio
.
malloc_device_host
(
get_size
(
maps
,
angles
,
cc
,
bio
.
param
.
param_device
.
writeAngles
,
bio
.
param
.
param_device
.
writeCC
));
set_pointers
();
}
void
bioem_Probability
::
initCC
(
size_t
maps
,
size_t
cc
,
bioem
&
bio
)
{
nMaps
=
maps
;
nCC
=
cc
;
ptr
=
bio
.
malloc_device_host
(
get_sizeCC
(
maps
,
cc
,
bio
.
param
.
param_device
.
writeCC
));
set_pointers
();
}
void
bioem_Probability
::
copyFrom
(
bioem_Probability
*
from
,
bioem
&
bio
)
{
bioem_Probability_map
&
pProbMap
=
getProbMap
(
0
);
...
...
@@ -305,13 +297,23 @@ void bioem_Probability::copyFrom(bioem_Probability* from, bioem& bio)
if
(
bio
.
param
.
param_device
.
writeAngles
)
{
for
(
int
iOrient
=
0
;
iOrient
<
bio
.
param
.
nTotGrid
Angles
;
iOrient
++
)
for
(
int
iOrient
=
0
;
iOrient
<
n
Angles
;
iOrient
++
)
{
bioem_Probability_angle
&
pProbAngle
=
getProbAngle
(
0
,
iOrient
);
bioem_Probability_angle
&
pProbAngleFrom
=
from
->
getProbAngle
(
0
,
iOrient
);
memcpy
(
&
pProbAngle
,
&
pProbAngleFrom
,
from
->
nMaps
*
sizeof
(
bioem_Probability_angle
));
}
}
if
(
bio
.
param
.
param_device
.
writeCC
)
{
for
(
int
iCC
=
0
;
iCC
<
nCC
;
iCC
++
)
{
bioem_Probability_cc
&
pProbCC
=
getProbCC
(
0
,
iCC
);
bioem_Probability_cc
&
pProbCCFrom
=
from
->
getProbCC
(
0
,
iCC
);
memcpy
(
&
pProbCC
,
&
pProbCCFrom
,
from
->
nMaps
*
sizeof
(
bioem_Probability_cc
));
}
}
}
int
bioem_RefMap
::
read_MRC
(
const
char
*
filename
,
bioem_param
&
param
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment