Changes

Jump to: navigation, search

GPU621/Group 6

3,681 bytes added, 10:51, 28 November 2018
Deadlocks
by helping find both memory and threading errors that occur within programs. This can be very important, as memory errors
can be incredibly difficult to locate without a tool, and threading errors are often non-deterministic, which means that
even for the same input, they can show different behavior on different runs, making it much harder to determine what the issue is. Below is a list of errors that Intel Inspector can find. These are the more common errors, and for a longer list of problem types, you can find them on the [https://software.intel.com/en-us/inspector-user-guide-windows-problem-type-reference Intel website here].
[[File:Deterministic_diagram.png]]
'''It Intel Inspector can be used with the following'''
#OpenMP
#TBB (Thread Build Blocks)
#MPI (Message Passing Interface)
'''Memory Errors''' = Testing Intel Inspector = # Memory leaks # Memory corruption# Allocation and deallocation API mismatches # Inconsistent memory API usage# Illegal memory access# Uninitialized memory read '''Threading Errors'''# Data races# Heap races# Stack races# Deadlocks '''New You can find some online tutorials for 2019''' #Find persistence errors like missing or redundant cache flushes. (Persistent memory is an emerging class of memory storage technology.)#Detect deadlocks on std[https::shared_mutex (C++17 standard)//software.#Experience improved compatibility with some antivirusesintel.#Use the latest operating systems and Microsoft Visual Studio*com/en-us/articles/inspector-tutorials Intel Inspector here].
'''Levels of Analysis'''
#The third level is great for regression testing and finding bugs.
[[File:03-Choose-Level.png]]
 
== Memory Errors ==
Memory errors refer to any error that involves the loss, misuse, or incorrect recall of data stored in memory.
=== Memory leaks ===
These are a resource leaks that occurs when a computer program incorrectly manages to release memory when it is no longer needed.
This may lead to extensive response times due to excessive paging, leading to slower applications.
 
[[File:Regular_mem_leak.JPG]]
 
nested memory leak
 
[[File:Nested_mem_leak.JPG]]
 
=== Memory corruption ===
Memory corruption is when a computer program violates memory safety, things like buffer overflow and dangling pointers.
 
=== Allocation and deallocation API mismatches ===
This problem occurs when the program attempts to deallocate data using a function that is not mean for the allocator used for the data. For example, a common mistake is when
data is allocated using new[], a problem will occur if you just use the delete function, instead of delete[].
 
===Inconsistent memory API usage===
This problem occurs when memory is allocated to API that is not used within the program. An API is a set of subroutine definitions, communication protocols, and tools for building software, and
when those tools are introduced into a program but not used, unneeded memory is used.
 
===Illegal memory access===
This is when a program attempts to access data that it does not have the right permissions to use.
 
[[File:Invalid_mem_access.JPG]]
 
===Uninitialized memory read===
This problem occurs when the program attempts to read from a variable that has not been initialized.
 
===Mismatched allocation/deallocation===
this is when attempting to delete memory already deleted or allocate already allocated memory
 
[[File:Invalid_mem_access.JPG]]
 
example code https://github.com/vlogozzo/cpp/blob/master/gpu621/memory%20leak%20walkthrough/memory%20leak%20walkthrough/Source.cpp
 
==Threading Errors==
Threading errors refer to problems that occur due to the specific use of threads within a program.
 
===Race Conditions===
 
A race condition occurs when multiple threads access the same memory location without proper synchronization and at least one access is a write.
 
There are multiple types of race conditions such as
#Data Race: Occurs when multiple threads attempt to perform an operation on shared data
#Heap Race: Performs operations on a shared heap,
#Stack Race: Performs operations on a shared stack.
 
[[File:racecondition_chart.png|400px]]
 
'''Solutions'''
 
Privatize memory shared by multiple threads so each thread has its own copy.
#For Microsoft Windows* threading, consider using TlsAlloc() and TlsFree() to allocate thread local storage.
#For OpenMP* threading, consider declaring the variable in a private, firstprivate, or lastprivate clause, or making it threadprivate.
 
Consider using thread stack memory.
Synchronize access to the shared memory using synchronization objects.
#For Microsoft Windows* threading, consider using mutexes or critical sections.
#For OpenMP* threading, consider using atomic or critical sections or OpenMP* locks.
 
 
[[File:Race-Condition.png|800px]]
 
https://github.com/JTardif1/gpu_project/blob/master/Race_Condition.cpp
 
===Deadlocks===
A deadlock is when a multiple processes attempt to access the same resource at the same time, and the waiting process is holding a resource that the first process needs to finish.
 
[[File:deadlock_chart.png|400px]]
 
'''Solutions'''
 
#Create a global lock hierarchy
#Use recursive synchronization objects such as recursive mutexes if a thread must acquire the same object more than once.
#Avoid the case where two threads wait for each other to terminate. Instead, use a third thread to wait for both threads to terminate.
 
'''Intel Inspector cannot detect a Deadlock problem involving more than four threads.'''
 
[[File:dead_lock.png|800px]]
 
https://github.com/JTardif1/gpu_project/blob/master/Deadlock.cpp
46
edits

Navigation menu