MXNet has a number of context-specific operator parameters: 'cudnn_tune', 'cudnn_off' and 'workspace' are parameters that control the behavior of Convolution on gpu contexts with NVIDIA gpus. Even with these, there would be benefits to having additional parameters, e.g. to set Convolution algos by number, or force the compute precision to float16. With the desire to support multiple backends and a growing number of operators, it's time to ask the question, "Is this scalable?"
I propose that, rather than adding a new parameter at the Python level for each new backend-specific parameter 'knob', all context-specific parameters be swept into a single dictionary, called e.g. 'ctx_params': Convolution(..., ctx_params= {'cudnn_tune': 2, 'cudnn_off': False, 'workspace': 2000}, ...) I'll stop short of working out all the details to hopefully generate more discussion. Some open questions: Do all backends share the same namespace, or do we have separate 'gpu_ctx_params', 'cpu_ctx_params', etc.? Is there a clean extension to the general parameter parsing facility of dmlc to handle this dictionary, and what form do these extension params take in the backend, Map<string,string>? And while this proposes to organize and consolidate these context-specific parameters at the Python level, we'd need to tolerate (and auto-create) documentation for these new parameters. Other approaches welcome.