Re: 4GL compile on uniprocessor/multiprocessor systems
Posted in 1996
In article <329545D0.5460@sprynet.com>, Jake Salomon <jsalomon@sprynet.com> writes >Clay Irving wrote: >> >> We've been told by an Informix SE that we need to compile our code on >> a multiprocessor HP if we intend to run the code on a multiprocessor >> HP (in other words, don't compile the code on a uniprocessor system >> and run it on a multiprocessor system). Does this make sense? Or, more >> importantly, is this true? > Yes it is true. If you run on a multi-processor machine then different UNIX libraries E.g. /usr/lib/libc* get linked into the executable. On a multi-processor machine a different UNIX kernel is used. E.g. The UNIX kernel uses internal semaphores to stop two processes on 2 different CPU's trying to bring 2 different pages of memory from the swap device into the same page of physical memory. Remember part of any UNIX process includes code that runs in kernel mode, The multi-processor and single processor versions of UNIX you are talking about are probably different release numbers as well and even if the release number are identical is does not mean they are compatiable. >Clay, >No! It certainly does not make any sense. The compiled application >does not care a rat whisker about what kind of processor it is running >on. ANd niether does the 4GL preprocessor. (The C compiler.. well, it's Correct, >still highly unlikely.) If you have doubts, just remember that the The C compiler does - see above. >language has not changed since release 4.10; only TCP capabilities have >been added to it and the programmer does not want to care about that. > >The compiled app knows only to send messages to an IPC and get back data >through the same IPC. You can convert the database from a local SE to But the interals of the UNIX may not be the same. The system calls may be the same but the actual C/assembly code used to implement them will be different and the internal data structures used within the UNIX kernel will be different. >OnLine on a remote machine and still run the app without recompiling. > You need to recompile if you change the version of Informix or the version of 4GL. The only exception is when you change from a version 4 database engine to version 6 ON THE SAME VERSION OF UNIX. This is because the sqlturbo module gets replaced by sqlrm (the Relay Module). Here the method used to talk to the engine changes however the method the 4GL uses to talk to the intermediate process does not change. This API is clearly defined and Informix make sure it does not change even when the version of the engine changes AS LONG AS THE VERSION OF UNIX DOES NOT CHANGE. There is no 'intermediate' process when the 4GL application talks to UNIX thus you need to recompile the 4GL application. >Someone has misunderstood a question, misunderstood an answer. > Yes but it's not Informix. >Hope this has helped. > > -- Jake -- David Williams