Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
P
PP - HW1
Project
Project
Details
Activity
Releases
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
moataz.dbaneh
PP - HW1
Commits
aa801bc4
Commit
aa801bc4
authored
Mar 21, 2023
by
MoutazDebbaneh
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add question 3 solution. Edit README.md
parent
ea496c5a
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
120 additions
and
17 deletions
+120
-17
workspace.xml
.idea/workspace.xml
+21
-15
README.md
README.md
+6
-2
Fibonacci.java
src/main/java/hiast/hw/question3/Fibonacci.java
+52
-0
FibonacciTest.java
src/test/java/hiast/hw/question3/FibonacciTest.java
+41
-0
No files found.
.idea/workspace.xml
View file @
aa801bc4
...
@@ -5,14 +5,10 @@
...
@@ -5,14 +5,10 @@
</component>
</component>
<component
name=
"ChangeListManager"
>
<component
name=
"ChangeListManager"
>
<list
default=
"true"
id=
"39d1573e-bc8d-4759-8e1b-31b85df143ea"
name=
"Changes"
comment=
"Add question 2 solution"
>
<list
default=
"true"
id=
"39d1573e-bc8d-4759-8e1b-31b85df143ea"
name=
"Changes"
comment=
"Add question 2 solution"
>
<change
afterPath=
"$PROJECT_DIR$/.idea/encodings.xml"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/src/main/java/hiast/hw/question3/Fibonacci.java"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/.idea/uiDesigner.xml"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/src/test/java/hiast/hw/question3/FibonacciTest.java"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/src/main/java/hiast/hw/question2/Student.java"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/src/main/java/hiast/hw/question2/StudentAnalytics.java"
afterDir=
"false"
/>
<change
afterPath=
"$PROJECT_DIR$/src/test/java/hiast/hw/question2/StudentAnalyticsTest.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/.idea/workspace.xml"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/.idea/workspace.xml"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/.idea/workspace.xml"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/.idea/workspace.xml"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/main/java/org/example/ArrayOccurrencesCount.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/main/java/hiast/hw/question1/ArrayOccurrencesCount.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/README.md"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/README.md"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/test/java/ArrayOccurrencesCountTest.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/test/java/hiast/hw/question1/ArrayOccurrencesCountTest.java"
afterDir=
"false"
/>
</list>
</list>
<option
name=
"SHOW_DIALOG"
value=
"false"
/>
<option
name=
"SHOW_DIALOG"
value=
"false"
/>
<option
name=
"HIGHLIGHT_CONFLICTS"
value=
"true"
/>
<option
name=
"HIGHLIGHT_CONFLICTS"
value=
"true"
/>
...
@@ -62,19 +58,22 @@
...
@@ -62,19 +58,22 @@
<key
name=
"MoveClassesOrPackagesDialog.RECENTS_KEY"
>
<key
name=
"MoveClassesOrPackagesDialog.RECENTS_KEY"
>
<recent
name=
"hiast.hw.question1"
/>
<recent
name=
"hiast.hw.question1"
/>
</key>
</key>
<key
name=
"CopyClassDialog.RECENTS_KEY"
>
<recent
name=
"hiast.hw.question3"
/>
</key>
</component>
</component>
<component
name=
"RunManager"
selected=
"JUnit.
StudentAnalyticsTest.testCountNumberOfFailedStudentsOlderThan20Perf
"
>
<component
name=
"RunManager"
selected=
"JUnit.
FibonacciTest.testFiboPP
"
>
<configuration
name=
"
StudentAnalyticsTest.testAverageAgeOfEnrolledStudentsPerf
"
type=
"JUnit"
factoryName=
"JUnit"
temporary=
"true"
nameIsGenerated=
"true"
>
<configuration
name=
"
FibonacciTest.testFiboPP
"
type=
"JUnit"
factoryName=
"JUnit"
temporary=
"true"
nameIsGenerated=
"true"
>
<module
name=
"ArrayOccurrencesCount"
/>
<module
name=
"ArrayOccurrencesCount"
/>
<extension
name=
"coverage"
>
<extension
name=
"coverage"
>
<pattern>
<pattern>
<option
name=
"PATTERN"
value=
"hiast.hw.question
2
.*"
/>
<option
name=
"PATTERN"
value=
"hiast.hw.question
3
.*"
/>
<option
name=
"ENABLED"
value=
"true"
/>
<option
name=
"ENABLED"
value=
"true"
/>
</pattern>
</pattern>
</extension>
</extension>
<option
name=
"PACKAGE_NAME"
value=
"hiast.hw.question
2
"
/>
<option
name=
"PACKAGE_NAME"
value=
"hiast.hw.question
3
"
/>
<option
name=
"MAIN_CLASS_NAME"
value=
"hiast.hw.question
2.StudentAnalytics
Test"
/>
<option
name=
"MAIN_CLASS_NAME"
value=
"hiast.hw.question
3.Fibonacci
Test"
/>
<option
name=
"METHOD_NAME"
value=
"test
AverageAgeOfEnrolledStudentsPerf
"
/>
<option
name=
"METHOD_NAME"
value=
"test
FiboPP
"
/>
<option
name=
"TEST_OBJECT"
value=
"method"
/>
<option
name=
"TEST_OBJECT"
value=
"method"
/>
<method
v=
"2"
>
<method
v=
"2"
>
<option
name=
"Make"
enabled=
"true"
/>
<option
name=
"Make"
enabled=
"true"
/>
...
@@ -146,11 +145,11 @@
...
@@ -146,11 +145,11 @@
</configuration>
</configuration>
<recent_temporary>
<recent_temporary>
<list>
<list>
<item
itemvalue=
"JUnit.FibonacciTest.testFiboPP"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testCountNumberOfFailedStudentsOlderThan20Perf"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testCountNumberOfFailedStudentsOlderThan20Perf"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testCountNumberOfFailedStudentsOlderThan20"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testCountNumberOfFailedStudentsOlderThan20"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testMostCommonFirstNameOfInactiveStudentsPerf"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testMostCommonFirstNameOfInactiveStudentsPerf"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testMostCommonFirstNameOfInactiveStudents"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testMostCommonFirstNameOfInactiveStudents"
/>
<item
itemvalue=
"JUnit.StudentAnalyticsTest.testAverageAgeOfEnrolledStudentsPerf"
/>
</list>
</list>
</recent_temporary>
</recent_temporary>
</component>
</component>
...
@@ -184,7 +183,14 @@
...
@@ -184,7 +183,14 @@
<option
name=
"project"
value=
"LOCAL"
/>
<option
name=
"project"
value=
"LOCAL"
/>
<updated>
1679409170258
</updated>
<updated>
1679409170258
</updated>
</task>
</task>
<option
name=
"localTasksCounter"
value=
"4"
/>
<task
id=
"LOCAL-00004"
summary=
"Add question 2 solution"
>
<created>
1679411809900
</created>
<option
name=
"number"
value=
"00004"
/>
<option
name=
"presentableId"
value=
"LOCAL-00004"
/>
<option
name=
"project"
value=
"LOCAL"
/>
<updated>
1679411809900
</updated>
</task>
<option
name=
"localTasksCounter"
value=
"5"
/>
<servers
/>
<servers
/>
</component>
</component>
<component
name=
"Vcs.Log.Tabs.Properties"
>
<component
name=
"Vcs.Log.Tabs.Properties"
>
...
...
README.md
View file @
aa801bc4
# Parallel Programming HW1
# Parallel Programming HW1
- Moutaz Debbaneh
> Important Note: Please make sure to change JVM memory heap settings to enable making an array of a billion elements
> Important Note: Please make sure to change JVM memory heap settings to enable making an array of a billion elements
...
@@ -6,4 +6,8 @@
...
@@ -6,4 +6,8 @@
<br
/>
<br
/>
#### 1. Question One:
#### 1. Question One:
-
Function intStream() was used for testing instead of randomArray() because its answer is expected, and therefore the comparison is easier
-
Function intStream() was used for testing instead of randomArray() because its answer is expected, and therefore the comparison is easier.
\ No newline at end of file
-
The array size of 1e9 elements was commented and replaced with 1e8 to avoid runtime errors in case JVM heap settings was not properly adjusted.
#### 2. Question Three:
-
The return type of fibonacci was changed from Integer to Long to avoid overflow for n=50.
\ No newline at end of file
src/main/java/hiast/hw/question3/Fibonacci.java
0 → 100644
View file @
aa801bc4
package
hiast
.
hw
.
question3
;
import
java.util.HashMap
;
import
java.util.concurrent.RecursiveTask
;
/*
However, besides being a dumb way to compute Fibonacci functions (there is a simple fast linear algorithm that you'd use in practice),
this is likely to perform poorly because the smallest subtasks are too small to be worthwhile splitting up.
Instead, as is the case for nearly all fork/join applications,
you'd pick some minimum granularity size (for example 10 here) for which you always sequentially solve rather than subdividing.
*/
public
class
Fibonacci
extends
RecursiveTask
<
Long
>
{
final
int
n
;
final
HashMap
<
Integer
,
Long
>
memo
;
public
Fibonacci
(
int
n
,
HashMap
<
Integer
,
Long
>
memo
)
{
this
.
n
=
n
;
this
.
memo
=
memo
;
}
public
Long
compute
()
{
if
(
memo
.
get
(
n
)
!=
-
1
)
return
memo
.
get
(
n
);
if
(
n
>
20
)
{
if
(
n
<=
1
)
return
Long
.
valueOf
(
n
);
Fibonacci
f1
=
new
Fibonacci
(
n
-
1
,
memo
);
f1
.
fork
();
Fibonacci
f2
=
new
Fibonacci
(
n
-
2
,
memo
);
Long
result
=
f2
.
compute
()
+
f1
.
join
();
memo
.
put
(
n
,
result
);
}
else
{
Long
result
=
computeSeq
();
memo
.
put
(
n
,
result
);
}
return
memo
.
get
(
n
);
}
public
Long
computeSeq
()
{
if
(
memo
.
get
(
n
)
!=
-
1
)
return
memo
.
get
(
n
);
Fibonacci
f1
=
new
Fibonacci
(
n
-
1
,
memo
);
Fibonacci
f2
=
new
Fibonacci
(
n
-
2
,
memo
);
Long
result
=
f2
.
computeSeq
()
+
f1
.
computeSeq
();
memo
.
put
(
n
,
result
);
return
result
;
}
}
src/test/java/hiast/hw/question3/FibonacciTest.java
0 → 100644
View file @
aa801bc4
package
hiast
.
hw
.
question3
;
import
junit.framework.TestCase
;
import
java.util.HashMap
;
public
class
FibonacciTest
extends
TestCase
{
int
n
=
50
;
final
HashMap
<
Integer
,
Long
>
memo
=
new
HashMap
<>();
private
void
initializeMemo
(){
memo
.
put
(
0
,
0L
);
memo
.
put
(
1
,
1L
);
for
(
int
i
=
2
;
i
<=
n
;
i
++){
memo
.
put
(
i
,
-
1L
);
}
}
public
void
testFiboPP
(){
initializeMemo
();
long
start
=
System
.
currentTimeMillis
();
Fibonacci
fib
=
new
Fibonacci
(
n
,
memo
);
long
res
=
fib
.
compute
();
long
end
=
System
.
currentTimeMillis
()-
start
;
System
.
out
.
printf
(
"Fibonacci for %d is %d, and parallel execution took %d ms\n"
,
n
,
res
,
end
);
// Fibonacci parallel takes 144269 fon n = 50 before enhancement 1
}
public
void
testFiboSeq
(){
initializeMemo
();
long
start
=
System
.
currentTimeMillis
();
Fibonacci
fib
=
new
Fibonacci
(
n
,
memo
);
long
res
=
fib
.
computeSeq
();
long
end
=
System
.
currentTimeMillis
()-
start
;
System
.
out
.
printf
(
"Fibonacci for %d is %d, and sequential execution took %d ms\n"
,
n
,
res
,
end
);
//Fibonacci Sequential takes 86495 fon n = 50 before enhancement 1
}
}
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