@@ -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