Skip to content

Commit e581fd5

Browse files
author
FengHao
committed
ci-fixed
1 parent cb681d5 commit e581fd5

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

ucm/store/device/simu/simu_device.cc

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,52 @@ class SimuDevice : public IBufferedDevice {
7272
this->backend_.Push([=] { std::copy(src, src + count, dst); });
7373
return Status::OK();
7474
}
75+
Status S2DSync(int fd, void* address, const size_t length, const size_t fileOffset, const size_t devOffset) override
76+
{
77+
CUfileHandle_t cuFileHandle = nullptr;
78+
auto status = HandlePool<int, CUfileHandle_t>::Instance().Get(fd, cuFileHandle,
79+
[fd](CUfileHandle_t& handle) -> Status {
80+
return CreateCuFileHandle(fd, handle);
81+
});
82+
if (status.Failure()) {
83+
return status;
84+
}
85+
ssize_t bytesRead = cuFileRead(cuFileHandle, address, length, fileOffset, devOffset);
86+
HandlePool<int, CUfileHandle_t>::Instance().Put(fd, [](CUfileHandle_t h) {
87+
if (h != nullptr) {
88+
cuFileHandleDeregister(h);
89+
}
90+
});
91+
92+
if (bytesRead < 0 || (size_t)bytesRead != length) {
93+
UC_ERROR("cuFileRead failed for fd {}: expected {}, got {}", fd, length, bytesRead);
94+
return Status::Error();
95+
}
96+
return Status::OK();
97+
}
98+
Status D2SSync(int fd, void* address, const size_t length, const size_t fileOffset, const size_t devOffset) override
99+
{
100+
CUfileHandle_t cuFileHandle = nullptr;
101+
auto status = HandlePool<int, CUfileHandle_t>::Instance().Get(fd, cuFileHandle,
102+
[fd](CUfileHandle_t& handle) -> Status {
103+
return CreateCuFileHandle(fd, handle);
104+
});
105+
if (status.Failure()) {
106+
return status;
107+
}
108+
ssize_t bytesWrite = cuFileWrite(cuFileHandle, address, length, fileOffset, devOffset);
109+
HandlePool<int, CUfileHandle_t>::Instance().Put(fd, [](CUfileHandle_t h) {
110+
if (h != nullptr) {
111+
cuFileHandleDeregister(h);
112+
}
113+
});
114+
115+
if (bytesWrite < 0 || (size_t)bytesWrite != length) {
116+
UC_ERROR("cuFileWrite failed for fd {}: expected {}, got {}", fd, length, bytesWrite);
117+
return Status::Error();
118+
}
119+
return Status::OK();
120+
}
75121
Status AppendCallback(std::function<void(bool)> cb) override
76122
{
77123
this->backend_.Push([=] { cb(true); });

0 commit comments

Comments
 (0)