1

我正在尝试加速我使用 OpenACC 编写的 opencv 程序,我正在使用 accull 编译器来执行此操作。但是,我很难找到任何可以帮助我解决这个问题的文档或示例。

http://scelementary.com/2015/04/30/openacc-on-jetson-tk1.html

4

1 回答 1

2

我对 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
于 2016-02-03T16:43:04.090 回答