|
|
|
@ -38,7 +38,7 @@ class NormalDistribution<T, float> {
|
|
|
|
|
const uint32_t exp = static_cast<uint32_t>(127);
|
|
|
|
|
const uint32_t val = (exp << 23) | temp_value;
|
|
|
|
|
errno_t mem_ret;
|
|
|
|
|
mem_ret = memcpy_s(output, sizeof(val), &val, sizeof(val));
|
|
|
|
|
mem_ret = memcpy_s(output, sizeof(float), &val, sizeof(uint32_t));
|
|
|
|
|
if (mem_ret != EOK) {
|
|
|
|
|
MS_LOG(ERROR) << "UInt32ToFloat32 memcpy is failed";
|
|
|
|
|
return false;
|
|
|
|
@ -71,10 +71,13 @@ bool FillRandoms(PhiloxGenerator generator, float *output, int64_t vet_size, int
|
|
|
|
|
generator.JumpStep((vet_size * thread_Id + gResultNum - 1) / gResultNum);
|
|
|
|
|
for (int32_t i = 0; i < vet_size; i += gResultNum) {
|
|
|
|
|
auto outputResult = distribution(&generator);
|
|
|
|
|
size_t max_length = 0;
|
|
|
|
|
if (vet_size - i >= gResultNum) {
|
|
|
|
|
mem_ret = memcpy_s(&output[i], gResultNum * sizeof(float), &outputResult[0], gResultNum * sizeof(float));
|
|
|
|
|
max_length = gResultNum * sizeof(float);
|
|
|
|
|
mem_ret = memcpy_s(&output[i], max_length, &outputResult[0], max_length);
|
|
|
|
|
} else {
|
|
|
|
|
mem_ret = memcpy_s(&output[i], (vet_size - i) * sizeof(float), &outputResult[0], (vet_size - i) * sizeof(float));
|
|
|
|
|
max_length = (vet_size - i) * sizeof(float);
|
|
|
|
|
mem_ret = memcpy_s(&output[i], max_length, &outputResult[0], max_length);
|
|
|
|
|
}
|
|
|
|
|
if (mem_ret != EOK) {
|
|
|
|
|
MS_LOG(ERROR) << "FillRandoms memcpy is failed";
|
|
|
|
|