Ollama benchmark Q2 2024 - Exoscale A40 - NVbandwidth

Go back to list

nvbandwidth is measurement tool for bandwidth on NVIDIA-powered systems. It uses memcpy_sm and memcpy_ce, specialized versions of the memcpy C function, to copy memory from and to RAM and GPUs.

In this test we evaluate the pipe between a A40 and the hardware provided by Exoscale from different aspects:

  • Host to device
  • Device to host
 
 

 

 

{ "configuration": { "chart": { "type": "bar", "polar": false, "zoomType": "", "options3d": {}, "height": null, "width": null, "margin": null, "inverted": false, "zooming": {} }, "credits": { "enabled": false }, "title": { "text": "" }, "colorAxis": null, "subtitle": { "text": "" }, "xAxis": { "title": { "text": [ "" ], "useHTML": false, "style": { "color": "#666666" } }, "categories": [ "testcase" ], "lineWidth": 1, "tickInterval": null, "tickWidth": 0, "tickLength": 10, "tickPixelInterval": null, "plotLines": null, "labels": { "enabled": false, "format": null, "formatter": "", "style": { "color": "#666666", "cursor": "default", "fontSize": "11px" }, "useHTML": false, "step": 0 }, "plotBands": null, "visible": true, "floor": null, "ceiling": null, "type": "linear", "min": null, "gridLineWidth": null, "gridLineColor": null, "minorTickInterval": null, "minorTickWidth": 0, "minTickInterval": null, "startOnTick": true, "endOnTick": null, "tickmarkPlacement": null, "units": null, "minRange": null }, "yAxis": { "title": { "text": [ "In GB/sec<br>Higher is better" ], "useHTML": false, "style": { "color": "#666666" } }, "categories": null, "plotLines": null, "plotBands": null, "lineWidth": null, "tickInterval": null, "tickLength": 10, "floor": null, "ceiling": null, "gridLineInterpolation": null, "gridLineWidth": 1, "gridLineColor": "#CCC", "min": null, "max": null, "minorTickInterval": null, "minorTickWidth": 0, "minTickInterval": null, "startOnTick": true, "endOnTick": null, "minRange": null, "type": "linear", "tickmarkPlacement": null, "labels": { "enabled": true, "formatter": null, "style": { "color": "#666666", "cursor": "default", "fontSize": "11px" }, "useHTML": false } }, "zAxis": { "title": { "text": "In GB/sec<br>Higher is better" } }, "plotOptions": { "series": { "dataLabels": { "enabled": true, "format": "{series.name}", "distance": 30, "align": "left", "inside": true, "allowOverlap": false, "style": { "fontSize": "17px" } }, "showInLegend": null, "turboThreshold": 1000, "stacking": "", "groupPadding": 0, "centerInCategory": false, "findNearestPointBy": "x" } }, "navigator": { "enabled": false }, "scrollbar": { "enabled": false }, "rangeSelector": { "enabled": false, "inputEnabled": false }, "legend": { "enabled": false, "maxHeight": null, "align": "center", "verticalAlign": "bottom", "layout": "horizontal", "width": null, "margin": 12, "reversed": false }, "series": [ { "name": "device_to_host_bidirectional_memcpy_ce", "data": [ [ 0, 14.14 ] ], "grouping": false, "color": "#d20000" }, { "name": "device_to_host_memcpy_ce", "data": [ [ 1, 14.219999999999999 ] ], "grouping": false, "color": "#d20000" }, { "name": "device_to_host_memcpy_sm", "data": [ [ 2, 0.99 ] ], "grouping": false, "color": "#d20000" }, { "name": "host_to_device_bidirectional_memcpy_ce", "data": [ [ 3, 6.363333333333333 ] ], "grouping": false, "color": "#d20000" }, { "name": "host_to_device_memcpy_ce", "data": [ [ 4, 24.806 ] ], "grouping": false, "color": "#d20000" }, { "name": "host_to_device_memcpy_sm", "data": [ [ 5, 26.7225 ] ], "grouping": false, "color": "#d20000" } ], "drilldown": {}, "tooltip": { "enabled": true, "useHTML": false, "headerFormat": "", "pointFormat": "<span style=\"color:{series.color}\">{series.name}</span>: <b>{point.y:.1f} GB/sec</b>", "footerFormat": "", "shared": false, "outside": false, "valueDecimals": null, "split": false }, "annotations": null }, "hc_type": "chart", "id": "271374362144744492188873919301022467712" }
  • memcpy_sm: This stands for "memcpy with Secure Memory." It's a version of memcpy that is designed to work with secure memory areas. Secure memory typically refers to memory regions that are protected from unauthorized access or tampering. This function might include additional security checks or features to ensure that data is copied securely within these protected memory areas, guarding against vulnerabilities like buffer overflows or data corruption.

  • memcpy_ce: This stands for "memcpy with Constant Execution Time." It's a version of memcpy that is designed to execute in constant time regardless of the input data. memcpy_ce ensures that regardless of the size or content of the data being copied, the execution time remains constant, thus mitigating timing-based attacks.