Igorr
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору GeorgeMame Цитата: Но вот куда в очередь поставить | Я, например, использую фортран только для расчета как вызываемые dll и никак для управления расчетом, поэтому могу предположить, что можно сделать так (при условии, что часть ядер используется для алгоритма 1, а часть - для алгоритма 2, баланс между количествами ядер для алгоритмов найден): 1) создать (в С/С++) динамический массив (произвольных данных) очереди задач алгоритма 2 2) вызвать фортрановскую dll 1 с алгоритмом 1 (в отдельном потоке С/С++); непрерывно рассчитываемые числа возвращаются в C/C++ и помещаются последовательно в конец очереди задач алгортма 2 3) из С/С++ (в отдельном потоке) запускается фортрановская dll 2 с распараллеленным алгоритмом 2 4) запускается алгоритм 2 с первым числом из очереди, и соответствующая задача убирается из очереди 5) при окончании расчета алгоритма 2 на всех ядрах, алгоритм 2 посылает из фортрана сообщение в очередь (в C/C++) об освобождении ядер 6) п.4 Это - приблизительный вариант. Можно надумать вариант и с задействованием любых ядер в любом алгоритме, но схема управления может резко усложниться. |