Skip to content

Conversation

@vstinner
Copy link
Member

@vstinner vstinner commented Jun 2, 2024

Take the ascii_decode() fast-path even if dest is not aligned on size_t bytes.

Take the ascii_decode() fast-path even if dest is not aligned on
size_t bytes.
@vstinner
Copy link
Member Author

vstinner commented Jun 2, 2024

Benchmark (C part, _testcapimodule.c):

static PyObject *
bench(PyObject *Py_UNUSED(module), PyObject *args)
{
    const char *str;
    Py_ssize_t loops;
    if (!PyArg_ParseTuple(args, "ny", &loops, &str)) {
        return NULL;
    }

    PyTime_t t1, t2;
    (void)PyTime_PerfCounterRaw(&t1);
    for (Py_ssize_t i=0; i < loops; i++) {
        PyObject *obj = PyUnicode_FromFormat("=%s", str);
        if (obj == NULL) {
            return NULL;
        }
        Py_DECREF(obj);
    }
    (void)PyTime_PerfCounterRaw(&t2);
    return PyFloat_FromDouble(PyTime_AsSecondsDouble(t2 - t1));
}

Benchmark (Python part):

import pyperf
import _testcapi
runner = pyperf.Runner()

arg = b'x' * 10
runner.bench_time_func("FromFormat('x'*10)", _testcapi.bench, arg)
arg = b'x' * 1_000
runner.bench_time_func("FromFormat('x'*1_000)", _testcapi.bench, arg)

Result:

+-----------------------+---------+-----------------------+
| Benchmark             | ref     | change                |
+=======================+=========+=======================+
| FromFormat('x'*10)    | 75.9 ns | 68.7 ns: 1.11x faster |
+-----------------------+---------+-----------------------+
| FromFormat('x'*1_000) | 200 ns  | 191 ns: 1.05x faster  |
+-----------------------+---------+-----------------------+

@vstinner vstinner changed the title Optimize unicode_decode_utf8_writer() gh-119396: Optimize unicode_decode_utf8_writer() Jun 2, 2024
@vstinner vstinner merged commit 3ea9b92 into python:main Jun 3, 2024
@vstinner vstinner deleted the ascii_decode branch June 3, 2024 06:45
mliezun pushed a commit to mliezun/cpython that referenced this pull request Jun 3, 2024
Optimize unicode_decode_utf8_writer()

Take the ascii_decode() fast-path even if dest is not aligned on
size_t bytes.
barneygale pushed a commit to barneygale/cpython that referenced this pull request Jun 5, 2024
Optimize unicode_decode_utf8_writer()

Take the ascii_decode() fast-path even if dest is not aligned on
size_t bytes.
noahbkim pushed a commit to hudson-trading/cpython that referenced this pull request Jul 11, 2024
Optimize unicode_decode_utf8_writer()

Take the ascii_decode() fast-path even if dest is not aligned on
size_t bytes.
estyxx pushed a commit to estyxx/cpython that referenced this pull request Jul 17, 2024
Optimize unicode_decode_utf8_writer()

Take the ascii_decode() fast-path even if dest is not aligned on
size_t bytes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant