Я использую openmp для распараллеливания моего кода. У меня есть исходный массив:
A=[3,5,2,5,7,9,-4,6,7,-3,1,7,6,8,-1,2]
и массив отметок:
M=[1,0,1,0,0,0,1,0,0,1,1,0,0,0,1,1]
используя массив M, я могу сжать исходный массив в этом упакованном массиве:
A=[3,2,-4,-3,1,-1,2]
Я хотел бы решить эту проблему, используя многопоточный подход. Библиотека Thrust для C++ решает эту проблему, но я не могу найти аналогичные инструменты для Fortran. Есть ли библиотека, такая как «thrust» для C++, которую я могу использовать для выполнения сжатия потока? В качестве альтернативы, есть ли алгоритм, который я могу написать сам, используя fortran и openmp, чтобы решить эту проблему?
A = pack(A,M==1)
. Я думаю, что накладные расходы на запись нескольких потоков вA
убьют любое ускорение от распределения работыpack
ing. Но я с нетерпением жду, чтобы оказаться неправым. Как Thrust решает проблему? - person High Performance Mark   schedule 05.11.2014pack
в Fortran. Я полагаю, вам будет достаточно легко вызывать подпрограммы C++ из Thrust. - person High Performance Mark   schedule 05.11.2014OMP do
и использоватьpack
для каждого подмножества. Вам нужно будет сохранить полученные подмножества независимо и объединить их в конце. - person damienfrancois   schedule 05.11.2014pack
ing. Мне будет интересно увидеть ваши результаты, если вы пойдете по этому пути. Я думаю, что большая часть материала в URL-адресе, на который вы нам указываете, показывает преимущества использования параллельных алгоритмов, когда вы получили данные в ОЗУ графического процессора, но довольно скромно говорит о времени, необходимом для их перемещения туда и обратно. - person High Performance Mark   schedule 05.11.2014