7#if (defined(__x86_64__) || defined(__i386__)) && \
8 (defined(__GNUC__) || defined(__clang__))
11 ck_threadpool_t *pool;
13} ck_audio_conv1d_parallel_context;
15static void audio_conv1d_channel_range(
int begin,
int end,
void *opaque)
27 const ck_audio_conv1d_parallel_context *context = opaque;
29 int workers = context->workers;
32 if (workers > channels) workers = channels;
35 if (workers < 2 || channels < 8 || job->output_frames < 16) {
39 const int grain = (channels + workers - 1) / workers;
41 audio_conv1d_channel_range, (
void *)job);
46 const float *input,
size_t input_elements,
size_t input_stride,
47 const float *weight,
size_t weight_elements,
48 const float *bias,
size_t bias_elements,
49 float *output,
size_t output_elements,
size_t output_stride,
50 float *scratch,
size_t scratch_elements,
51 size_t input_channels,
size_t output_channels,
size_t input_frames,
52 size_t kernel_size,
size_t stride,
size_t padding,
size_t dilation,
53 size_t output_frames,
void *worker_pool,
size_t worker_count)
55#if (defined(__x86_64__) || defined(__i386__)) && \
56 (defined(__GNUC__) || defined(__clang__))
59 if (!worker_pool || worker_count == 0 || worker_count > INT_MAX)
61 ck_audio_conv1d_parallel_context context = {
62 .pool = (ck_threadpool_t *)worker_pool,
63 .workers = (
int)worker_count,
66 weight, weight_elements, bias, bias_elements, output, output_elements,
67 output_stride, scratch, scratch_elements, input_channels,
68 output_channels, input_frames, kernel_size, stride, padding, dilation,
69 output_frames, audio_conv1d_compute_parallel, &context);
71 (void)input; (void)input_elements; (void)input_stride;
72 (void)weight; (void)weight_elements; (void)bias; (void)bias_elements;
73 (void)output; (void)output_elements; (void)output_stride;
74 (void)scratch; (void)scratch_elements; (void)input_channels;
75 (void)output_channels; (void)input_frames; (void)kernel_size;
76 (void)stride; (void)padding; (void)dilation; (void)output_frames;
77 (void)worker_pool; (void)worker_count;
83 const float *input,
size_t input_elements,
size_t input_stride,
84 const float *weight,
size_t weight_elements,
85 const float *bias,
size_t bias_elements,
86 float *output,
size_t output_elements,
size_t output_stride,
87 float *scratch,
size_t scratch_elements,
88 size_t input_channels,
size_t output_channels,
size_t input_frames,
89 size_t kernel_size,
size_t stride,
size_t padding,
size_t output_frames,
90 void *worker_pool,
size_t worker_count)
93 input_stride, weight, weight_elements, bias, bias_elements, output,
94 output_elements, output_stride, scratch, scratch_elements,
95 input_channels, output_channels, input_frames, kernel_size, stride,
96 padding, 1, output_frames, worker_pool, worker_count);
100 const float *input,
size_t input_elements,
size_t input_stride,
101 const float *weight,
size_t weight_elements,
102 const float *bias,
size_t bias_elements,
103 float *output,
size_t output_elements,
size_t output_stride,
104 float *scratch,
size_t scratch_elements,
105 size_t input_channels,
size_t output_channels,
size_t input_frames,
106 size_t kernel_size,
size_t stride,
size_t padding,
size_t dilation,
107 size_t output_frames,
void *worker_pool,
size_t worker_count)
110 input_stride, weight, weight_elements, bias, bias_elements, output,
111 output_elements, output_stride, scratch, scratch_elements,
112 input_channels, output_channels, input_frames, kernel_size, stride,
113 padding, dilation, output_frames, worker_pool, worker_count);
int ck_audio_conv1d_checked_execute(const float *input, size_t input_elements, size_t input_stride, const float *weight, size_t weight_elements, const float *bias, size_t bias_elements, float *output, size_t output_elements, size_t output_stride, float *scratch, size_t scratch_elements, size_t input_channels, size_t output_channels, size_t input_frames, size_t kernel_size, size_t stride, size_t padding, size_t dilation, size_t output_frames, ck_audio_conv1d_compute_fn compute, void *compute_context)
void audio_conv1d_compute_avx2(const ck_audio_conv1d_job *job, void *unused)
static int audio_conv1d_parallel_checked_impl(const float *input, size_t input_elements, size_t input_stride, const float *weight, size_t weight_elements, const float *bias, size_t bias_elements, float *output, size_t output_elements, size_t output_stride, float *scratch, size_t scratch_elements, size_t input_channels, size_t output_channels, size_t input_frames, size_t kernel_size, size_t stride, size_t padding, size_t dilation, size_t output_frames, void *worker_pool, size_t worker_count)
int audio_conv1d_checked_channel_major_f32_avx2_parallel(const float *input, size_t input_elements, size_t input_stride, const float *weight, size_t weight_elements, const float *bias, size_t bias_elements, float *output, size_t output_elements, size_t output_stride, float *scratch, size_t scratch_elements, size_t input_channels, size_t output_channels, size_t input_frames, size_t kernel_size, size_t stride, size_t padding, size_t output_frames, void *worker_pool, size_t worker_count)
int audio_conv1d_dilated_checked_channel_major_f32_avx2_parallel(const float *input, size_t input_elements, size_t input_stride, const float *weight, size_t weight_elements, const float *bias, size_t bias_elements, float *output, size_t output_elements, size_t output_stride, float *scratch, size_t scratch_elements, size_t input_channels, size_t output_channels, size_t input_frames, size_t kernel_size, size_t stride, size_t padding, size_t dilation, size_t output_frames, void *worker_pool, size_t worker_count)
Persistent pthread thread pool for CK-Engine inference.
int ck_threadpool_capacity(const ck_threadpool_t *pool)
void ck_threadpool_parallel_for_n(ck_threadpool_t *pool, int active_threads, int begin, int end, int grain_size, ck_range_fn_t fn, void *args)
int audio_conv1d_checked_avx2_fma_available(void)
@ CK_AUDIO_CONV_CHECKED_UNSUPPORTED
@ CK_AUDIO_CONV_CHECKED_INVALID