ROS package: 64 bit vs 32 bit.Problems in execution - 32bit-64bit

I have a ROS package that uses PCL libraries and that works perfectly in Groovy and Hydro, both in 64 bit machines.
In 32 bit machines, I can compile the package exactly the same way, without problems, but in execution it does not work.
The callbacks in it go indredibly slow, sometimes taking more than a minute, when in 64 bit they work perfectly fine.
Any possible causes for this package being stuck in 32 bit?
I am runnning Ubuntu 12.04 64 bit with Hydro and Groovy, and Ubuntu 12.04 32 bit with Hydro.
Thank you all in advance,

Problem solved. The execution problems were due to the processing power difference between 32 and 64 bit, and also due to RAM memory available in both systems.
Downsampling the point cloud that I was trying to process solved the problem and now the algorithm runs ok in 32 bit platform.
Thanks to all,
Alberto

Related

From where can I download 64 bit libxml2.dll and mod_proxy_html.so files

After migrating IHS (IBM HTTP Server) 9.0.5.2 to new 64 bit windows server, the 2 modules (libxml2.dll and mod_proxy_html.so) are failing to load. These modules seems to be working fine on the older IHS 8.0
- 32 bit. Hence, I am looking for 64 bit libxml2.dll and mod_proxy_html.so files. I have found the source code but I am not able to build it since I am not a C programmer. And code looks very complex with lots many dependencies on components not present in source code.
Can someone please help me to find the 64 bit versions of libxml2.dll and mod_proxy_html.so files ? Thanks in advance.
Regards,
Amit
You should use non-IHS apache if you require modules that aren't built and shipped with IHS. You may be able to use 64-bit 9.0.5.4 and fish these librarys out of an Apachelounge windows httpd build.

Making program work on 32 bit Window OS

I have written a program in Java on a 64 bit Window OS, but now I need my program to work on a 32 bit Window OS. How can I do this? (For making an exe file I used launch4j)
For Java, if the machine has the Java 32-bit is installed, then running the exe alone will be enough. If you want to provide redistributable, just use the java 32-bit redistributable.

Java 8 64 bits with jxbrowser process

We are using Jxbrowser within java swing. It is running with Java 8 64 bits. However, when checking the list of processes in Windows Task Manager - Processes, we see the jxbrowser process is identified as *32 -bits-.
Why using Java 8 64 bits the jxbrowser instanced is for 32 bits?
Thank you
JxBrowser 6.21 contains a 32 bit and a 64 bit version. Older versions had only a 32 bit version. So take a look at 6.21.

Use 64bit timestamp on a 32bit machine

We all know the Y2K problem , and this problem will arrive soon in 2038. All the Solution i was read it was say "use 64bit OS" , so i have a question; If my program was compiled with any 64-bit platform it`s possible to running on a machine that only work with 32-bit for example like old Pentium CPU? I was read some resource that say the int_64bit can be represent on 32bit machine by using two 32bit integer.
Simple Answer is
A program compiled for 64 bit platform can not run on 32 bit processor.
Timestamp is mainly application specific and Your programming language takes care of handling it and Operating System will take care of that.
See you need to understand 2 things
Compiling on a 64 bit platform doesn't mean you application is 64 bit. You can compile a 32 bit application on 64 bit platform.
Now see under the hood everything a program or an application that you run on you computer is executed by the processor, so every program is converted or object code or machine code at the end moment before its being executed by the processor and these "bits" actually represents the size of "registers" (kind of memory that processor uses) that your processor has. So the point is whenever a high level language like program C++ is converted to machine code. The compilers follow these steps (in simple terms)
Your Source Code ---> Convert to System specific Assembly ---> Binary Code
Then this binary code is executed by the processor.
Now see that I mentioned Assembly language is machine/processor specific. Its different for ARM processors, x86 Processors, PowerPC Processors etc..(these are processor architectures)
Now in your case lets assume we are now thinking how an 32 bit Intel processor (x86) is gonna run 64 bit Program
You wrote a program for adding to numbers 10 and 20 and compiled the binary for running directly on a processor (for time being forget about OS and Its Libs)
Now lets see "Your Source Code" converted to both 32 bit Assembly Program as well as 64 Bit Assembly Program
Assembly Output (32 Bit or x86 Code)
mov eax, 10
add eax, 20 ;OUTPUT IS SAVED TO "EAX" REGISTER WHICH IS A 32 BITS REGISTER
Assembly Output (64 Bit or x86_64 Code)
mov rax, 10
add rax, 20 ;OUTPUT IS SAVED TO "RAX" REGISTER WHICH IS A 64 BIT REGISTER
Now these Assembly program is line by line converted to binary code
When you run the output binary of the 64 bit code on a 32 bit processor then 32 bit processor doesn't even know what "RAX" is, that will immediately cause an Interrupt (Error from Processor)
Image of a Processor Register is shown in the figure (x86_64 specific)
There are many registers available inside a processor for simplicity I'm just using EAX and RAX register of x86_64 processor. For an x86_64 Processor (64 bit) knows what these "RAX" and "EAX" means. But a 32 bit Processor(x86) wont understand what an "RAX" means. Thats the only reason why 32 bit programs can run on a 64 bit machine and the opposite is not possible....
Note : Its not just Registers there can be processor specific instructions. All the instructions that is supported by a newer processor may not be supported by an older processor.
Example: " imul reg, reg " (Integer Multiplication) instruction is only available from Intel 80386 and above
I know its a bit confusing. Its a bit complicated topic to explain. Still I hope this solves your issue.

Qt/MinGW32 memory usage limitation?

I wrote an application with Qt 4.8.1 and MinGW32 (Nokia Qt SDK). I try to load a large file with this app, but the app always crash when memory usage reach 1,868 MB. If I reduce the size of input file the app works fine. Is there any memory limitations on Qt apps or MinGW32? What should I do if I really want my app to use more memory? My windows is 64 bit.
p.s. Adding "QMAKE_LFLAGS_WINDOWS += -Wl,--stack,32000000" to .pro file won't work
Thanks very much!
p.p.s. I saw many software are capable of using 10+ GB, e.g. Matlab, how to do that on Qt apps?
Your copy of windows may be 64 bit, but MingW32 is a 32 bit compiler, so any app written with that compiler has all the standard limits inherent to 32 bit Windows. Effectively, you won't be able to get more than around 2G of memory for your app to use.
There's a method to get that up to 3G, but beyond that you need a 64 bit compiler.
2GB is limit is for process only.
You can spread your application along N processes (32-bit) to allocate N x 2GB. Operating system must still be 64-bit.

Resources