Mentions légales du service

Skip to content
Snippets Groups Projects
Commit c278c859 authored by Thierry's avatar Thierry
Browse files

[fix] bug in allocation of NUMA queue from the affinity mask

parent 0fa8accf
Branches
No related tags found
No related merge requests found
...@@ -3229,6 +3229,7 @@ static inline int __kmp_execute_tasks_template( ...@@ -3229,6 +3229,7 @@ static inline int __kmp_execute_tasks_template(
if (!use_own_tasks if (!use_own_tasks
&& (!__kmp_queue_empty(&task_team->tt.tt_task_queues[KMP_LEVEL_THREAD][tid]) && (!__kmp_queue_empty(&task_team->tt.tt_task_queues[KMP_LEVEL_THREAD][tid])
#if LIBOMP_USE_AFFINITY #if LIBOMP_USE_AFFINITY
|| !__kmp_queue_empty( &task_team->tt.tt_task_private_queues[KMP_LEVEL_THREAD][tid])
|| !__kmp_queue_empty( &task_team->tt.tt_task_queues[KMP_LEVEL_NUMA][node]) || !__kmp_queue_empty( &task_team->tt.tt_task_queues[KMP_LEVEL_NUMA][node])
|| !__kmp_queue_empty( &task_team->tt.tt_task_private_queues[KMP_LEVEL_NUMA][node]) || !__kmp_queue_empty( &task_team->tt.tt_task_private_queues[KMP_LEVEL_NUMA][node])
|| !__kmp_queue_empty( &task_team->tt.tt_task_private_queues[KMP_LEVEL_CORE][cpu]) || !__kmp_queue_empty( &task_team->tt.tt_task_private_queues[KMP_LEVEL_CORE][cpu])
...@@ -3627,6 +3628,7 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread, ...@@ -3627,6 +3628,7 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread,
(kmp_queue_data_t *) __kmp_allocate( __kmp_xproc * sizeof(kmp_queue_data_t)); (kmp_queue_data_t *) __kmp_allocate( __kmp_xproc * sizeof(kmp_queue_data_t));
#endif #endif
for (i = 0; i < nthreads; i++) for (i = 0; i < nthreads; i++)
{
__kmp_init_task_deque(&task_team->tt.tt_task_queues[KMP_LEVEL_THREAD][i], __kmp_init_task_deque(&task_team->tt.tt_task_queues[KMP_LEVEL_THREAD][i],
KMP_LEVEL_THREAD, KMP_LEVEL_THREAD,
i, i,
...@@ -3636,6 +3638,15 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread, ...@@ -3636,6 +3638,15 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread,
0 0
#endif #endif
); );
#if LIBOMP_USE_AFFINITY
__kmp_init_task_deque(&task_team->tt.tt_private_task_queues[KMP_LEVEL_THREAD][i],
KMP_LEVEL_THREAD,
i,
__kmp_cpu2node(i)
0
);
#endif
}
#if LIBOMP_USE_AFFINITY #if LIBOMP_USE_AFFINITY
for (i = 0; i < __kmp_xproc; i++) for (i = 0; i < __kmp_xproc; i++)
{ {
...@@ -3677,9 +3688,17 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread, ...@@ -3677,9 +3688,17 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread,
{ {
KMP_CPU_FREE(task_team->tt.tt_nodes_mask); KMP_CPU_FREE(task_team->tt.tt_nodes_mask);
task_team->tt.tt_nodes_mask = new_tt_nodes_mask; task_team->tt.tt_nodes_mask = new_tt_nodes_mask;
int setsize = KMP_CPU_SIZE(task_team->tt.tt_nodes_mask); // Here we need the last bit set in order to reserve array of queue
//int setsize = KMP_CPU_SIZE(task_team->tt.tt_nodes_mask);
int setsize = 0;
int i;
KMP_CPU_SET_ITERATE(i, task_team->tt.tt_nodes_mask) {
if (KMP_CPU_ISSET(i, task_team->tt.tt_nodes_mask)) setsize =i;
}
setsize++;
if (task_team->tt.tt_task_queues[KMP_LEVEL_NUMA]) if (task_team->tt.tt_task_queues[KMP_LEVEL_NUMA])
__kmp_free( task_team->tt.tt_task_queues[KMP_LEVEL_NUMA] ); __kmp_free( task_team->tt.tt_task_queues[KMP_LEVEL_NUMA] );
task_team->tt.tt_task_queues[KMP_LEVEL_NUMA] = (kmp_queue_data_t *) __kmp_allocate( setsize * sizeof(kmp_queue_data_t)); task_team->tt.tt_task_queues[KMP_LEVEL_NUMA] = (kmp_queue_data_t *) __kmp_allocate( setsize * sizeof(kmp_queue_data_t));
if (task_team->tt.tt_task_private_queues[KMP_LEVEL_NUMA]) if (task_team->tt.tt_task_private_queues[KMP_LEVEL_NUMA])
...@@ -3695,7 +3714,7 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread, ...@@ -3695,7 +3714,7 @@ static int __kmp_realloc_task_threads_data(kmp_info_t *thread,
__kmp_init_task_deque(&task_team->tt.tt_task_queues[KMP_LEVEL_NUMA][i], KMP_LEVEL_NUMA, i, phy_index); __kmp_init_task_deque(&task_team->tt.tt_task_queues[KMP_LEVEL_NUMA][i], KMP_LEVEL_NUMA, i, phy_index);
__kmp_init_task_deque(&task_team->tt.tt_task_private_queues[KMP_LEVEL_NUMA][i], KMP_LEVEL_NUMA, i, phy_index); __kmp_init_task_deque(&task_team->tt.tt_task_private_queues[KMP_LEVEL_NUMA][i], KMP_LEVEL_NUMA, i, phy_index);
KA_TRACE( 5, ( "__kmp_enable_tasking: phy index: %i, array index: %i\n", phy_index, i ) ); KA_TRACE( 5, ( "__kmp_enable_tasking: phy index: %i, array index: %i\n", phy_index, i ) );
//printf( "[TASK_TEAM]: NUMA %i, array index: %i\n", phy_index, i ); printf( "[TASK_TEAM]: NUMA %i, array index: %i\n", phy_index, i );
i++; i++;
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment