Мне нужно преобразовать сотни изображений jpg в dicom. У меня есть веб-приложение, в котором эта часть была первоначально сделана с помощью Node.js, но очень медленная. Я думал, что делать в C и использовать OpenMP для распараллеливания следующего кода:Как использовать openmp для преобразования jpg2dicom?
int main(){
DIR *dir;
struct dirent *arq;
dir = opendir("./jpg");
char cmd1[255] = "./dcm4che-2.0.23/bin/jpg2dcm -c dcm4che-2.0.23/etc/jpg2dcm/jpg2dcm.cfg jpg/";
char cmd_aux[255] = "./dcm4che-2.0.23/bin/jpg2dcm -c dcm4che-2.0.23/etc/jpg2dcm/jpg2dcm.cfg jpg/";
char buf[255];
char nomeArq[255];
int i;
//Stretch in which I use openmp
while ((arq = readdir(dir)) != NULL){
strncpy(nomeArq, arq->d_name, 255);
if(nomeArq[0] != '.'){
sprintf(buf, " dcm/imagem-%d.dcm", i);
strcat(cmd1, nomeArq); // cmd1 + nomeArquivo
strcat(cmd1, buf);
system(cmd1);
strncpy(cmd1, cmd_aux, 255);
}
i++;
}
closedir(dir);
return 0;
}
Как я знаю, что этот код является I/O границы, я хотел бы спросить, если на самом деле не могу получить какое-либо ускорение с OpenMP. И если возможно, то как распараллелить этот цикл при использовании openmp. Если бы я был не очень ясен, извините! Я все еще изучаю английский!
Если вы уже используете внешнюю команду, следует использовать [GNU Parallel] (https://www.gnu.org/software/parallel/) или [ 'xargs -P'] (https://linux.die.net/man/1/xargs), которые не требуют от вас большого количества кода – dvhh
Спасибо, dvhh! Я взгляну! :) – Thales