Parallelized the RN_DATA::Recalculate() function.
This commit is contained in:
parent
a10d918cac
commit
1490099ddd
|
@ -125,6 +125,13 @@ if( CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
|
||||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden" )
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility-inlines-hidden" )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package( OpenMP QUIET )
|
||||||
|
if( OPENMP_FOUND )
|
||||||
|
set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" )
|
||||||
|
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
|
||||||
|
add_definitions( -DUSE_OPENMP )
|
||||||
|
endif()
|
||||||
|
|
||||||
if( MINGW )
|
if( MINGW )
|
||||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "-s" )
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
|
|
||||||
set( MAKE_LINK_MAPS false )
|
set( MAKE_LINK_MAPS false )
|
||||||
|
|
||||||
|
set( CMAKE_CXX_FLAGS "-fopenmp" )
|
||||||
|
|
||||||
add_definitions( -DPCBNEW )
|
add_definitions( -DPCBNEW )
|
||||||
add_subdirectory(router)
|
add_subdirectory(router)
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
* @brief Class that computes missing connections on a PCB.
|
* @brief Class that computes missing connections on a PCB.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef USE_OPENMP
|
||||||
|
#include <omp.h>
|
||||||
|
#endif /* USE_OPENMP */
|
||||||
|
|
||||||
#include <ratsnest_data.h>
|
#include <ratsnest_data.h>
|
||||||
|
|
||||||
#include <class_board.h>
|
#include <class_board.h>
|
||||||
|
@ -829,12 +833,25 @@ void RN_DATA::Recalculate( int aNet )
|
||||||
{
|
{
|
||||||
if( aNet < 0 ) // Recompute everything
|
if( aNet < 0 ) // Recompute everything
|
||||||
{
|
{
|
||||||
// Start with net number 1, as 0 stand for not connected
|
unsigned int tid, i, chunk, netCount;
|
||||||
for( unsigned int i = 1; i < m_board->GetNetCount(); ++i )
|
netCount = m_board->GetNetCount();
|
||||||
|
chunk = 1;
|
||||||
|
|
||||||
|
#ifdef USE_OPENMP
|
||||||
|
#pragma omp parallel shared(chunk, netCount) private(i, tid)
|
||||||
{
|
{
|
||||||
if( m_nets[i].IsDirty() )
|
tid = omp_get_thread_num();
|
||||||
updateNet( i );
|
#pragma omp for schedule(guided, chunk)
|
||||||
}
|
#else /* USE_OPENMP */
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
// Start with net number 1, as 0 stand for not connected
|
||||||
|
for( i = 1; i < netCount; ++i )
|
||||||
|
{
|
||||||
|
if( m_nets[i].IsDirty() )
|
||||||
|
updateNet( i );
|
||||||
|
}
|
||||||
|
} /* end of parallel section */
|
||||||
}
|
}
|
||||||
else if( aNet > 0 ) // Recompute only specific net
|
else if( aNet > 0 ) // Recompute only specific net
|
||||||
{
|
{
|
||||||
|
@ -848,3 +865,4 @@ void RN_DATA::ClearSimple()
|
||||||
BOOST_FOREACH( RN_NET& net, m_nets )
|
BOOST_FOREACH( RN_NET& net, m_nets )
|
||||||
net.ClearSimple();
|
net.ClearSimple();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue