문서 ID: 000086372 콘텐츠 형태: 문제 해결 마지막 검토일: 2017-08-04

#pragma ivdep이 aocl 버전 17.0에서 올바르게 작동하지 않는 이유는 무엇입니까?

환경

  • 인텔® Quartus® Prime Pro Edition
  • OpenCL™용 인텔® FPGA SDK
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    설명

    16.1에서 이 코드는 종속성으로 인해 외부 루프가 직렬화되고 내부 루프 종속성 #pragma ivdep에서 제거된 경우 예상대로 동작했습니다.

    이 루프는 내부 루프가 있는 진정한 종속성으로 인해 직렬화됩니다.

    (서명되지 않은 char x = 0, x < 4, x) {

    내부 루프는 반복 간 종속성 을 갖지 않지만 외부 루프에 따라 달라집니다.

    #pragma ivdep

    (서명되지 않은 char y = 0, y<64, y) {

    17.0에서 #pragma ivdep는 이제 내부 루프와 외부 루프 모두에 적용되므로 외부 루프의 종속성 은 컴파일러가 고려하지 않습니다.  따라서 에뮬레이션 작업에도 불구하고 하드웨어에서 유사한 코드가 올바르게 작동하지 않을 수 있습니다.

    해결 방법

    해결:

    1. 커널에 추가 인수 "더미"를 추가합니다.  호스트 쪽에서는 이 더미 인수에 대해 항상 1을 전달합니다.

    전에

    __kernel 무효 my_kernel(
    __global cpx_t*는 입력을 제한하고,
    __global cpx_t* 결과 제한)

    __kernel 무효 my_kernel(
    __global cpx_t*는 입력을 제한하고,
    __global cpx_t*는 결과를 제한하고,
        int 더미)

    2. 루프 네스트에서 내부 루프를 "if(dummy)"로 래핑합니다.

    이 루프는 진정한 종속성으로 인해 직렬화됩니다.

    (서명되지 않은 char x = 0, x < 4, x) {

    if(더미) {

    64회 반복의 각 세트에 종속성 없음

    #pragma ivdep

    (서명되지 않은 char y = 0, y<64, y) {

     

    이 문제는 FPGA SDK용 인텔© OpenCL™의 향후 버전에서 해결될 예정입니다.

    관련 제품

    이 문서는 다음 항목에 적용됩니다. 5 제품

    인텔® Arria® 10 FPGA 및 SoC FPGA
    인텔® Stratix® 10 FPGA 및 SoC FPGA
    Cyclone® V FPGA 및 SoC FPGA
    Arria® V FPGA 및 SoC FPGA
    Stratix® V FPGA

    이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.