已合并
激活和量化算子的示例中的输出类型不匹配 #8372
季骏创建于 15 天前
激活和量化算子的示例中的输出类型不匹配 #8372
已合并
共 6 个文件变更+18-18
| @@ -403,13 +403,13 @@ int main() | |||
| 403 | 403 | ||
| 404 | // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改 | 404 | // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改 |
| 405 | auto size = GetShapeSize(gradInputShape); | 405 | auto size = GetShapeSize(gradInputShape); |
| 406 | - std::vector<float> resultData(size, 0); | 406 | + std::vector<aclFloat16> resultData(size, 0); |
| 407 | ret = aclrtMemcpy( | 407 | ret = aclrtMemcpy( |
| 408 | resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, size * sizeof(resultData[0]), | 408 | resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, size * sizeof(resultData[0]), |
| 409 | ACL_MEMCPY_DEVICE_TO_HOST); | 409 | ACL_MEMCPY_DEVICE_TO_HOST); |
| 410 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); | 410 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); |
| 411 | for (int64_t i = 0; i < size; i++) { | 411 | for (int64_t i = 0; i < size; i++) { |
| 412 | - LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]); | 412 | + LOG_PRINT("result[%ld] is: %f\n", i, aclFloat16ToFloat(resultData[i])); |
| 413 | } | 413 | } |
| 414 | 414 | ||
| 415 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 | 415 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 |
| @@ -400,13 +400,13 @@ int main() | |||
| 400 | 400 | ||
| 401 | // 5. 获取输出的值,将device侧内存上的结果拷贝至Host侧,需要根据具体API的接口定义修改 | 401 | // 5. 获取输出的值,将device侧内存上的结果拷贝至Host侧,需要根据具体API的接口定义修改 |
| 402 | auto size = GetShapeSize(gradInputShape); | 402 | auto size = GetShapeSize(gradInputShape); |
| 403 | - std::vector<float> resultData(size, 0); | 403 | + std::vector<aclFloat16> resultData(size, 0); |
| 404 | ret = aclrtMemcpy( | 404 | ret = aclrtMemcpy( |
| 405 | resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, size * sizeof(resultData[0]), | 405 | resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, size * sizeof(resultData[0]), |
| 406 | ACL_MEMCPY_DEVICE_TO_HOST); | 406 | ACL_MEMCPY_DEVICE_TO_HOST); |
| 407 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); | 407 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); |
| 408 | for (int64_t i = 0; i < size; i++) { | 408 | for (int64_t i = 0; i < size; i++) { |
| 409 | - LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]); | 409 | + LOG_PRINT("result[%ld] is: %f\n", i, aclFloat16ToFloat(resultData[i])); |
| 410 | } | 410 | } |
| 411 | 411 | ||
| 412 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 | 412 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 |
| @@ -135,12 +135,12 @@ int main() | |||
| 135 | 135 | ||
| 136 | // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改 | 136 | // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改 |
| 137 | auto size = GetShapeSize(gradInputShape); | 137 | auto size = GetShapeSize(gradInputShape); |
| 138 | - std::vector<float> resultData(size, 0); | 138 | + std::vector<aclFloat16> resultData(size, 0); |
| 139 | ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, | 139 | ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, |
| 140 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 140 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 141 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); | 141 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); |
| 142 | for (int64_t i = 0; i < size; i++) { | 142 | for (int64_t i = 0; i < size; i++) { |
| 143 | - LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]); | 143 | + LOG_PRINT("result[%ld] is: %f\n", i, aclFloat16ToFloat(resultData[i])); |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 | 146 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 |
| @@ -161,4 +161,4 @@ int main() | |||
| 161 | aclrtResetDevice(deviceId); | 161 | aclrtResetDevice(deviceId); |
| 162 | aclFinalize(); | 162 | aclFinalize(); |
| 163 | return 0; | 163 | return 0; |
| 164 | -} | 164 | +} |
| @@ -137,12 +137,12 @@ int main() | |||
| 137 | 137 | ||
| 138 | // 5. 获取输出的值,将device侧内存上的结果拷贝至Host侧,需要根据具体API的接口定义修改 | 138 | // 5. 获取输出的值,将device侧内存上的结果拷贝至Host侧,需要根据具体API的接口定义修改 |
| 139 | auto size = GetShapeSize(gradInputShape); | 139 | auto size = GetShapeSize(gradInputShape); |
| 140 | - std::vector<float> resultData(size, 0); | 140 | + std::vector<aclFloat16> resultData(size, 0); |
| 141 | ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, | 141 | ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), gradInputDeviceAddr, |
| 142 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 142 | size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 143 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); | 143 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return ret); |
| 144 | for (int64_t i = 0; i < size; i++) { | 144 | for (int64_t i = 0; i < size; i++) { |
| 145 | - LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]); | 145 | + LOG_PRINT("result[%ld] is: %f\n", i, aclFloat16ToFloat(resultData[i])); |
| 146 | } | 146 | } |
| 147 | 147 | ||
| 148 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 | 148 | // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改 |
| @@ -163,4 +163,4 @@ int main() | |||
| 163 | aclrtResetDevice(deviceId); | 163 | aclrtResetDevice(deviceId); |
| 164 | aclFinalize(); | 164 | aclFinalize(); |
| 165 | return 0; | 165 | return 0; |
| 166 | -} | 166 | +} |
| @@ -373,12 +373,12 @@ int64_t GetShapeSize(const std::vector<int64_t>& shape) { | |||
| 373 | 373 | ||
| 374 | void PrintOutResult(std::vector<int64_t> &shape, void** deviceAddr) { | 374 | void PrintOutResult(std::vector<int64_t> &shape, void** deviceAddr) { |
| 375 | auto size = GetShapeSize(shape); | 375 | auto size = GetShapeSize(shape); |
| 376 | - std::vector<float> resultData(size, 0); | 376 | + std::vector<int8_t> resultData(size, 0); |
| 377 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), | 377 | auto ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), |
| 378 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); | 378 | *deviceAddr, size * sizeof(resultData[0]), ACL_MEMCPY_DEVICE_TO_HOST); |
| 379 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); | 379 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy result from device to host failed. ERROR: %d\n", ret); return); |
| 380 | for (int64_t i = 0; i < size; i++) { | 380 | for (int64_t i = 0; i < size; i++) { |
| 381 | - LOG_PRINT("result[%ld] is: %f\n", i, resultData[i]); | 381 | + LOG_PRINT("result[%ld] is: %d\n", i, resultData[i]); |
| 382 | } | 382 | } |
| 383 | } | 383 | } |
| 384 | 384 | ||
| @@ -396,7 +396,7 @@ int Init(int32_t deviceId, aclrtStream* stream) { | |||
| 396 | template <typename T> | 396 | template <typename T> |
| 397 | int CreateAclTensor(const std::vector<T>& hostData, const std::vector<int64_t>& shape, void** deviceAddr, | 397 | int CreateAclTensor(const std::vector<T>& hostData, const std::vector<int64_t>& shape, void** deviceAddr, |
| 398 | aclDataType dataType, aclTensor** tensor) { | 398 | aclDataType dataType, aclTensor** tensor) { |
| 399 | - auto size = GetShapeSize(shape) * sizeof(float); | 399 | + auto size = GetShapeSize(shape) * sizeof(T); |
| 400 | // 调用aclrtMalloc申请device侧内存 | 400 | // 调用aclrtMalloc申请device侧内存 |
| 401 | auto ret = aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); | 401 | auto ret = aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); |
| 402 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtMalloc failed. ERROR: %d\n", ret); return ret); | 402 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtMalloc failed. ERROR: %d\n", ret); return ret); |
| @@ -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<float> resultData(size, 0); | 40 | + std::vector<int8_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("result[%ld] is: %f\n", i, resultData[i]); | 45 | + LOG_PRINT("result[%ld] is: %d\n", i, resultData[i]); |
| 46 | } | 46 | } |
| 47 | } | 47 | } |
| 48 | 48 | ||
| @@ -62,7 +62,7 @@ template <typename T> | |||
| 62 | int CreateAclTensor(const std::vector<T>& hostData, const std::vector<int64_t>& shape, void** deviceAddr, | 62 | int CreateAclTensor(const std::vector<T>& hostData, const std::vector<int64_t>& shape, void** deviceAddr, |
| 63 | aclDataType dataType, aclTensor** tensor) | 63 | aclDataType dataType, aclTensor** tensor) |
| 64 | { | 64 | { |
| 65 | - auto size = GetShapeSize(shape) * sizeof(float); | 65 | + auto size = GetShapeSize(shape) * sizeof(T); |
| 66 | // 调用aclrtMalloc申请device侧内存 | 66 | // 调用aclrtMalloc申请device侧内存 |
| 67 | auto ret = aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); | 67 | auto ret = aclrtMalloc(deviceAddr, size, ACL_MEM_MALLOC_HUGE_FIRST); |
| 68 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtMalloc failed. ERROR: %d\n", ret); return ret); | 68 | CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtMalloc failed. ERROR: %d\n", ret); return ret); |
| @@ -206,4 +206,4 @@ int main() | |||
| 206 | aclFinalize(); | 206 | aclFinalize(); |
| 207 | 207 | ||
| 208 | return 0; | 208 | return 0; |
| 209 | -} | 209 | +} |