2020assert err == 0 , f"cuInit failed: { err } "
2121err , device = cuda .cuDeviceGet (CUDA_DEVICE )
2222assert err == 0 , f"cuDeviceGet failed: { err } "
23- err , context = cuda .cuCtxCreate (0 , device )
23+ params = cuda .CUctxCreateParams ()
24+ assert params is not None
25+ err , context = cuda .cuCtxCreate (params , 0 , device )
2426assert err == 0 , f"cuCtxCreate failed: { err } "
2527err , dptr_w = cuda .cuMemAlloc (BUF_SIZE )
2628assert err == 0 , f"cuMemAlloc failed: { err } "
@@ -41,9 +43,8 @@ def test_cufile_context_manager():
4143 with CuFile (file_path , "w" ) as cufile :
4244 assert isinstance (cufile , CuFile )
4345
44- def test_cufile_read_write ():
46+ def test_cufile_read_write_with_context_manager ():
4547 """Test that CuFile can read and write to a file."""
46-
4748 begin = time .perf_counter ()
4849 with CuFile (file_path , "w" ) as cufile :
4950 begin_write = time .perf_counter ()
@@ -69,3 +70,55 @@ def test_cufile_read_write():
6970 host_buf = (ctypes .c_ubyte * BUF_SIZE ).from_address (hptr )
7071 for i in range (BUF_SIZE ):
7172 assert host_buf [i ] == PATTERN_BYTE
73+
74+ def test_cufile_read_write ():
75+ """Test that CuFile can read and write to a file."""
76+
77+ begin = time .perf_counter ()
78+ cufile = CuFile (file_path , "w" )
79+ cufile .open ()
80+ begin_write = time .perf_counter ()
81+ ret = cufile .write (ctypes .c_void_p (int (dptr_w )), BUF_SIZE )
82+ write_time = time .perf_counter () - begin_write
83+ assert ret == BUF_SIZE
84+ cufile .close ()
85+ dt = time .perf_counter () - begin
86+ print (f"WRITE (w/o open/register) { ret / 1024 / 1024 :.2f} MB in { write_time * 1e3 :.2f} ms ({ ret / write_time / 1024 / 1024 / 1024 :.2f} GB/s)" )
87+ print (f"FULL WRITE { ret / 1024 / 1024 :.2f} MB in { dt * 1e3 :.2f} ms ({ ret / dt / 1024 / 1024 / 1024 :.2f} GB/s)" )
88+
89+ begin = time .perf_counter ()
90+ cufile = CuFile (file_path , "r" )
91+ cufile .open ()
92+ begin_read = time .perf_counter ()
93+ ret = cufile .read (ctypes .c_void_p (int (dptr_r )), BUF_SIZE )
94+ read_time = time .perf_counter () - begin_read
95+ assert ret == BUF_SIZE
96+ cufile .close ()
97+ dt = time .perf_counter () - begin
98+ print (f"READ (w/o open/register) { ret / 1024 / 1024 :.2f} MB in { read_time * 1e3 :.2f} ms ({ ret / read_time / 1024 / 1024 / 1024 :.2f} GB/s)" )
99+ print (f"FULL READ { ret / 1024 / 1024 :.2f} MB in { dt * 1e3 :.2f} ms ({ ret / dt / 1024 / 1024 / 1024 :.2f} GB/s)" )
100+
101+ err , = cuda .cuMemcpyDtoH (hptr , dptr_r , BUF_SIZE )
102+ assert err == 0 , f"cuMemcpyDtoH failed: { err } "
103+ host_buf = (ctypes .c_ubyte * BUF_SIZE ).from_address (hptr )
104+ for i in range (BUF_SIZE ):
105+ assert host_buf [i ] == PATTERN_BYTE
106+
107+ def test_read_write_without_open ():
108+ cufile = CuFile (file_path , "r" )
109+ try :
110+ cufile .read (ctypes .c_void_p (int (dptr_r )), BUF_SIZE )
111+ raise AssertionError ("Expected an exception but none was raised" )
112+ except IOError as e :
113+ assert "File is not open." in str (e )
114+ finally :
115+ cufile .close ()
116+
117+ cufile = CuFile (file_path , "w" )
118+ try :
119+ cufile .write (ctypes .c_void_p (int (dptr_w )), BUF_SIZE )
120+ raise AssertionError ("Expected an exception but none was raised" )
121+ except IOError as e :
122+ assert "File is not open." in str (e )
123+ finally :
124+ cufile .close ()
0 commit comments