Я работаю над Zedboard, который содержит двухъядерные процессоры ARM A9 и работает под управлением Linux.Плата связывается с внешним устройством ввода-вывода.
У меня есть две функции, написанные на языке 'C', которые я должен выполнять параллельно.
Одна функция вызывает цикл while и непрерывно выгружает данные на внешнее устройство и получает обработанные данные обратно в указатель памяти.
Другая функция считывает данные из местоположения указателя, создает их копию и выполняет вычислительные процессы (такие как БПФ, выравнивание сигналов и т. Д., Которые выполняются медленно).
Внешнему устройству нужны данныена 15 миллионов образцов в секунду.чего я могу достичь, если я только запускаю первую функцию, и она занимает около 70% одного ядра ARM.Когда я запускаю обе функции, оба ядра ARM достигают своего предела, и я обнаруживаю, что не могу предоставить данные внешнему устройству с требуемой скоростью выборки.
Есть ли способ, которым я могуограничить обе функции в независимых ядрах (не имеет значения, что вторая функция работает медленно, но производительность первой функции не может быть скомпрометирована) и все еще может обмениваться данными между ними?
Я пыталсяиспользуя OpenMP, но он не работал для достижения требуемой производительности.Я читал о SCHED_SETAFFINITY, но у меня была проблема с пониманием его реализации.
Я максимально оптимизировал каждую из своих функций, используя конструкции / библиотеки NEON и функцию автоматической векторизации процессоров ARM.