разделение 64-битного сложения на два 32-битных дополнения - PullRequest
1 голос
/ 20 сентября 2011

Я работаю над вычислительной задачей с высокой производительностью. Для сложения попарно двух 32-разрядных целочисленных массивов, можно ли в 64-разрядной архитектуре обработать два 32-разрядных значения как одно 64-разрядное значение, добавить их в дополнение к другому массиву, а затем снова разделить их с побитовым оператором. Очевидно, что при переполнении они не будут одинаковыми, но при условии, что их нет, возникнет ли проблема? (И можете ли вы продолжить это до 16- и 8-битных дополнений?)

Меняется ли поведение неподписанных и подписанных?

Ответы [ 3 ]

2 голосов
/ 20 сентября 2011

Если вы предполагаете, что переполнения нет, вы можете сделать это до одного бита. Конечно, 1 + 1 переполняется. Но на практике у вас либо переполнение, либо у вас действительно было 31-разрядное целое число для начала.

Еще одна вещь: он работает только на unsigned типах. Вы не можете иметь знак в середине 64-битного числа.

Но почему тебя это волнует? Если вы собираетесь использовать сверхвысокую производительность, используйте SSE. Это будет правильно выполнять параллельное сложение.

2 голосов
/ 20 сентября 2011

Нет разницы между подписанным и неподписанным - на машине с двумя дополнительными символами это всего лишь одна инструкция, которая не знает о знаке. Да, вы можете безопасно выполнить этот трюк , если нет риска переполнения , и вы можете сделать это для частей любой длины, например, вы можете думать, что ваше 64-разрядное число содержит два 13-разрядных числа и одно 38-битное число.

0 голосов
/ 20 сентября 2011

Да, вы можете сделать это, но это будет работать только для беззнаковых значений.В 32-разрядных целых числах со знаком знаковый бит является старшим битом, который вызывает переполнение при добавлении.

Вам, вероятно, не нужно этого делать - если ваш собственный компилятор C не дает нужной вам производительности,затем рассмотрим использование векторных операций (MMX, SSE и т. д.), которые делают этот вид векторных операций чрезвычайно эффективно.

...