DPCT1016¶
メッセージ¶
<API 名> は移行されませんでした。パラメーター <パラメーター名 a>/<パラメーター名 b> を評価できなかったか、<パラメーター名 a> が <パラメーター名 b> と等しくありません。このコードを手動で書き換えてください。
説明¶
cublasSetMatrix
は、lda
と ldb
が同じ定数値の場合のみ、インテル® DPC++ 互換性ツールで移行できます。移行されない場合は、手動でコードを書き直します。
lda
とldb
の値が同じ場合、次のコードを使用できます。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++ 互換性ツールは、incx
と incy
が同じ定数値の場合のみ、cublasSetVector
を移行できます。移行されない場合は、手動でコードを書き直します。
incx
とincy
の値が同じ場合、次のコードを使用できます。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;
修正方法の提案¶
ロジックを確認して、調整してください。