Skip to content

Commit 58b2ef9

Browse files
author
Daniel Ellsworth
committed
cilk and tbb implementations on aciss
1 parent 2c5e0dc commit 58b2ef9

File tree

7 files changed

+327
-7
lines changed

7 files changed

+327
-7
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
2+
sim_init:
3+
icpc -o sim_init main_init.cpp network.cpp Vehicle.cpp Location.cpp ControlledVehicle.cpp
4+
5+
sim_openmp:
6+
icpc -o sim_openmp main_openmp.cpp network.cpp Vehicle.cpp Location.cpp ControlledVehicle.cpp
7+
8+
sim_cilk:
9+
icpc -o sim_cilk main_cilk.cpp network.cpp Vehicle.cpp Location.cpp ControlledVehicle.cpp -fcilkplus
10+
11+
sim_tbb:
12+
icpc -std=c++0x -o sim_tbb main_tbb.cpp network.cpp Vehicle.cpp Location.cpp ControlledVehicle.cpp -L/usr/local/packages/intel/14.0/tbb/lib/intel64/gcc4.4 -ltbb -I/usr/local/packages/intel/14.0/tbb/include

lab_content/week8_simulation/src/Vehicle.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#include "Vehicle.h"
2+
#include <stdio.h>
23

34
Vehicle::Vehicle() {
45
heading=0.0;
@@ -27,8 +28,6 @@ void Vehicle::move(float timedelta) {
2728
if(velocity>maxvelocity) { velocity=maxvelocity; }
2829

2930
loc.polarMove(heading, velocity);
30-
31-
printf("timedelta: %f\nheading: %f\nvelocity: %f\n",timedelta,heading,velocity);
3231
}
3332

3433
int Vehicle::collisionWith(Vehicle* other) {
@@ -52,4 +51,4 @@ Location Vehicle::getLocation() {
5251

5352
void Vehicle::ai(std::vector<Vehicle*> others) {
5453
heading += M_PI/100;
55-
}
54+
}

lab_content/week8_simulation/src/Vehicle.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
#include <vector>
66

77
class Vehicle {
8-
friend class Vehicle;
9-
108
private:
119
float velocity;
1210
float maxvelocity;
@@ -29,4 +27,4 @@ class Vehicle {
2927
virtual void ai(std::vector<Vehicle*> others);
3028
};
3129

32-
#endif
30+
#endif
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#include <cilk/cilk.h>
2+
#include <vector>
3+
#include <sys/socket.h>
4+
#include <netinet/in.h>
5+
#include <stdio.h>
6+
#include <strings.h>
7+
#include "Vehicle.h"
8+
#include "ControlledVehicle.h"
9+
10+
const float timedelta=.1;
11+
12+
std::vector<Vehicle*> vehicles;
13+
std::vector<int> sockets;
14+
15+
void initBaseVehicles() {
16+
Vehicle* v=new Vehicle(10.0, 10.0);
17+
vehicles.push_back(v);
18+
}
19+
20+
void updateLocations() {
21+
for(int i=0;i<vehicles.size();i++) {
22+
vehicles[i]->move(timedelta);
23+
}
24+
}
25+
26+
void processCollisions() {
27+
for(int i=0;i<vehicles.size();i++) {
28+
Vehicle* a=vehicles[i];
29+
for(int j=i+1;j<vehicles.size();j++) {
30+
if(a->collisionWith(vehicles[i])) {
31+
a->processCollision(vehicles[i]);
32+
vehicles[i]->processCollision(a);
33+
}
34+
}
35+
}
36+
}
37+
38+
void updateSettings() {
39+
for(int i=0;i<vehicles.size();i++) {
40+
vehicles[i]->ai(vehicles);
41+
}
42+
}
43+
44+
void handleConnection(int sockfd) {
45+
ControlledVehicle* v=new ControlledVehicle();
46+
v->setControlStream(sockfd);
47+
vehicles.push_back(v);
48+
}
49+
50+
void startNetwork(int port) {
51+
//// Begin Socket code... take CIS432 interested in what this all means
52+
struct sockaddr_in serv_addr;
53+
struct sockaddr_in clnt_addr;
54+
socklen_t clnt_len;
55+
56+
int srvsockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
57+
if(srvsockfd < 0) {
58+
printf("Socket could not be acquired!\n");
59+
return;
60+
}
61+
bzero((char*)&serv_addr, sizeof(serv_addr));
62+
serv_addr.sin_family = AF_INET;
63+
((char*)&serv_addr.sin_addr.s_addr)[0] = 127;
64+
((char*)&serv_addr.sin_addr.s_addr)[1] = 0;
65+
((char*)&serv_addr.sin_addr.s_addr)[2] = 0;
66+
((char*)&serv_addr.sin_addr.s_addr)[3] = 1;
67+
serv_addr.sin_port = htons(port);
68+
if(bind(srvsockfd,(struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
69+
printf("Socket bind failed!\n");
70+
return;
71+
}
72+
if(listen(srvsockfd,1)<0) {
73+
printf("Impossible listen failure\n");
74+
return;
75+
}
76+
clnt_len = sizeof(clnt_addr);
77+
//// End Socket code... take CIS432 interested in what this all means
78+
79+
//
80+
// !! need to repeat this part in a way that doesn't lock up the program
81+
//
82+
while(1) {
83+
int sockfd = accept(srvsockfd, (struct sockaddr*) &clnt_addr, &clnt_len);
84+
handleConnection(sockfd);
85+
}
86+
}
87+
88+
int main(int argc, char** argv) {
89+
// setup basic vehicles
90+
initBaseVehicles();
91+
92+
// accept connection
93+
cilk_spawn startNetwork(8866);
94+
95+
// run simulation
96+
while(1) {
97+
// handle the move phase
98+
updateSettings();
99+
updateLocations();
100+
processCollisions();
101+
}
102+
}

lab_content/week8_simulation/src/main.cpp renamed to lab_content/week8_simulation/src/main_init.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include <vector>
33
#include <sys/socket.h>
44
#include <netinet/in.h>
5+
#include <stdio.h>
6+
#include <strings.h>
57
#include "Vehicle.h"
68
#include "ControlledVehicle.h"
79

@@ -95,4 +97,4 @@ int main(int argc, char** argv) {
9597
updateLocations();
9698
processCollisions();
9799
}
98-
}
100+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
2+
#include <vector>
3+
#include <sys/socket.h>
4+
#include <netinet/in.h>
5+
#include <stdio.h>
6+
#include <strings.h>
7+
#include "Vehicle.h"
8+
#include "ControlledVehicle.h"
9+
10+
const float timedelta=.1;
11+
12+
std::vector<Vehicle*> vehicles;
13+
std::vector<int> sockets;
14+
15+
void initBaseVehicles() {
16+
Vehicle* v=new Vehicle(10.0, 10.0);
17+
vehicles.push_back(v);
18+
}
19+
20+
void updateLocations() {
21+
for(int i=0;i<vehicles.size();i++) {
22+
vehicles[i]->move(timedelta);
23+
}
24+
}
25+
26+
void processCollisions() {
27+
for(int i=0;i<vehicles.size();i++) {
28+
Vehicle* a=vehicles[i];
29+
for(int j=i+1;j<vehicles.size();j++) {
30+
if(a->collisionWith(vehicles[i])) {
31+
a->processCollision(vehicles[i]);
32+
vehicles[i]->processCollision(a);
33+
}
34+
}
35+
}
36+
}
37+
38+
void updateSettings() {
39+
for(int i=0;i<vehicles.size();i++) {
40+
vehicles[i]->ai(vehicles);
41+
}
42+
}
43+
44+
void handleConnection(int sockfd) {
45+
ControlledVehicle* v=new ControlledVehicle();
46+
v->setControlStream(sockfd);
47+
vehicles.push_back(v);
48+
}
49+
50+
void startNetwork(int port) {
51+
//// Begin Socket code... take CIS432 interested in what this all means
52+
struct sockaddr_in serv_addr;
53+
struct sockaddr_in clnt_addr;
54+
socklen_t clnt_len;
55+
56+
int srvsockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
57+
if(srvsockfd < 0) {
58+
printf("Socket could not be acquired!\n");
59+
return;
60+
}
61+
bzero((char*)&serv_addr, sizeof(serv_addr));
62+
serv_addr.sin_family = AF_INET;
63+
((char*)&serv_addr.sin_addr.s_addr)[0] = 127;
64+
((char*)&serv_addr.sin_addr.s_addr)[1] = 0;
65+
((char*)&serv_addr.sin_addr.s_addr)[2] = 0;
66+
((char*)&serv_addr.sin_addr.s_addr)[3] = 1;
67+
serv_addr.sin_port = htons(port);
68+
if(bind(srvsockfd,(struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
69+
printf("Socket bind failed!\n");
70+
return;
71+
}
72+
if(listen(srvsockfd,1)<0) {
73+
printf("Impossible listen failure\n");
74+
return;
75+
}
76+
clnt_len = sizeof(clnt_addr);
77+
//// End Socket code... take CIS432 interested in what this all means
78+
79+
//
80+
// !! need to repeat this part in a way that doesn't lock up the program
81+
//
82+
int sockfd = accept(srvsockfd, (struct sockaddr*) &clnt_addr, &clnt_len);
83+
handleConnection(sockfd);
84+
}
85+
86+
int main(int argc, char** argv) {
87+
// setup basic vehicles
88+
initBaseVehicles();
89+
90+
// accept connection
91+
startNetwork(8866);
92+
93+
// run simulation
94+
while(1) {
95+
// handle the move phase
96+
updateSettings();
97+
updateLocations();
98+
processCollisions();
99+
}
100+
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#include <tbb/tbb.h>
2+
#include <vector>
3+
#include <sys/socket.h>
4+
#include <netinet/in.h>
5+
#include <stdio.h>
6+
#include <strings.h>
7+
#include "Vehicle.h"
8+
#include "ControlledVehicle.h"
9+
10+
const float timedelta=.1;
11+
12+
std::vector<Vehicle*> vehicles;
13+
std::vector<int> sockets;
14+
15+
void initBaseVehicles() {
16+
Vehicle* v=new Vehicle(10.0, 10.0);
17+
vehicles.push_back(v);
18+
}
19+
20+
void updateLocations() {
21+
for(int i=0;i<vehicles.size();i++) {
22+
vehicles[i]->move(timedelta);
23+
}
24+
}
25+
26+
void processCollisions() {
27+
for(int i=0;i<vehicles.size();i++) {
28+
Vehicle* a=vehicles[i];
29+
for(int j=i+1;j<vehicles.size();j++) {
30+
if(a->collisionWith(vehicles[i])) {
31+
a->processCollision(vehicles[i]);
32+
vehicles[i]->processCollision(a);
33+
}
34+
}
35+
}
36+
}
37+
38+
void updateSettings() {
39+
for(int i=0;i<vehicles.size();i++) {
40+
vehicles[i]->ai(vehicles);
41+
}
42+
}
43+
44+
void handleConnection(int sockfd) {
45+
ControlledVehicle* v=new ControlledVehicle();
46+
v->setControlStream(sockfd);
47+
vehicles.push_back(v);
48+
}
49+
50+
void startNetwork(int port) {
51+
//// Begin Socket code... take CIS432 interested in what this all means
52+
struct sockaddr_in serv_addr;
53+
struct sockaddr_in clnt_addr;
54+
socklen_t clnt_len;
55+
56+
int srvsockfd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
57+
if(srvsockfd < 0) {
58+
printf("Socket could not be acquired!\n");
59+
return;
60+
}
61+
bzero((char*)&serv_addr, sizeof(serv_addr));
62+
serv_addr.sin_family = AF_INET;
63+
((char*)&serv_addr.sin_addr.s_addr)[0] = 127;
64+
((char*)&serv_addr.sin_addr.s_addr)[1] = 0;
65+
((char*)&serv_addr.sin_addr.s_addr)[2] = 0;
66+
((char*)&serv_addr.sin_addr.s_addr)[3] = 1;
67+
serv_addr.sin_port = htons(port);
68+
if(bind(srvsockfd,(struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) {
69+
printf("Socket bind failed!\n");
70+
return;
71+
}
72+
if(listen(srvsockfd,1)<0) {
73+
printf("Impossible listen failure\n");
74+
return;
75+
}
76+
clnt_len = sizeof(clnt_addr);
77+
//// End Socket code... take CIS432 interested in what this all means
78+
79+
//
80+
// !! need to repeat this part in a way that doesn't lock up the program
81+
//
82+
while(1) {
83+
int sockfd = accept(srvsockfd, (struct sockaddr*) &clnt_addr, &clnt_len);
84+
handleConnection(sockfd);
85+
}
86+
}
87+
88+
int main(int argc, char** argv) {
89+
// setup basic vehicles
90+
initBaseVehicles();
91+
92+
tbb::parallel_invoke(
93+
[] {
94+
// accept connection
95+
startNetwork(8866);
96+
},
97+
[] {
98+
// run simulation
99+
while(1) {
100+
// handle the move phase
101+
updateSettings();
102+
updateLocations();
103+
processCollisions();
104+
}
105+
}
106+
);
107+
}

0 commit comments

Comments
 (0)