Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
projects
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
126
projects
Commits
50b9e653
Commit
50b9e653
authored
Oct 30, 2020
by
10382
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
🆚
Add Homework Codes!
parent
af1e5d47
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
58 additions
and
3 deletions
+58
-3
Homework02/README.md
+9
-3
Homework02/for.cpp
+49
-0
No files found.
Homework02/README.md
View file @
50b9e653
...
@@ -129,10 +129,16 @@ int paraSumRed() {
...
@@ -129,10 +129,16 @@ int paraSumRed() {
考虑一下前面提到的规约操作的两件事情,为了简化理解,我重新设置了 OpenMP 并行线程数
`OMP_NUM_THREADS`
为 2 (之前为4),并对规约后的过程进行输出,可以发现都是 0,1,3,3,7 的组合,可见规约后的计算过程如下,
考虑一下前面提到的规约操作的两件事情,为了简化理解,我重新设置了 OpenMP 并行线程数
`OMP_NUM_THREADS`
为 2 (之前为4),并对规约后的过程进行输出,可以发现都是 0,1,3,3,7 的组合,可见规约后的计算过程如下,


确实是规约操作的思想,采用reduction之后,每个线程根据
`reduction(+: sum)`
的声明算出自己的
`sum`
,然后再将每个线程的
`sum`
加起来。
确实是规约操作的思想,采用reduction之后,每个线程根据
`reduction(+: sum)`
的声明算出自己的
`sum`
,然后再将每个线程的
`sum`
加起来。
## 总结
## 总结
规约操作通过将原始任务划分为多个子任务,并将子任务的结果合并以实现多线程下的并行计算,减少计算时间,避免并发一致性的问题。
规约操作通过将原始任务划分为多个子任务,并将子任务的结果合并以实现多线程下的并行计算,减少计算时间,避免并发一致性的问题。
\ No newline at end of file
## 附录
代码:
-
[
for.cpp
](
./for.cpp
)
\ No newline at end of file
Homework02/for.cpp
0 → 100644
View file @
50b9e653
#include <iostream>
#include <omp.h> // OpenMP编程需要包含的头文件
int
paraSum
()
{
int
sum
=
0
;
#pragma omp parallel for
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
sum
=
sum
+
i
;
}
return
sum
;
}
int
paraSumRed
()
{
int
sum
=
0
;
// std::cout << "Before: " << sum << std::endl;
#pragma omp parallel for reduction(+:sum)
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
sum
=
sum
+
i
;
// std::cout << sum << std::endl;
}
// std::cout << "After: " << sum << std::endl;
return
sum
;
}
int
paraSumRedIO
()
{
int
sum
=
0
;
std
::
cout
<<
"Before: "
<<
sum
<<
std
::
endl
;
#pragma omp parallel for reduction(+:sum)
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
sum
=
sum
+
i
;
std
::
cout
<<
sum
<<
std
::
endl
;
}
std
::
cout
<<
"After: "
<<
sum
<<
std
::
endl
;
return
sum
;
}
int
main
()
{
// int clicks = 1000000;
// int count = 0;
// for (int z = 0; z < clicks; z++) {
// //int sum = paraSum();
// int sum = paraSumRed();
// if (sum == 10)
// count++;
// }
// std::cout<<(double)count/clicks<<std::endl;
paraSumRedIO
();
return
0
;
}
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