<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh" -->

---
title: XAD, MatLogica AADC and NablaTensor Benchmark | daily.dev
description: A hands-on benchmark compares XAD's C++ tape API, MatLogica AADC, and NablaTensor on Monte Carlo option pricing with adjoint Greeks. Running XAD natively in...
canonical: https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: XAD, MatLogica AADC and NablaTensor Benchmark | daily.dev
og:description: A hands-on benchmark compares XAD's C++ tape API, MatLogica AADC, and NablaTensor on Monte Carlo option pricing with adjoint Greeks. Running XAD natively in...
og:url: https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh
og:image: https://api.daily.dev/og/posts/cxAtzmHmH.png
og:image:alt: XAD, MatLogica AADC and NablaTensor Benchmark
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# XAD, MatLogica AADC and NablaTensor Benchmark

**[Awesome Java Newsletter](https://daily.dev/sources/java_libhunt)** · 4 min read · 1 upvotes · 0 comments

## Summary

A hands-on benchmark compares XAD's C++ tape API, MatLogica AADC, and NablaTensor on Monte Carlo option pricing with adjoint Greeks. Running XAD natively in C++ instead of through Python boosts its European Greeks throughput from 0.215 to 7.37 million paths/second, a 34x jump, but it still trails the other engines once cached. NablaTensor's simd engine wins the European ladder at 274.47 million paths/second, while MatLogica AADC unexpectedly wins the longer Asian option at 5.41 versus NablaTensor's 4.29. The post details draw caching effects, thread-pool additions to XAD's harness, price accuracy checks against closed-form values, and provides a runnable benchmark branch with build commands.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://nablatensor.com/blog/xad-matlogica-aadc-monte-carlo-benchmark>

## Questions this post answers

### How much faster is XAD's C++ tape API compared to its Python bindings for Monte Carlo Greeks?

XAD's European Greeks pass runs about 34 times faster through its C++ tape API than through Python, climbing from 0.215 million paths per second to 7.37 million paths per second. This was measured on a European option with one time step, 20 million paths, and five adjoint Greeks (delta, strike sensitivity, vega, rho, maturity sensitivity) using one thread.

_Developers choosing an autodiff library for pricing code can compare these C++ versus Python throughput numbers on daily.dev._

### Which is faster for Asian option Greeks, MatLogica AADC or NablaTensor simd?

MatLogica AADC is about 26% faster than NablaTensor's simd engine on a 252-fixing Asian option with 300,000 paths, achieving 5.41 million paths per second versus 4.29 for simd, both using eight threads and cached random draws. On the simpler European option, NablaTensor simd leads instead, running roughly twice as fast as MatLogica.

_Teams picking an AD engine for path-dependent payoffs can weigh this Asian-versus-European tradeoff via daily.dev._

### How much does caching random draws affect Monte Carlo Greeks benchmark throughput?

Caching draws significantly changes results: without a draw cache, MatLogica's Asian throughput drops from 5.41 to 0.487 million paths per second because its Python harness rebuilds a 300,000 by 252 array before each replay. XAD's cached Asian result is 0.197 million paths per second versus 0.127 with fresh draws each time, showing harness overhead can dominate raw engine speed.

_Benchmarking autodiff engines fairly means accounting for harness overhead, a detail worth tracking on daily.dev._

## Similar posts on daily.dev

- [Build Accelerated, Differentiable Computational Physics Code for AI with NVIDIA Warp](https://daily.dev/posts/build-accelerated-differentiable-computational-physics-code-for-ai-with-nvidia-warp-haygcavvw) · NVIDIA Developer · 0 upvotes · 0 comments
- [Build an Agent That Thinks Like a Data Scientist: How We Hit \#1 on DABStep with Reusable Tool Generation](https://daily.dev/posts/build-an-agent-that-thinks-like-a-data-scientist-how-we-hit-1-on-dabstep-with-reusable-tool-genera-0g6uoyl1s) · Hugging Face · 1 upvotes · 0 comments
- [The Agentic Analytics Benchmark: Measuring model accuracy and efficiency in analytical agents](https://daily.dev/posts/the-agentic-analytics-benchmark-measuring-model-accuracy-and-efficiency-in-analytical-agents-81a3conc5) · ClickHouse · 0 upvotes · 0 comments

---

Tags: [#data-science](https://daily.dev/tags/data-science), [#c++](https://daily.dev/tags/c++)

[View this post on daily.dev](https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"XAD, MatLogica AADC and NablaTensor Benchmark","url":"https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh"},"datePublished":"2026-10-01T20:29:22.655Z","dateModified":"2026-10-01T20:40:45.672Z","description":"A hands-on benchmark compares XAD's C++ tape API, MatLogica AADC, and NablaTensor on Monte Carlo option pricing with adjoint Greeks. Running XAD natively in...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6925a417a52df0ff967d2287f0a72634?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/6925a417a52df0ff967d2287f0a72634?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Awesome Java Newsletter","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Awesome Java Newsletter","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/7729929f2ca649d7b13f6b04aa94d300","url":"https://daily.dev/sources/java_libhunt"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"data-science,c++","timeRequired":"PT4M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Awesome Java Newsletter","item":"https://daily.dev/sources/java_libhunt"},{"@type":"ListItem","position":3,"name":"XAD, MatLogica AADC and NablaTensor Benchmark"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/xad-matlogica-aadc-and-nablatensor-benchmark-cxatzmhmh#faq","mainEntity":[{"@type":"Question","name":"How much faster is XAD's C++ tape API compared to its Python bindings for Monte Carlo Greeks?","acceptedAnswer":{"@type":"Answer","text":"XAD's European Greeks pass runs about 34 times faster through its C++ tape API than through Python, climbing from 0.215 million paths per second to 7.37 million paths per second. This was measured on a European option with one time step, 20 million paths, and five adjoint Greeks (delta, strike sensitivity, vega, rho, maturity sensitivity) using one thread. Developers choosing an autodiff library for pricing code can compare these C++ versus Python throughput numbers on daily.dev."}},{"@type":"Question","name":"Which is faster for Asian option Greeks, MatLogica AADC or NablaTensor simd?","acceptedAnswer":{"@type":"Answer","text":"MatLogica AADC is about 26% faster than NablaTensor's simd engine on a 252-fixing Asian option with 300,000 paths, achieving 5.41 million paths per second versus 4.29 for simd, both using eight threads and cached random draws. On the simpler European option, NablaTensor simd leads instead, running roughly twice as fast as MatLogica. Teams picking an AD engine for path-dependent payoffs can weigh this Asian-versus-European tradeoff via daily.dev."}},{"@type":"Question","name":"How much does caching random draws affect Monte Carlo Greeks benchmark throughput?","acceptedAnswer":{"@type":"Answer","text":"Caching draws significantly changes results: without a draw cache, MatLogica's Asian throughput drops from 5.41 to 0.487 million paths per second because its Python harness rebuilds a 300,000 by 252 array before each replay. XAD's cached Asian result is 0.197 million paths per second versus 0.127 with fresh draws each time, showing harness overhead can dominate raw engine speed. Benchmarking autodiff engines fairly means accounting for harness overhead, a detail worth tracking on daily.dev."}}]}
```

