Skip to content
Snippets Groups Projects
Commit 4dcfe197 authored by Prakalp Srivastava's avatar Prakalp Srivastava
Browse files

getting merge to work

parent fec265a4
No related branches found
No related tags found
No related merge requests found
File mode changed from 100755 to 100644
......@@ -197,14 +197,20 @@ std::string getTestModuleName(Module &M);
//===--------------------- MergeDFN Outlined Functions --------------===//
void MergeTraversal::testNodeName(DFNode* N) {
//if (N->getFuncPointer()->getName() == "WrapperHorizontal") {
//if (N->getFuncPointer()->getName() == "horizontal") {
//if (N->getFuncPointer()->getName() == "horizontal_vertical") {
if (N->getFuncPointer()->getName() == "WrapperHorizontal") {
//if (N->getFuncPointer()->getName() == "WrapperDilate") {
//if (N->getFuncPointer()->getName() == "WrapperHorizontal_WrapperVertical") {
if (N->getFuncPointer()->getName() == "InternalMul") {
//if (N->getFuncPointer()->getName() == "InternalMul") {
n1 = N;
}
//else if (N->getFuncPointer()->getName() == "WrapperVertical") {
//else if (N->getFuncPointer()->getName() == "vertical") {
//else if (N->getFuncPointer()->getName() == "squareRoot") {
else if (N->getFuncPointer()->getName() == "WrapperVertical") {
//else if (N->getFuncPointer()->getName() == "WrapperErode") {
//else if (N->getFuncPointer()->getName() == "WrapperSquareRoot") {
else if (N->getFuncPointer()->getName() == "InternalSum") {
//else if (N->getFuncPointer()->getName() == "InternalSum") {
n2 = N;
}
}
......@@ -599,6 +605,12 @@ void MergeTraversal::mergeDFN() {
errs() << "Removing similar arguments\n";
if (dyn_cast<DFLeafNode>(n1)) {
removeUnnecessaryInputEdges(mergeDFNode, n1, 0, 0);
// Erase old functions from module
n1->getFuncPointer()->replaceAllUsesWith(UndefValue::get(n1->getFuncPointer()->getType()));
n1->getFuncPointer()->eraseFromParent();
n2->getFuncPointer()->replaceAllUsesWith(UndefValue::get(n2->getFuncPointer()->getType()));
n2->getFuncPointer()->eraseFromParent();
} else {
std::vector<DFNode*> AllocationNodes;
std::vector<DFNode*> ComputeNodes;
......
......@@ -146,7 +146,6 @@ static void* llvm_visc_ocl_request_mem(void* ptr, size_t size, DFNodeContext_OCL
DEBUG(cout << "\tMemory found on host at: " << MTE->getAddress() << flush << "\n");
DEBUG(cout << "\t"; MTE->print(); cout << flush << "\n");
DEBUG(cout << "\tCopying ...");
// Else copy and update the latest copy
cl_mem_flags clFlags;
cl_int errcode;
......@@ -156,13 +155,14 @@ static void* llvm_visc_ocl_request_mem(void* ptr, size_t size, DFNodeContext_OCL
else if(isOutput) clFlags = CL_MEM_WRITE_ONLY;
else clFlags = CL_MEM_READ_ONLY;
visc_SwitchToTimer(&kernel_timer, visc_TimerID_COPY);
//visc_SwitchToTimer(&kernel_timer, visc_TimerID_COPY);
//pthread_mutex_lock(&ocl_mtx);
cl_mem d_input = clCreateBuffer(Context->clOCLContext, clFlags, size, NULL, &errcode);
//pthread_mutex_unlock(&ocl_mtx);
checkErr(errcode, CL_SUCCESS, "Failure to allocate memory on device");
DEBUG(cout<< "\nMemory allocated on device: " << d_input << flush << "\n");
if(isInput) {
DEBUG(cout << "\tCopying ...");
//pthread_mutex_lock(&ocl_mtx);
errcode = clEnqueueWriteBuffer(Context->clCommandQue,
d_input,
......@@ -174,7 +174,7 @@ static void* llvm_visc_ocl_request_mem(void* ptr, size_t size, DFNodeContext_OCL
checkErr(errcode, CL_SUCCESS, "Failure to copy memory to device");
}
visc_SwitchToTimer(&kernel_timer, visc_TimerID_NONE);
//visc_SwitchToTimer(&kernel_timer, visc_TimerID_NONE);
DEBUG(cout << " done\n");
MTE->update(MemTrackerEntry::DEVICE, (void*) d_input, Context);
DEBUG(cout << "Updated Table\n");
......@@ -206,7 +206,7 @@ void* llvm_visc_request_mem(void* ptr, size_t size) {
// Else copy from device and update table
DEBUG(cout << "\tMemory found on device at: " << MTE->getAddress() << flush << "\n");
DEBUG(cout << "\tCopying ...");
visc_SwitchToTimer(&kernel_timer, visc_TimerID_COPY);
//visc_SwitchToTimer(&kernel_timer, visc_TimerID_COPY);
//pthread_mutex_lock(&ocl_mtx);
cl_int errcode = clEnqueueReadBuffer(((DFNodeContext_OCL*)MTE->getContext())->clCommandQue,
(cl_mem) MTE->getAddress(),
......@@ -216,7 +216,7 @@ void* llvm_visc_request_mem(void* ptr, size_t size) {
ptr,
0, NULL, NULL);
//pthread_mutex_unlock(&ocl_mtx);
visc_SwitchToTimer(&kernel_timer, visc_TimerID_NONE);
//visc_SwitchToTimer(&kernel_timer, visc_TimerID_NONE);
DEBUG(cout << " done\n");
checkErr(errcode, CL_SUCCESS, "[request mem] Failure to read output");
DEBUG(cout << "Free mem object on device\n");
......@@ -1162,17 +1162,17 @@ void llvm_visc_freeThreads(void* graphID) {
void* llvm_visc_x86_launch(void* (*rootFunc)(void*), void* arguments) {
DFNodeContext_X86 *Context = (DFNodeContext_X86*) malloc(sizeof(DFNodeContext_X86));
int err;
if((err = pthread_create(&Context->threadID, NULL, rootFunc, arguments)) != 0)
cout << "Failed to create pthread. Error code = " << err << flush << "\n";
//int err;
//if((err = pthread_create(&Context->threadID, NULL, rootFunc, arguments)) != 0)
//cout << "Failed to create pthread. Error code = " << err << flush << "\n";
rootFunc(arguments);
return Context;
}
void llvm_visc_x86_wait(void* graphID) {
DEBUG(cout << "Waiting for pthread to finish ...\n");
DFNodeContext_X86* Context = (DFNodeContext_X86*) graphID;
pthread_join(Context->threadID, NULL);
//DFNodeContext_X86* Context = (DFNodeContext_X86*) graphID;
//pthread_join(Context->threadID, NULL);
free(graphID);
DEBUG(cout << "\t... pthread Done!\n");
}
......@@ -1255,7 +1255,7 @@ void* llvm_visc_ocl_initContext(enum visc::Target T) {
checkErr(errcode, CL_SUCCESS, "Failure to create OCL context");
DEBUG(cout << "Initialize Kernel Timer\n");
visc_InitializeTimerSet(&kernel_timer);
//visc_InitializeTimerSet(&kernel_timer);
pthread_mutex_unlock(&ocl_mtx);
return globalOCLContext;
......@@ -1274,8 +1274,8 @@ void llvm_visc_ocl_clearContext(void* graphID) {
//DEBUG(cout << "Released context at: " << globalOCLContext);
free(Context);
DEBUG(cout << "Done with OCL kernel\n");
cout << "Printing VISC Timer: KernelTimer\n";
visc_PrintTimerSet(&kernel_timer);
//cout << "Printing VISC Timer: KernelTimer\n";
//visc_PrintTimerSet(&kernel_timer);
pthread_mutex_unlock(&ocl_mtx);
}
......@@ -1418,7 +1418,7 @@ void* llvm_visc_ocl_executeNode(void* graphID, unsigned workDim , const size_t*
//pthread_mutex_lock(&ocl_mtx);
clFinish(Context->clCommandQue);
//pthread_mutex_unlock(&ocl_mtx);
visc_SwitchToTimer(&kernel_timer, visc_TimerID_COMPUTATION);
//visc_SwitchToTimer(&kernel_timer, visc_TimerID_COMPUTATION);
//for(int i=0 ;i < NUM_TESTS; i++) {
//cout << "Iteration = " << i << flush << "\n";
//pthread_mutex_lock(&ocl_mtx);
......@@ -1430,7 +1430,7 @@ void* llvm_visc_ocl_executeNode(void* graphID, unsigned workDim , const size_t*
//pthread_mutex_lock(&ocl_mtx);
clFinish(Context->clCommandQue);
//pthread_mutex_unlock(&ocl_mtx);
visc_SwitchToTimer(&kernel_timer, visc_TimerID_NONE);
//visc_SwitchToTimer(&kernel_timer, visc_TimerID_NONE);
pthread_mutex_unlock(&ocl_mtx);
return event;
......@@ -1563,7 +1563,7 @@ void llvm_visc_ocl_wait(void* graphID) {
void llvm_visc_switchToTimer(void** timerSet, enum visc_TimerID timer) {
//cout << "Switching to timer " << timer << flush << "\n";
pthread_mutex_lock(&ocl_mtx);
visc_SwitchToTimer((visc_TimerSet*)(*timerSet), timer);
//visc_SwitchToTimer((visc_TimerSet*)(*timerSet), timer);
pthread_mutex_unlock(&ocl_mtx);
}
void llvm_visc_printTimerSet(void** timerSet, char* timerName) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment