DPCT1016

メッセージ

<API 名> は移行されませんでした。パラメーター <パラメーター名 a>/<パラメーター名 b> を評価できなかったか、<パラメーター名 a> が <パラメーター名 b> と等しくありません。このコードを手動で書き換えてください。

説明

cublasSetMatrix は、ldaldb が同じ定数値の場合のみ、インテル® DPC++ 互換性ツールで移行できます。移行されない場合は、手動でコードを書き直します。

  • ldaldb の値が同じ場合、次のコードを使用できます。

    1
    dpct::dpct_memcpy((void*)(B), (void*)(A), lda*cols*elemSize, dpct::host_to_device); // For cublasGetMatrix, use dpct::device_to_host
    
  • そうでない場合は、行列の列やベクトルの要素を 1 つずつコピーできます。

    • 以下のコードは、cublasSetMatrix(rows, cols, elemSize, A, lda, B, ldb) と等価です。

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
       auto A_backup = A;
       auto B_backup = B;
       A = A - lda;
       B = B - ldb;
       for (int c = 0; c < cols; ++c) {
         A = A + lda;
         B = B + ldb;
         dpct::dpct_memcpy(
             (void *)(B), (void *)(A), rows * elemSize,
             dpct::host_to_device); // For cublasGetMatrix, use dpct::device_to_host
       }
       A = A_backup;
       B = B_backup;
      

インテル® DPC++ 互換性ツールは、incxincy が同じ定数値の場合のみ、cublasSetVector を移行できます。移行されない場合は、手動でコードを書き直します。

  • incxincy の値が同じ場合、次のコードを使用できます。

    1
    dpct::dpct_memcpy((void*)(B), (void*)(A), n*incx*elemSize, dpct::host_to_device); // For cublasGetVector, use dpct::device_to_host
    
  • そうでない場合は、ベクトルの要素を 1 つずつコピーできます。

    • cublasGetVector(n, elemSize, x, incx, y, incy) は、以下のコードに置き換えることができます。

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
       auto x_backup = x;
       auto y_backup = y;
       x = x - incx;
       y = y - incy;
       for (int c = 0; c < n; ++c) {
         x = x + incx;
         y = y + incy;
         dpct::dpct_memcpy(
             (void *)(y), (void *)(x), elemSize,
             dpct::device_to_host); // for cublasSetVector, use dpct::host_to_device
       }
       x = x_backup;
       y = y_backup;
      

修正方法の提案

ロジックを確認して、調整してください。