我正在尝试加速我使用 OpenACC 编写的 opencv 程序,我正在使用 accull 编译器来执行此操作。但是,我很难找到任何可以帮助我解决这个问题的文档或示例。
http://scelementary.com/2015/04/30/openacc-on-jetson-tk1.html
我正在尝试加速我使用 OpenACC 编写的 opencv 程序,我正在使用 accull 编译器来执行此操作。但是,我很难找到任何可以帮助我解决这个问题的文档或示例。
http://scelementary.com/2015/04/30/openacc-on-jetson-tk1.html
我对 ACCULL 没有任何经验,但我可以为您提供一个使用 OpenCV 和 OpenACC 的示例,也许这会帮助您开始行动。这已经在 X86 上用 Ubunut 14.04 上的 PGI 进行了测试。这将读取图像,反转像素,然后将图像写回。
反转.cpp:
void invert(unsigned char *imgData, int w, int h, int ch, int step)
{
int i,j,c;
#pragma acc parallel loop collapse(3) copy(imgData[:h*w*ch])
for ( i = 0; i < h; i++)
for ( j = 0; j < w; j++ )
for ( c = 0; c < ch; c++ )
imgData[i*step + j*ch + c] = 255 - imgData[i*step + j*ch + c];
}
主.cpp:
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/cvaux.h>
#include <opencv/highgui.h>
void invert(unsigned char*,int,int,int,int);
int main(int argc, char* argv[])
{
if (argc < 3)
{
fprintf(stderr,"Usage: %s inFilename outFilename\n",argv[0]);
return -1;
}
IplImage* img = cvLoadImage(argv[1]);
printf("%s: %d x %d, %d %d\n", argv[1],img->width, img->height, img->widthStep, img->nChannels);
invert((unsigned char*)img->imageData,img->width,img->height, img->nChannels, img->widthStep);
if(!cvSaveImage(argv[2],img))
fprintf(stderr,"Failed to write to %s.\n",argv[2]);
cvReleaseImage(&img);
return 0;
}
生成文件:
a.out: main.cpp invert.cpp
pgc++ -fast -ta=tesla -c invert.cpp
pgc++ -fast -ta=tesla -c main.cpp
pgc++ -ta=tesla invert.o main.o -lopencv_legacy -lopencv_highgui -lopencv_core