Что использовать Byte или Int
От: Cynic Россия  
Дата: 24.01.15 17:13
Оценка:
У меня алгоритм работает с массивом byte. По ходу работы программы значения в этом массиве претерпевают разные преобразования с использованием математических операторов (+,-,/,*) и битовых операторов (<, >, |, &, ^). Я так понимаю, что когда программа производит вычисления со значениями типа byte, то она всё время выполняет преобразование из byte в int и наоборот. Если принять во внимание, что расход памяти меня не слишком волнует, а вот производительность критична, не стоит ли мне в этом случае использовать массив int, даже не смотря на то, что будут использоваться только первые 8 бит этого типа?
:)
Re: Что использовать Byte или Int
От: VladFein США  
Дата: 24.01.15 17:48
Оценка:
Здравствуйте, Cynic, Вы писали:

C>Если принять во внимание, что расход памяти меня не слишком волнует, а вот производительность критична, не стоит ли мне в этом случае использовать массив int, даже не смотря на то, что будут использоваться только первые 8 бит этого типа?


А много данных? Расход памяти может и не волнует, а поместится ли весь массив в кэш — очень даже.

Преобразования одинаковые для каждого элемента? Может SSE?
Re[2]: Что использовать Byte или Int
От: Cynic Россия  
Дата: 24.01.15 17:52
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, Cynic, Вы писали:


C>>Если принять во внимание, что расход памяти меня не слишком волнует, а вот производительность критична, не стоит ли мне в этом случае использовать массив int, даже не смотря на то, что будут использоваться только первые 8 бит этого типа?


VF>А много данных? Расход памяти может и не волнует, а поместится ли весь массив в кэш — очень даже.


VF>Преобразования одинаковые для каждого элемента? Может SSE?


Ну массивы где то до 1 млн. элементов. Преобразования по большей части одинаковые, хотя есть и исключения. Ну и массивов таких может быть пару десятков.
Чё такое SSE?
:)
Отредактировано 24.01.2015 17:53 Cynic . Предыдущая версия .
Re[3]: Что использовать Byte или Int
От: VladFein США  
Дата: 24.01.15 17:57
Оценка: 1 (1)
Здравствуйте, Cynic, Вы писали:

C>Ну массивы где то до 1 млн. элементов. Преобразования по большей части одинаковые, хотя есть и исключения. Ну и массивов таких может быть пару десятков.

C>Чё такое SSE?

Streaming SIMD Extensions
Re[4]: Что использовать Byte или Int
От: Cynic Россия  
Дата: 24.01.15 18:04
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Здравствуйте, Cynic, Вы писали:


C>>Ну массивы где то до 1 млн. элементов. Преобразования по большей части одинаковые, хотя есть и исключения. Ну и массивов таких может быть пару десятков.

C>>Чё такое SSE?

VF>Streaming SIMD Extensions


А понятный. Буду иметь ввиду.
:)
Отредактировано 24.01.2015 18:04 Cynic . Предыдущая версия .
Re: Что использовать Byte или Int
От: Sharov Россия  
Дата: 24.01.15 18:12
Оценка:
Здравствуйте, Cynic, Вы писали:

C>Я так понимаю, что когда программа производит вычисления со значениями типа byte,

то она всё время выполняет преобразование из byte в int и наоборот.

Эээ, не уверен. Я думаю, что в случае с байтом будут сразу сгенерированы соотв. инструкции процессора.
Хотя могу и ошибаться. Но я бы сразу работал с байтом, т.к. меньше ручной возни с приведениями.
Кодом людям нужно помогать!
Re[2]: Что использовать Byte или Int
От: Cynic Россия  
Дата: 24.01.15 18:19
Оценка: 3 (1)
Здравствуйте, Sharov, Вы писали:

S>Хотя могу и ошибаться. Но я бы сразу работал с байтом, т.к. меньше ручной возни с приведениями.


Я так понимаю, что вы имели ввиду, что работали бы с int?
Я проверил производительность с byte и int. Оказалось, что int примерно на 3% быстрее.
:)
Re[3]: Что использовать Byte или Int
От: Sharov Россия  
Дата: 24.01.15 19:38
Оценка:
Здравствуйте, Cynic, Вы писали:

C>Я так понимаю, что вы имели ввиду, что работали бы с int?

C>Я проверил производительность с byte и int. Оказалось, что int примерно на 3% быстрее.

Я бы работал с байтом, т.е. с типом byte.
Кодом людям нужно помогать!
Re: Что использовать Byte или Int
От: Sinatr Германия  
Дата: 26.01.15 08:07
Оценка: +2
Здравствуйте, Cynic, Вы писали:

C>когда программа производит вычисления со значениями типа byte, то она всё время выполняет преобразование из byte в int и наоборот.


Зависит от того, что вы делаете. В общем случае "преобразование" байта в инт это обнуление 2-байтового регистра и копирование байта в нижний (или наоборот, но с записью 0 в верхний), в другую сторону вообще преобразований нет (просто берется нижний байт результата).

Как уже много раз говорили, предварительная оптимизация — зло. Нужно иметь четкое представление о типах, чтобы не сделать банальных ошибок. А оптимизировать следует только тогда, когда в этом есть смысл.

Если возникают вопросы "что быстрее", то пишется простой тест и тестируются 2 (или больше) метода в цикле. В "общем случае" не важно, что вы используете (инт или байт), если результат верный; другой вопрос, используется ли наиболее оптимальный алгоритм. Т.к. кода нет, то и говорить как бы не о чем.
---
ПроГLамеры объединяйтесь..
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.