1010import tempfile
1111from contextlib import suppress
1212from functools import cache
13-
14- import cuda .bindings .driver as cuda
1513import pytest
14+ import cuda .bindings .driver as cuda
1615
1716# Configure logging to show INFO level and above
1817logging .basicConfig (
@@ -1444,17 +1443,14 @@ def test_batch_io_large_operations():
14441443 read_buffers = []
14451444 all_buffers = [] # Initialize all_buffers to avoid UnboundLocalError
14461445
1447- print ("=== CUDA Memory Allocation ===" )
14481446 for i in range (num_operations ):
14491447 err , buf = cuda .cuMemAlloc (buf_size )
14501448 assert err == cuda .CUresult .CUDA_SUCCESS
14511449 write_buffers .append (buf )
1452- print (f"Write buffer { i } : { hex (int (buf ))} (4K aligned: { int (buf ) % 4096 == 0 } )" )
14531450
14541451 err , buf = cuda .cuMemAlloc (buf_size )
14551452 assert err == cuda .CUresult .CUDA_SUCCESS
14561453 read_buffers .append (buf )
1457- print (f"Read buffer { i } : { hex (int (buf ))} (4K aligned: { int (buf ) % 4096 == 0 } )" )
14581454
14591455 # Allocate host memory for data verification
14601456 host_buf = ctypes .create_string_buffer (buf_size )
@@ -1797,8 +1793,8 @@ def test_batch_io_large_operations():
17971793@pytest .mark .skipif (
17981794 cufileVersionLessThan (1140 ), reason = "cuFile parameter APIs require cuFile library version 1.14.0 or later"
17991795)
1800- def test_get_parameter_bool ():
1801- """Test setting and getting boolean parameters with cuFile validation."""
1796+ def test_set_get_parameter_size_t ():
1797+ """Test setting and getting size_t parameters with cuFile validation."""
18021798
18031799 # Initialize CUDA
18041800 (err ,) = cuda .cuInit (0 )
@@ -1813,67 +1809,92 @@ def test_get_parameter_bool():
18131809 assert err == cuda .CUresult .CUDA_SUCCESS
18141810
18151811 try :
1816- # Test setting and getting various boolean parameters
1817-
1818- # Test poll mode
1819- cufile .set_parameter_bool (cufile .BoolConfigParameter .PROPERTIES_USE_POLL_MODE , True )
1820- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .PROPERTIES_USE_POLL_MODE )
1821- assert retrieved_value is True , f"Poll mode mismatch: set True, got { retrieved_value } "
1822-
1823- # Test compatibility mode
1824- cufile .set_parameter_bool (cufile .BoolConfigParameter .PROPERTIES_ALLOW_COMPAT_MODE , False )
1825- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .PROPERTIES_ALLOW_COMPAT_MODE )
1826- assert retrieved_value is False , f"Compatibility mode mismatch: set False, got { retrieved_value } "
1827-
1828- # Test force compatibility mode
1829- cufile .set_parameter_bool (cufile .BoolConfigParameter .FORCE_COMPAT_MODE , False )
1830- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .FORCE_COMPAT_MODE )
1831- assert retrieved_value is False , f"Force compatibility mode mismatch: set False, got { retrieved_value } "
1832-
1833- # Test aggressive API check
1834- cufile .set_parameter_bool (cufile .BoolConfigParameter .FS_MISC_API_CHECK_AGGRESSIVE , True )
1835- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .FS_MISC_API_CHECK_AGGRESSIVE )
1836- assert retrieved_value is True , f"Aggressive API check mismatch: set True, got { retrieved_value } "
1837-
1838- # Test parallel IO
1839- cufile .set_parameter_bool (cufile .BoolConfigParameter .EXECUTION_PARALLEL_IO , True )
1840- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .EXECUTION_PARALLEL_IO )
1841- assert retrieved_value is True , f"Parallel IO mismatch: set True, got { retrieved_value } "
1842-
1843- # Test NVTX profiling
1844- cufile .set_parameter_bool (cufile .BoolConfigParameter .PROFILE_NVTX , False )
1845- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .PROFILE_NVTX )
1846- assert retrieved_value is False , f"NVTX profiling mismatch: set False, got { retrieved_value } "
1847-
1848- # Test system memory allowance
1849- cufile .set_parameter_bool (cufile .BoolConfigParameter .PROPERTIES_ALLOW_SYSTEM_MEMORY , True )
1850- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .PROPERTIES_ALLOW_SYSTEM_MEMORY )
1851- assert retrieved_value is True , f"System memory allowance mismatch: set True, got { retrieved_value } "
1852-
1853- # Test PCI P2P DMA
1854- cufile .set_parameter_bool (cufile .BoolConfigParameter .USE_PCIP2PDMA , True )
1855- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .USE_PCIP2PDMA )
1856- assert retrieved_value is True , f"PCI P2P DMA mismatch: set True, got { retrieved_value } "
1857-
1858- # Test IO uring preference
1859- cufile .set_parameter_bool (cufile .BoolConfigParameter .PREFER_IO_URING , False )
1860- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .PREFER_IO_URING )
1861- assert retrieved_value is False , f"IO uring preference mismatch: set False, got { retrieved_value } "
1862-
1863- # Test force O_DIRECT mode
1864- cufile .set_parameter_bool (cufile .BoolConfigParameter .FORCE_ODIRECT_MODE , True )
1865- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .FORCE_ODIRECT_MODE )
1866- assert retrieved_value is True , f"Force O_DIRECT mode mismatch: set True, got { retrieved_value } "
1867-
1868- # Test topology detection skip
1869- cufile .set_parameter_bool (cufile .BoolConfigParameter .SKIP_TOPOLOGY_DETECTION , False )
1870- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .SKIP_TOPOLOGY_DETECTION )
1871- assert retrieved_value is False , f"Topology detection skip mismatch: set False, got { retrieved_value } "
1872-
1873- # Test stream memops bypass
1874- cufile .set_parameter_bool (cufile .BoolConfigParameter .STREAM_MEMOPS_BYPASS , True )
1875- retrieved_value = cufile .get_parameter_bool (cufile .BoolConfigParameter .STREAM_MEMOPS_BYPASS )
1876- assert retrieved_value is True , f"Stream memops bypass mismatch: set True, got { retrieved_value } "
1812+ # Test setting and getting various size_t parameters
1813+
1814+ # Test poll threshold size (in KB)
1815+ poll_threshold_kb = 64 # 64KB threshold
1816+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .POLLTHRESHOLD_SIZE_KB , poll_threshold_kb )
1817+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .POLLTHRESHOLD_SIZE_KB )
1818+ assert retrieved_value == poll_threshold_kb , (
1819+ f"Poll threshold mismatch: set { poll_threshold_kb } , got { retrieved_value } "
1820+ )
1821+
1822+ # Test max direct IO size (in KB)
1823+ max_direct_io_kb = 1024 # 1MB max direct IO size
1824+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_MAX_DIRECT_IO_SIZE_KB , max_direct_io_kb )
1825+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_MAX_DIRECT_IO_SIZE_KB )
1826+ assert retrieved_value == max_direct_io_kb , (
1827+ f"Max direct IO size mismatch: set { max_direct_io_kb } , got { retrieved_value } "
1828+ )
1829+
1830+ # Test max device cache size (in KB)
1831+ max_cache_kb = 512 # 512KB max cache size
1832+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_MAX_DEVICE_CACHE_SIZE_KB , max_cache_kb )
1833+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_MAX_DEVICE_CACHE_SIZE_KB )
1834+ assert retrieved_value == max_cache_kb , f"Max cache size mismatch: set { max_cache_kb } , got { retrieved_value } "
1835+
1836+ # Test per buffer cache size (in KB)
1837+ per_buffer_cache_kb = 128 # 128KB per buffer cache
1838+ cufile .set_parameter_size_t (
1839+ cufile .SizeTConfigParameter .PROPERTIES_PER_BUFFER_CACHE_SIZE_KB , per_buffer_cache_kb
1840+ )
1841+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_PER_BUFFER_CACHE_SIZE_KB )
1842+ assert retrieved_value == per_buffer_cache_kb , (
1843+ f"Per buffer cache size mismatch: set { per_buffer_cache_kb } , got { retrieved_value } "
1844+ )
1845+
1846+ # Test max device pinned memory size (in KB)
1847+ max_pinned_kb = 2048 # 2MB max pinned memory
1848+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_MAX_DEVICE_PINNED_MEM_SIZE_KB , max_pinned_kb )
1849+ retrieved_value = cufile .get_parameter_size_t (
1850+ cufile .SizeTConfigParameter .PROPERTIES_MAX_DEVICE_PINNED_MEM_SIZE_KB
1851+ )
1852+ assert retrieved_value == max_pinned_kb , (
1853+ f"Max pinned memory size mismatch: set { max_pinned_kb } , got { retrieved_value } "
1854+ )
1855+
1856+ # Test IO batch size
1857+ batch_size = 16 # 16 operations per batch
1858+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_IO_BATCHSIZE , batch_size )
1859+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_IO_BATCHSIZE )
1860+ assert retrieved_value == batch_size , f"IO batch size mismatch: set { batch_size } , got { retrieved_value } "
1861+
1862+ # Test batch IO timeout (in milliseconds)
1863+ timeout_ms = 5000 # 5 second timeout
1864+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_BATCH_IO_TIMEOUT_MS , timeout_ms )
1865+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .PROPERTIES_BATCH_IO_TIMEOUT_MS )
1866+ assert retrieved_value == timeout_ms , f"Batch IO timeout mismatch: set { timeout_ms } , got { retrieved_value } "
1867+
1868+ # Test execution parameters
1869+ max_io_queue_depth = 32 # Max 32 operations in queue
1870+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .EXECUTION_MAX_IO_QUEUE_DEPTH , max_io_queue_depth )
1871+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .EXECUTION_MAX_IO_QUEUE_DEPTH )
1872+ assert retrieved_value == max_io_queue_depth , (
1873+ f"Max IO queue depth mismatch: set { max_io_queue_depth } , got { retrieved_value } "
1874+ )
1875+
1876+ max_io_threads = 8 # Max 8 IO threads
1877+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .EXECUTION_MAX_IO_THREADS , max_io_threads )
1878+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .EXECUTION_MAX_IO_THREADS )
1879+ assert retrieved_value == max_io_threads , (
1880+ f"Max IO threads mismatch: set { max_io_threads } , got { retrieved_value } "
1881+ )
1882+
1883+ min_io_threshold_kb = 4 # 4KB minimum IO threshold
1884+ cufile .set_parameter_size_t (cufile .SizeTConfigParameter .EXECUTION_MIN_IO_THRESHOLD_SIZE_KB , min_io_threshold_kb )
1885+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .EXECUTION_MIN_IO_THRESHOLD_SIZE_KB )
1886+ assert retrieved_value == min_io_threshold_kb , (
1887+ f"Min IO threshold mismatch: set { min_io_threshold_kb } , got { retrieved_value } "
1888+ )
1889+
1890+ max_request_parallelism = 4 # Max 4 parallel requests
1891+ cufile .set_parameter_size_t (
1892+ cufile .SizeTConfigParameter .EXECUTION_MAX_REQUEST_PARALLELISM , max_request_parallelism
1893+ )
1894+ retrieved_value = cufile .get_parameter_size_t (cufile .SizeTConfigParameter .EXECUTION_MAX_REQUEST_PARALLELISM )
1895+ assert retrieved_value == max_request_parallelism , (
1896+ f"Max request parallelism mismatch: set { max_request_parallelism } , got { retrieved_value } "
1897+ )
18771898
18781899 finally :
18791900 cuda .cuDevicePrimaryCtxRelease (device )
@@ -1882,7 +1903,8 @@ def test_get_parameter_bool():
18821903@pytest .mark .skipif (
18831904 cufileVersionLessThan (1140 ), reason = "cuFile parameter APIs require cuFile library version 1.14.0 or later"
18841905)
1885- def test_get_parameter_string ():
1906+
1907+ def test_set_get_parameter_string ():
18861908 """Test setting and getting string parameters with cuFile validation."""
18871909
18881910 # Initialize CUDA
@@ -1964,7 +1986,6 @@ def test_get_parameter_string():
19641986 finally :
19651987 cuda .cuDevicePrimaryCtxRelease (device )
19661988
1967-
19681989@pytest .mark .skipif (
19691990 cufileVersionLessThan (1140 ), reason = "cuFile parameter APIs require cuFile library version 13.0 or later"
19701991)
0 commit comments