代码暂存,而后分析
unsigned simt_core_cluster::issue_block2core()
{
unsigned num_blocks_issued=0;
for( unsigned i=0; i < m_config->n_simt_cores_per_cluster; i++ ) {
unsigned core = (i+m_cta_issue_next_core+1)%m_config->n_simt_cores_per_cluster;
if( m_core[core]->get_not_completed() == 0 ) {
if( m_core[core]->get_kernel() == NULL ) {
kernel_info_t *k = m_gpu->select_kernel();
if( k )
m_core[core]->set_kernel(k);
}
}
kernel_info_t *kernel = m_core[core]->get_kernel();
if( kernel && !kernel->no_more_ctas_to_run() && (m_core[core]->get_n_active_cta() < m_config->max_cta(*kernel)) ) {
m_core[core]->issue_block2core(*kernel);
num_blocks_issued++;
m_cta_issue_next_core=core;
break;
}
}
return num_blocks_issued;
}