blob: 3bf8ca28de6b204c8d34f4cc757768aa999b4413 [file] [log] [blame]
#pragma once
#include <algorithm>
#include <cstddef>
#include <utility>
namespace caffe2 {
std::pair<size_t, size_t> Get1DPartition(
size_t work,
int nthreads,
int tid,
int work_align = 1);
/**
* 1D-partition m x n 2D work.
* First try partitioning m if m >= nthreads.
* Otherwise, each row is partitioned by multiple threads.
* In this case, each thread only works on a single row.
* Optionally, we can force the number of columns assigned per thread is a
* multiple of n_align.
*/
void Get1DPartitionOf2D(
int m,
int n,
int nthreads,
int thread_id,
int *m_begin,
int *m_end,
int *n_begin,
int *n_end,
int n_align = 1);
} // namespace caffe2