Когда вы говорите «user_defined», я предполагаю, что вы имеете в виду, что кто-то другой пишет my_func()
, а затем ваш код вызывает его?
Если это так, рассмотрите возможность параллельного выполнения множества вызовов my_func()
чем пытаться сломать функцию.Это означает, что тому, кто пишет my_func()
, нужно написать только одну функцию, и вы будете нести ответственность за делегирование нескольких вызовов, обеспечение правильных данных для работы и сбор результатов.
ОбновлениеНа основании комментариев
В вашей ситуации, если операция, необходимая для вычисления каждого члена vals
, отличается, то пользователь должен будет либо параметризовать my_func()
по требуемому индексу;как вы предложили double my_func(const mxArray *point, const unsigned & index)
, обратите внимание, что теперь он возвращает единственное двойное значение, а не весь массив результатов.Или укажите разные my_func()
для каждого индекса;double my_func_n(const mxArray *point)
.
Затем вы можете вызывать эту функцию или набор функций из любого числа потоков, сколько захотите, и получить один результат для дальнейших вычислений.Однако мы игнорируем многие проблемы параллелизма, связанные с одновременным чтением / записью данных, о которых нужно подумать.
Общие рекомендации по многозадачности
Прежде чем приступить к многозадачности с помощью графического процессора,посмотрите на стандартную многопоточность на процессоре (я рекомендую Boost Thread Libraries, чтобы помочь: http://www.boost.org/). После того, как вы увидите, как создаются и используются потоки, вы можете лучше понять, что вы можете с ними делать и как с этим справляться.Делая это.
Многозадачность с графическим процессором становится более полезной, если вы применяете математические функции к очень большим матрицам или векторам, и для достижения математического результата можно использовать аппаратные реализации определенных графических функций.для поддержки программирования GPGPU (GPU общего назначения), такого как OpenCL, Nvidia CUDA или ATI Stream. Посмотрите, что предоставляют эти библиотеки, чтобы дать вам представление о том, насколько они применимы к вашей ситуации.