Skip to contentSkip to conversation

uClibc: ARC: enable generic string implementations

PATCH New Alexey Brodkin 2 participants 7 messages Nov 10, 2014 – Nov 12, 2014

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 uClibc: ARC: enable generic string implementations

With enabled generic optimized string routines we see significant improvement of some LMbench results.

For example:
===========
libc bcopy unaligned
...
8.39 - 6.76 (UCLIBC_HAS_STRING_GENERIC_OPT=no)
8.39 - 23.86 (UCLIBC_HAS_STRING_GENERIC_OPT=yes)
===========

Since I've only did measurements on ARC and it has been ebabled for ARC for years I'm sure it doesn't break anything in either during toolchian building or in run-time.

That's why I'm keeping it as arch-specific change.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
Cc Peter Korsgaard <[email protected]>
---
 package/uclibc/uclibc.mk | 1 +
 1 file changed, 1 insertion(+)
package/uclibc/uclibc.mk +1 -0
index 419a4d1..3412efd 100644
@@ -66,6 +66,7 @@ ifeq ($(UCLIBC_TARGET_ARCH),arc)
 UCLIBC_ARC_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_ARC_TYPE))
 define UCLIBC_ARC_TYPE_CONFIG
 	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_ARC_TYPE),$(@D)/.config)
+	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_STRING_GENERIC_OPT,$(@D)/.config)
 endef
 endif # arc
 
Signature · 1 line
1.9.3
#1 lore raw

PATCH 1/1 uClibc: ARC: enable generic string implementations

Dear Alexey Brodkin,

Quoted 30 lines · Alexey Brodkin

With enabled generic optimized string routines we see significant improvement of some LMbench results.

For example:
===========
libc bcopy unaligned
...
8.39 - 6.76 (UCLIBC_HAS_STRING_GENERIC_OPT=no)
8.39 - 23.86 (UCLIBC_HAS_STRING_GENERIC_OPT=yes)
===========

Since I've only did measurements on ARC and it has been ebabled for ARC for years I'm sure it doesn't break anything in either during toolchian building or in run-time.

That's why I'm keeping it as arch-specific change.

Cc Thomas Petazzoni <[email protected]>
Cc Anton Kolesov <[email protected]>
Cc Peter Korsgaard <[email protected]>
---
 package/uclibc/uclibc.mk | 1 +
 1 file changed, 1 insertion(+)
package/uclibc/uclibc.mk +0 -0
index 419a4d1..3412efd 100644

package/uclibc/uclibc.mk ifeq ($(UCLIBC_TARGET_ARCH),arc) · line 69

Quoted 4 lines
package/uclibc/uclibc.mk +1 -0
@@ -66,6 +66,7 @@ ifeq ($(UCLIBC_TARGET_ARCH),arc)
 UCLIBC_ARC_TYPE = CONFIG_$(call qstrip,$(BR2_UCLIBC_ARC_TYPE))
 define UCLIBC_ARC_TYPE_CONFIG
 	$(call KCONFIG_ENABLE_OPT,$(UCLIBC_ARC_TYPE),$(@D)/.config)
+	$(call KCONFIG_ENABLE_OPT,UCLIBC_HAS_STRING_GENERIC_OPT,$(@D)/.config)

I personally don't like to see such a change done in an architecture specific way, if the feature is not architecture specific. So we should evaluate if this works on other architectures, see what is the binary footprint for this feature, and then decide if we want to enable it by default in our uClibc configurations.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH 1/1 uClibc: ARC: enable generic string implementations

Hi Thomas,

Quoted 6 lines · Thomas Petazzoni

Dear Alexey Brodkin,
I personally don't like to see such a change done in an architecture specific way, if the feature is not architecture specific. So we should evaluate if this works on other architectures, see what is the binary footprint for this feature, and then decide if we want to enable it by default in our uClibc configurations.

I agree that it's better to not have this kind of generic options selected by architectures.

But the point is I don't have any real hardware except ARC and ARM boards (Cubieboard2 & Wandboard Quad).

