已合并
fix(examples): 修复aclnn示例代码及接口文档问题 #10300
luoyufan7创建于 11 天前
fix(examples): 修复aclnn示例代码及接口文档问题 #10300
已合并
共 18 个文件变更+112-101
| @@ -331,13 +331,13 @@ int main() | |||
| 331 | aclTensor* gradOutput = nullptr; | 331 | aclTensor* gradOutput = nullptr; |
| 332 | aclTensor* gradInput = nullptr; | 332 | aclTensor* gradInput = nullptr; |
| 333 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 333 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; |
| 334 | - std::vector<int> gradOutputHostData = {1, 1, 1, 1, 1, 1, 1, 1}; | 334 | + std::vector<float> gradOutputHostData = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; |
| 335 | - std::vector<int> gradInputHostData = {0, 0, 0, 0, 0, 0, 0, 0}; | 335 | + std::vector<float> gradInputHostData = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; |
| 336 | 336 | ||
| 337 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); | 337 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); |
| 338 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 338 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 339 | ret = CreateAclTensor( | 339 | ret = CreateAclTensor( |
| 340 | - gradOutputHostData, gradOutputShape, &gradOutputDeviceAddr, aclDataType::ACL_INT32, &gradOutput); | 340 | + gradOutputHostData, gradOutputShape, &gradOutputDeviceAddr, aclDataType::ACL_FLOAT, &gradOutput); |
| 341 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 341 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 342 | ret = CreateAclTensor(gradInputHostData, gradInputShape, &gradInputDeviceAddr, aclDataType::ACL_FLOAT, &gradInput); | 342 | ret = CreateAclTensor(gradInputHostData, gradInputShape, &gradInputDeviceAddr, aclDataType::ACL_FLOAT, &gradInput); |
| 343 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 343 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| @@ -90,12 +90,12 @@ int main() | |||
| 90 | aclTensor* gradOutput = nullptr; | 90 | aclTensor* gradOutput = nullptr; |
| 91 | aclTensor* gradInput = nullptr; | 91 | aclTensor* gradInput = nullptr; |
| 92 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 92 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; |
| 93 | - std::vector<int> gradOutputHostData = {1, 1, 1, 1, 1, 1, 1, 1}; | 93 | + std::vector<float> gradOutputHostData = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; |
| 94 | - std::vector<int> gradInputHostData = {0, 0, 0, 0, 0, 0, 0, 0}; | 94 | + std::vector<float> gradInputHostData = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; |
| 95 | 95 | ||
| 96 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); | 96 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); |
| 97 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 97 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 98 | - ret = CreateAclTensor(gradOutputHostData, gradOutputShape, &gradOutputDeviceAddr, aclDataType::ACL_INT32, | 98 | + ret = CreateAclTensor(gradOutputHostData, gradOutputShape, &gradOutputDeviceAddr, aclDataType::ACL_FLOAT, |
| 99 | &gradOutput); | 99 | &gradOutput); |
| 100 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 100 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 101 | ret = CreateAclTensor(gradInputHostData, gradInputShape, &gradInputDeviceAddr, aclDataType::ACL_FLOAT, &gradInput); | 101 | ret = CreateAclTensor(gradInputHostData, gradInputShape, &gradInputDeviceAddr, aclDataType::ACL_FLOAT, &gradInput); |
| @@ -145,4 +145,4 @@ int main() | |||
| 145 | aclrtResetDevice(deviceId); | 145 | aclrtResetDevice(deviceId); |
| 146 | aclFinalize(); | 146 | aclFinalize(); |
| 147 | return 0; | 147 | return 0; |
| 148 | -} | 148 | +} |
| @@ -342,8 +342,8 @@ int main() { | |||
| 342 | aclTensor* gradOutput = nullptr; | 342 | aclTensor* gradOutput = nullptr; |
| 343 | aclTensor* gradInput = nullptr; | 343 | aclTensor* gradInput = nullptr; |
| 344 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 344 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; |
| 345 | - std::vector<int> gradOutputHostData = {1, 1, 1, 1, 1, 1, 1, 1}; | 345 | + std::vector<float> gradOutputHostData = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; |
| 346 | - std::vector<int> gradInputHostData = {0, 0, 0, 0, 0, 0, 0, 0}; | 346 | + std::vector<float> gradInputHostData = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; |
| 347 | 347 | ||
| 348 | char *approximate = "tanh"; | 348 | char *approximate = "tanh"; |
| 349 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); | 349 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); |
| @@ -90,8 +90,8 @@ int main() | |||
| 90 | aclTensor* gradOutput = nullptr; | 90 | aclTensor* gradOutput = nullptr; |
| 91 | aclTensor* gradInput = nullptr; | 91 | aclTensor* gradInput = nullptr; |
| 92 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 92 | std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7}; |
| 93 | - std::vector<int> gradOutputHostData = {1, 1, 1, 1, 1, 1, 1, 1}; | 93 | + std::vector<float> gradOutputHostData = {1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f}; |
| 94 | - std::vector<int> gradInputHostData = {0, 0, 0, 0, 0, 0, 0, 0}; | 94 | + std::vector<float> gradInputHostData = {0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f}; |
| 95 | 95 | ||
| 96 | char* approximate = "tanh"; | 96 | char* approximate = "tanh"; |
| 97 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); | 97 | ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self); |
| @@ -147,4 +147,4 @@ int main() | |||
| 147 | aclrtResetDevice(deviceId); | 147 | aclrtResetDevice(deviceId); |
| 148 | aclFinalize(); | 148 | aclFinalize(); |
| 149 | return 0; | 149 | return 0; |
| 150 | -} | 150 | +} |
| @@ -39,9 +39,9 @@ void PrintOutResult(std::vector<int64_t>& shape, void** deviceAddr) | |||
| 39 | std::vector<float> resultData(size, 0); | 39 | std::vector<float> resultData(size, 0); |
| 40 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, | 40 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, |
| 41 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 41 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 42 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ); | 42 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 43 | for (int64_t i = 0; i < size; i++) { | 43 | for (int64_t i = 0; i < size; i++) { |
| 44 | - LOG_PRINT("mean result[%ld] is: %f\n", i, resultData[i]); | 44 | + LOG_PRINT("aclnnGeluMul result[%ld] is: %f\n", i, resultData[i]); |
| 45 | } | 45 | } |
| 46 | } | 46 | } |
| 47 | 47 | ||
| @@ -153,4 +153,4 @@ int main() | |||
| 153 | aclFinalize(); | 153 | aclFinalize(); |
| 154 | 154 | ||
| 155 | return 0; | 155 | return 0; |
| 156 | -} | 156 | +} |
| @@ -269,7 +269,7 @@ void PrintOutResult(std::vector<int64_t> &shape, void** deviceAddr) { | |||
| 269 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 269 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 270 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); | 270 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 271 | for (int64_t i = 0; i < size; i++) { | 271 | for (int64_t i = 0; i < size; i++) { |
| 272 | - LOG_PRINT("mean result[%ld] is: %f\n", i, resultData[i]); | 272 | + LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]); |
| 273 | } | 273 | } |
| 274 | } | 274 | } |
| 275 | 275 | ||
| @@ -41,7 +41,7 @@ void PrintOutResult(std::vector<int64_t>& shape, void** deviceAddr) | |||
| 41 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 41 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 42 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); | 42 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 43 | for (int64_t i = 0; i < size; i++) { | 43 | for (int64_t i = 0; i < size; i++) { |
| 44 | - LOG_PRINT("mean result[%ld] is: %f\n", i, resultData[i]); | 44 | + LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]); |
| 45 | } | 45 | } |
| 46 | } | 46 | } |
| 47 | 47 | ||
| @@ -365,7 +365,7 @@ int main() | |||
| 365 | void* workspaceAddr = nullptr; | 365 | void* workspaceAddr = nullptr; |
| 366 | if (workspaceSize > 0) { | 366 | if (workspaceSize > 0) { |
| 367 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); | 367 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); |
| 368 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret;); | 368 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret); |
| 369 | } | 369 | } |
| 370 | // 调用aclnnSoftplusBackward第二段接口 | 370 | // 调用aclnnSoftplusBackward第二段接口 |
| 371 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); | 371 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); |
| @@ -123,7 +123,7 @@ int main() | |||
| 123 | void* workspaceAddr = nullptr; | 123 | void* workspaceAddr = nullptr; |
| 124 | if (workspaceSize > 0) { | 124 | if (workspaceSize > 0) { |
| 125 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); | 125 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); |
| 126 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret;); | 126 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret); |
| 127 | } | 127 | } |
| 128 | // 调用aclnnSoftplusBackward第二段接口 | 128 | // 调用aclnnSoftplusBackward第二段接口 |
| 129 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); | 129 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); |
| @@ -157,4 +157,4 @@ int main() | |||
| 157 | aclrtResetDevice(deviceId); | 157 | aclrtResetDevice(deviceId); |
| 158 | aclFinalize(); | 158 | aclFinalize(); |
| 159 | return 0; | 159 | return 0; |
| 160 | -} | 160 | +} |
| @@ -333,7 +333,7 @@ int main() { | |||
| 333 | void* workspaceAddr = nullptr; | 333 | void* workspaceAddr = nullptr; |
| 334 | if (workspaceSize > 0) { | 334 | if (workspaceSize > 0) { |
| 335 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); | 335 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); |
| 336 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret;); | 336 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret); |
| 337 | } | 337 | } |
| 338 | // 调用aclnnSoftplusBackward第二段接口 | 338 | // 调用aclnnSoftplusBackward第二段接口 |
| 339 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); | 339 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); |
| @@ -124,7 +124,7 @@ int main() | |||
| 124 | void* workspaceAddr = nullptr; | 124 | void* workspaceAddr = nullptr; |
| 125 | if (workspaceSize > 0) { | 125 | if (workspaceSize > 0) { |
| 126 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); | 126 | ret = aclrtMalloc(&workspaceAddr, workspaceSize, ACL_MEM_MALLOC_HUGE_FIRST); |
| 127 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret;); | 127 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("allocate workspace failed. ERROR: %d\n", ret); return ret); |
| 128 | } | 128 | } |
| 129 | // 调用aclnnSoftplusBackward第二段接口 | 129 | // 调用aclnnSoftplusBackward第二段接口 |
| 130 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); | 130 | ret = aclnnSoftplusBackward(workspaceAddr, workspaceSize, executor, stream); |
| @@ -158,4 +158,4 @@ int main() | |||
| 158 | aclrtResetDevice(deviceId); | 158 | aclrtResetDevice(deviceId); |
| 159 | aclFinalize(); | 159 | aclFinalize(); |
| 160 | return 0; | 160 | return 0; |
| 161 | -} | 161 | +} |
| @@ -161,7 +161,7 @@ aclnnStatus aclnnAdvanceStep( | |||
| 161 | <tr> | 161 | <tr> |
| 162 | <td>blockTables(aclTensor*)</td> | 162 | <td>blockTables(aclTensor*)</td> |
| 163 | <td>输入</td> | 163 | <td>输入</td> |
| 164 | - <td>待进行AdvanceStep计算的入参,用于记录不同blockIdx下block的大小,公式中的输入blockTables。</td> | 164 | + <td>待进行AdvanceStep计算的入参,用于记录不同blockIdx下block的物理块编号,公式中的输入blockTables。</td> |
| 165 | <td><ul><li>不支持空Tensor。</li><li>shape第一维长度与numSeqs一致,第二维大于(seqLens中的最大值)/blockSize。</li><li>取值范围是大于0的正整数。</li></ul></td> | 165 | <td><ul><li>不支持空Tensor。</li><li>shape第一维长度与numSeqs一致,第二维大于(seqLens中的最大值)/blockSize。</li><li>取值范围是大于0的正整数。</li></ul></td> |
| 166 | <td>INT64</td> | 166 | <td>INT64</td> |
| 167 | <td>ND</td> | 167 | <td>ND</td> |
| @@ -347,7 +347,7 @@ void PrintOutResult(std::vector<int64_t> &shape, void** deviceAddr) { | |||
| 347 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 347 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 348 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); | 348 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 349 | for (int64_t i = 0; i < size; i++) { | 349 | for (int64_t i = 0; i < size; i++) { |
| 350 | - LOG_PRINT("mean result[%ld] is: %ld\n", i, resultData[i]); | 350 | + LOG_PRINT("advanceStep result[%ld] is: %ld\n", i, resultData[i]); |
| 351 | } | 351 | } |
| 352 | } | 352 | } |
| 353 | 353 | ||
| @@ -394,7 +394,7 @@ int main() { | |||
| 394 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); | 394 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); |
| 395 | 395 | ||
| 396 | // 2. 构造输入与输出,需要根据API的接口自定义构造 | 396 | // 2. 构造输入与输出,需要根据API的接口自定义构造 |
| 397 | - std::vector<int64_t> inputShape = {8,1}; | 397 | + std::vector<int64_t> inputShape = {8}; |
| 398 | std::vector<int64_t> input2Shape = {4,1}; | 398 | std::vector<int64_t> input2Shape = {4,1}; |
| 399 | std::vector<int64_t> inputHostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 399 | std::vector<int64_t> inputHostData = {0, 1, 2, 3, 4, 5, 6, 7}; |
| 400 | std::vector<int64_t> input2HostData = {0, 1, 2, 3}; | 400 | std::vector<int64_t> input2HostData = {0, 1, 2, 3}; |
| @@ -114,10 +114,10 @@ aclnnStatus aclnnAdvanceStepV2( | |||
| 114 | <td>inputTokens(aclTensor*)</td> | 114 | <td>inputTokens(aclTensor*)</td> |
| 115 | <td>输入/输出</td> | 115 | <td>输入/输出</td> |
| 116 | <td>待进行AdvanceStepV2计算的入参/出参,公式中的输出inputTokens,用于更新vLLM模型中的token值。</td> | 116 | <td>待进行AdvanceStepV2计算的入参/出参,公式中的输出inputTokens,用于更新vLLM模型中的token值。</td> |
| 117 | - <td><ul><li>不支持空Tensor。</li><li>shape第一维长度与numSeqs一致,第二维长度为1+specNum。</li><li>取值范围是大于0的正整数。</li></ul></td> | 117 | + <td><ul><li>不支持空Tensor。</li><li>shape为[numSeqs * (1+specNum)]。</li><li>取值范围是大于0的正整数。</li></ul></td> |
| 118 | <td>INT64</td> | 118 | <td>INT64</td> |
| 119 | <td>ND</td> | 119 | <td>ND</td> |
| 120 | - <td>2</td> | 120 | + <td>1</td> |
| 121 | <td>×</td> | 121 | <td>×</td> |
| 122 | </tr> | 122 | </tr> |
| 123 | <tr> | 123 | <tr> |
| @@ -134,7 +134,7 @@ aclnnStatus aclnnAdvanceStepV2( | |||
| 134 | <td>inputPositions(aclTensor*)</td> | 134 | <td>inputPositions(aclTensor*)</td> |
| 135 | <td>输入/输出</td> | 135 | <td>输入/输出</td> |
| 136 | <td>待进行AdvanceStepV2计算的入参/出参,公式中的输出inputPositions,用于记录token的index。</td> | 136 | <td>待进行AdvanceStepV2计算的入参/出参,公式中的输出inputPositions,用于记录token的index。</td> |
| 137 | - <td><ul><li>不支持空Tensor。</li><li>shape长度与numSeqs一致。</li><li>取值范围是大于0的正整数。</li></ul></td> | 137 | + <td><ul><li>不支持空Tensor。</li><li>shape为[numSeqs * (1+specNum)]。</li><li>取值范围是大于0的正整数。</li></ul></td> |
| 138 | <td>INT64</td> | 138 | <td>INT64</td> |
| 139 | <td>ND</td> | 139 | <td>ND</td> |
| 140 | <td>1</td> | 140 | <td>1</td> |
| @@ -144,7 +144,7 @@ aclnnStatus aclnnAdvanceStepV2( | |||
| 144 | <td>seqLens(aclTensor*)</td> | 144 | <td>seqLens(aclTensor*)</td> |
| 145 | <td>输入/输出</td> | 145 | <td>输入/输出</td> |
| 146 | <td>待进行AdvanceStepV2计算的入参/出参,用于记录不同blockIdx下seq的长度,公式中的输入/输出seqLens。</td> | 146 | <td>待进行AdvanceStepV2计算的入参/出参,用于记录不同blockIdx下seq的长度,公式中的输入/输出seqLens。</td> |
| 147 | - <td><ul><li>不支持空Tensor。</li><li>shape长度与numSeqs一致。</li><li>取值范围是大于0的正整数。</li></ul></td> | 147 | + <td><ul><li>不支持空Tensor。</li><li>shape为[numSeqs * (1+specNum)]。</li><li>取值范围是大于0的正整数。</li></ul></td> |
| 148 | <td>INT64</td> | 148 | <td>INT64</td> |
| 149 | <td>ND</td> | 149 | <td>ND</td> |
| 150 | <td>1</td> | 150 | <td>1</td> |
| @@ -154,7 +154,7 @@ aclnnStatus aclnnAdvanceStepV2( | |||
| 154 | <td>slotMapping(aclTensor*)</td> | 154 | <td>slotMapping(aclTensor*)</td> |
| 155 | <td>输入/输出</td> | 155 | <td>输入/输出</td> |
| 156 | <td>待进行AdvanceStepV2计算的入参/出参,公式中的输出slotMapping,用于将token值在序列中的位置映射到物理位置。</td> | 156 | <td>待进行AdvanceStepV2计算的入参/出参,公式中的输出slotMapping,用于将token值在序列中的位置映射到物理位置。</td> |
| 157 | - <td><ul><li>不支持空Tensor。</li><li>shape长度与numSeqs一致。</li><li>取值范围是大于0的正整数。</li></ul></td> | 157 | + <td><ul><li>不支持空Tensor。</li><li>shape为[numSeqs * (1+specNum)]。</li><li>取值范围是大于0的正整数。</li></ul></td> |
| 158 | <td>INT64</td> | 158 | <td>INT64</td> |
| 159 | <td>ND</td> | 159 | <td>ND</td> |
| 160 | <td>1</td> | 160 | <td>1</td> |
| @@ -163,8 +163,8 @@ aclnnStatus aclnnAdvanceStepV2( | |||
| 163 | <tr> | 163 | <tr> |
| 164 | <td>blockTables(aclTensor*)</td> | 164 | <td>blockTables(aclTensor*)</td> |
| 165 | <td>输入</td> | 165 | <td>输入</td> |
| 166 | - <td>待进行AdvanceStepV2计算的入参,用于记录不同blockIdx下block的大小,公式中的输入blockTables。</td> | 166 | + <td>待进行AdvanceStepV2计算的入参,用于记录不同blockIdx下block的物理块编号,公式中的输入blockTables。</td> |
| 167 | - <td><ul><li>不支持空Tensor。</li><li>shape长度与numSeqs一致,第二维大于(seqLens中的最大值)/blockSize。</li><li>取值范围是大于0的正整数。</li></ul></td> | 167 | + <td><ul><li>不支持空Tensor。</li><li>shape第一维长度与numSeqs一致,第二维大于(seqLens中的最大值)/blockSize。</li><li>取值范围是大于0的正整数。</li></ul></td> |
| 168 | <td>INT64</td> | 168 | <td>INT64</td> |
| 169 | <td>ND</td> | 169 | <td>ND</td> |
| 170 | <td>2</td> | 170 | <td>2</td> |
| @@ -274,13 +274,13 @@ aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/co | |||
| 274 | <tr> | 274 | <tr> |
| 275 | <td rowspan="5">aclnnAdvanceStepV2GetWorkspaceSize failed</td> | 275 | <td rowspan="5">aclnnAdvanceStepV2GetWorkspaceSize failed</td> |
| 276 | <td rowspan="5">561002</td> | 276 | <td rowspan="5">561002</td> |
| 277 | - <td>输入inputTokens、inputPositions、seqLens、slotMapping、blockTables、specToken、acceptedNum的shape的第一维长度与numSeqs不一致。</td> | 277 | + <td>输入inputTokens、inputPositions、seqLens、slotMapping的shape不是[numSeqs * (1+specNum)],或者blockTables、specToken、acceptedNum的shape的第一维长度与numSeqs不一致。</td> |
| 278 | </tr> | 278 | </tr> |
| 279 | <tr> | 279 | <tr> |
| 280 | - <td>输入sampledTokenIds的shape的第一维长度与numQueries不一致,或者shape的第二维长度不为1。</td> | 280 | + <td>输入sampledTokenIds的shape的第一维长度与numSeqs不一致,或者shape的第二维长度不为1+specNum。</td> |
| 281 | </tr> | 281 | </tr> |
| 282 | <tr> | 282 | <tr> |
| 283 | - <td>输入inputTokens的shape的第二维长度不为1+specNum。</td> | 283 | + <td>输入acceptedNum的shape的长度与numSeqs不一致。</td> |
| 284 | </tr> | 284 | </tr> |
| 285 | <tr> | 285 | <tr> |
| 286 | <td>输入specToken的shape的第二维长度不为specNum。</td> | 286 | <td>输入specToken的shape的第二维长度不为specNum。</td> |
| @@ -347,7 +347,7 @@ aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/co | |||
| 347 | #include <iostream> | 347 | #include <iostream> |
| 348 | #include <vector> | 348 | #include <vector> |
| 349 | #include "acl/acl.h" | 349 | #include "acl/acl.h" |
| 350 | -#include "aclnnop/aclnn_advance_step_v2.h"//不确定头文件名字 | 350 | +#include "aclnnop/aclnn_advance_step_v2.h" |
| 351 | #define CHECK_RET(cond, return_expr) \ | 351 | #define CHECK_RET(cond, return_expr) \ |
| 352 | do { \ | 352 | do { \ |
| 353 | if (!(cond)) { \ | 353 | if (!(cond)) { \ |
| @@ -375,7 +375,7 @@ void PrintOutResult(std::vector<int64_t> &shape, void** deviceAddr) { | |||
| 375 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 375 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 376 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); | 376 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 377 | for (int64_t i = 0; i < size; i++) { | 377 | for (int64_t i = 0; i < size; i++) { |
| 378 | - LOG_PRINT("mean result[%ld] is: %ld\n", i, resultData[i]); | 378 | + LOG_PRINT("advanceStepV2 result[%ld] is: %ld\n", i, resultData[i]); |
| 379 | } | 379 | } |
| 380 | } | 380 | } |
| 381 | 381 | ||
| @@ -422,16 +422,22 @@ int main() { | |||
| 422 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); | 422 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); |
| 423 | 423 | ||
| 424 | // 2. 构造输入与输出,需要根据API的接口自定义构造 | 424 | // 2. 构造输入与输出,需要根据API的接口自定义构造 |
| 425 | - std::vector<int64_t> input1Shape = {16}; | 425 | + std::vector<int64_t> input1Shape = {72}; |
| 426 | - std::vector<int64_t> input2Shape = {8,2}; | 426 | + std::vector<int64_t> input2Shape = {8,9}; |
| 427 | - std::vector<int64_t> input3Shape = {8,1000}; | 427 | + std::vector<int64_t> input3Shape = {72}; |
| 428 | - std::vector<int64_t> input4Shape = {8,1}; | 428 | + std::vector<int64_t> input4Shape = {72}; |
| 429 | - std::vector<int64_t> input5Shape = {8}; | 429 | + std::vector<int64_t> input5Shape = {72}; |
| 430 | - std::vector<int64_t> input1HostData = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7}; | 430 | + std::vector<int64_t> input6Shape = {8,1000}; |
| 431 | - std::vector<int64_t> input2HostData = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7}; | 431 | + std::vector<int64_t> input7Shape = {8,8}; |
| 432 | - std::vector<int64_t> input3HostData(8000, 7); | 432 | + std::vector<int64_t> input8Shape = {8}; |
| 433 | - std::vector<int64_t> input4HostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 433 | + std::vector<int64_t> input1HostData(8*9, 1); |
| 434 | - std::vector<int64_t> input5HostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 434 | + std::vector<int64_t> input2HostData(8*9, 1); |
| 435 | + std::vector<int64_t> input3HostData(8*9, 1); | ||
| 436 | + std::vector<int64_t> input4HostData(8*9, 8); | ||
| 437 | + std::vector<int64_t> input5HostData(8*9, 1); | ||
| 438 | + std::vector<int64_t> input6HostData(8*1000, 1); | ||
| 439 | + std::vector<int64_t> input7HostData(8*8, 1); | ||
| 440 | + std::vector<int64_t> input8HostData(8, 1); | ||
| 435 | 441 | ||
| 436 | void* input1DeviceAddr = nullptr; | 442 | void* input1DeviceAddr = nullptr; |
| 437 | aclTensor* input1 = nullptr; | 443 | aclTensor* input1 = nullptr; |
| @@ -454,17 +460,17 @@ int main() { | |||
| 454 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 460 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 455 | ret = CreateAclTensor(input2HostData, input2Shape, &input2DeviceAddr, aclDataType::ACL_INT64, &input2); | 461 | ret = CreateAclTensor(input2HostData, input2Shape, &input2DeviceAddr, aclDataType::ACL_INT64, &input2); |
| 456 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 462 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 457 | - ret = CreateAclTensor(input1HostData, input1Shape, &input3DeviceAddr, aclDataType::ACL_INT64, &input3); | 463 | + ret = CreateAclTensor(input3HostData, input3Shape, &input3DeviceAddr, aclDataType::ACL_INT64, &input3); |
| 458 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 464 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 459 | - ret = CreateAclTensor(input1HostData, input1Shape, &input4DeviceAddr, aclDataType::ACL_INT64, &input4); | 465 | + ret = CreateAclTensor(input4HostData, input4Shape, &input4DeviceAddr, aclDataType::ACL_INT64, &input4); |
| 460 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 466 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 461 | - ret = CreateAclTensor(input1HostData, input1Shape, &input5DeviceAddr, aclDataType::ACL_INT64, &input5); | 467 | + ret = CreateAclTensor(input5HostData, input5Shape, &input5DeviceAddr, aclDataType::ACL_INT64, &input5); |
| 462 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 468 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 463 | - ret = CreateAclTensor(input3HostData, input3Shape, &input6DeviceAddr, aclDataType::ACL_INT64, &input6); | 469 | + ret = CreateAclTensor(input6HostData, input6Shape, &input6DeviceAddr, aclDataType::ACL_INT64, &input6); |
| 464 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 470 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 465 | - ret = CreateAclTensor(input4HostData, input4Shape, &input5DeviceAddr, aclDataType::ACL_INT64, &input7); | 471 | + ret = CreateAclTensor(input7HostData, input7Shape, &input7DeviceAddr, aclDataType::ACL_INT64, &input7); |
| 466 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 472 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 467 | - ret = CreateAclTensor(input5HostData, input5Shape, &input6DeviceAddr, aclDataType::ACL_INT64, &input8); | 473 | + ret = CreateAclTensor(input8HostData, input8Shape, &input8DeviceAddr, aclDataType::ACL_INT64, &input8); |
| 468 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 474 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 469 | 475 | ||
| 470 | int64_t numseq = 8; | 476 | int64_t numseq = 8; |
| @@ -39,9 +39,9 @@ void PrintOutResult(std::vector<int64_t>& shape, void** deviceAddr) | |||
| 39 | std::vector<int64_t> resultData(size, 0); | 39 | std::vector<int64_t> resultData(size, 0); |
| 40 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, | 40 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, |
| 41 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 41 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 42 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ); | 42 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 43 | for (int64_t i = 0; i < size; i++) { | 43 | for (int64_t i = 0; i < size; i++) { |
| 44 | - LOG_PRINT("mean result[%ld] is: %ld\n", i, resultData[i]); | 44 | + LOG_PRINT("advanceStep result[%ld] is: %ld\n", i, resultData[i]); |
| 45 | } | 45 | } |
| 46 | } | 46 | } |
| 47 | 47 | ||
| @@ -91,7 +91,7 @@ int main() | |||
| 91 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); | 91 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); |
| 92 | 92 | ||
| 93 | // 2. 构造输入与输出,需要根据API的接口自定义构造 | 93 | // 2. 构造输入与输出,需要根据API的接口自定义构造 |
| 94 | - std::vector<int64_t> inputShape = {8, 1}; | 94 | + std::vector<int64_t> inputShape = {8}; |
| 95 | std::vector<int64_t> input2Shape = {4, 1}; | 95 | std::vector<int64_t> input2Shape = {4, 1}; |
| 96 | std::vector<int64_t> inputHostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 96 | std::vector<int64_t> inputHostData = {0, 1, 2, 3, 4, 5, 6, 7}; |
| 97 | std::vector<int64_t> input2HostData = {0, 1, 2, 3}; | 97 | std::vector<int64_t> input2HostData = {0, 1, 2, 3}; |
| @@ -180,4 +180,4 @@ int main() | |||
| 180 | aclFinalize(); | 180 | aclFinalize(); |
| 181 | 181 | ||
| 182 | return 0; | 182 | return 0; |
| 183 | -} | 183 | +} |
| @@ -1,18 +1,17 @@ | |||
| 1 | /** | 1 | /** |
| 2 | - * This program is free software, you can redistribute it and/or modify. | ||
| 3 | * Copyright (c) 2025 Huawei Technologies Co., Ltd. | 2 | * Copyright (c) 2025 Huawei Technologies Co., Ltd. |
| 4 | - * This file is a part of the CANN Open Software. | 3 | + * This program is free software, you can redistribute it and/or modify it under the terms and conditions of |
| 5 | - * Licensed under CANN Open Software License Agreement Version 2.0 (the "License"). | 4 | + * CANN Open Software License Agreement Version 2.0 (the "License"). |
| 6 | * Please refer to the License for details. You may not use this file except in compliance with the License. | 5 | * Please refer to the License for details. You may not use this file except in compliance with the License. |
| 7 | - * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING | 6 | + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, |
| 8 | - * BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. See LICENSE in the root of | 7 | + * INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. |
| 9 | - * the software repository for the full text of the License. | 8 | + * See LICENSE in the root of the software repository for the full text of the License. |
| 10 | */ | 9 | */ |
| 11 | 10 | ||
| 12 | 11 | ||
| 13 | 12 | ||
| 14 | 13 | ||
| 15 | -#include "aclnnop/aclnn_advance_step_v2.h" //不确定头文件名字 | 14 | +#include "aclnnop/aclnn_advance_step_v2.h" |
| 16 | 15 | ||
| 17 | do { \ | 16 | do { \ |
| 18 | if (!(cond)) { \ | 17 | if (!(cond)) { \ |
| @@ -40,9 +39,9 @@ void PrintOutResult(std::vector<int64_t>& shape, void** deviceAddr) | |||
| 40 | std::vector<int64_t> resultData(size, 0); | 39 | std::vector<int64_t> resultData(size, 0); |
| 41 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, | 40 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, |
| 42 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 41 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 43 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ); | 42 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 44 | for (int64_t i = 0; i < size; i++) { | 43 | for (int64_t i = 0; i < size; i++) { |
| 45 | - LOG_PRINT("mean result[%ld] is: %ld\n", i, resultData[i]); | 44 | + LOG_PRINT("advanceStepV2 result[%ld] is: %ld\n", i, resultData[i]); |
| 46 | } | 45 | } |
| 47 | } | 46 | } |
| 48 | 47 | ||
| @@ -92,16 +91,22 @@ int main() | |||
| 92 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); | 91 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret); |
| 93 | 92 | ||
| 94 | // 2. 构造输入与输出,需要根据API的接口自定义构造 | 93 | // 2. 构造输入与输出,需要根据API的接口自定义构造 |
| 95 | - std::vector<int64_t> input1Shape = {16}; | 94 | + std::vector<int64_t> input1Shape = {72}; |
| 96 | - std::vector<int64_t> input2Shape = {8, 2}; | 95 | + std::vector<int64_t> input2Shape = {8, 9}; |
| 97 | - std::vector<int64_t> input3Shape = {8, 1000}; | 96 | + std::vector<int64_t> input3Shape = {72}; |
| 98 | - std::vector<int64_t> input4Shape = {8, 1}; | 97 | + std::vector<int64_t> input4Shape = {72}; |
| 99 | - std::vector<int64_t> input5Shape = {8}; | 98 | + std::vector<int64_t> input5Shape = {72}; |
| 100 | - std::vector<int64_t> input1HostData = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7}; | 99 | + std::vector<int64_t> input6Shape = {8, 1000}; |
| 101 | - std::vector<int64_t> input2HostData = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7}; | 100 | + std::vector<int64_t> input7Shape = {8, 8}; |
| 102 | - std::vector<int64_t> input3HostData(8000, 7); | 101 | + std::vector<int64_t> input8Shape = {8}; |
| 103 | - std::vector<int64_t> input4HostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 102 | + std::vector<int64_t> input1HostData(8 * 9, 1); |
| 104 | - std::vector<int64_t> input5HostData = {0, 1, 2, 3, 4, 5, 6, 7}; | 103 | + std::vector<int64_t> input2HostData(8 * 9, 1); |
| 104 | + std::vector<int64_t> input3HostData(8 * 9, 1); | ||
| 105 | + std::vector<int64_t> input4HostData(8 * 9, 8); | ||
| 106 | + std::vector<int64_t> input5HostData(8 * 9, 1); | ||
| 107 | + std::vector<int64_t> input6HostData(8 * 1000, 1); | ||
| 108 | + std::vector<int64_t> input7HostData(8 * 8, 1); | ||
| 109 | + std::vector<int64_t> input8HostData(8, 1); | ||
| 105 | 110 | ||
| 106 | void* input1DeviceAddr = nullptr; | 111 | void* input1DeviceAddr = nullptr; |
| 107 | aclTensor* input1 = nullptr; | 112 | aclTensor* input1 = nullptr; |
| @@ -124,17 +129,17 @@ int main() | |||
| 124 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 129 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 125 | ret = CreateAclTensor(input2HostData, input2Shape, &input2DeviceAddr, aclDataType::ACL_INT64, &input2); | 130 | ret = CreateAclTensor(input2HostData, input2Shape, &input2DeviceAddr, aclDataType::ACL_INT64, &input2); |
| 126 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 131 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 127 | - ret = CreateAclTensor(input1HostData, input1Shape, &input3DeviceAddr, aclDataType::ACL_INT64, &input3); | 132 | + ret = CreateAclTensor(input3HostData, input3Shape, &input3DeviceAddr, aclDataType::ACL_INT64, &input3); |
| 128 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 133 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 129 | - ret = CreateAclTensor(input1HostData, input1Shape, &input4DeviceAddr, aclDataType::ACL_INT64, &input4); | 134 | + ret = CreateAclTensor(input4HostData, input4Shape, &input4DeviceAddr, aclDataType::ACL_INT64, &input4); |
| 130 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 135 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 131 | - ret = CreateAclTensor(input1HostData, input1Shape, &input5DeviceAddr, aclDataType::ACL_INT64, &input5); | 136 | + ret = CreateAclTensor(input5HostData, input5Shape, &input5DeviceAddr, aclDataType::ACL_INT64, &input5); |
| 132 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 137 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 133 | - ret = CreateAclTensor(input3HostData, input3Shape, &input6DeviceAddr, aclDataType::ACL_INT64, &input6); | 138 | + ret = CreateAclTensor(input6HostData, input6Shape, &input6DeviceAddr, aclDataType::ACL_INT64, &input6); |
| 134 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 139 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 135 | - ret = CreateAclTensor(input4HostData, input4Shape, &input5DeviceAddr, aclDataType::ACL_INT64, &input7); | 140 | + ret = CreateAclTensor(input7HostData, input7Shape, &input7DeviceAddr, aclDataType::ACL_INT64, &input7); |
| 136 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 141 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 137 | - ret = CreateAclTensor(input5HostData, input5Shape, &input6DeviceAddr, aclDataType::ACL_INT64, &input8); | 142 | + ret = CreateAclTensor(input8HostData, input8Shape, &input8DeviceAddr, aclDataType::ACL_INT64, &input8); |
| 138 | CHECK_RET(ret == ACL_SUCCESS, return ret); | 143 | CHECK_RET(ret == ACL_SUCCESS, return ret); |
| 139 | 144 | ||
| 140 | int64_t numseq = 8; | 145 | int64_t numseq = 8; |
| @@ -200,4 +205,4 @@ int main() | |||
| 200 | aclFinalize(); | 205 | aclFinalize(); |
| 201 | 206 | ||
| 202 | return 0; | 207 | return 0; |
| 203 | -} | 208 | +} |
| @@ -294,12 +294,12 @@ int64_t GetShapeSize(const std::vector<int64_t>& shape) { | |||
| 294 | 294 | ||
| 295 | void PrintOutResult(std::vector<int64_t> &shape, void** deviceAddr) { | 295 | void PrintOutResult(std::vector<int64_t> &shape, void** deviceAddr) { |
| 296 | auto size = GetShapeSize(shape); | 296 | auto size = GetShapeSize(shape); |
| 297 | - std::vector<int8_t> resultData(size, 0); | 297 | + std::vector<int16_t> resultData(size, 0); |
| 298 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), | 298 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), |
| 299 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 299 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 300 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); | 300 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 301 | for (int64_t i = 0; i < size; i++) { | 301 | for (int64_t i = 0; i < size; i++) { |
| 302 | - LOG_PRINT("mean result[%ld] is: %d\n", i, resultData[i]); | 302 | + LOG_PRINT("result[%ld] is: %d\n", i, resultData[i]); |
| 303 | } | 303 | } |
| 304 | } | 304 | } |
| 305 | 305 | ||
| @@ -351,10 +351,10 @@ int main() { | |||
| 351 | std::vector<int64_t> activationShape = {40}; | 351 | std::vector<int64_t> activationShape = {40}; |
| 352 | std::vector<int64_t> biasShape = {256}; | 352 | std::vector<int64_t> biasShape = {256}; |
| 353 | 353 | ||
| 354 | - std::vector<int16_t> inputHostData(40*256, 1); | 354 | + std::vector<int32_t> inputHostData(40*256, 1); |
| 355 | - std::vector<int32_t> weightHostData(256, 2); | 355 | + std::vector<float> weightHostData(256, 2.0f); |
| 356 | - std::vector<int32_t> activationHostData(40, 2); | 356 | + std::vector<float> activationHostData(40, 2.0f); |
| 357 | - std::vector<int32_t> biasHostData(256, 2); | 357 | + std::vector<float> biasHostData(256, 2.0f); |
| 358 | 358 | ||
| 359 | void* inputDeviceAddr = nullptr; | 359 | void* inputDeviceAddr = nullptr; |
| 360 | void* weightDeviceAddr = nullptr; | 360 | void* weightDeviceAddr = nullptr; |
| @@ -391,7 +391,7 @@ int main() { | |||
| 391 | 391 | ||
| 392 | // 调用aclnnDequantBias第一段接口 | 392 | // 调用aclnnDequantBias第一段接口 |
| 393 | ret = aclnnDequantBiasGetWorkspaceSize(input, weight, activation, bias, | 393 | ret = aclnnDequantBiasGetWorkspaceSize(input, weight, activation, bias, |
| 394 | - true, y, &workspaceSize, &executor); | 394 | + 1, y, &workspaceSize, &executor); |
| 395 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnDequantBiasGetWorkspaceSize failed. ERROR: %d\n", ret); return ret); | 395 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnDequantBiasGetWorkspaceSize failed. ERROR: %d\n", ret); return ret); |
| 396 | 396 | ||
| 397 | // 根据第一段接口计算出的workspaceSize申请device内存 | 397 | // 根据第一段接口计算出的workspaceSize申请device内存 |
| @@ -37,12 +37,12 @@ int64_t GetShapeSize(const std::vector<int64_t>& shape) | |||
| 37 | void PrintOutResult(std::vector<int64_t>& shape, void** deviceAddr) | 37 | void PrintOutResult(std::vector<int64_t>& shape, void** deviceAddr) |
| 38 | { | 38 | { |
| 39 | auto size = GetShapeSize(shape); | 39 | auto size = GetShapeSize(shape); |
| 40 | - std::vector<int8_t> resultData(size, 0); | 40 | + std::vector<int16_t> resultData(size, 0); |
| 41 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, | 41 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), *deviceAddr, |
| 42 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 42 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 43 | - CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ); | 43 | + CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 44 | for (int64_t i = 0; i < size; i++) { | 44 | for (int64_t i = 0; i < size; i++) { |
| 45 | - LOG_PRINT("mean result[%ld] is: %d\n", i, resultData[i]); | 45 | + LOG_PRINT("result[%ld] is: %d\n", i, resultData[i]); |
| 46 | } | 46 | } |
| 47 | } | 47 | } |
| 48 | 48 | ||
| @@ -97,10 +97,10 @@ int main() | |||
| 97 | std::vector<int64_t> activationShape = {40}; | 97 | std::vector<int64_t> activationShape = {40}; |
| 98 | std::vector<int64_t> biasShape = {256}; | 98 | std::vector<int64_t> biasShape = {256}; |
| 99 | 99 | ||
| 100 | - std::vector<int16_t> inputHostData(40 * 256, 1); | 100 | + std::vector<int32_t> inputHostData(40 * 256, 1); |
| 101 | - std::vector<int32_t> weightHostData(256, 2); | 101 | + std::vector<float> weightHostData(256, 2.0f); |
| 102 | - std::vector<int32_t> activationHostData(40, 2); | 102 | + std::vector<float> activationHostData(40, 2.0f); |
| 103 | - std::vector<int32_t> biasHostData(256, 2); | 103 | + std::vector<float> biasHostData(256, 2.0f); |
| 104 | 104 | ||
| 105 | void* inputDeviceAddr = nullptr; | 105 | void* inputDeviceAddr = nullptr; |
| 106 | void* weightDeviceAddr = nullptr; | 106 | void* weightDeviceAddr = nullptr; |
| @@ -135,7 +135,7 @@ int main() | |||
| 135 | aclOpExecutor* executor; | 135 | aclOpExecutor* executor; |
| 136 | 136 | ||
| 137 | // 调用aclnnDequantBias第一段接口 | 137 | // 调用aclnnDequantBias第一段接口 |
| 138 | - ret = aclnnDequantBiasGetWorkspaceSize(input, weight, activation, bias, true, y, &workspaceSize, &executor); | 138 | + ret = aclnnDequantBiasGetWorkspaceSize(input, weight, activation, bias, 1, y, &workspaceSize, &executor); |
| 139 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnDequantBiasGetWorkspaceSize failed. ERROR: %d\n", ret); return ret); | 139 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnDequantBiasGetWorkspaceSize failed. ERROR: %d\n", ret); return ret); |
| 140 | 140 | ||
| 141 | // 根据第一段接口计算出的workspaceSize申请device内存 | 141 | // 根据第一段接口计算出的workspaceSize申请device内存 |
| @@ -171,4 +171,4 @@ int main() | |||
| 171 | aclFinalize(); | 171 | aclFinalize(); |
| 172 | 172 | ||
| 173 | return 0; | 173 | return 0; |
| 174 | -} | 174 | +} |