1

OpenACC を使用して作成した opencv プログラムを高速化しようとしています。accull コンパイラを使用してこれを実行しています。ただし、この問題に役立つドキュメントや例を見つけるのに非常に苦労しています。

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

4

1 に答える 1

2

私は ACCULL の経験はありませんが、OpenCV と OpenACC を使用する例を提供できます。これは、Ubunut 14.04 の PGI を使用して X86 でテストされています。これにより、画像が読み取られ、ピクセルが反転され、画像が書き戻されます。

invert.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];
}

main.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 に答える