For ARC I do see improvements and still stable behavior of toolchain and target binaries.

For ARM I don't see any difference in LMbench because most if not all string routines are already implemented in assembly, sio the option in question makes no sense.

But for other architectures like BlackFin, PPC, MIPS difference could be in both performance and stability but this is something I cannot test.

So volunteers are more than welcome.

But what if nobody else cares?

-Alexey

#3 lore raw

PATCH 1/1 uClibc: ARC: enable generic string implementations

Dear Alexey Brodkin,

Quoted 13 lines · Alexey Brodkin

I agree that it's better to not have this kind of generic options selected by architectures.

But the point is I don't have any real hardware except ARC and ARM boards (Cubieboard2 & Wandboard Quad).

For ARC I do see improvements and still stable behavior of toolchain and target binaries.

For ARM I don't see any difference in LMbench because most if not all string routines are already implemented in assembly, sio the option in question makes no sense.

Quoted 6 lines

But for other architectures like BlackFin, PPC, MIPS difference could be in both performance and stability but this is something I cannot test.

So volunteers are more than welcome.

But what if nobody else cares?

If nobody cares, then we just enable the option. And people will complain when/if it breaks for them.

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#4 lore raw

PATCH 1/1 uClibc: ARC: enable generic string implementations

Hi Peter,

Quoted 20 lines · Thomas Petazzoni

Dear Alexey Brodkin,

Quoted 16 lines · Alexey Brodkin

I agree that it's better to not have this kind of generic options selected by architectures.

But the point is I don't have any real hardware except ARC and ARM boards (Cubieboard2 & Wandboard Quad).

For ARC I do see improvements and still stable behavior of toolchain and target binaries.

For ARM I don't see any difference in LMbench because most if not all string routines are already implemented in assembly, sio the option in question makes no sense.

But for other architectures like BlackFin, PPC, MIPS difference could be in both performance and stability but this is something I cannot test.

Quoted 6 lines
Quoted 3 lines

So volunteers are more than welcome.

But what if nobody else cares?

If nobody cares, then we just enable the option. And people will complain when/if it breaks for them.

So should I wait for some time or it's time to send a patch that enables the option for everybody in uClibc-*.config?

-Alexey

#5 lore raw

PATCH 1/1 uClibc: ARC: enable generic string implementations

Dear Alexey Brodkin,

Quoted 5 lines · Alexey Brodkin
Quoted 2 lines

If nobody cares, then we just enable the option. And people will complain when/if it breaks for them.

So should I wait for some time or it's time to send a patch that enables the option for everybody in uClibc-*.config?

I'd say yes. The uClibc Config.in help text for this option recommends to enable it, and it defaults to y, so I think it's pretty safe.

Regarding ARC, I see that there are arch-specific optimized string functions in libc/string/arc/, written in assembly. So by enabling GENERIC_OPT, what you gained is that you have optimized versions for those functions that don't have an ARC-specific assembly implementation?

Best regards,

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#6 lore raw

PATCH 1/1 uClibc: ARC: enable generic string implementations

Hi Thomas,

Quoted 4 lines · Thomas Petazzoni

Dear Alexey Brodkin,

On Wed, 12 Nov 2014 13:54:11 +0000, Alexey Brodkin wrote:

Quoted 8 lines
Quoted 5 lines
Quoted 2 lines

If nobody cares, then we just enable the option. And people will complain when/if it breaks for them.

So should I wait for some time or it's time to send a patch that enables the option for everybody in uClibc-*.config?

I'd say yes. The uClibc Config.in help text for this option recommends to enable it, and it defaults to y, so I think it's pretty safe.

Ok so will do it shortly.

Quoted 4 lines

Regarding ARC, I see that there are arch-specific optimized string functions in libc/string/arc/, written in assembly. So by enabling GENERIC_OPT, what you gained is that you have optimized versions for those functions that don't have an ARC-specific assembly implementation?

Absolutely correct, we're getting better results for functions not implemented in ASM.

-Alexey